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

Analysis Run

019d5666-71d1-72c0-baeb-d50b2b87dd1a

complete
Chain ID
1
Address
Block Number
Created
Sat, Apr 4, 2026 2:50 AM
Review Summary

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
42785 artifact.fetch complete 1 / 3 1 week ago
42786 proxy.resolve complete 1 / 3 1 week ago
42787 tool.cast_disasm complete 1 / 3 1 week ago
42788 analysis.bundle complete 1 / 3 1 week ago
42789 capability.graph complete 1 / 3 1 week ago
42790 detector.run complete 1 / 3 1 week ago
42791 validation.fork complete 1 / 3 1 week ago
42928 report.consolidate complete 1 / 6 1 week ago
42929 tool.slither complete 1 / 2 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no not_proxy
Implementation:
Verified Source: yes
Proxy evidence
{
    "status": "not_proxy"
}

Slither

tool.slither
Status
complete
Attempts
1 / 2
Findings
3
Solc
0.8.28 (solc-select)
View stderr
'forge clean' running (wd: /tmp/slither-gubm5ea2)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-gubm5ea2)

Sale.withdrawTokens(IERC20Metadata,address,uint256) (contracts/Sale.sol#258-273) sends eth to arbitrary user
	Dangerous calls:
	- (success,None) = to.call{value: amount}() (contracts/Sale.sol#263-265)
Sale._executeTokenSell(address,uint256,uint256,IERC20Metadata) (contracts/Sale.sol#376-395) sends eth to arbitrary user
	Dangerous calls:
	- (success,None) = seller.call{value: payTokenAmount}() (contracts/Sale.sol#384-388)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#functions-that-send-ether-to-arbitrary-destinations

Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) has bitwise-xor operator ^ instead of the exponentiation operator **: 
	 - inverse = (3 * denominator) ^ 2 (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#259)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-exponentiation

Reentrancy in Sale._executeTokenBuy(address,address,uint256,uint256,IERC20Metadata,uint256,uint256,uint256,bytes) (contracts/Sale.sol#338-376):
	External calls:
	- (success,None) = buyer.call{value: msg.value - payTokenAmount}() (contracts/Sale.sol#362-365)
	State variables written after the call(s):
	- _checkReferrerAndPayBonus(buyer,referrer,buyTokenAmount) (contracts/Sale.sol#371-372)
		- accountToBuyerInfo[buyer].refStatus = Status.Gold (contracts/Sale.sol#440-441)
		- accountToBuyerInfo[buyer].referrer = referrer (contracts/Sale.sol#461-463)
		- accountToBuyerInfo[buyer].refStatus = Status.Silver (contracts/Sale.sol#445-448)
		- accountToBuyerInfo[buyer].refStatus = Status.Bronze (contracts/Sale.sol#450)
	Sale.accountToBuyerInfo (contracts/Sale.sol#91-92) can be used in cross function reentrancies:
	- Sale._calcBuyBonus(address,uint256) (contracts/Sale.sol#451-454)
	- Sale._checkAndUpdateBuyerStatuses(address,uint256,IERC20Metadata,uint256) (contracts/Sale.sol#413-438)
	- Sale._checkAndUpdateSellCounter(address,uint256) (contracts/Sale.sol#408-413)
	- Sale._checkReferrerAndPayBonus(address,address,uint256) (contracts/Sale.sol#454-471)
	- Sale._updateRefStatus(address,Sale.BuyerInfo) (contracts/Sale.sol#438-451)
	- Sale.accountToBuyerInfo (contracts/Sale.sol#91-92)
	- _checkAndUpdateBuyerStatuses(buyer,payTokenAmount,payToken,usdPrice) (contracts/Sale.sol#372-374)
		- accountToBuyerInfo[buyer].refStatus = Status.Gold (contracts/Sale.sol#440-441)
		- accountToBuyerInfo[buyer].refStatus = Status.Silver (contracts/Sale.sol#445-448)
		- accountToBuyerInfo[buyer].payAmountInUSD += payAmountInUSD (contracts/Sale.sol#423-426)
		- accountToBuyerInfo[buyer].refStatus = Status.Bronze (contracts/Sale.sol#450)
		- accountToBuyerInfo[buyer].buyStatus = Status.Gold (contracts/Sale.sol#429-431)
		- accountToBuyerInfo[buyer].buyStatus = Status.Silver (contracts/Sale.sol#432-433)
		- accountToBuyerInfo[buyer].buyStatus = Status.Bronze (contracts/Sale.sol#436)
	Sale.accountToBuyerInfo (contracts/Sale.sol#91-92) can be used in cross function reentrancies:
	- Sale._calcBuyBonus(address,uint256) (contracts/Sale.sol#451-454)
	- Sale._checkAndUpdateBuyerStatuses(address,uint256,IERC20Metadata,uint256) (contracts/Sale.sol#413-438)
	- Sale._checkAndUpdateSellCounter(address,uint256) (contracts/Sale.sol#408-413)
	- Sale._checkReferrerAndPayBonus(address,address,uint256) (contracts/Sale.sol#454-471)
	- Sale._updateRefStatus(address,Sale.BuyerInfo) (contracts/Sale.sol#438-451)
	- Sale.accountToBuyerInfo (contracts/Sale.sol#91-92)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities

Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse = (3 * denominator) ^ 2 (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#259)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#263)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#264)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#265)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#266)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#267)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#268)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- low = low / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#247)
	- result = low * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#274)
Math.invMod(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#317-363) performs a multiplication on the result of a division:
	- quotient = gcd / remainder (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#339)
	- (gcd,remainder) = (remainder,gcd - remainder * quotient) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#341-348)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply

Sale.withdrawTokens(IERC20Metadata,address,uint256).to (contracts/Sale.sol#259-260) lacks a zero-check on :
		- (success,None) = to.call{value: amount}() (contracts/Sale.sol#263-265)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation

Reentrancy in Sale._executeTokenBuy(address,address,uint256,uint256,IERC20Metadata,uint256,uint256,uint256,bytes) (contracts/Sale.sol#338-376):
	External calls:
	- (success,None) = buyer.call{value: msg.value - payTokenAmount}() (contracts/Sale.sol#362-365)
	Event emitted after the call(s):
	- TokenPurchased(buyer,buyTokenAmount,buyBonus,payTokenAmount) (contracts/Sale.sol#375-376)
Reentrancy in Sale._executeTokenSell(address,uint256,uint256,IERC20Metadata) (contracts/Sale.sol#376-395):
	External calls:
	- (success,None) = seller.call{value: payTokenAmount}() (contracts/Sale.sol#384-388)
	Event emitted after the call(s):
	- TokenSold(seller,sellTokenAmount,payTokenAmount) (contracts/Sale.sol#393-395)
Reentrancy in Sale.withdrawTokens(IERC20Metadata,address,uint256) (contracts/Sale.sol#258-273):
	External calls:
	- (success,None) = to.call{value: amount}() (contracts/Sale.sol#263-265)
	Event emitted after the call(s):
	- TokensWithdrawn(token,to,amount) (contracts/Sale.sol#272-273)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3

Sale.constructor(uint256,address[],uint256[],uint256[],uint256,uint256,address) (contracts/Sale.sol#111-150) uses timestamp for comparisons
	Dangerous comparisons:
	- block.timestamp > startTime_ (contracts/Sale.sol#122-123)
Sale.buyExactMarketTokenForPayToken(uint256,uint256,address,uint256,uint256,uint256,bytes) (contracts/Sale.sol#150-178) uses timestamp for comparisons
	Dangerous comparisons:
	- block.timestamp < startTime (contracts/Sale.sol#159-160)
	- block.timestamp > deadline (contracts/Sale.sol#161-162)
Sale.buyMarketTokenForExactPayToken(uint256,uint256,address,uint256,uint256,uint256,bytes) (contracts/Sale.sol#179-207) uses timestamp for comparisons
	Dangerous comparisons:
	- block.timestamp < startTime (contracts/Sale.sol#191-192)
	- block.timestamp > deadline (contracts/Sale.sol#193-194)
Sale.sellExactMarketTokenForPayToken(uint256,uint256) (contracts/Sale.sol#207-228) uses timestamp for comparisons
	Dangerous comparisons:
	- block.timestamp < startTime (contracts/Sale.sol#212-213)
Sale.sellMarketTokenForExactPayToken(uint256,uint256) (contracts/Sale.sol#228-239) uses timestamp for comparisons
	Dangerous comparisons:
	- block.timestamp < startTime (contracts/Sale.sol#229)
Sale._checkAndUpdateBuyCounter(uint256) (contracts/Sale.sol#395-408) uses timestamp for comparisons
	Dangerous comparisons:
	- (block.timestamp - startTime) / ONE_DAY - (lastCounterResetTime - startTime) / ONE_DAY > 0 (contracts/Sale.sol#398-399)
AccessControlDefaultAdminRules.renounceRole(bytes32,address) (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#111-120) uses timestamp for comparisons
	Dangerous comparisons:
	- role == DEFAULT_ADMIN_ROLE && account == defaultAdmin() (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#112)
	- newDefaultAdmin != address(0) || ! _isScheduleSet(schedule) || ! _hasSchedulePassed(schedule) (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#114)
AccessControlDefaultAdminRules._grantRole(bytes32,address) (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#131-139) uses timestamp for comparisons
	Dangerous comparisons:
	- defaultAdmin() != address(0) (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#133)
AccessControlDefaultAdminRules._revokeRole(bytes32,address) (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#142-147) uses timestamp for comparisons
	Dangerous comparisons:
	- role == DEFAULT_ADMIN_ROLE && account == defaultAdmin() (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#143)
AccessControlDefaultAdminRules.defaultAdminDelay() (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#174-177) uses timestamp for comparisons
	Dangerous comparisons:
	- (_isScheduleSet(schedule) && _hasSchedulePassed(schedule)) (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#176)
AccessControlDefaultAdminRules.pendingDefaultAdminDelay() (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#180-183) uses timestamp for comparisons
	Dangerous comparisons:
	- (_isScheduleSet(schedule) && ! _hasSchedulePassed(schedule)) (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#182)
AccessControlDefaultAdminRules.acceptDefaultAdminTransfer() (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#225-232) uses timestamp for comparisons
	Dangerous comparisons:
	- _msgSender() != newDefaultAdmin (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#227)
AccessControlDefaultAdminRules._acceptDefaultAdminTransfer() (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#239-248) uses timestamp for comparisons
	Dangerous comparisons:
	- ! _isScheduleSet(schedule) || ! _hasSchedulePassed(schedule) (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#241)
AccessControlDefaultAdminRules._isScheduleSet(uint48) (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#362-364) uses timestamp for comparisons
	Dangerous comparisons:
	- schedule != 0 (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#363)
AccessControlDefaultAdminRules._hasSchedulePassed(uint48) (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#369-371) uses timestamp for comparisons
	Dangerous comparisons:
	- schedule < block.timestamp (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#370)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp

SafeERC20._safeTransfer(IERC20,address,uint256,bool) (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#176-200) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#179-199)
SafeERC20._safeTransferFrom(IERC20,address,address,uint256,bool) (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#212-244) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#221-243)
SafeERC20._safeApprove(IERC20,address,uint256,bool) (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#255-279) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#258-278)
Bytes.slice(bytes,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#86-98) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#93-95)
Bytes.splice(bytes,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#117-129) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#123-126)
Bytes.replace(bytes,uint256,bytes,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#154-172) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#167-169)
Bytes.concat(bytes[]) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#183-203) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#194-196)
Bytes.toNibbles(bytes) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#210-245) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#211-244)
Bytes._unsafeReadBytesOffset(bytes,uint256) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#323-328) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#325-327)
Panic.panic(uint256) (lib/openzeppelin-contracts/contracts/utils/Panic.sol#50-56) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Panic.sol#51-55)
ShortStrings.toString(ShortString) (lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol#63-72) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol#67-70)
StorageSlot.getAddressSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#66-70) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#67-69)
StorageSlot.getBooleanSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#75-79) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#76-78)
StorageSlot.getBytes32Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#84-88) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#85-87)
StorageSlot.getUint256Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#93-97) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#94-96)
StorageSlot.getInt256Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#102-106) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#103-105)
StorageSlot.getStringSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#111-115) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#112-114)
StorageSlot.getStringSlot(string) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#120-124) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#121-123)
StorageSlot.getBytesSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#129-133) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#130-132)
StorageSlot.getBytesSlot(bytes) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#138-142) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#139-141)
Strings.toString(uint256) (lib/openzeppelin-contracts/contracts/utils/Strings.sol#42-60) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Strings.sol#47-49)
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Strings.sol#52-54)
Strings.toChecksumHexString(address) (lib/openzeppelin-contracts/contracts/utils/Strings.sol#108-126) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Strings.sol#113-115)
Strings.escapeJSON(string) (lib/openzeppelin-contracts/contracts/utils/Strings.sol#461-505) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Strings.sol#468-470)
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Strings.sol#499-502)
Strings._unsafeReadBytesOffset(bytes,uint256) (lib/openzeppelin-contracts/contracts/utils/Strings.sol#513-518) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Strings.sol#515-517)
Strings._unsafeWriteBytesOffset(bytes,uint256,bytes1) (lib/openzeppelin-contracts/contracts/utils/Strings.sol#526-531) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Strings.sol#528-530)
ECDSA.tryRecover(bytes32,bytes) (lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol#61-80) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol#71-75)
ECDSA.tryRecoverCalldata(bytes32,bytes) (lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol#85-104) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol#95-99)
ECDSA.parse(bytes) (lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol#217-240) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol#218-239)
ECDSA.parseCalldata(bytes) (lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol#245-268) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol#246-267)
MessageHashUtils.toEthSignedMessageHash(bytes32) (lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol#32-38) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol#33-37)
MessageHashUtils.toDataWithIntendedValidatorHash(address,bytes32) (lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol#71-81) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol#75-80)
MessageHashUtils.toTypedDataHash(bytes32,bytes32) (lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol#92-100) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol#93-99)
MessageHashUtils.toDomainSeparator(bytes1,bytes32,bytes32,uint256,address,bytes32) (lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol#137-179) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol#147-178)
MessageHashUtils.toDomainTypeHash(bytes1) (lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol#182-227) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol#185-226)
Math.add512(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#25-30) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#26-29)
Math.mul512(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#37-46) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#41-45)
Math.tryMul(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#73-84) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#76-80)
Math.tryDiv(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#89-97) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#92-95)
Math.tryMod(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#102-110) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#105-108)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#229-236)
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#242-251)
Math.tryModExp(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#411-435) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#413-434)
Math.tryModExp(bytes,bytes,bytes) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#451-473) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#463-472)
Math._zeroBytes(bytes) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#478-490) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#482-484)
Math.log2(uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#619-658) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#655-657)
SafeCast.toUint(bool) (lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol#1157-1161) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol#1158-1160)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage

6 different versions of Solidity are used:
	- Version constraint ^0.8.28 is used by:
		-^0.8.28 (contracts/Sale.sol#1-2)
	- Version constraint ^0.8.20 is used by:
		-^0.8.20 (lib/openzeppelin-contracts/contracts/access/AccessControl.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Context.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Panic.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol#5)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol#4)
	- Version constraint >=0.8.4 is used by:
		->=0.8.4 (lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4)
		->=0.8.4 (lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlDefaultAdminRules.sol#4)
	- Version constraint >=0.6.2 is used by:
		->=0.6.2 (lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol#4)
		->=0.6.2 (lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)
	- Version constraint >=0.4.16 is used by:
		->=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol#4)
		->=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol#4)
		->=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol#4)
		->=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC5313.sol#4)
		->=0.4.16 (lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)
		->=0.4.16 (lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)
	- Version constraint ^0.8.24 is used by:
		-^0.8.24 (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#4)
		-^0.8.24 (lib/openzeppelin-contracts/contracts/utils/Strings.sol#4)
		-^0.8.24 (lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol#4)
		-^0.8.24 (lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol#4)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used

Version constraint ^0.8.20 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
	- VerbatimInvalidDeduplication
	- FullInlinerNonExpressionSplitArgumentEvaluationOrder
	- MissingSideEffectsOnSelectorAccess.
It is used by:
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/access/AccessControl.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Context.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Panic.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol#5)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol#4)
Version constraint >=0.8.4 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
	- FullInlinerNonExpressionSplitArgumentEvaluationOrder
	- MissingSideEffectsOnSelectorAccess
	- AbiReencodingHeadOverflowWithStaticArrayCleanup
	- DirtyBytesArrayToStorage
	- DataLocationChangeInInternalOverride
	- NestedCalldataArrayAbiReencodingSizeValidation
	- SignedImmutables.
It is used by:
	- >=0.8.4 (lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4)
	- >=0.8.4 (lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlDefaultAdminRules.sol#4)
Version constraint >=0.6.2 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
	- MissingSideEffectsOnSelectorAccess
	- AbiReencodingHeadOverflowWithStaticArrayCleanup
	- DirtyBytesArrayToStorage
	- NestedCalldataArrayAbiReencodingSizeValidation
	- ABIDecodeTwoDimensionalArrayMemory
	- KeccakCaching
	- EmptyByteArrayCopy
	- DynamicArrayCleanup
	- MissingEscapingInFormatting
	- ArraySliceDynamicallyEncodedBaseType
	- ImplicitConstructorCallvalueCheck
	- TupleAssignmentMultiStackSlotComponents
	- MemoryArrayCreationOverflow.
It is used by:
	- >=0.6.2 (lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol#4)
	- >=0.6.2 (lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)
Version constraint >=0.4.16 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
	- DirtyBytesArrayToStorage
	- ABIDecodeTwoDimensionalArrayMemory
	- KeccakCaching
	- EmptyByteArrayCopy
	- DynamicArrayCleanup
	- ImplicitConstructorCallvalueCheck
	- TupleAssignmentMultiStackSlotComponents
	- MemoryArrayCreationOverflow
	- privateCanBeOverridden
	- SignedArrayStorageCopy
	- ABIEncoderV2StorageArrayWithMultiSlotElement
	- DynamicConstructorArgumentsClippedABIV2
	- UninitializedFunctionPointerInConstructor_0.4.x
	- IncorrectEventSignatureInLibraries_0.4.x
	- ExpExponentCleanup
	- NestedArrayFunctionCallDecoder
	- ZeroFunctionSelector.
It is used by:
	- >=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol#4)
	- >=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol#4)
	- >=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol#4)
	- >=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC5313.sol#4)
	- >=0.4.16 (lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)
	- >=0.4.16 (lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity

Low level call in Sale.withdrawTokens(IERC20Metadata,address,uint256) (contracts/Sale.sol#258-273):
	- (success,None) = to.call{value: amount}() (contracts/Sale.sol#263-265)
Low level call in Sale._executeTokenBuy(address,address,uint256,uint256,IERC20Metadata,uint256,uint256,uint256,bytes) (contracts/Sale.sol#338-376):
	- (success,None) = buyer.call{value: msg.value - payTokenAmount}() (contracts/Sale.sol#362-365)
Low level call in Sale._executeTokenSell(address,uint256,uint256,IERC20Metadata) (contracts/Sale.sol#376-395):
	- (success,None) = seller.call{value: payTokenAmount}() (contracts/Sale.sol#384-388)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls

Function EIP712._EIP712Name() (lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol#146-148) is not in mixedCase
Function EIP712._EIP712Version() (lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol#157-159) is not in mixedCase
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions

Sale.constructor(uint256,address[],uint256[],uint256[],uint256,uint256,address) (contracts/Sale.sol#111-150) uses literals with too many digits:
	- statusToBuyBonusPercent = (0,50000,100000,150000) (contracts/Sale.sol#143-144)
Sale.constructor(uint256,address[],uint256[],uint256[],uint256,uint256,address) (contracts/Sale.sol#111-150) uses literals with too many digits:
	- levelToStatusToRefBonusPercent[0] = (0,70000,80000,100000) (contracts/Sale.sol#144-145)
Sale.slitherConstructorConstantVariables() (contracts/Sale.sol#8-502) uses literals with too many digits:
	- PCT_DIV = 1000000 (contracts/Sale.sol#52)
Bytes.toNibbles(bytes) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#210-245) uses literals with too many digits:
	- chunk_toNibbles_asm_0 = 0x0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff & chunk_toNibbles_asm_0 << 64 | chunk_toNibbles_asm_0 (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#222-225)
Bytes.toNibbles(bytes) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#210-245) uses literals with too many digits:
	- chunk_toNibbles_asm_0 = 0x00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff & chunk_toNibbles_asm_0 << 32 | chunk_toNibbles_asm_0 (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#226-229)
Bytes.reverseBytes32(bytes32) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#258-272) uses literals with too many digits:
	- value = ((value >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) | ((value & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#265-267)
Bytes.reverseBytes32(bytes32) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#258-272) uses literals with too many digits:
	- value = ((value >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) | ((value & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#268-270)
Bytes.reverseBytes16(bytes16) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#275-283) uses literals with too many digits:
	- value = ((value & 0xFFFFFFFF00000000FFFFFFFF00000000) >> 32) | ((value & 0x00000000FFFFFFFF00000000FFFFFFFF) << 32) (lib/openzeppelin-contracts/contracts/utils/Bytes.sol#280-281)
ShortStrings.slitherConstructorConstantVariables() (lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol#40-122) uses literals with too many digits:
	- FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF (lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol#42)
Math.log2(uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#619-658) uses literals with too many digits:
	- r = r | byte(uint256,uint256)(x >> r,0x0000010102020202030303030303030300000000000000000000000000000000) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#656)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits
. analyzed (25 contracts with 100 detectors), 97 result(s) found
Metadata
{
    "solc": {
        "status": "ok",
        "use_rc": 0,
        "version": "0.8.28",
        "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.28",
        "install_stderr": null,
        "install_stdout": "Version '0.8.28' is already installed, skipping..."
    },
    "solc_args": "--base-path /tmp/slither-gubm5ea2 --include-path /tmp/slither-gubm5ea2/lib --include-path /tmp/slither-gubm5ea2/lib/openzeppelin-contracts --allow-paths /tmp/slither-gubm5ea2,/tmp/slither-gubm5ea2/lib,/tmp/slither-gubm5ea2/lib/openzeppelin-contracts,/tmp/slither-gubm5ea2/src",
    "remappings": [
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/"
    ],
    "source_files": [
        "@openzeppelin/contracts/access/AccessControl.sol",
        "@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol",
        "@openzeppelin/contracts/access/extensions/IAccessControlDefaultAdminRules.sol",
        "@openzeppelin/contracts/access/IAccessControl.sol",
        "@openzeppelin/contracts/interfaces/IERC1363.sol",
        "@openzeppelin/contracts/interfaces/IERC165.sol",
        "@openzeppelin/contracts/interfaces/IERC20.sol",
        "@openzeppelin/contracts/interfaces/IERC5267.sol",
        "@openzeppelin/contracts/interfaces/IERC5313.sol",
        "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
        "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
        "@openzeppelin/contracts/utils/Context.sol",
        "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
        "@openzeppelin/contracts/utils/cryptography/EIP712.sol",
        "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol",
        "@openzeppelin/contracts/utils/introspection/ERC165.sol",
        "@openzeppelin/contracts/utils/introspection/IERC165.sol",
        "@openzeppelin/contracts/utils/math/Math.sol",
        "@openzeppelin/contracts/utils/math/SafeCast.sol",
        "@openzeppelin/contracts/utils/math/SignedMath.sol",
        "@openzeppelin/contracts/utils/Panic.sol",
        "@openzeppelin/contracts/utils/ShortStrings.sol",
        "@openzeppelin/contracts/utils/StorageSlot.sol",
        "@openzeppelin/contracts/utils/Strings.sol",
        "contracts/Sale.sol"
    ],
    "contract_count": 0,
    "contract_names": [],
    "detector_count": 97,
    "workspace_hash": "1556ef0dd990a962be359906f4a8483cd62efc8c501c67f3bc9ff89b836f87b5",
    "duration_seconds": 2.527616262435913,
    "solc_version_requested": "0.8.28"
}

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
2
No findings?
no
Summary
Sale.sol has two user-exploitable issues: referral logic allows self/cyclic bonus farming, and exact-amount purchases can round payment down to zero for low-priced payment tokens.
View stdout
{"no_findings":false,"summary":"Sale.sol has two user-exploitable issues: referral logic allows self/cyclic bonus farming, and exact-amount purchases can round payment down to zero for low-priced payment tokens.","findings":[{"severity":"high","category":"other","title":"Referrer field is never validated, enabling self-referral and cyclic referral farming","exploit_scenario":"A buyer can set `referrer` to their own address on their first purchase. The contract stores that value without validation, then walks the referral chain for 3 levels and transfers referral bonuses each time. Because Bronze referral status is reachable at zero historical volume by default, the same buyer can immediately collect all 3 referral tiers on their own purchase. After reaching higher referral status, they can keep buying through the same self-reference and siphon 14% to 17.5% extra sale tokens per purchase. Two or more colluding accounts can also create short referral cycles and recycle the same bonus path.","recommendation":"Validate the supplied referrer before storing it or paying bonuses. At minimum, reject `referrer == buyer`, reject obvious cycles, and consider requiring the referrer to be a pre-existing eligible participant. Apply validation before `accountToBuyerInfo[buyer].referrer = referrer` and before traversing the referral chain.","evidence":"`InvalidReferrer` is declared but never used. On a first buy, `_checkReferrerAndPayBonus` stores any non-zero `referrer` directly, then pays 3 levels of bonuses by repeatedly following `buyerInfo.referrer`. With default `refStatusToRequirements = [0, 0, 5000, 10000]`, `_updateRefStatus` can mark a zero-volume address as Bronze before the payout loop runs.","locations":["contracts/Sale.sol:25","contracts/Sale.sol:152","contracts/Sale.sol:153","contracts/Sale.sol:466","contracts/Sale.sol:468","contracts/Sale.sol:469","contracts/Sale.sol:470","contracts/Sale.sol:473","contracts/Sale.sol:479"]},{"severity":"medium","category":"math","title":"Exact-output buys can mint market tokens for zero payment because rounding-down is unchecked","exploit_scenario":"For low-priced payment assets, a buyer can call `buyExactMarketTokenForPayToken` with a small but valid `buyAmount` such that `prices[payTokenIndex] * buyAmount / 10**marketToken.decimals()` rounds down to zero. `_executeTokenBuy` never rejects `payTokenAmount == 0`, so the buyer receives market tokens while paying neither ETH nor ERC20 tokens. Because the signature only covers `(account, payToken, usdPrice, deadline, nonce)` and not `buyAmount`, any valid signed quote for that pay token can be reused with one of these free-buy sizes.","recommendation":"After computing `payTokenAmount`, require it to be non-zero before proceeding, or round up instead of down for exact-output purchases. Also consider binding `buyAmount` or `payTokenAmount` into the signed payload if quote authorization is meant to cover the full trade terms.","evidence":"`buyExactMarketTokenForPayToken` only enforces a minimum `buyAmount` based on decimal difference, then computes `payTokenAmount` with integer division. `_executeTokenBuy` accepts that value as-is and only checks `msg.value < payTokenAmount` or performs `safeTransferFrom(..., payTokenAmount)`. If `payTokenAmount` is zero, both payment branches succeed while `marketToken.safeTransfer` still sends the purchased tokens.","locations":["contracts/Sale.sol:169","contracts/Sale.sol:173","contracts/Sale.sol:174","contracts/Sale.sol:349","contracts/Sale.sol:368","contracts/Sale.sol:375","contracts/Sale.sol:376","contracts/Sale.sol:379"]}]}
View stderr
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-stz9p30g
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d567c-d5c4-7c82-ba7e-445ca944cdd2
--------
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.
warning: Codex could not find system bubblewrap on PATH. Please install bubblewrap with your package manager. Codex will use the vendored bubblewrap in the meantime.
  → Read AUDIT_BUNDLE.txt completely and identify first-party Solidity files in scope
  • Analyze first-party contracts for exploitable issues in the requested categories
  • Produce JSON report with findings and concrete evidence/locations
exec
/bin/bash -lc "pwd && ls -la && wc -l AUDIT_BUNDLE.txt && rg --files -g 'AUDIT_BUNDLE.txt' -g '*.sol'" in /tmp/codex-stz9p30g
 succeeded in 0ms:
/tmp/codex-stz9p30g
total 64
drwx------   4 noahkuhn noahkuhn  4096 Apr  4 03:15 .
drwxrwxrwt 250 nobody   nogroup  24576 Apr  4 03:15 ..
-rw-rw-r--   1 noahkuhn noahkuhn 20372 Apr  4 03:15 AUDIT_BUNDLE.txt
-rw-rw-r--   1 noahkuhn noahkuhn   815 Apr  4 03:15 codex-output-schema.json
drwxrwxr-x   2 noahkuhn noahkuhn  4096 Apr  4 03:15 contracts
drwxrwxr-x   3 noahkuhn noahkuhn  4096 Apr  4 03:15 @openzeppelin
531 AUDIT_BUNDLE.txt
AUDIT_BUNDLE.txt
contracts/Sale.sol
@openzeppelin/contracts/interfaces/IERC1363.sol
@openzeppelin/contracts/interfaces/IERC5313.sol
@openzeppelin/contracts/interfaces/IERC20.sol
@openzeppelin/contracts/interfaces/IERC5267.sol
@openzeppelin/contracts/interfaces/IERC165.sol
@openzeppelin/contracts/access/AccessControl.sol
@openzeppelin/contracts/access/IAccessControl.sol
@openzeppelin/contracts/utils/Strings.sol
@openzeppelin/contracts/access/extensions/IAccessControlDefaultAdminRules.sol
@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol
@openzeppelin/contracts/utils/math/SafeCast.sol
@openzeppelin/contracts/utils/math/SignedMath.sol
@openzeppelin/contracts/utils/math/Math.sol
@openzeppelin/contracts/utils/StorageSlot.sol
@openzeppelin/contracts/utils/ShortStrings.sol
@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
@openzeppelin/contracts/token/ERC20/IERC20.sol
@openzeppelin/contracts/utils/Context.sol
@openzeppelin/contracts/utils/Panic.sol
@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol
@openzeppelin/contracts/utils/cryptography/ECDSA.sol
@openzeppelin/contracts/utils/cryptography/EIP712.sol
@openzeppelin/contracts/utils/introspection/ERC165.sol
@openzeppelin/contracts/utils/introspection/IERC165.sol

exec
/bin/bash -lc "sed -n '1,260p' AUDIT_BUNDLE.txt" in /tmp/codex-stz9p30g
 succeeded in 0ms:
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/Sale.sol
================================================================================
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {AccessControlDefaultAdminRules} from "@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol";
import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";
import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";

contract Sale is AccessControlDefaultAdminRules, EIP712 {
    using SafeERC20 for IERC20Metadata;

    /// ERRORS

    error ZeroAddress();
    error DailyBuyLimitExeeded();
    error SaleNotStarted();
    error InvalidStartTime();
    error InvalidPrice();
    error InvalidCoefficient();
    error InvalidBuyAmount();
    error InvalidPayAmount();
    error InvalidSellAmount();
    error SellLimitExeeded();
    error InvalidReferrer();
    error InvalidArrayLength();
    error InvalidIndex();
    error RequestAlreadyProcessed(uint256 nonce);
    error InvalidSignature();
    error InvalidEtherAmount();
    error DeadlineExeeded();
    error InvalidPercent();
    error ETH_TRANSFER_FAILED();

    /// CONSTANTS

    enum Status {
        None,
        Bronze,
        Silver,
        Gold
    }

    struct BuyerInfo {
        Status buyStatus;
        Status refStatus;
        uint256 sellAmount;
        uint256 payAmountInUSD;
        address referrer;
    }

    /// @notice Divisor for computation (1 bps (basis point) precision: 0.0001%).
    uint256 public constant PCT_DIV = 1000000;
    uint256 public constant ONE_DAY = 60 * 60 * 24;
    bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE");
    bytes32 public constant VERIFY_PRICE_TYPEHASH = keccak256(
        "VerifyPrice(address account,address payToken,uint256 price,uint256 deadline,uint256 nonce)"
    );
    uint256 public immutable startTime;
    IERC20Metadata public immutable marketToken;

    /// STORAGE

    /// @notice Prices for each pay token
    /// @dev Price should be in pay token decimals!
    uint256[] public prices;
    /// @notice Buyback prices for each pay token
    /// @dev Price should be in pay token decimals!
    uint256[] public buybackPrices;
    /// @notice Pay tokens
    address[] public payTokens;
    /// @notice Status to buy bonus percent
    /// @dev In PCT_DIV precision
    uint256[4] public statusToBuyBonusPercent;
    /// @notice Level to status to ref bonus percent
    /// @dev In PCT_DIV precision
    uint256[4][3] public levelToStatusToRefBonusPercent;
    /// @notice Buy status to requirements
    /// @dev In USD without decimals
    uint256[4] public buyStatusToRequirements;
    /// @notice Ref status to requirements
    /// @dev In USD without decimals
    uint256[4] public refStatusToRequirements;
    /// @dev In PCT_DIV decimals
    uint256 public marketTokenUsdPrice;
    uint256 public dailyBuyLimit;
    uint256 public dailyBuyCounter;
    uint256 public lastCounterResetTime;
    uint256 public sellLimit;

    /// @dev Last verified nonce
    uint256 public lastNonce;
    address public operator;

    mapping(address => BuyerInfo) public accountToBuyerInfo;
    /// @dev Monitor nonces. Prevent replay attacks
    mapping(uint256 => bool) public nonces;

    /// EVENTS

    event DailyBuyLimitSetted(uint256 newLimit);
    event PricesUpdated(uint256[] newPrice, uint256[] newBuybackPrice, uint256 marketTokenUsdPrice);
    event TokenPurchased(address indexed buyer, uint256 buyTokenAmount, uint256 buyBonus, uint256 payTokenAmount);
    event TokenSold(address indexed seller, uint256 sellTokenAmount, uint256 payTokenAmount);
    event SellLimitSetted(uint256 sellLimit);
    event OperatorSetted(address operator);
    event PayTokensUpdated(address[] payTokens);
    event BuyBonusPercentsUpdated(uint256[4] bonusPercents);
    event RefBonusPercentsUpdated(uint256[4][3] bonusPercents);
    event BuyBonusRequirementsUpdated(uint256[4] bonusRequirements);
    event RefBonusRequirementsUpdated(uint256[4] bonusRequirements);
    event TokensWithdrawn(IERC20Metadata token, address to, uint256 amount);

    constructor(
        uint256 startTime_,
        address[] memory payTokens_,
        uint256[] memory prices_,
        uint256[] memory buybackPrices_,
        uint256 marketTokenUsdPrice_,
        uint256 dailyBuyLimit_,
        address marketToken_
    ) 
        AccessControlDefaultAdminRules(0, msg.sender)
        EIP712("Collective Mind AI Sale", "1") 
    {
        if (block.timestamp > startTime_) revert InvalidStartTime();
        if (
            payTokens_.length == 0 ||
            payTokens_.length != prices_.length ||
            payTokens_.length != buybackPrices_.length
        ) revert InvalidArrayLength();
        for (uint256 i = 0; i < payTokens_.length; i++) {
            if (prices_[i] == 0) revert InvalidPrice();
            if (buybackPrices_[i] == 0) revert InvalidPrice();
        }
        if (marketToken_ == address(0)) revert ZeroAddress();

        startTime = startTime_;
        lastCounterResetTime = startTime_;
        payTokens = payTokens_;
        prices = prices_;
        buybackPrices = buybackPrices_;
        marketTokenUsdPrice = marketTokenUsdPrice_;
        dailyBuyLimit = dailyBuyLimit_;
        marketToken = IERC20Metadata(marketToken_);

        statusToBuyBonusPercent = [0, 50000, 100000, 150000];
        levelToStatusToRefBonusPercent[0] = [0, 70000, 80000, 100000];
        levelToStatusToRefBonusPercent[1] = [0, 30000, 40000, 50000];
        levelToStatusToRefBonusPercent[2] = [0, 10000, 20000, 25000];

        buyStatusToRequirements = [0, 1000, 5000, 10000];
        refStatusToRequirements = [0, 0, 5000, 10000];
    }

    function buyExactMarketTokenForPayToken(
        uint256 buyAmount,
        uint256 payTokenIndex,
        address referrer,
        uint256 usdPrice,
        uint256 deadline,
        uint256 nonce,
        bytes memory signature
    ) external payable {
        if (block.timestamp < startTime) revert SaleNotStarted();
        if (block.timestamp > deadline) revert DeadlineExeeded();
        if (payTokenIndex >= payTokens.length) revert InvalidIndex();
        IERC20Metadata payToken = IERC20Metadata(payTokens[payTokenIndex]);
        uint256 payTokenDecimals = 18;
        if (address(payToken) != address(0)) {
            payTokenDecimals = payToken.decimals();
        }
        if (buyAmount < 10**(marketToken.decimals() - payTokenDecimals)) revert InvalidBuyAmount();
        uint256 payTokenAmount = prices[payTokenIndex] * buyAmount / 10**marketToken.decimals();

        _executeTokenBuy(
            msg.sender,
            referrer,
            buyAmount,
            payTokenAmount,
            payToken,
            usdPrice,
            deadline,
            nonce,
            signature
        );
    }

    function buyMarketTokenForExactPayToken(
        uint256 payAmount,
        uint256 payTokenIndex,
        address referrer,
        uint256 usdPrice,
        uint256 deadline,
        uint256 nonce,
        bytes memory signature
    ) external payable {
        if (block.timestamp < startTime) revert SaleNotStarted();
        if (block.timestamp > deadline) revert DeadlineExeeded();
        if (payTokenIndex >= payTokens.length) revert InvalidIndex();
        uint256 price = prices[payTokenIndex];
        if (payAmount < price) revert InvalidPayAmount();
        IERC20Metadata payToken = IERC20Metadata(payTokens[payTokenIndex]);
        uint256 buyTokenAmount = payAmount * 10**marketToken.decimals() / price;

        _executeTokenBuy(
            msg.sender,
            referrer,
            buyTokenAmount,
            payAmount,
            payToken,
            usdPrice,
            deadline,
            nonce,
            signature
        );
    }

    function sellExactMarketTokenForPayToken(uint256 sellAmount, uint256 payTokenIndex) external {
        if (block.timestamp < startTime) revert SaleNotStarted();
        if (payTokenIndex >= payTokens.length) revert InvalidIndex();
        IERC20Metadata payToken = IERC20Metadata(payTokens[payTokenIndex]);
        uint256 payTokenDecimals = 18;
        if (address(payToken) != address(0)) {
            payTokenDecimals = payToken.decimals();
        }
        if (sellAmount < 10**(marketToken.decimals() - payTokenDecimals)) revert InvalidSellAmount();
        uint256 buybackPrice = buybackPrices[payTokenIndex];
        uint256 payTokenAmount = buybackPrice * sellAmount / 10**marketToken.decimals();

        _executeTokenSell(msg.sender, sellAmount, payTokenAmount, payToken);
    }

    function sellMarketTokenForExactPayToken(uint256 payAmount, uint256 payTokenIndex) external {
        if (block.timestamp < startTime) revert SaleNotStarted();
        if (payTokenIndex >= payTokens.length) revert InvalidIndex();
        uint256 buybackPrice = buybackPrices[payTokenIndex];
        if (payAmount < buybackPrice) revert InvalidPayAmount();
        IERC20Metadata payToken = IERC20Metadata(payTokens[payTokenIndex]);
        uint256 sellTokenAmount = payAmount * 10**marketToken.decimals() / buybackPrice;

        _executeTokenSell(msg.sender, sellTokenAmount, payAmount, payToken);
    }

    function setDailyBuyLimit(uint256 buyLimit) external onlyRole(DEFAULT_ADMIN_ROLE) {
        dailyBuyLimit = buyLimit;

        emit DailyBuyLimitSetted(buyLimit);
    }

    function setSellLimit(uint256 sellLimit_) external onlyRole(DEFAULT_ADMIN_ROLE) {
        sellLimit = sellLimit_;

        emit SellLimitSetted(sellLimit_);

exec
/bin/bash -lc "sed -n '261,531p' AUDIT_BUNDLE.txt" in /tmp/codex-stz9p30g
 succeeded in 0ms:
    }

    function setOperator(address operator_) external onlyRole(DEFAULT_ADMIN_ROLE) {
        if (operator_ == address(0)) revert ZeroAddress();
        if (operator != address(0)) {
            _revokeRole(OPERATOR_ROLE, operator);
        }
        _grantRole(OPERATOR_ROLE, operator_);
        operator = operator_;

        emit OperatorSetted(operator_);
    }

    function withdrawTokens(
        IERC20Metadata token,
        address to,
        uint256 amount
    ) external onlyRole(DEFAULT_ADMIN_ROLE) {
        if(address(token) == address(0)) {
            (bool success, ) = to.call{value: amount}("");
            if (!success) revert ETH_TRANSFER_FAILED();
        } else {
            token.safeTransfer(to, amount);
        }

        emit TokensWithdrawn(token, to, amount);
    }

    function setPayTokens(
        address[] calldata payTokens_,
        uint256[] calldata prices_,
        uint256[] calldata buybackPrices_,
        uint256 marketTokenUsdPrice_
    ) external onlyRole(DEFAULT_ADMIN_ROLE) {
        if (
            payTokens_.length == 0 ||
            payTokens_.length != prices_.length ||
            payTokens_.length != buybackPrices_.length
        ) revert InvalidArrayLength();

        payTokens = payTokens_;
        _setPrices(prices_, buybackPrices_, marketTokenUsdPrice_);

        emit PayTokensUpdated(payTokens_);
    }

    function setPrices(uint256[] calldata prices_, uint256[] calldata buybackPrices_, uint256 marketTokenUsdPrice_) external onlyRole(OPERATOR_ROLE) {
        _setPrices(prices_, buybackPrices_, marketTokenUsdPrice_);
    }

    function _setPrices(uint256[] calldata prices_, uint256[] calldata buybackPrices_, uint256 marketTokenUsdPrice_) internal {
        if (payTokens.length != prices_.length || prices_.length != buybackPrices_.length) revert InvalidArrayLength();

        prices = prices_;
        buybackPrices = buybackPrices_;
        marketTokenUsdPrice = marketTokenUsdPrice_;

        emit PricesUpdated(prices_, buybackPrices_, marketTokenUsdPrice_);
    }

    function setBuyBonusPercents(uint256[4] calldata bonusPercents) external onlyRole(DEFAULT_ADMIN_ROLE) {
        for (uint i = 0; i < bonusPercents.length; i++) {
            if (bonusPercents[i] > PCT_DIV) revert InvalidPercent();
        }

        statusToBuyBonusPercent = bonusPercents;

        emit BuyBonusPercentsUpdated(bonusPercents);
    }

    function setBuyBonusRequirements(uint256[4] calldata bonusRequirements) external onlyRole(DEFAULT_ADMIN_ROLE) {
        buyStatusToRequirements = bonusRequirements;

        emit BuyBonusRequirementsUpdated(bonusRequirements);
    }

    function setRefBonusPercents(uint256[4][3] calldata bonusPercents) external onlyRole(DEFAULT_ADMIN_ROLE) {
        for (uint i = 0; i < bonusPercents.length; i++) {
            for (uint j = 0; j < bonusPercents[i].length; j++) {
                if (bonusPercents[i][j] > PCT_DIV) revert InvalidPercent();   
            }
        }

        levelToStatusToRefBonusPercent = bonusPercents;

        emit RefBonusPercentsUpdated(bonusPercents);
    }

    function setRefBonusRequirements(uint256[4] calldata bonusRequirements) external onlyRole(DEFAULT_ADMIN_ROLE) {
        refStatusToRequirements = bonusRequirements;

        emit RefBonusRequirementsUpdated(bonusRequirements);
    }

    function _executeTokenBuy(
        address buyer,
        address referrer,
        uint256 buyTokenAmount,
        uint256 payTokenAmount,
        IERC20Metadata payToken,
        uint256 usdPrice,
        uint256 deadline,
        uint256 nonce,
        bytes memory signature
    ) internal {
        {
            bytes32 typehash = getVerifyPriceTypeHash(buyer, address(payToken), usdPrice, deadline, nonce);
            signatureVerification(typehash, nonce, signature);
        }

        _checkAndUpdateBuyCounter(buyTokenAmount);
        uint256 buyBonus = _calcBuyBonus(buyer, buyTokenAmount);

        if (address(payToken) == address(0)) {
            if (msg.value < payTokenAmount) revert InvalidEtherAmount();
            if (msg.value > payTokenAmount) {
                (bool success, ) = buyer.call{value: msg.value - payTokenAmount}("");
                if (!success) revert ETH_TRANSFER_FAILED();
            }
        } else {
            if (msg.value != 0) revert InvalidEtherAmount();
            payToken.safeTransferFrom(buyer, address(this), payTokenAmount);
        }

        marketToken.safeTransfer(buyer, buyTokenAmount + buyBonus);

        _checkReferrerAndPayBonus(buyer, referrer, buyTokenAmount);
        _checkAndUpdateBuyerStatuses(buyer, payTokenAmount, payToken, usdPrice);

        emit TokenPurchased(buyer, buyTokenAmount, buyBonus, payTokenAmount);
    }

    function _executeTokenSell(
        address seller,
        uint256 sellTokenAmount,
        uint256 payTokenAmount,
        IERC20Metadata payToken
    ) internal {
        _checkAndUpdateSellCounter(seller, sellTokenAmount);

        marketToken.safeTransferFrom(seller, address(this), sellTokenAmount);

        if (address(payToken) == address(0)) {
            (bool success, ) = seller.call{value: payTokenAmount}("");
            if (!success) revert ETH_TRANSFER_FAILED();
        } else {
            payToken.safeTransfer(seller, payTokenAmount);
        }

        emit TokenSold(seller, sellTokenAmount, payTokenAmount);
    }

    function _checkAndUpdateBuyCounter(uint256 buyAmount) internal {
        uint256 dailyCounter = dailyBuyCounter;
        if ((block.timestamp - startTime) / ONE_DAY - (lastCounterResetTime - startTime) / ONE_DAY > 0) {
            dailyCounter = 0;
            lastCounterResetTime = block.timestamp;
        }
        dailyCounter += buyAmount;
        
        if (dailyCounter > dailyBuyLimit) revert DailyBuyLimitExeeded();

        dailyBuyCounter = dailyCounter;
    }

    function _checkAndUpdateSellCounter(address seller, uint256 sellAmount) internal {
        if (accountToBuyerInfo[seller].sellAmount + sellAmount > sellLimit) revert SellLimitExeeded();

        accountToBuyerInfo[seller].sellAmount += sellAmount;
    }

    function _checkAndUpdateBuyerStatuses(address buyer, uint256 payAmount, IERC20Metadata payToken, uint256 usdPrice) internal {
        uint256 payTokenDecimals = 18;
        if (address(payToken) != address(0)) {
            payTokenDecimals = payToken.decimals();
        }
        uint256 payAmountInUSD = payAmount * usdPrice / (10 ** payTokenDecimals);
        accountToBuyerInfo[buyer].payAmountInUSD += payAmountInUSD;
        BuyerInfo memory buyerInfo = accountToBuyerInfo[buyer];

        if (buyerInfo.buyStatus != Status.Gold) {
            if (buyerInfo.payAmountInUSD >= buyStatusToRequirements[uint256(Status.Gold)] * PCT_DIV) {
                accountToBuyerInfo[buyer].buyStatus = Status.Gold;
            } else if (buyerInfo.payAmountInUSD >= buyStatusToRequirements[uint256(Status.Silver)] * PCT_DIV) {
                    accountToBuyerInfo[buyer].buyStatus = Status.Silver;
            } else if (buyerInfo.payAmountInUSD >= buyStatusToRequirements[uint256(Status.Bronze)] * PCT_DIV) {
                    accountToBuyerInfo[buyer].buyStatus = Status.Bronze;
            }
        }

        _updateRefStatus(buyer, buyerInfo);
    }

    function _updateRefStatus(address buyer, BuyerInfo memory buyerInfo) internal {
        if (buyerInfo.refStatus != Status.Gold) {
            if (buyerInfo.payAmountInUSD >= refStatusToRequirements[uint256(Status.Gold)] * PCT_DIV) {
                accountToBuyerInfo[buyer].refStatus = Status.Gold;
            } else if (buyerInfo.payAmountInUSD >= refStatusToRequirements[uint256(Status.Silver)] * PCT_DIV) {
                    accountToBuyerInfo[buyer].refStatus = Status.Silver;
            } else if (buyerInfo.payAmountInUSD >= refStatusToRequirements[uint256(Status.Bronze)] * PCT_DIV) {
                    accountToBuyerInfo[buyer].refStatus = Status.Bronze;
            }
        }
    }

    function _calcBuyBonus(address buyer, uint256 buyAmount) internal view returns(uint256 buyBonus) {
        Status buyerBuyStatus = accountToBuyerInfo[buyer].buyStatus;

        buyBonus = buyAmount * statusToBuyBonusPercent[uint256(buyerBuyStatus)] / PCT_DIV;
    }

    function _checkReferrerAndPayBonus(address buyer, address referrer, uint256 buyAmount) internal {
        BuyerInfo memory buyerInfo = accountToBuyerInfo[buyer];
        if (buyerInfo.payAmountInUSD == 0 && referrer != address(0)) {
            _updateRefStatus(referrer, accountToBuyerInfo[referrer]);
            accountToBuyerInfo[buyer].referrer = referrer;
            buyerInfo.referrer = referrer;
        }
        for (uint256 i = 0; i < levelToStatusToRefBonusPercent.length; i++) {
            if (buyerInfo.referrer == address(0)) break;

            address referrerAddress = buyerInfo.referrer;
            buyerInfo = accountToBuyerInfo[buyerInfo.referrer];
            uint256 refBonus = buyAmount * levelToStatusToRefBonusPercent[i][uint256(buyerInfo.refStatus)] / PCT_DIV;
            marketToken.safeTransfer(referrerAddress, refBonus);
        }
    }

    ///------------------ EIP712 ------------------///

    /// @dev Verifies that chain signature is valid 
    /// @param typeHash abi encoded type hash digest
    /// @param nonce Prevent replay attacks
    /// @param signature Signature bytes
    function signatureVerification(
        bytes32 typeHash,
        uint256 nonce,
        bytes memory signature
    ) internal {
        if (nonces[nonce]) revert RequestAlreadyProcessed(nonce);

        bytes32 permitDigest = _hashTypedDataV4(typeHash);
        // Recover the signer of the PERMIT_DIGEST
        address signer = ECDSA.recover(permitDigest, signature);
        // Compare the recover and the required signer
        if (signer != operator) revert InvalidSignature();

        nonces[nonce] = true;
        lastNonce = nonce;
    }

    function getVerifyPriceTypeHash(
        address account,
        address payToken,
        uint256 usdPrice,
        uint256 deadline,
        uint256 nonce
    ) internal pure returns(bytes32) {
        return keccak256(
            abi.encode(
                VERIFY_PRICE_TYPEHASH,
                account,
                payToken,
                usdPrice,
                deadline,
                nonce
            )
        );
    }
}


exec
/bin/bash -lc "nl -ba contracts/Sale.sol | sed -n '1,260p'" in /tmp/codex-stz9p30g
 succeeded in 0ms:
     1	// SPDX-License-Identifier: MIT
     2	pragma solidity ^0.8.28;
     3	
     4	import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
     5	import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
     6	import {AccessControlDefaultAdminRules} from "@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol";
     7	import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";
     8	import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
     9	
    10	contract Sale is AccessControlDefaultAdminRules, EIP712 {
    11	    using SafeERC20 for IERC20Metadata;
    12	
    13	    /// ERRORS
    14	
    15	    error ZeroAddress();
    16	    error DailyBuyLimitExeeded();
    17	    error SaleNotStarted();
    18	    error InvalidStartTime();
    19	    error InvalidPrice();
    20	    error InvalidCoefficient();
    21	    error InvalidBuyAmount();
    22	    error InvalidPayAmount();
    23	    error InvalidSellAmount();
    24	    error SellLimitExeeded();
    25	    error InvalidReferrer();
    26	    error InvalidArrayLength();
    27	    error InvalidIndex();
    28	    error RequestAlreadyProcessed(uint256 nonce);
    29	    error InvalidSignature();
    30	    error InvalidEtherAmount();
    31	    error DeadlineExeeded();
    32	    error InvalidPercent();
    33	    error ETH_TRANSFER_FAILED();
    34	
    35	    /// CONSTANTS
    36	
    37	    enum Status {
    38	        None,
    39	        Bronze,
    40	        Silver,
    41	        Gold
    42	    }
    43	
    44	    struct BuyerInfo {
    45	        Status buyStatus;
    46	        Status refStatus;
    47	        uint256 sellAmount;
    48	        uint256 payAmountInUSD;
    49	        address referrer;
    50	    }
    51	
    52	    /// @notice Divisor for computation (1 bps (basis point) precision: 0.0001%).
    53	    uint256 public constant PCT_DIV = 1000000;
    54	    uint256 public constant ONE_DAY = 60 * 60 * 24;
    55	    bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE");
    56	    bytes32 public constant VERIFY_PRICE_TYPEHASH = keccak256(
    57	        "VerifyPrice(address account,address payToken,uint256 price,uint256 deadline,uint256 nonce)"
    58	    );
    59	    uint256 public immutable startTime;
    60	    IERC20Metadata public immutable marketToken;
    61	
    62	    /// STORAGE
    63	
    64	    /// @notice Prices for each pay token
    65	    /// @dev Price should be in pay token decimals!
    66	    uint256[] public prices;
    67	    /// @notice Buyback prices for each pay token
    68	    /// @dev Price should be in pay token decimals!
    69	    uint256[] public buybackPrices;
    70	    /// @notice Pay tokens
    71	    address[] public payTokens;
    72	    /// @notice Status to buy bonus percent
    73	    /// @dev In PCT_DIV precision
    74	    uint256[4] public statusToBuyBonusPercent;
    75	    /// @notice Level to status to ref bonus percent
    76	    /// @dev In PCT_DIV precision
    77	    uint256[4][3] public levelToStatusToRefBonusPercent;
    78	    /// @notice Buy status to requirements
    79	    /// @dev In USD without decimals
    80	    uint256[4] public buyStatusToRequirements;
    81	    /// @notice Ref status to requirements
    82	    /// @dev In USD without decimals
    83	    uint256[4] public refStatusToRequirements;
    84	    /// @dev In PCT_DIV decimals
    85	    uint256 public marketTokenUsdPrice;
    86	    uint256 public dailyBuyLimit;
    87	    uint256 public dailyBuyCounter;
    88	    uint256 public lastCounterResetTime;
    89	    uint256 public sellLimit;
    90	
    91	    /// @dev Last verified nonce
    92	    uint256 public lastNonce;
    93	    address public operator;
    94	
    95	    mapping(address => BuyerInfo) public accountToBuyerInfo;
    96	    /// @dev Monitor nonces. Prevent replay attacks
    97	    mapping(uint256 => bool) public nonces;
    98	
    99	    /// EVENTS
   100	
   101	    event DailyBuyLimitSetted(uint256 newLimit);
   102	    event PricesUpdated(uint256[] newPrice, uint256[] newBuybackPrice, uint256 marketTokenUsdPrice);
   103	    event TokenPurchased(address indexed buyer, uint256 buyTokenAmount, uint256 buyBonus, uint256 payTokenAmount);
   104	    event TokenSold(address indexed seller, uint256 sellTokenAmount, uint256 payTokenAmount);
   105	    event SellLimitSetted(uint256 sellLimit);
   106	    event OperatorSetted(address operator);
   107	    event PayTokensUpdated(address[] payTokens);
   108	    event BuyBonusPercentsUpdated(uint256[4] bonusPercents);
   109	    event RefBonusPercentsUpdated(uint256[4][3] bonusPercents);
   110	    event BuyBonusRequirementsUpdated(uint256[4] bonusRequirements);
   111	    event RefBonusRequirementsUpdated(uint256[4] bonusRequirements);
   112	    event TokensWithdrawn(IERC20Metadata token, address to, uint256 amount);
   113	
   114	    constructor(
   115	        uint256 startTime_,
   116	        address[] memory payTokens_,
   117	        uint256[] memory prices_,
   118	        uint256[] memory buybackPrices_,
   119	        uint256 marketTokenUsdPrice_,
   120	        uint256 dailyBuyLimit_,
   121	        address marketToken_
   122	    ) 
   123	        AccessControlDefaultAdminRules(0, msg.sender)
   124	        EIP712("Collective Mind AI Sale", "1") 
   125	    {
   126	        if (block.timestamp > startTime_) revert InvalidStartTime();
   127	        if (
   128	            payTokens_.length == 0 ||
   129	            payTokens_.length != prices_.length ||
   130	            payTokens_.length != buybackPrices_.length
   131	        ) revert InvalidArrayLength();
   132	        for (uint256 i = 0; i < payTokens_.length; i++) {
   133	            if (prices_[i] == 0) revert InvalidPrice();
   134	            if (buybackPrices_[i] == 0) revert InvalidPrice();
   135	        }
   136	        if (marketToken_ == address(0)) revert ZeroAddress();
   137	
   138	        startTime = startTime_;
   139	        lastCounterResetTime = startTime_;
   140	        payTokens = payTokens_;
   141	        prices = prices_;
   142	        buybackPrices = buybackPrices_;
   143	        marketTokenUsdPrice = marketTokenUsdPrice_;
   144	        dailyBuyLimit = dailyBuyLimit_;
   145	        marketToken = IERC20Metadata(marketToken_);
   146	
   147	        statusToBuyBonusPercent = [0, 50000, 100000, 150000];
   148	        levelToStatusToRefBonusPercent[0] = [0, 70000, 80000, 100000];
   149	        levelToStatusToRefBonusPercent[1] = [0, 30000, 40000, 50000];
   150	        levelToStatusToRefBonusPercent[2] = [0, 10000, 20000, 25000];
   151	
   152	        buyStatusToRequirements = [0, 1000, 5000, 10000];
   153	        refStatusToRequirements = [0, 0, 5000, 10000];
   154	    }
   155	
   156	    function buyExactMarketTokenForPayToken(
   157	        uint256 buyAmount,
   158	        uint256 payTokenIndex,
   159	        address referrer,
   160	        uint256 usdPrice,
   161	        uint256 deadline,
   162	        uint256 nonce,
   163	        bytes memory signature
   164	    ) external payable {
   165	        if (block.timestamp < startTime) revert SaleNotStarted();
   166	        if (block.timestamp > deadline) revert DeadlineExeeded();
   167	        if (payTokenIndex >= payTokens.length) revert InvalidIndex();
   168	        IERC20Metadata payToken = IERC20Metadata(payTokens[payTokenIndex]);
   169	        uint256 payTokenDecimals = 18;
   170	        if (address(payToken) != address(0)) {
   171	            payTokenDecimals = payToken.decimals();
   172	        }
   173	        if (buyAmount < 10**(marketToken.decimals() - payTokenDecimals)) revert InvalidBuyAmount();
   174	        uint256 payTokenAmount = prices[payTokenIndex] * buyAmount / 10**marketToken.decimals();
   175	
   176	        _executeTokenBuy(
   177	            msg.sender,
   178	            referrer,
   179	            buyAmount,
   180	            payTokenAmount,
   181	            payToken,
   182	            usdPrice,
   183	            deadline,
   184	            nonce,
   185	            signature
   186	        );
   187	    }
   188	
   189	    function buyMarketTokenForExactPayToken(
   190	        uint256 payAmount,
   191	        uint256 payTokenIndex,
   192	        address referrer,
   193	        uint256 usdPrice,
   194	        uint256 deadline,
   195	        uint256 nonce,
   196	        bytes memory signature
   197	    ) external payable {
   198	        if (block.timestamp < startTime) revert SaleNotStarted();
   199	        if (block.timestamp > deadline) revert DeadlineExeeded();
   200	        if (payTokenIndex >= payTokens.length) revert InvalidIndex();
   201	        uint256 price = prices[payTokenIndex];
   202	        if (payAmount < price) revert InvalidPayAmount();
   203	        IERC20Metadata payToken = IERC20Metadata(payTokens[payTokenIndex]);
   204	        uint256 buyTokenAmount = payAmount * 10**marketToken.decimals() / price;
   205	
   206	        _executeTokenBuy(
   207	            msg.sender,
   208	            referrer,
   209	            buyTokenAmount,
   210	            payAmount,
   211	            payToken,
   212	            usdPrice,
   213	            deadline,
   214	            nonce,
   215	            signature
   216	        );
   217	    }
   218	
   219	    function sellExactMarketTokenForPayToken(uint256 sellAmount, uint256 payTokenIndex) external {
   220	        if (block.timestamp < startTime) revert SaleNotStarted();
   221	        if (payTokenIndex >= payTokens.length) revert InvalidIndex();
   222	        IERC20Metadata payToken = IERC20Metadata(payTokens[payTokenIndex]);
   223	        uint256 payTokenDecimals = 18;
   224	        if (address(payToken) != address(0)) {
   225	            payTokenDecimals = payToken.decimals();
   226	        }
   227	        if (sellAmount < 10**(marketToken.decimals() - payTokenDecimals)) revert InvalidSellAmount();
   228	        uint256 buybackPrice = buybackPrices[payTokenIndex];
   229	        uint256 payTokenAmount = buybackPrice * sellAmount / 10**marketToken.decimals();
   230	
   231	        _executeTokenSell(msg.sender, sellAmount, payTokenAmount, payToken);
   232	    }
   233	
   234	    function sellMarketTokenForExactPayToken(uint256 payAmount, uint256 payTokenIndex) external {
   235	        if (block.timestamp < startTime) revert SaleNotStarted();
   236	        if (payTokenIndex >= payTokens.length) revert InvalidIndex();
   237	        uint256 buybackPrice = buybackPrices[payTokenIndex];
   238	        if (payAmount < buybackPrice) revert InvalidPayAmount();
   239	        IERC20Metadata payToken = IERC20Metadata(payTokens[payTokenIndex]);
   240	        uint256 sellTokenAmount = payAmount * 10**marketToken.decimals() / buybackPrice;
   241	
   242	        _executeTokenSell(msg.sender, sellTokenAmount, payAmount, payToken);
   243	    }
   244	
   245	    function setDailyBuyLimit(uint256 buyLimit) external onlyRole(DEFAULT_ADMIN_ROLE) {
   246	        dailyBuyLimit = buyLimit;
   247	
   248	        emit DailyBuyLimitSetted(buyLimit);
   249	    }
   250	
   251	    function setSellLimit(uint256 sellLimit_) external onlyRole(DEFAULT_ADMIN_ROLE) {
   252	        sellLimit = sellLimit_;
   253	
   254	        emit SellLimitSetted(sellLimit_);
   255	    }
   256	
   257	    function setOperator(address operator_) external onlyRole(DEFAULT_ADMIN_ROLE) {
   258	        if (operator_ == address(0)) revert ZeroAddress();
   259	        if (operator != address(0)) {
   260	            _revokeRole(OPERATOR_ROLE, operator);

exec
/bin/bash -lc "nl -ba contracts/Sale.sol | sed -n '261,520p'" in /tmp/codex-stz9p30g
 succeeded in 0ms:
   261	        }
   262	        _grantRole(OPERATOR_ROLE, operator_);
   263	        operator = operator_;
   264	
   265	        emit OperatorSetted(operator_);
   266	    }
   267	
   268	    function withdrawTokens(
   269	        IERC20Metadata token,
   270	        address to,
   271	        uint256 amount
   272	    ) external onlyRole(DEFAULT_ADMIN_ROLE) {
   273	        if(address(token) == address(0)) {
   274	            (bool success, ) = to.call{value: amount}("");
   275	            if (!success) revert ETH_TRANSFER_FAILED();
   276	        } else {
   277	            token.safeTransfer(to, amount);
   278	        }
   279	
   280	        emit TokensWithdrawn(token, to, amount);
   281	    }
   282	
   283	    function setPayTokens(
   284	        address[] calldata payTokens_,
   285	        uint256[] calldata prices_,
   286	        uint256[] calldata buybackPrices_,
   287	        uint256 marketTokenUsdPrice_
   288	    ) external onlyRole(DEFAULT_ADMIN_ROLE) {
   289	        if (
   290	            payTokens_.length == 0 ||
   291	            payTokens_.length != prices_.length ||
   292	            payTokens_.length != buybackPrices_.length
   293	        ) revert InvalidArrayLength();
   294	
   295	        payTokens = payTokens_;
   296	        _setPrices(prices_, buybackPrices_, marketTokenUsdPrice_);
   297	
   298	        emit PayTokensUpdated(payTokens_);
   299	    }
   300	
   301	    function setPrices(uint256[] calldata prices_, uint256[] calldata buybackPrices_, uint256 marketTokenUsdPrice_) external onlyRole(OPERATOR_ROLE) {
   302	        _setPrices(prices_, buybackPrices_, marketTokenUsdPrice_);
   303	    }
   304	
   305	    function _setPrices(uint256[] calldata prices_, uint256[] calldata buybackPrices_, uint256 marketTokenUsdPrice_) internal {
   306	        if (payTokens.length != prices_.length || prices_.length != buybackPrices_.length) revert InvalidArrayLength();
   307	
   308	        prices = prices_;
   309	        buybackPrices = buybackPrices_;
   310	        marketTokenUsdPrice = marketTokenUsdPrice_;
   311	
   312	        emit PricesUpdated(prices_, buybackPrices_, marketTokenUsdPrice_);
   313	    }
   314	
   315	    function setBuyBonusPercents(uint256[4] calldata bonusPercents) external onlyRole(DEFAULT_ADMIN_ROLE) {
   316	        for (uint i = 0; i < bonusPercents.length; i++) {
   317	            if (bonusPercents[i] > PCT_DIV) revert InvalidPercent();
   318	        }
   319	
   320	        statusToBuyBonusPercent = bonusPercents;
   321	
   322	        emit BuyBonusPercentsUpdated(bonusPercents);
   323	    }
   324	
   325	    function setBuyBonusRequirements(uint256[4] calldata bonusRequirements) external onlyRole(DEFAULT_ADMIN_ROLE) {
   326	        buyStatusToRequirements = bonusRequirements;
   327	
   328	        emit BuyBonusRequirementsUpdated(bonusRequirements);
   329	    }
   330	
   331	    function setRefBonusPercents(uint256[4][3] calldata bonusPercents) external onlyRole(DEFAULT_ADMIN_ROLE) {
   332	        for (uint i = 0; i < bonusPercents.length; i++) {
   333	            for (uint j = 0; j < bonusPercents[i].length; j++) {
   334	                if (bonusPercents[i][j] > PCT_DIV) revert InvalidPercent();   
   335	            }
   336	        }
   337	
   338	        levelToStatusToRefBonusPercent = bonusPercents;
   339	
   340	        emit RefBonusPercentsUpdated(bonusPercents);
   341	    }
   342	
   343	    function setRefBonusRequirements(uint256[4] calldata bonusRequirements) external onlyRole(DEFAULT_ADMIN_ROLE) {
   344	        refStatusToRequirements = bonusRequirements;
   345	
   346	        emit RefBonusRequirementsUpdated(bonusRequirements);
   347	    }
   348	
   349	    function _executeTokenBuy(
   350	        address buyer,
   351	        address referrer,
   352	        uint256 buyTokenAmount,
   353	        uint256 payTokenAmount,
   354	        IERC20Metadata payToken,
   355	        uint256 usdPrice,
   356	        uint256 deadline,
   357	        uint256 nonce,
   358	        bytes memory signature
   359	    ) internal {
   360	        {
   361	            bytes32 typehash = getVerifyPriceTypeHash(buyer, address(payToken), usdPrice, deadline, nonce);
   362	            signatureVerification(typehash, nonce, signature);
   363	        }
   364	
   365	        _checkAndUpdateBuyCounter(buyTokenAmount);
   366	        uint256 buyBonus = _calcBuyBonus(buyer, buyTokenAmount);
   367	
   368	        if (address(payToken) == address(0)) {
   369	            if (msg.value < payTokenAmount) revert InvalidEtherAmount();
   370	            if (msg.value > payTokenAmount) {
   371	                (bool success, ) = buyer.call{value: msg.value - payTokenAmount}("");
   372	                if (!success) revert ETH_TRANSFER_FAILED();
   373	            }
   374	        } else {
   375	            if (msg.value != 0) revert InvalidEtherAmount();
   376	            payToken.safeTransferFrom(buyer, address(this), payTokenAmount);
   377	        }
   378	
   379	        marketToken.safeTransfer(buyer, buyTokenAmount + buyBonus);
   380	
   381	        _checkReferrerAndPayBonus(buyer, referrer, buyTokenAmount);
   382	        _checkAndUpdateBuyerStatuses(buyer, payTokenAmount, payToken, usdPrice);
   383	
   384	        emit TokenPurchased(buyer, buyTokenAmount, buyBonus, payTokenAmount);
   385	    }
   386	
   387	    function _executeTokenSell(
   388	        address seller,
   389	        uint256 sellTokenAmount,
   390	        uint256 payTokenAmount,
   391	        IERC20Metadata payToken
   392	    ) internal {
   393	        _checkAndUpdateSellCounter(seller, sellTokenAmount);
   394	
   395	        marketToken.safeTransferFrom(seller, address(this), sellTokenAmount);
   396	
   397	        if (address(payToken) == address(0)) {
   398	            (bool success, ) = seller.call{value: payTokenAmount}("");
   399	            if (!success) revert ETH_TRANSFER_FAILED();
   400	        } else {
   401	            payToken.safeTransfer(seller, payTokenAmount);
   402	        }
   403	
   404	        emit TokenSold(seller, sellTokenAmount, payTokenAmount);
   405	    }
   406	
   407	    function _checkAndUpdateBuyCounter(uint256 buyAmount) internal {
   408	        uint256 dailyCounter = dailyBuyCounter;
   409	        if ((block.timestamp - startTime) / ONE_DAY - (lastCounterResetTime - startTime) / ONE_DAY > 0) {
   410	            dailyCounter = 0;
   411	            lastCounterResetTime = block.timestamp;
   412	        }
   413	        dailyCounter += buyAmount;
   414	        
   415	        if (dailyCounter > dailyBuyLimit) revert DailyBuyLimitExeeded();
   416	
   417	        dailyBuyCounter = dailyCounter;
   418	    }
   419	
   420	    function _checkAndUpdateSellCounter(address seller, uint256 sellAmount) internal {
   421	        if (accountToBuyerInfo[seller].sellAmount + sellAmount > sellLimit) revert SellLimitExeeded();
   422	
   423	        accountToBuyerInfo[seller].sellAmount += sellAmount;
   424	    }
   425	
   426	    function _checkAndUpdateBuyerStatuses(address buyer, uint256 payAmount, IERC20Metadata payToken, uint256 usdPrice) internal {
   427	        uint256 payTokenDecimals = 18;
   428	        if (address(payToken) != address(0)) {
   429	            payTokenDecimals = payToken.decimals();
   430	        }
   431	        uint256 payAmountInUSD = payAmount * usdPrice / (10 ** payTokenDecimals);
   432	        accountToBuyerInfo[buyer].payAmountInUSD += payAmountInUSD;
   433	        BuyerInfo memory buyerInfo = accountToBuyerInfo[buyer];
   434	
   435	        if (buyerInfo.buyStatus != Status.Gold) {
   436	            if (buyerInfo.payAmountInUSD >= buyStatusToRequirements[uint256(Status.Gold)] * PCT_DIV) {
   437	                accountToBuyerInfo[buyer].buyStatus = Status.Gold;
   438	            } else if (buyerInfo.payAmountInUSD >= buyStatusToRequirements[uint256(Status.Silver)] * PCT_DIV) {
   439	                    accountToBuyerInfo[buyer].buyStatus = Status.Silver;
   440	            } else if (buyerInfo.payAmountInUSD >= buyStatusToRequirements[uint256(Status.Bronze)] * PCT_DIV) {
   441	                    accountToBuyerInfo[buyer].buyStatus = Status.Bronze;
   442	            }
   443	        }
   444	
   445	        _updateRefStatus(buyer, buyerInfo);
   446	    }
   447	
   448	    function _updateRefStatus(address buyer, BuyerInfo memory buyerInfo) internal {
   449	        if (buyerInfo.refStatus != Status.Gold) {
   450	            if (buyerInfo.payAmountInUSD >= refStatusToRequirements[uint256(Status.Gold)] * PCT_DIV) {
   451	                accountToBuyerInfo[buyer].refStatus = Status.Gold;
   452	            } else if (buyerInfo.payAmountInUSD >= refStatusToRequirements[uint256(Status.Silver)] * PCT_DIV) {
   453	                    accountToBuyerInfo[buyer].refStatus = Status.Silver;
   454	            } else if (buyerInfo.payAmountInUSD >= refStatusToRequirements[uint256(Status.Bronze)] * PCT_DIV) {
   455	                    accountToBuyerInfo[buyer].refStatus = Status.Bronze;
   456	            }
   457	        }
   458	    }
   459	
   460	    function _calcBuyBonus(address buyer, uint256 buyAmount) internal view returns(uint256 buyBonus) {
   461	        Status buyerBuyStatus = accountToBuyerInfo[buyer].buyStatus;
   462	
   463	        buyBonus = buyAmount * statusToBuyBonusPercent[uint256(buyerBuyStatus)] / PCT_DIV;
   464	    }
   465	
   466	    function _checkReferrerAndPayBonus(address buyer, address referrer, uint256 buyAmount) internal {
   467	        BuyerInfo memory buyerInfo = accountToBuyerInfo[buyer];
   468	        if (buyerInfo.payAmountInUSD == 0 && referrer != address(0)) {
   469	            _updateRefStatus(referrer, accountToBuyerInfo[referrer]);
   470	            accountToBuyerInfo[buyer].referrer = referrer;
   471	            buyerInfo.referrer = referrer;
   472	        }
   473	        for (uint256 i = 0; i < levelToStatusToRefBonusPercent.length; i++) {
   474	            if (buyerInfo.referrer == address(0)) break;
   475	
   476	            address referrerAddress = buyerInfo.referrer;
   477	            buyerInfo = accountToBuyerInfo[buyerInfo.referrer];
   478	            uint256 refBonus = buyAmount * levelToStatusToRefBonusPercent[i][uint256(buyerInfo.refStatus)] / PCT_DIV;
   479	            marketToken.safeTransfer(referrerAddress, refBonus);
   480	        }
   481	    }
   482	
   483	    ///------------------ EIP712 ------------------///
   484	
   485	    /// @dev Verifies that chain signature is valid 
   486	    /// @param typeHash abi encoded type hash digest
   487	    /// @param nonce Prevent replay attacks
   488	    /// @param signature Signature bytes
   489	    function signatureVerification(
   490	        bytes32 typeHash,
   491	        uint256 nonce,
   492	        bytes memory signature
   493	    ) internal {
   494	        if (nonces[nonce]) revert RequestAlreadyProcessed(nonce);
   495	
   496	        bytes32 permitDigest = _hashTypedDataV4(typeHash);
   497	        // Recover the signer of the PERMIT_DIGEST
   498	        address signer = ECDSA.recover(permitDigest, signature);
   499	        // Compare the recover and the required signer
   500	        if (signer != operator) revert InvalidSignature();
   501	
   502	        nonces[nonce] = true;
   503	        lastNonce = nonce;
   504	    }
   505	
   506	    function getVerifyPriceTypeHash(
   507	        address account,
   508	        address payToken,
   509	        uint256 usdPrice,
   510	        uint256 deadline,
   511	        uint256 nonce
   512	    ) internal pure returns(bytes32) {
   513	        return keccak256(
   514	            abi.encode(
   515	                VERIFY_PRICE_TYPEHASH,
   516	                account,
   517	                payToken,
   518	                usdPrice,
   519	                deadline,
   520	                nonce

exec
/bin/bash -lc "nl -ba contracts/Sale.sol | sed -n '520,540p'" in /tmp/codex-stz9p30g
 succeeded in 0ms:
   520	                nonce
   521	            )
   522	        );
   523	    }
   524	}

Read the full audit bundle and analyzed the only first-party contract in scope. Two user-exploitable issues were identified in referral handling and exact-amount purchase rounding.
  ✓ Read AUDIT_BUNDLE.txt completely and identify first-party Solidity files in scope
  ✓ Analyze first-party contracts for exploitable issues in the requested categories
  → Produce JSON report with findings and concrete evidence/locations
codex
{"no_findings":false,"summary":"Sale.sol has two user-exploitable issues: referral logic allows self/cyclic bonus farming, and exact-amount purchases can round payment down to zero for low-priced payment tokens.","findings":[{"severity":"high","category":"other","title":"Referrer field is never validated, enabling self-referral and cyclic referral farming","exploit_scenario":"A buyer can set `referrer` to their own address on their first purchase. The contract stores that value without validation, then walks the referral chain for 3 levels and transfers referral bonuses each time. Because Bronze referral status is reachable at zero historical volume by default, the same buyer can immediately collect all 3 referral tiers on their own purchase. After reaching higher referral status, they can keep buying through the same self-reference and siphon 14% to 17.5% extra sale tokens per purchase. Two or more colluding accounts can also create short referral cycles and recycle the same bonus path.","recommendation":"Validate the supplied referrer before storing it or paying bonuses. At minimum, reject `referrer == buyer`, reject obvious cycles, and consider requiring the referrer to be a pre-existing eligible participant. Apply validation before `accountToBuyerInfo[buyer].referrer = referrer` and before traversing the referral chain.","evidence":"`InvalidReferrer` is declared but never used. On a first buy, `_checkReferrerAndPayBonus` stores any non-zero `referrer` directly, then pays 3 levels of bonuses by repeatedly following `buyerInfo.referrer`. With default `refStatusToRequirements = [0, 0, 5000, 10000]`, `_updateRefStatus` can mark a zero-volume address as Bronze before the payout loop runs.","locations":["contracts/Sale.sol:25","contracts/Sale.sol:152","contracts/Sale.sol:153","contracts/Sale.sol:466","contracts/Sale.sol:468","contracts/Sale.sol:469","contracts/Sale.sol:470","contracts/Sale.sol:473","contracts/Sale.sol:479"]},{"severity":"medium","category":"math","title":"Exact-output buys can mint market tokens for zero payment because rounding-down is unchecked","exploit_scenario":"For low-priced payment assets, a buyer can call `buyExactMarketTokenForPayToken` with a small but valid `buyAmount` such that `prices[payTokenIndex] * buyAmount / 10**marketToken.decimals()` rounds down to zero. `_executeTokenBuy` never rejects `payTokenAmount == 0`, so the buyer receives market tokens while paying neither ETH nor ERC20 tokens. Because the signature only covers `(account, payToken, usdPrice, deadline, nonce)` and not `buyAmount`, any valid signed quote for that pay token can be reused with one of these free-buy sizes.","recommendation":"After computing `payTokenAmount`, require it to be non-zero before proceeding, or round up instead of down for exact-output purchases. Also consider binding `buyAmount` or `payTokenAmount` into the signed payload if quote authorization is meant to cover the full trade terms.","evidence":"`buyExactMarketTokenForPayToken` only enforces a minimum `buyAmount` based on decimal difference, then computes `payTokenAmount` with integer division. `_executeTokenBuy` accepts that value as-is and only checks `msg.value < payTokenAmount` or performs `safeTransferFrom(..., payTokenAmount)`. If `payTokenAmount` is zero, both payment branches succeed while `marketToken.safeTransfer` still sends the purchased tokens.","locations":["contracts/Sale.sol:169","contracts/Sale.sol:173","contracts/Sale.sol:174","contracts/Sale.sol:349","contracts/Sale.sol:368","contracts/Sale.sol:375","contracts/Sale.sol:376","contracts/Sale.sol:379"]}]}
tokens used
43,067
Metadata
{
    "codex": {
        "ran_at": "2026-04-04T03:17:29.951142+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "source",
        "file_count": 26,
        "import_count": 30,
        "first_party_contracts_count": 1
    },
    "summary": "Sale.sol has two user-exploitable issues: referral logic allows self/cyclic bonus farming, and exact-amount purchases can round payment down to zero for low-priced payment tokens.",
    "raw_final": {
        "summary": "Sale.sol has two user-exploitable issues: referral logic allows self/cyclic bonus farming, and exact-amount purchases can round payment down to zero for low-priced payment tokens.",
        "findings": [
            {
                "title": "Referrer field is never validated, enabling self-referral and cyclic referral farming",
                "category": "other",
                "evidence": "`InvalidReferrer` is declared but never used. On a first buy, `_checkReferrerAndPayBonus` stores any non-zero `referrer` directly, then pays 3 levels of bonuses by repeatedly following `buyerInfo.referrer`. With default `refStatusToRequirements = [0, 0, 5000, 10000]`, `_updateRefStatus` can mark a zero-volume address as Bronze before the payout loop runs.",
                "severity": "high",
                "locations": [
                    "contracts/Sale.sol:25",
                    "contracts/Sale.sol:152",
                    "contracts/Sale.sol:153",
                    "contracts/Sale.sol:466",
                    "contracts/Sale.sol:468",
                    "contracts/Sale.sol:469",
                    "contracts/Sale.sol:470",
                    "contracts/Sale.sol:473",
                    "contracts/Sale.sol:479"
                ],
                "recommendation": "Validate the supplied referrer before storing it or paying bonuses. At minimum, reject `referrer == buyer`, reject obvious cycles, and consider requiring the referrer to be a pre-existing eligible participant. Apply validation before `accountToBuyerInfo[buyer].referrer = referrer` and before traversing the referral chain.",
                "exploit_scenario": "A buyer can set `referrer` to their own address on their first purchase. The contract stores that value without validation, then walks the referral chain for 3 levels and transfers referral bonuses each time. Because Bronze referral status is reachable at zero historical volume by default, the same buyer can immediately collect all 3 referral tiers on their own purchase. After reaching higher referral status, they can keep buying through the same self-reference and siphon 14% to 17.5% extra sale tokens per purchase. Two or more colluding accounts can also create short referral cycles and recycle the same bonus path."
            },
            {
                "title": "Exact-output buys can mint market tokens for zero payment because rounding-down is unchecked",
                "category": "math",
                "evidence": "`buyExactMarketTokenForPayToken` only enforces a minimum `buyAmount` based on decimal difference, then computes `payTokenAmount` with integer division. `_executeTokenBuy` accepts that value as-is and only checks `msg.value < payTokenAmount` or performs `safeTransferFrom(..., payTokenAmount)`. If `payTokenAmount` is zero, both payment branches succeed while `marketToken.safeTransfer` still sends the purchased tokens.",
                "severity": "medium",
                "locations": [
                    "contracts/Sale.sol:169",
                    "contracts/Sale.sol:173",
                    "contracts/Sale.sol:174",
                    "contracts/Sale.sol:349",
                    "contracts/Sale.sol:368",
                    "contracts/Sale.sol:375",
                    "contracts/Sale.sol:376",
                    "contracts/Sale.sol:379"
                ],
                "recommendation": "After computing `payTokenAmount`, require it to be non-zero before proceeding, or round up instead of down for exact-output purchases. Also consider binding `buyAmount` or `payTokenAmount` into the signed payload if quote authorization is meant to cover the full trade terms.",
                "exploit_scenario": "For low-priced payment assets, a buyer can call `buyExactMarketTokenForPayToken` with a small but valid `buyAmount` such that `prices[payTokenIndex] * buyAmount / 10**marketToken.decimals()` rounds down to zero. `_executeTokenBuy` never rejects `payTokenAmount == 0`, so the buyer receives market tokens while paying neither ETH nor ERC20 tokens. Because the signature only covers `(account, payToken, usdPrice, deadline, nonce)` and not `buyAmount`, any valid signed quote for that pay token can be reused with one of these free-buy sizes."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
1
CALL-family (heavy)
14
EXT*/BALANCE
1
Total opcodes
9967
Flags
create_opcodes_present call_family_heavy
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x0350
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x84ef8ffc
00000019: GT
0000001a: PUSH2 0x01c6
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xb3ab15fb
00000024: GT
00000025: PUSH2 0x00f7
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xd547741f
0000002f: GT
00000030: PUSH2 0x0095
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xdc173042
0000003a: GT
0000003b: PUSH2 0x006f
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xdc173042
00000045: EQ
00000046: PUSH2 0x0a29
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xf5b541a6
00000050: EQ
00000051: PUSH2 0x0a49
00000054: JUMPI
00000055: DUP1
00000056: PUSH4 0xf9d9e31b
0000005b: EQ
0000005c: PUSH2 0x0a6b
0000005f: JUMPI
00000060: DUP1
00000061: PUSH4 0xfa5a89f1
00000066: EQ
00000067: PUSH2 0x0a8b
0000006a: JUMPI
0000006b: PUSH1 0x00
0000006d: DUP1
0000006e: REVERT
0000006f: JUMPDEST
00000070: DUP1
00000071: PUSH4 0xd547741f
00000076: EQ
00000077: PUSH2 0x09d4
0000007a: JUMPI
0000007b: DUP1
0000007c: PUSH4 0xd602b9fd
00000081: EQ
00000082: PUSH2 0x09f4
00000085: JUMPI
00000086: DUP1
00000087: PUSH4 0xda71c017
0000008c: EQ
0000008d: PUSH2 0x0a09
00000090: JUMPI
00000091: PUSH1 0x00
00000093: DUP1
00000094: REVERT
00000095: JUMPDEST
00000096: DUP1
00000097: PUSH4 0xc26e2c03
0000009c: GT
0000009d: PUSH2 0x00d1
000000a0: JUMPI
000000a1: DUP1
000000a2: PUSH4 0xc26e2c03
000000a7: EQ
000000a8: PUSH2 0x094f
000000ab: JUMPI
000000ac: DUP1
000000ad: PUSH4 0xcc8463c8
000000b2: EQ
000000b3: PUSH2 0x096f
000000b6: JUMPI
000000b7: DUP1
000000b8: PUSH4 0xcefc1429
000000bd: EQ
000000be: PUSH2 0x0984
000000c1: JUMPI
000000c2: DUP1
000000c3: PUSH4 0xcf6eefb7
000000c8: EQ
000000c9: PUSH2 0x0999
000000cc: JUMPI
000000cd: PUSH1 0x00
000000cf: DUP1
000000d0: REVERT
000000d1: JUMPDEST
000000d2: DUP1
000000d3: PUSH4 0xb3ab15fb
000000d8: EQ
000000d9: PUSH2 0x08f9
000000dc: JUMPI
000000dd: DUP1
000000de: PUSH4 0xb566f1f3
000000e3: EQ
000000e4: PUSH2 0x0919
000000e7: JUMPI
000000e8: DUP1
000000e9: PUSH4 0xbc31c1c1
000000ee: EQ
000000ef: PUSH2 0x092f
000000f2: JUMPI
000000f3: PUSH1 0x00
000000f5: DUP1
000000f6: REVERT
000000f7: JUMPDEST
000000f8: DUP1
000000f9: PUSH4 0x9d6e60e3
000000fe: GT
000000ff: PUSH2 0x0164
00000102: JUMPI
00000103: DUP1
00000104: PUSH4 0xa45d0cf8
00000109: GT
0000010a: PUSH2 0x013e
0000010d: JUMPI
0000010e: DUP1
0000010f: PUSH4 0xa45d0cf8
00000114: EQ
00000115: PUSH2 0x0865
00000118: JUMPI
00000119: DUP1
0000011a: PUSH4 0xa50cbdda
0000011f: EQ
00000120: PUSH2 0x0885
00000123: JUMPI
00000124: DUP1
00000125: PUSH4 0xa9bf2c09
0000012a: EQ
0000012b: PUSH2 0x08a5
0000012e: JUMPI
0000012f: DUP1
00000130: PUSH4 0xad48d611
00000135: EQ
00000136: PUSH2 0x08c5
00000139: JUMPI
0000013a: PUSH1 0x00
0000013c: DUP1
0000013d: REVERT
0000013e: JUMPDEST
0000013f: DUP1
00000140: PUSH4 0x9d6e60e3
00000145: EQ
00000146: PUSH2 0x07e8
00000149: JUMPI
0000014a: DUP1
0000014b: PUSH4 0xa1eda53c
00000150: EQ
00000151: PUSH2 0x081c
00000154: JUMPI
00000155: DUP1
00000156: PUSH4 0xa217fddf
0000015b: EQ
0000015c: PUSH2 0x0850
0000015f: JUMPI
00000160: PUSH1 0x00
00000162: DUP1
00000163: REVERT
00000164: JUMPDEST
00000165: DUP1
00000166: PUSH4 0x904a7ff2
0000016b: GT
0000016c: PUSH2 0x01a0
0000016f: JUMPI
00000170: DUP1
00000171: PUSH4 0x904a7ff2
00000176: EQ
00000177: PUSH2 0x0768
0000017a: JUMPI
0000017b: DUP1
0000017c: PUSH4 0x91d14854
00000181: EQ
00000182: PUSH2 0x0788
00000185: JUMPI
00000186: DUP1
00000187: PUSH4 0x91edee6b
0000018c: EQ
0000018d: PUSH2 0x07a8
00000190: JUMPI
00000191: DUP1
00000192: PUSH4 0x9d0c8cde
00000197: EQ
00000198: PUSH2 0x07c8
0000019b: JUMPI
0000019c: PUSH1 0x00
0000019e: DUP1
0000019f: REVERT
000001a0: JUMPDEST
000001a1: DUP1
000001a2: PUSH4 0x84ef8ffc
000001a7: EQ
000001a8: PUSH2 0x071e
000001ab: JUMPI
000001ac: DUP1
000001ad: PUSH4 0x863e76db
000001b2: EQ
000001b3: PUSH2 0x073c
000001b6: JUMPI
000001b7: DUP1
000001b8: PUSH4 0x8da5cb5b
000001bd: EQ
000001be: PUSH2 0x0753
000001c1: JUMPI
000001c2: PUSH1 0x00
000001c4: DUP1
000001c5: REVERT
000001c6: JUMPDEST
000001c7: DUP1
000001c8: PUSH4 0x570ca735
000001cd: GT
000001ce: PUSH2 0x02a0
000001d1: JUMPI
000001d2: DUP1
000001d3: PUSH4 0x634e93da
000001d8: GT
000001d9: PUSH2 0x023e
000001dc: JUMPI
000001dd: DUP1
000001de: PUSH4 0x6a8953ed
000001e3: GT
000001e4: PUSH2 0x0218
000001e7: JUMPI
000001e8: DUP1
000001e9: PUSH4 0x6a8953ed
000001ee: EQ
000001ef: PUSH2 0x0645
000001f2: JUMPI
000001f3: DUP1
000001f4: PUSH4 0x754ddfc2
000001f9: EQ
000001fa: PUSH2 0x065b
000001fd: JUMPI
000001fe: DUP1
000001ff: PUSH4 0x78e97925
00000204: EQ
00000205: PUSH2 0x06c2
00000208: JUMPI
00000209: DUP1
0000020a: PUSH4 0x84b0196e
0000020f: EQ
00000210: PUSH2 0x06f6
00000213: JUMPI
00000214: PUSH1 0x00
00000216: DUP1
00000217: REVERT
00000218: JUMPDEST
00000219: DUP1
0000021a: PUSH4 0x634e93da
0000021f: EQ
00000220: PUSH2 0x05e5
00000223: JUMPI
00000224: DUP1
00000225: PUSH4 0x649a5ec7
0000022a: EQ
0000022b: PUSH2 0x0605
0000022e: JUMPI
0000022f: DUP1
00000230: PUSH4 0x67727c9e
00000235: EQ
00000236: PUSH2 0x0625
00000239: JUMPI
0000023a: PUSH1 0x00
0000023c: DUP1
0000023d: REVERT
0000023e: JUMPDEST
0000023f: DUP1
00000240: PUSH4 0x5b32085a
00000245: GT
00000246: PUSH2 0x027a
00000249: JUMPI
0000024a: DUP1
0000024b: PUSH4 0x5b32085a
00000250: EQ
00000251: PUSH2 0x0585
00000254: JUMPI
00000255: DUP1
00000256: PUSH4 0x5d2fce6f
0000025b: EQ
0000025c: PUSH2 0x059c
0000025f: JUMPI
00000260: DUP1
00000261: PUSH4 0x5e35359e
00000266: EQ
00000267: PUSH2 0x05af
0000026a: JUMPI
0000026b: DUP1
0000026c: PUSH4 0x62850d75
00000271: EQ
00000272: PUSH2 0x05cf
00000275: JUMPI
00000276: PUSH1 0x00
00000278: DUP1
00000279: REVERT
0000027a: JUMPDEST
0000027b: DUP1
0000027c: PUSH4 0x570ca735
00000281: EQ
00000282: PUSH2 0x052f
00000285: JUMPI
00000286: DUP1
00000287: PUSH4 0x58dd1690
0000028c: EQ
0000028d: PUSH2 0x054f
00000290: JUMPI
00000291: DUP1
00000292: PUSH4 0x59bcd772
00000297: EQ
00000298: PUSH2 0x0565
0000029b: JUMPI
0000029c: PUSH1 0x00
0000029e: DUP1
0000029f: REVERT
000002a0: JUMPDEST
000002a1: DUP1
000002a2: PUSH4 0x141a468c
000002a7: GT
000002a8: PUSH2 0x030d
000002ab: JUMPI
000002ac: DUP1
000002ad: PUSH4 0x30471ec0
000002b2: GT
000002b3: PUSH2 0x02e7
000002b6: JUMPI
000002b7: DUP1
000002b8: PUSH4 0x30471ec0
000002bd: EQ
000002be: PUSH2 0x04c3
000002c1: JUMPI
000002c2: DUP1
000002c3: PUSH4 0x36568abe
000002c8: EQ
000002c9: PUSH2 0x04e3
000002cc: JUMPI
000002cd: DUP1
000002ce: PUSH4 0x4f91e48c
000002d3: EQ
000002d4: PUSH2 0x0503
000002d7: JUMPI
000002d8: DUP1
000002d9: PUSH4 0x52631ab4
000002de: EQ
000002df: PUSH2 0x0519
000002e2: JUMPI
000002e3: PUSH1 0x00
000002e5: DUP1
000002e6: REVERT
000002e7: JUMPDEST
000002e8: DUP1
000002e9: PUSH4 0x141a468c
000002ee: EQ
000002ef: PUSH2 0x0435
000002f2: JUMPI
000002f3: DUP1
000002f4: PUSH4 0x248a9ca3
000002f9: EQ
000002fa: PUSH2 0x0465
000002fd: JUMPI
000002fe: DUP1
000002ff: PUSH4 0x2f2ff15d
00000304: EQ
00000305: PUSH2 0x04a3
00000308: JUMPI
00000309: PUSH1 0x00
0000030b: DUP1
0000030c: REVERT
0000030d: JUMPDEST
0000030e: DUP1
0000030f: PUSH4 0x01ffc9a7
00000314: EQ
00000315: PUSH2 0x0355
00000318: JUMPI
00000319: DUP1
0000031a: PUSH4 0x022d63fb
0000031f: EQ
00000320: PUSH2 0x038a
00000323: JUMPI
00000324: DUP1
00000325: PUSH4 0x0535020d
0000032a: EQ
0000032b: PUSH2 0x03b3
0000032e: JUMPI
0000032f: DUP1
00000330: PUSH4 0x06465894
00000335: EQ
00000336: PUSH2 0x03eb
00000339: JUMPI
0000033a: DUP1
0000033b: PUSH4 0x0aa6220b
00000340: EQ
00000341: PUSH2 0x0400
00000344: JUMPI
00000345: DUP1
00000346: PUSH4 0x0f8caae0
0000034b: EQ
0000034c: PUSH2 0x0415
0000034f: JUMPI
00000350: JUMPDEST
00000351: PUSH1 0x00
00000353: DUP1
00000354: REVERT
00000355: JUMPDEST
00000356: CALLVALUE
00000357: DUP1
00000358: ISZERO
00000359: PUSH2 0x0361
0000035c: JUMPI
0000035d: PUSH1 0x00
0000035f: DUP1
00000360: REVERT
00000361: JUMPDEST
00000362: POP
00000363: PUSH2 0x0375
00000366: PUSH2 0x0370
00000369: CALLDATASIZE
0000036a: PUSH1 0x04
0000036c: PUSH2 0x35fa
0000036f: JUMP
00000370: JUMPDEST
00000371: PUSH2 0x0aab
00000374: JUMP
00000375: JUMPDEST
00000376: PUSH1 0x40
00000378: MLOAD
00000379: SWAP1
0000037a: ISZERO
0000037b: ISZERO
0000037c: DUP2
0000037d: MSTORE
0000037e: PUSH1 0x20
00000380: ADD
00000381: JUMPDEST
00000382: PUSH1 0x40
00000384: MLOAD
00000385: DUP1
00000386: SWAP2
00000387: SUB
00000388: SWAP1
00000389: RETURN
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: PUSH3 0x069780
0000039c: JUMPDEST
0000039d: PUSH1 0x40
0000039f: MLOAD
000003a0: PUSH6 0xffffffffffff
000003a7: SWAP1
000003a8: SWAP2
000003a9: AND
000003aa: DUP2
000003ab: MSTORE
000003ac: PUSH1 0x20
000003ae: ADD
000003af: PUSH2 0x0381
000003b2: JUMP
000003b3: JUMPDEST
000003b4: CALLVALUE
000003b5: DUP1
000003b6: ISZERO
000003b7: PUSH2 0x03bf
000003ba: JUMPI
000003bb: PUSH1 0x00
000003bd: DUP1
000003be: REVERT
000003bf: JUMPDEST
000003c0: POP
000003c1: PUSH2 0x03d3
000003c4: PUSH2 0x03ce
000003c7: CALLDATASIZE
000003c8: PUSH1 0x04
000003ca: PUSH2 0x3624
000003cd: JUMP
000003ce: JUMPDEST
000003cf: PUSH2 0x0ad6
000003d2: JUMP
000003d3: JUMPDEST
000003d4: PUSH1 0x40
000003d6: MLOAD
000003d7: PUSH1 0x01
000003d9: PUSH1 0x01
000003db: PUSH1 0xa0
000003dd: SHL
000003de: SUB
000003df: SWAP1
000003e0: SWAP2
000003e1: AND
000003e2: DUP2
000003e3: MSTORE
000003e4: PUSH1 0x20
000003e6: ADD
000003e7: PUSH2 0x0381
000003ea: JUMP
000003eb: JUMPDEST
000003ec: PUSH2 0x03fe
000003ef: PUSH2 0x03f9
000003f2: CALLDATASIZE
000003f3: PUSH1 0x04
000003f5: PUSH2 0x3668
000003f8: JUMP
000003f9: JUMPDEST
000003fa: PUSH2 0x0b00
000003fd: JUMP
000003fe: JUMPDEST
000003ff: STOP
00000400: JUMPDEST
00000401: CALLVALUE
00000402: DUP1
00000403: ISZERO
00000404: PUSH2 0x040c
00000407: JUMPI
00000408: PUSH1 0x00
0000040a: DUP1
0000040b: REVERT
0000040c: JUMPDEST
0000040d: POP
0000040e: PUSH2 0x03fe
00000411: PUSH2 0x0cbf
00000414: JUMP
00000415: JUMPDEST
00000416: CALLVALUE
00000417: DUP1
00000418: ISZERO
00000419: PUSH2 0x0421
0000041c: JUMPI
0000041d: PUSH1 0x00
0000041f: DUP1
00000420: REVERT
00000421: JUMPDEST
00000422: POP
00000423: PUSH2 0x03fe
00000426: PUSH2 0x0430
00000429: CALLDATASIZE
0000042a: PUSH1 0x04
0000042c: PUSH2 0x3624
0000042f: JUMP
00000430: JUMPDEST
00000431: PUSH2 0x0cd5
00000434: JUMP
00000435: JUMPDEST
00000436: CALLVALUE
00000437: DUP1
00000438: ISZERO
00000439: PUSH2 0x0441
0000043c: JUMPI
0000043d: PUSH1 0x00
0000043f: DUP1
00000440: REVERT
00000441: JUMPDEST
00000442: POP
00000443: PUSH2 0x0375
00000446: PUSH2 0x0450
00000449: CALLDATASIZE
0000044a: PUSH1 0x04
0000044c: PUSH2 0x3624
0000044f: JUMP
00000450: JUMPDEST
00000451: PUSH1 0x28
00000453: PUSH1 0x20
00000455: MSTORE
00000456: PUSH1 0x00
00000458: SWAP1
00000459: DUP2
0000045a: MSTORE
0000045b: PUSH1 0x40
0000045d: SWAP1
0000045e: KECCAK256
0000045f: SLOAD
00000460: PUSH1 0xff
00000462: AND
00000463: DUP2
00000464: JUMP
00000465: JUMPDEST
00000466: CALLVALUE
00000467: DUP1
00000468: ISZERO
00000469: PUSH2 0x0471
0000046c: JUMPI
0000046d: PUSH1 0x00
0000046f: DUP1
00000470: REVERT
00000471: JUMPDEST
00000472: POP
00000473: PUSH2 0x0495
00000476: PUSH2 0x0480
00000479: CALLDATASIZE
0000047a: PUSH1 0x04
0000047c: PUSH2 0x3624
0000047f: JUMP
00000480: JUMPDEST
00000481: PUSH1 0x00
00000483: SWAP1
00000484: DUP2
00000485: MSTORE
00000486: PUSH1 0x20
00000488: DUP2
00000489: SWAP1
0000048a: MSTORE
0000048b: PUSH1 0x40
0000048d: SWAP1
0000048e: KECCAK256
0000048f: PUSH1 0x01
00000491: ADD
00000492: SLOAD
00000493: SWAP1
00000494: JUMP
00000495: JUMPDEST
00000496: PUSH1 0x40
00000498: MLOAD
00000499: SWAP1
0000049a: DUP2
0000049b: MSTORE
0000049c: PUSH1 0x20
0000049e: ADD
0000049f: PUSH2 0x0381
000004a2: JUMP
000004a3: JUMPDEST
000004a4: CALLVALUE
000004a5: DUP1
000004a6: ISZERO
000004a7: PUSH2 0x04af
000004aa: JUMPI
000004ab: PUSH1 0x00
000004ad: DUP1
000004ae: REVERT
000004af: JUMPDEST
000004b0: POP
000004b1: PUSH2 0x03fe
000004b4: PUSH2 0x04be
000004b7: CALLDATASIZE
000004b8: PUSH1 0x04
000004ba: PUSH2 0x3764
000004bd: JUMP
000004be: JUMPDEST
000004bf: PUSH2 0x0d1d
000004c2: JUMP
000004c3: JUMPDEST
000004c4: CALLVALUE
000004c5: DUP1
000004c6: ISZERO
000004c7: PUSH2 0x04cf
000004ca: JUMPI
000004cb: PUSH1 0x00
000004cd: DUP1
000004ce: REVERT
000004cf: JUMPDEST
000004d0: POP
000004d1: PUSH2 0x0495
000004d4: PUSH2 0x04de
000004d7: CALLDATASIZE
000004d8: PUSH1 0x04
000004da: PUSH2 0x3624
000004dd: JUMP
000004de: JUMPDEST
000004df: PUSH2 0x0d49
000004e2: JUMP
000004e3: JUMPDEST
000004e4: CALLVALUE
000004e5: DUP1
000004e6: ISZERO
000004e7: PUSH2 0x04ef
000004ea: JUMPI
000004eb: PUSH1 0x00
000004ed: DUP1
000004ee: REVERT
000004ef: JUMPDEST
000004f0: POP
000004f1: PUSH2 0x03fe
000004f4: PUSH2 0x04fe
000004f7: CALLDATASIZE
000004f8: PUSH1 0x04
000004fa: PUSH2 0x3764
000004fd: JUMP
000004fe: JUMPDEST
000004ff: PUSH2 0x0d60
00000502: JUMP
00000503: JUMPDEST
00000504: CALLVALUE
00000505: DUP1
00000506: ISZERO
00000507: PUSH2 0x050f
0000050a: JUMPI
0000050b: PUSH1 0x00
0000050d: DUP1
0000050e: REVERT
0000050f: JUMPDEST
00000510: POP
00000511: PUSH2 0x0495
00000514: PUSH1 0x24
00000516: SLOAD
00000517: DUP2
00000518: JUMP
00000519: JUMPDEST
0000051a: CALLVALUE
0000051b: DUP1
0000051c: ISZERO
0000051d: PUSH2 0x0525
00000520: JUMPI
00000521: PUSH1 0x00
00000523: DUP1
00000524: REVERT
00000525: JUMPDEST
00000526: POP
00000527: PUSH2 0x0495
0000052a: PUSH1 0x25
0000052c: SLOAD
0000052d: DUP2
0000052e: JUMP
0000052f: JUMPDEST
00000530: CALLVALUE
00000531: DUP1
00000532: ISZERO
00000533: PUSH2 0x053b
00000536: JUMPI
00000537: PUSH1 0x00
00000539: DUP1
0000053a: REVERT
0000053b: JUMPDEST
0000053c: POP
0000053d: PUSH1 0x26
0000053f: SLOAD
00000540: PUSH2 0x03d3
00000543: SWAP1
00000544: PUSH1 0x01
00000546: PUSH1 0x01
00000548: PUSH1 0xa0
0000054a: SHL
0000054b: SUB
0000054c: AND
0000054d: DUP2
0000054e: JUMP
0000054f: JUMPDEST
00000550: CALLVALUE
00000551: DUP1
00000552: ISZERO
00000553: PUSH2 0x055b
00000556: JUMPI
00000557: PUSH1 0x00
00000559: DUP1
0000055a: REVERT
0000055b: JUMPDEST
0000055c: POP
0000055d: PUSH2 0x0495
00000560: PUSH1 0x23
00000562: SLOAD
00000563: DUP2
00000564: JUMP
00000565: JUMPDEST
00000566: CALLVALUE
00000567: DUP1
00000568: ISZERO
00000569: PUSH2 0x0571
0000056c: JUMPI
0000056d: PUSH1 0x00
0000056f: DUP1
00000570: REVERT
00000571: JUMPDEST
00000572: POP
00000573: PUSH2 0x03fe
00000576: PUSH2 0x0580
00000579: CALLDATASIZE
0000057a: PUSH1 0x04
0000057c: PUSH2 0x3794
0000057f: JUMP
00000580: JUMPDEST
00000581: PUSH2 0x0e0c
00000584: JUMP
00000585: JUMPDEST
00000586: CALLVALUE
00000587: DUP1
00000588: ISZERO
00000589: PUSH2 0x0591
0000058c: JUMPI
0000058d: PUSH1 0x00
0000058f: DUP1
00000590: REVERT
00000591: JUMPDEST
00000592: POP
00000593: PUSH2 0x0495
00000596: PUSH3 0x0f4240
0000059a: DUP2
0000059b: JUMP
0000059c: JUMPDEST
0000059d: PUSH2 0x03fe
000005a0: PUSH2 0x05aa
000005a3: CALLDATASIZE
000005a4: PUSH1 0x04
000005a6: PUSH2 0x3668
000005a9: JUMP
000005aa: JUMPDEST
000005ab: PUSH2 0x0ee1
000005ae: JUMP
000005af: JUMPDEST
000005b0: CALLVALUE
000005b1: DUP1
000005b2: ISZERO
000005b3: PUSH2 0x05bb
000005b6: JUMPI
000005b7: PUSH1 0x00
000005b9: DUP1
000005ba: REVERT
000005bb: JUMPDEST
000005bc: POP
000005bd: PUSH2 0x03fe
000005c0: PUSH2 0x05ca
000005c3: CALLDATASIZE
000005c4: PUSH1 0x04
000005c6: PUSH2 0x37be
000005c9: JUMP
000005ca: JUMPDEST
000005cb: PUSH2 0x1191
000005ce: JUMP
000005cf: JUMPDEST
000005d0: CALLVALUE
000005d1: DUP1
000005d2: ISZERO
000005d3: PUSH2 0x05db
000005d6: JUMPI
000005d7: PUSH1 0x00
000005d9: DUP1
000005da: REVERT
000005db: JUMPDEST
000005dc: POP
000005dd: PUSH2 0x0495
000005e0: PUSH1 0x21
000005e2: SLOAD
000005e3: DUP2
000005e4: JUMP
000005e5: JUMPDEST
000005e6: CALLVALUE
000005e7: DUP1
000005e8: ISZERO
000005e9: PUSH2 0x05f1
000005ec: JUMPI
000005ed: PUSH1 0x00
000005ef: DUP1
000005f0: REVERT
000005f1: JUMPDEST
000005f2: POP
000005f3: PUSH2 0x03fe
000005f6: PUSH2 0x0600
000005f9: CALLDATASIZE
000005fa: PUSH1 0x04
000005fc: PUSH2 0x37ff
000005ff: JUMP
00000600: JUMPDEST
00000601: PUSH2 0x1289
00000604: JUMP
00000605: JUMPDEST
00000606: CALLVALUE
00000607: DUP1
00000608: ISZERO
00000609: PUSH2 0x0611
0000060c: JUMPI
0000060d: PUSH1 0x00
0000060f: DUP1
00000610: REVERT
00000611: JUMPDEST
00000612: POP
00000613: PUSH2 0x03fe
00000616: PUSH2 0x0620
00000619: CALLDATASIZE
0000061a: PUSH1 0x04
0000061c: PUSH2 0x381c
0000061f: JUMP
00000620: JUMPDEST
00000621: PUSH2 0x129d
00000624: JUMP
00000625: JUMPDEST
00000626: CALLVALUE
00000627: DUP1
00000628: ISZERO
00000629: PUSH2 0x0631
0000062c: JUMPI
0000062d: PUSH1 0x00
0000062f: DUP1
00000630: REVERT
00000631: JUMPDEST
00000632: POP
00000633: PUSH2 0x0495
00000636: PUSH2 0x0640
00000639: CALLDATASIZE
0000063a: PUSH1 0x04
0000063c: PUSH2 0x3844
0000063f: JUMP
00000640: JUMPDEST
00000641: PUSH2 0x12b1
00000644: JUMP
00000645: JUMPDEST
00000646: CALLVALUE
00000647: DUP1
00000648: ISZERO
00000649: PUSH2 0x0651
0000064c: JUMPI
0000064d: PUSH1 0x00
0000064f: DUP1
00000650: REVERT
00000651: JUMPDEST
00000652: POP
00000653: PUSH2 0x0495
00000656: PUSH1 0x20
00000658: SLOAD
00000659: DUP2
0000065a: JUMP
0000065b: JUMPDEST
0000065c: CALLVALUE
0000065d: DUP1
0000065e: ISZERO
0000065f: PUSH2 0x0667
00000662: JUMPI
00000663: PUSH1 0x00
00000665: DUP1
00000666: REVERT
00000667: JUMPDEST
00000668: POP
00000669: PUSH2 0x06b1
0000066c: PUSH2 0x0676
0000066f: CALLDATASIZE
00000670: PUSH1 0x04
00000672: PUSH2 0x37ff
00000675: JUMP
00000676: JUMPDEST
00000677: PUSH1 0x27
00000679: PUSH1 0x20
0000067b: MSTORE
0000067c: PUSH1 0x00
0000067e: SWAP1
0000067f: DUP2
00000680: MSTORE
00000681: PUSH1 0x40
00000683: SWAP1
00000684: KECCAK256
00000685: DUP1
00000686: SLOAD
00000687: PUSH1 0x01
00000689: DUP3
0000068a: ADD
0000068b: SLOAD
0000068c: PUSH1 0x02
0000068e: DUP4
0000068f: ADD
00000690: SLOAD
00000691: PUSH1 0x03
00000693: SWAP1
00000694: SWAP4
00000695: ADD
00000696: SLOAD
00000697: PUSH1 0xff
00000699: DUP1
0000069a: DUP5
0000069b: AND
0000069c: SWAP5
0000069d: PUSH2 0x0100
000006a0: SWAP1
000006a1: SWAP5
000006a2: DIV
000006a3: AND
000006a4: SWAP3
000006a5: SWAP1
000006a6: PUSH1 0x01
000006a8: PUSH1 0x01
000006aa: PUSH1 0xa0
000006ac: SHL
000006ad: SUB
000006ae: AND
000006af: DUP6
000006b0: JUMP
000006b1: JUMPDEST
000006b2: PUSH1 0x40
000006b4: MLOAD
000006b5: PUSH2 0x0381
000006b8: SWAP6
000006b9: SWAP5
000006ba: SWAP4
000006bb: SWAP3
000006bc: SWAP2
000006bd: SWAP1
000006be: PUSH2 0x389e
000006c1: JUMP
000006c2: JUMPDEST
000006c3: CALLVALUE
000006c4: DUP1
000006c5: ISZERO
000006c6: PUSH2 0x06ce
000006c9: JUMPI
000006ca: PUSH1 0x00
000006cc: DUP1
000006cd: REVERT
000006ce: JUMPDEST
000006cf: POP
000006d0: PUSH2 0x0495
000006d3: PUSH32 0x00000000000000000000000000000000000000000000000000000000686ff190
000006f4: DUP2
000006f5: JUMP
000006f6: JUMPDEST
000006f7: CALLVALUE
000006f8: DUP1
000006f9: ISZERO
000006fa: PUSH2 0x0702
000006fd: JUMPI
000006fe: PUSH1 0x00
00000700: DUP1
00000701: REVERT
00000702: JUMPDEST
00000703: POP
00000704: PUSH2 0x070b
00000707: PUSH2 0x12dc
0000070a: JUMP
0000070b: JUMPDEST
0000070c: PUSH1 0x40
0000070e: MLOAD
0000070f: PUSH2 0x0381
00000712: SWAP8
00000713: SWAP7
00000714: SWAP6
00000715: SWAP5
00000716: SWAP4
00000717: SWAP3
00000718: SWAP2
00000719: SWAP1
0000071a: PUSH2 0x3924
0000071d: JUMP
0000071e: JUMPDEST
0000071f: CALLVALUE
00000720: DUP1
00000721: ISZERO
00000722: PUSH2 0x072a
00000725: JUMPI
00000726: PUSH1 0x00
00000728: DUP1
00000729: REVERT
0000072a: JUMPDEST
0000072b: POP
0000072c: PUSH1 0x02
0000072e: SLOAD
0000072f: PUSH1 0x01
00000731: PUSH1 0x01
00000733: PUSH1 0xa0
00000735: SHL
00000736: SUB
00000737: AND
00000738: PUSH2 0x03d3
0000073b: JUMP
0000073c: JUMPDEST
0000073d: CALLVALUE
0000073e: DUP1
0000073f: ISZERO
00000740: PUSH2 0x0748
00000743: JUMPI
00000744: PUSH1 0x00
00000746: DUP1
00000747: REVERT
00000748: JUMPDEST
00000749: POP
0000074a: PUSH2 0x0495
0000074d: PUSH3 0x015180
00000751: DUP2
00000752: JUMP
00000753: JUMPDEST
00000754: CALLVALUE
00000755: DUP1
00000756: ISZERO
00000757: PUSH2 0x075f
0000075a: JUMPI
0000075b: PUSH1 0x00
0000075d: DUP1
0000075e: REVERT
0000075f: JUMPDEST
00000760: POP
00000761: PUSH2 0x03d3
00000764: PUSH2 0x1322
00000767: JUMP
00000768: JUMPDEST
00000769: CALLVALUE
0000076a: DUP1
0000076b: ISZERO
0000076c: PUSH2 0x0774
0000076f: JUMPI
00000770: PUSH1 0x00
00000772: DUP1
00000773: REVERT
00000774: JUMPDEST
00000775: POP
00000776: PUSH2 0x03fe
00000779: PUSH2 0x0783
0000077c: CALLDATASIZE
0000077d: PUSH1 0x04
0000077f: PUSH2 0x3844
00000782: JUMP
00000783: JUMPDEST
00000784: PUSH2 0x133b
00000787: JUMP
00000788: JUMPDEST
00000789: CALLVALUE
0000078a: DUP1
0000078b: ISZERO
0000078c: PUSH2 0x0794
0000078f: JUMPI
00000790: PUSH1 0x00
00000792: DUP1
00000793: REVERT
00000794: JUMPDEST
00000795: POP
00000796: PUSH2 0x0375
00000799: PUSH2 0x07a3
0000079c: CALLDATASIZE
0000079d: PUSH1 0x04
0000079f: PUSH2 0x3764
000007a2: JUMP
000007a3: JUMPDEST
000007a4: PUSH2 0x14cf
000007a7: JUMP
000007a8: JUMPDEST
000007a9: CALLVALUE
000007aa: DUP1
000007ab: ISZERO
000007ac: PUSH2 0x07b4
000007af: JUMPI
000007b0: PUSH1 0x00
000007b2: DUP1
000007b3: REVERT
000007b4: JUMPDEST
000007b5: POP
000007b6: PUSH2 0x03fe
000007b9: PUSH2 0x07c3
000007bc: CALLDATASIZE
000007bd: PUSH1 0x04
000007bf: PUSH2 0x39bc
000007c2: JUMP
000007c3: JUMPDEST
000007c4: PUSH2 0x14f8
000007c7: JUMP
000007c8: JUMPDEST
000007c9: CALLVALUE
000007ca: DUP1
000007cb: ISZERO
000007cc: PUSH2 0x07d4
000007cf: JUMPI
000007d0: PUSH1 0x00
000007d2: DUP1
000007d3: REVERT
000007d4: JUMPDEST
000007d5: POP
000007d6: PUSH2 0x03fe
000007d9: PUSH2 0x07e3
000007dc: CALLDATASIZE
000007dd: PUSH1 0x04
000007df: PUSH2 0x3a2a
000007e2: JUMP
000007e3: JUMPDEST
000007e4: PUSH2 0x1540
000007e7: JUMP
000007e8: JUMPDEST
000007e9: CALLVALUE
000007ea: DUP1
000007eb: ISZERO
000007ec: PUSH2 0x07f4
000007ef: JUMPI
000007f0: PUSH1 0x00
000007f2: DUP1
000007f3: REVERT
000007f4: JUMPDEST
000007f5: POP
000007f6: PUSH2 0x0495
000007f9: PUSH32 0x3ae15b903b0ac48ca42840358899ad2501724741924507a38b5e4f1c9ef1508c
0000081a: DUP2
0000081b: JUMP
0000081c: JUMPDEST
0000081d: CALLVALUE
0000081e: DUP1
0000081f: ISZERO
00000820: PUSH2 0x0828
00000823: JUMPI
00000824: PUSH1 0x00
00000826: DUP1
00000827: REVERT
00000828: JUMPDEST
00000829: POP
0000082a: PUSH2 0x0831
0000082d: PUSH2 0x156d
00000830: JUMP
00000831: JUMPDEST
00000832: PUSH1 0x40
00000834: DUP1
00000835: MLOAD
00000836: PUSH6 0xffffffffffff
0000083d: SWAP4
0000083e: DUP5
0000083f: AND
00000840: DUP2
00000841: MSTORE
00000842: SWAP3
00000843: SWAP1
00000844: SWAP2
00000845: AND
00000846: PUSH1 0x20
00000848: DUP4
00000849: ADD
0000084a: MSTORE
0000084b: ADD
0000084c: PUSH2 0x0381
0000084f: JUMP
00000850: JUMPDEST
00000851: CALLVALUE
00000852: DUP1
00000853: ISZERO
00000854: PUSH2 0x085c
00000857: JUMPI
00000858: PUSH1 0x00
0000085a: DUP1
0000085b: REVERT
0000085c: JUMPDEST
0000085d: POP
0000085e: PUSH2 0x0495
00000861: PUSH1 0x00
00000863: DUP2
00000864: JUMP
00000865: JUMPDEST
00000866: CALLVALUE
00000867: DUP1
00000868: ISZERO
00000869: PUSH2 0x0871
0000086c: JUMPI
0000086d: PUSH1 0x00
0000086f: DUP1
00000870: REVERT
00000871: JUMPDEST
00000872: POP
00000873: PUSH2 0x03fe
00000876: PUSH2 0x0880
00000879: CALLDATASIZE
0000087a: PUSH1 0x04
0000087c: PUSH2 0x3844
0000087f: JUMP
00000880: JUMPDEST
00000881: PUSH2 0x15c1
00000884: JUMP
00000885: JUMPDEST
00000886: CALLVALUE
00000887: DUP1
00000888: ISZERO
00000889: PUSH2 0x0891
0000088c: JUMPI
0000088d: PUSH1 0x00
0000088f: DUP1
00000890: REVERT
00000891: JUMPDEST
00000892: POP
00000893: PUSH2 0x03fe
00000896: PUSH2 0x08a0
00000899: CALLDATASIZE
0000089a: PUSH1 0x04
0000089c: PUSH2 0x3aa3
0000089f: JUMP
000008a0: JUMPDEST
000008a1: PUSH2 0x184e
000008a4: JUMP
000008a5: JUMPDEST
000008a6: CALLVALUE
000008a7: DUP1
000008a8: ISZERO
000008a9: PUSH2 0x08b1
000008ac: JUMPI
000008ad: PUSH1 0x00
000008af: DUP1
000008b0: REVERT
000008b1: JUMPDEST
000008b2: POP
000008b3: PUSH2 0x03fe
000008b6: PUSH2 0x08c0
000008b9: CALLDATASIZE
000008ba: PUSH1 0x04
000008bc: PUSH2 0x3624
000008bf: JUMP
000008c0: JUMPDEST
000008c1: PUSH2 0x18ec
000008c4: JUMP
000008c5: JUMPDEST
000008c6: CALLVALUE
000008c7: DUP1
000008c8: ISZERO
000008c9: PUSH2 0x08d1
000008cc: JUMPI
000008cd: PUSH1 0x00
000008cf: DUP1
000008d0: REVERT
000008d1: JUMPDEST
000008d2: POP
000008d3: PUSH2 0x03d3
000008d6: PUSH32 0x000000000000000000000000024475619e5d37cf7b5b445e943dbeb7edd2f408
000008f7: DUP2
000008f8: JUMP
000008f9: JUMPDEST
000008fa: CALLVALUE
000008fb: DUP1
000008fc: ISZERO
000008fd: PUSH2 0x0905
00000900: JUMPI
00000901: PUSH1 0x00
00000903: DUP1
00000904: REVERT
00000905: JUMPDEST
00000906: POP
00000907: PUSH2 0x03fe
0000090a: PUSH2 0x0914
0000090d: CALLDATASIZE
0000090e: PUSH1 0x04
00000910: PUSH2 0x37ff
00000913: JUMP
00000914: JUMPDEST
00000915: PUSH2 0x192c
00000918: JUMP
00000919: JUMPDEST
0000091a: CALLVALUE
0000091b: DUP1
0000091c: ISZERO
0000091d: PUSH2 0x0925
00000920: JUMPI
00000921: PUSH1 0x00
00000923: DUP1
00000924: REVERT
00000925: JUMPDEST
00000926: POP
00000927: PUSH2 0x0495
0000092a: PUSH1 0x22
0000092c: SLOAD
0000092d: DUP2
0000092e: JUMP
0000092f: JUMPDEST
00000930: CALLVALUE
00000931: DUP1
00000932: ISZERO
00000933: PUSH2 0x093b
00000936: JUMPI
00000937: PUSH1 0x00
00000939: DUP1
0000093a: REVERT
0000093b: JUMPDEST
0000093c: POP
0000093d: PUSH2 0x0495
00000940: PUSH2 0x094a
00000943: CALLDATASIZE
00000944: PUSH1 0x04
00000946: PUSH2 0x3624
00000949: JUMP
0000094a: JUMPDEST
0000094b: PUSH2 0x19fd
0000094e: JUMP
0000094f: JUMPDEST
00000950: CALLVALUE
00000951: DUP1
00000952: ISZERO
00000953: PUSH2 0x095b
00000956: JUMPI
00000957: PUSH1 0x00
00000959: DUP1
0000095a: REVERT
0000095b: JUMPDEST
0000095c: POP
0000095d: PUSH2 0x0495
00000960: PUSH2 0x096a
00000963: CALLDATASIZE
00000964: PUSH1 0x04
00000966: PUSH2 0x3624
00000969: JUMP
0000096a: JUMPDEST
0000096b: PUSH2 0x1a1e
0000096e: JUMP
0000096f: JUMPDEST
00000970: CALLVALUE
00000971: DUP1
00000972: ISZERO
00000973: PUSH2 0x097b
00000976: JUMPI
00000977: PUSH1 0x00
00000979: DUP1
0000097a: REVERT
0000097b: JUMPDEST
0000097c: POP
0000097d: PUSH2 0x039c
00000980: PUSH2 0x1a2e
00000983: JUMP
00000984: JUMPDEST
00000985: CALLVALUE
00000986: DUP1
00000987: ISZERO
00000988: PUSH2 0x0990
0000098b: JUMPI
0000098c: PUSH1 0x00
0000098e: DUP1
0000098f: REVERT
00000990: JUMPDEST
00000991: POP
00000992: PUSH2 0x03fe
00000995: PUSH2 0x1a8d
00000998: JUMP
00000999: JUMPDEST
0000099a: CALLVALUE
0000099b: DUP1
0000099c: ISZERO
0000099d: PUSH2 0x09a5
000009a0: JUMPI
000009a1: PUSH1 0x00
000009a3: DUP1
000009a4: REVERT
000009a5: JUMPDEST
000009a6: POP
000009a7: PUSH2 0x09ae
000009aa: PUSH2 0x1acd
000009ad: JUMP
000009ae: JUMPDEST
000009af: PUSH1 0x40
000009b1: DUP1
000009b2: MLOAD
000009b3: PUSH1 0x01
000009b5: PUSH1 0x01
000009b7: PUSH1 0xa0
000009b9: SHL
000009ba: SUB
000009bb: SWAP1
000009bc: SWAP4
000009bd: AND
000009be: DUP4
000009bf: MSTORE
000009c0: PUSH6 0xffffffffffff
000009c7: SWAP1
000009c8: SWAP2
000009c9: AND
000009ca: PUSH1 0x20
000009cc: DUP4
000009cd: ADD
000009ce: MSTORE
000009cf: ADD
000009d0: PUSH2 0x0381
000009d3: JUMP
000009d4: JUMPDEST
000009d5: CALLVALUE
000009d6: DUP1
000009d7: ISZERO
000009d8: PUSH2 0x09e0
000009db: JUMPI
000009dc: PUSH1 0x00
000009de: DUP1
000009df: REVERT
000009e0: JUMPDEST
000009e1: POP
000009e2: PUSH2 0x03fe
000009e5: PUSH2 0x09ef
000009e8: CALLDATASIZE
000009e9: PUSH1 0x04
000009eb: PUSH2 0x3764
000009ee: JUMP
000009ef: JUMPDEST
000009f0: PUSH2 0x1aee
000009f3: JUMP
000009f4: JUMPDEST
000009f5: CALLVALUE
000009f6: DUP1
000009f7: ISZERO
000009f8: PUSH2 0x0a00
000009fb: JUMPI
000009fc: PUSH1 0x00
000009fe: DUP1
000009ff: REVERT
00000a00: JUMPDEST
00000a01: POP
00000a02: PUSH2 0x03fe
00000a05: PUSH2 0x1b16
00000a08: JUMP
00000a09: JUMPDEST
00000a0a: CALLVALUE
00000a0b: DUP1
00000a0c: ISZERO
00000a0d: PUSH2 0x0a15
00000a10: JUMPI
00000a11: PUSH1 0x00
00000a13: DUP1
00000a14: REVERT
00000a15: JUMPDEST
00000a16: POP
00000a17: PUSH2 0x0495
00000a1a: PUSH2 0x0a24
00000a1d: CALLDATASIZE
00000a1e: PUSH1 0x04
00000a20: PUSH2 0x3624
00000a23: JUMP
00000a24: JUMPDEST
00000a25: PUSH2 0x1b29
00000a28: JUMP
00000a29: JUMPDEST
00000a2a: CALLVALUE
00000a2b: DUP1
00000a2c: ISZERO
00000a2d: PUSH2 0x0a35
00000a30: JUMPI
00000a31: PUSH1 0x00
00000a33: DUP1
00000a34: REVERT
00000a35: JUMPDEST
00000a36: POP
00000a37: PUSH2 0x0495
00000a3a: PUSH2 0x0a44
00000a3d: CALLDATASIZE
00000a3e: PUSH1 0x04
00000a40: PUSH2 0x3624
00000a43: JUMP
00000a44: JUMPDEST
00000a45: PUSH2 0x1b39
00000a48: JUMP
00000a49: JUMPDEST
00000a4a: CALLVALUE
00000a4b: DUP1
00000a4c: ISZERO
00000a4d: PUSH2 0x0a55
00000a50: JUMPI
00000a51: PUSH1 0x00
00000a53: DUP1
00000a54: REVERT
00000a55: JUMPDEST
00000a56: POP
00000a57: PUSH2 0x0495
00000a5a: PUSH1 0x00
00000a5c: DUP1
00000a5d: MLOAD
00000a5e: PUSH1 0x20
00000a60: PUSH2 0x3e6f
00000a63: DUP4
00000a64: CODECOPY
00000a65: DUP2
00000a66: MLOAD
00000a67: SWAP2
00000a68: MSTORE
00000a69: DUP2
00000a6a: JUMP
00000a6b: JUMPDEST
00000a6c: CALLVALUE
00000a6d: DUP1
00000a6e: ISZERO
00000a6f: PUSH2 0x0a77
00000a72: JUMPI
00000a73: PUSH1 0x00
00000a75: DUP1
00000a76: REVERT
00000a77: JUMPDEST
00000a78: POP
00000a79: PUSH2 0x03fe
00000a7c: PUSH2 0x0a86
00000a7f: CALLDATASIZE
00000a80: PUSH1 0x04
00000a82: PUSH2 0x39bc
00000a85: JUMP
00000a86: JUMPDEST
00000a87: PUSH2 0x1b49
00000a8a: JUMP
00000a8b: JUMPDEST
00000a8c: CALLVALUE
00000a8d: DUP1
00000a8e: ISZERO
00000a8f: PUSH2 0x0a97
00000a92: JUMPI
00000a93: PUSH1 0x00
00000a95: DUP1
00000a96: REVERT
00000a97: JUMPDEST
00000a98: POP
00000a99: PUSH2 0x03fe
00000a9c: PUSH2 0x0aa6
00000a9f: CALLDATASIZE
00000aa0: PUSH1 0x04
00000aa2: PUSH2 0x39bc
00000aa5: JUMP
00000aa6: JUMPDEST
00000aa7: PUSH2 0x1be0
00000aaa: JUMP
00000aab: JUMPDEST
00000aac: PUSH1 0x00
00000aae: PUSH1 0x01
00000ab0: PUSH1 0x01
00000ab2: PUSH1 0xe0
00000ab4: SHL
00000ab5: SUB
00000ab6: NOT
00000ab7: DUP3
00000ab8: AND
00000ab9: PUSH4 0x18a4c3c3
00000abe: PUSH1 0xe1
00000ac0: SHL
00000ac1: EQ
00000ac2: DUP1
00000ac3: PUSH2 0x0ad0
00000ac6: JUMPI
00000ac7: POP
00000ac8: PUSH2 0x0ad0
00000acb: DUP3
00000acc: PUSH2 0x1c28
00000acf: JUMP
00000ad0: JUMPDEST
00000ad1: SWAP3
00000ad2: SWAP2
00000ad3: POP
00000ad4: POP
00000ad5: JUMP
00000ad6: JUMPDEST
00000ad7: PUSH1 0x07
00000ad9: DUP2
00000ada: DUP2
00000adb: SLOAD
00000adc: DUP2
00000add: LT
00000ade: PUSH2 0x0ae6
00000ae1: JUMPI
00000ae2: PUSH1 0x00
00000ae4: DUP1
00000ae5: REVERT
00000ae6: JUMPDEST
00000ae7: PUSH1 0x00
00000ae9: SWAP2
00000aea: DUP3
00000aeb: MSTORE
00000aec: PUSH1 0x20
00000aee: SWAP1
00000aef: SWAP2
00000af0: KECCAK256
00000af1: ADD
00000af2: SLOAD
00000af3: PUSH1 0x01
00000af5: PUSH1 0x01
00000af7: PUSH1 0xa0
00000af9: SHL
00000afa: SUB
00000afb: AND
00000afc: SWAP1
00000afd: POP
00000afe: DUP2
00000aff: JUMP
00000b00: JUMPDEST
00000b01: PUSH32 0x00000000000000000000000000000000000000000000000000000000686ff190
00000b22: TIMESTAMP
00000b23: LT
00000b24: ISZERO
00000b25: PUSH2 0x0b41
00000b28: JUMPI
00000b29: PUSH1 0x40
00000b2b: MLOAD
00000b2c: PUSH4 0x16851a37
00000b31: PUSH1 0xe1
00000b33: SHL
00000b34: DUP2
00000b35: MSTORE
00000b36: PUSH1 0x04
00000b38: ADD
00000b39: PUSH1 0x40
00000b3b: MLOAD
00000b3c: DUP1
00000b3d: SWAP2
00000b3e: SUB
00000b3f: SWAP1
00000b40: REVERT
00000b41: JUMPDEST
00000b42: DUP3
00000b43: TIMESTAMP
00000b44: GT
00000b45: ISZERO
00000b46: PUSH2 0x0b62
00000b49: JUMPI
00000b4a: PUSH1 0x40
00000b4c: MLOAD
00000b4d: PUSH4 0x4171a5bf
00000b52: PUSH1 0xe0
00000b54: SHL
00000b55: DUP2
00000b56: MSTORE
00000b57: PUSH1 0x04
00000b59: ADD
00000b5a: PUSH1 0x40
00000b5c: MLOAD
00000b5d: DUP1
00000b5e: SWAP2
00000b5f: SUB
00000b60: SWAP1
00000b61: REVERT
00000b62: JUMPDEST
00000b63: PUSH1 0x07
00000b65: SLOAD
00000b66: DUP7
00000b67: LT
00000b68: PUSH2 0x0b84
00000b6b: JUMPI
00000b6c: PUSH1 0x40
00000b6e: MLOAD
00000b6f: PUSH4 0x63df8171
00000b74: PUSH1 0xe0
00000b76: SHL
00000b77: DUP2
00000b78: MSTORE
00000b79: PUSH1 0x04
00000b7b: ADD
00000b7c: PUSH1 0x40
00000b7e: MLOAD
00000b7f: DUP1
00000b80: SWAP2
00000b81: SUB
00000b82: SWAP1
00000b83: REVERT
00000b84: JUMPDEST
00000b85: PUSH1 0x00
00000b87: PUSH1 0x05
00000b89: DUP8
00000b8a: DUP2
00000b8b: SLOAD
00000b8c: DUP2
00000b8d: LT
00000b8e: PUSH2 0x0b99
00000b91: JUMPI
00000b92: PUSH2 0x0b99
00000b95: PUSH2 0x3b52
00000b98: JUMP
00000b99: JUMPDEST
00000b9a: SWAP1
00000b9b: PUSH1 0x00
00000b9d: MSTORE
00000b9e: PUSH1 0x20
00000ba0: PUSH1 0x00
00000ba2: KECCAK256
00000ba3: ADD
00000ba4: SLOAD
00000ba5: SWAP1
00000ba6: POP
00000ba7: DUP1
00000ba8: DUP9
00000ba9: LT
00000baa: ISZERO
00000bab: PUSH2 0x0bc7
00000bae: JUMPI
00000baf: PUSH1 0x40
00000bb1: MLOAD
00000bb2: PUSH4 0x3a4d1f31
00000bb7: PUSH1 0xe2
00000bb9: SHL
00000bba: DUP2
00000bbb: MSTORE
00000bbc: PUSH1 0x04
00000bbe: ADD
00000bbf: PUSH1 0x40
00000bc1: MLOAD
00000bc2: DUP1
00000bc3: SWAP2
00000bc4: SUB
00000bc5: SWAP1
00000bc6: REVERT
00000bc7: JUMPDEST
00000bc8: PUSH1 0x00
00000bca: PUSH1 0x07
00000bcc: DUP9
00000bcd: DUP2
00000bce: SLOAD
00000bcf: DUP2
00000bd0: LT
00000bd1: PUSH2 0x0bdc
00000bd4: JUMPI
00000bd5: PUSH2 0x0bdc
00000bd8: PUSH2 0x3b52
00000bdb: JUMP
00000bdc: JUMPDEST
00000bdd: SWAP1
00000bde: PUSH1 0x00
00000be0: MSTORE
00000be1: PUSH1 0x20
00000be3: PUSH1 0x00
00000be5: KECCAK256
00000be6: ADD
00000be7: PUSH1 0x00
00000be9: SWAP1
00000bea: SLOAD
00000beb: SWAP1
00000bec: PUSH2 0x0100
00000bef: EXP
00000bf0: SWAP1
00000bf1: DIV
00000bf2: PUSH1 0x01
00000bf4: PUSH1 0x01
00000bf6: PUSH1 0xa0
00000bf8: SHL
00000bf9: SUB
00000bfa: AND
00000bfb: SWAP1
00000bfc: POP
00000bfd: PUSH1 0x00
00000bff: DUP3
00000c00: PUSH32 0x000000000000000000000000024475619e5d37cf7b5b445e943dbeb7edd2f408
00000c21: PUSH1 0x01
00000c23: PUSH1 0x01
00000c25: PUSH1 0xa0
00000c27: SHL
00000c28: SUB
00000c29: AND
00000c2a: PUSH4 0x313ce567
00000c2f: PUSH1 0x40
00000c31: MLOAD
00000c32: DUP2
00000c33: PUSH4 0xffffffff
00000c38: AND
00000c39: PUSH1 0xe0
00000c3b: SHL
00000c3c: DUP2
00000c3d: MSTORE
00000c3e: PUSH1 0x04
00000c40: ADD
00000c41: PUSH1 0x20
00000c43: PUSH1 0x40
00000c45: MLOAD
00000c46: DUP1
00000c47: DUP4
00000c48: SUB
00000c49: DUP2
00000c4a: DUP7
00000c4b: GAS
00000c4c: STATICCALL
00000c4d: ISZERO
00000c4e: DUP1
00000c4f: ISZERO
00000c50: PUSH2 0x0c5d
00000c53: JUMPI
00000c54: RETURNDATASIZE
00000c55: PUSH1 0x00
00000c57: DUP1
00000c58: RETURNDATACOPY
00000c59: RETURNDATASIZE
00000c5a: PUSH1 0x00
00000c5c: REVERT
00000c5d: JUMPDEST
00000c5e: POP
00000c5f: POP
00000c60: POP
00000c61: POP
00000c62: PUSH1 0x40
00000c64: MLOAD
00000c65: RETURNDATASIZE
00000c66: PUSH1 0x1f
00000c68: NOT
00000c69: PUSH1 0x1f
00000c6b: DUP3
00000c6c: ADD
00000c6d: AND
00000c6e: DUP3
00000c6f: ADD
00000c70: DUP1
00000c71: PUSH1 0x40
00000c73: MSTORE
00000c74: POP
00000c75: DUP2
00000c76: ADD
00000c77: SWAP1
00000c78: PUSH2 0x0c81
00000c7b: SWAP2
00000c7c: SWAP1
00000c7d: PUSH2 0x3b68
00000c80: JUMP
00000c81: JUMPDEST
00000c82: PUSH2 0x0c8c
00000c85: SWAP1
00000c86: PUSH1 0x0a
00000c88: PUSH2 0x3c88
00000c8b: JUMP
00000c8c: JUMPDEST
00000c8d: PUSH2 0x0c96
00000c90: SWAP1
00000c91: DUP13
00000c92: PUSH2 0x3c97
00000c95: JUMP
00000c96: JUMPDEST
00000c97: PUSH2 0x0ca0
00000c9a: SWAP2
00000c9b: SWAP1
00000c9c: PUSH2 0x3cae
00000c9f: JUMP
00000ca0: JUMPDEST
00000ca1: SWAP1
00000ca2: POP
00000ca3: PUSH2 0x0cb3
00000ca6: CALLER
00000ca7: DUP10
00000ca8: DUP4
00000ca9: DUP14
00000caa: DUP7
00000cab: DUP13
00000cac: DUP13
00000cad: DUP13
00000cae: DUP13
00000caf: PUSH2 0x1c5d
00000cb2: JUMP
00000cb3: JUMPDEST
00000cb4: POP
00000cb5: POP
00000cb6: POP
00000cb7: POP
00000cb8: POP
00000cb9: POP
00000cba: POP
00000cbb: POP
00000cbc: POP
00000cbd: POP
00000cbe: JUMP
00000cbf: JUMPDEST
00000cc0: PUSH1 0x00
00000cc2: PUSH2 0x0cca
00000cc5: DUP2
00000cc6: PUSH2 0x1e8a
00000cc9: JUMP
00000cca: JUMPDEST
00000ccb: PUSH2 0x0cd2
00000cce: PUSH2 0x1e94
00000cd1: JUMP
00000cd2: JUMPDEST
00000cd3: POP
00000cd4: JUMP
00000cd5: JUMPDEST
00000cd6: PUSH1 0x00
00000cd8: PUSH2 0x0ce0
00000cdb: DUP2
00000cdc: PUSH2 0x1e8a
00000cdf: JUMP
00000ce0: JUMPDEST
00000ce1: PUSH1 0x21
00000ce3: DUP3
00000ce4: SWAP1
00000ce5: SSTORE
00000ce6: PUSH1 0x40
00000ce8: MLOAD
00000ce9: DUP3
00000cea: DUP2
00000ceb: MSTORE
00000cec: PUSH32 0xc336f0dd868975e73375136265847e85dffa2cbbfc9823b81c55d603b368847a
00000d0d: SWAP1
00000d0e: PUSH1 0x20
00000d10: ADD
00000d11: JUMPDEST
00000d12: PUSH1 0x40
00000d14: MLOAD
00000d15: DUP1
00000d16: SWAP2
00000d17: SUB
00000d18: SWAP1
00000d19: LOG1
00000d1a: POP
00000d1b: POP
00000d1c: JUMP
00000d1d: JUMPDEST
00000d1e: DUP2
00000d1f: PUSH2 0x0d3b
00000d22: JUMPI
00000d23: PUSH1 0x40
00000d25: MLOAD
00000d26: PUSH4 0x1fe1e13d
00000d2b: PUSH1 0xe1
00000d2d: SHL
00000d2e: DUP2
00000d2f: MSTORE
00000d30: PUSH1 0x04
00000d32: ADD
00000d33: PUSH1 0x40
00000d35: MLOAD
00000d36: DUP1
00000d37: SWAP2
00000d38: SUB
00000d39: SWAP1
00000d3a: REVERT
00000d3b: JUMPDEST
00000d3c: PUSH2 0x0d45
00000d3f: DUP3
00000d40: DUP3
00000d41: PUSH2 0x1ea1
00000d44: JUMP
00000d45: JUMPDEST
00000d46: POP
00000d47: POP
00000d48: JUMP
00000d49: JUMPDEST
00000d4a: PUSH1 0x1c
00000d4c: DUP2
00000d4d: PUSH1 0x04
00000d4f: DUP2
00000d50: LT
00000d51: PUSH2 0x0d59
00000d54: JUMPI
00000d55: PUSH1 0x00
00000d57: DUP1
00000d58: REVERT
00000d59: JUMPDEST
00000d5a: ADD
00000d5b: SLOAD
00000d5c: SWAP1
00000d5d: POP
00000d5e: DUP2
00000d5f: JUMP
00000d60: JUMPDEST
00000d61: DUP2
00000d62: ISZERO
00000d63: DUP1
00000d64: ISZERO
00000d65: PUSH2 0x0d7b
00000d68: JUMPI
00000d69: POP
00000d6a: PUSH1 0x02
00000d6c: SLOAD
00000d6d: PUSH1 0x01
00000d6f: PUSH1 0x01
00000d71: PUSH1 0xa0
00000d73: SHL
00000d74: SUB
00000d75: DUP3
00000d76: DUP2
00000d77: AND
00000d78: SWAP2
00000d79: AND
00000d7a: EQ
00000d7b: JUMPDEST
00000d7c: ISZERO
00000d7d: PUSH2 0x0e02
00000d80: JUMPI
00000d81: PUSH1 0x00
00000d83: DUP1
00000d84: PUSH2 0x0d8b
00000d87: PUSH2 0x1acd
00000d8a: JUMP
00000d8b: JUMPDEST
00000d8c: SWAP1
00000d8d: SWAP3
00000d8e: POP
00000d8f: SWAP1
00000d90: POP
00000d91: PUSH1 0x01
00000d93: PUSH1 0x01
00000d95: PUSH1 0xa0
00000d97: SHL
00000d98: SUB
00000d99: DUP3
00000d9a: AND
00000d9b: ISZERO
00000d9c: ISZERO
00000d9d: DUP1
00000d9e: PUSH2 0x0dad
00000da1: JUMPI
00000da2: POP
00000da3: PUSH6 0xffffffffffff
00000daa: DUP2
00000dab: AND
00000dac: ISZERO
00000dad: JUMPDEST
00000dae: DUP1
00000daf: PUSH2 0x0dc0
00000db2: JUMPI
00000db3: POP
00000db4: TIMESTAMP
00000db5: PUSH6 0xffffffffffff
00000dbc: DUP3
00000dbd: AND
00000dbe: LT
00000dbf: ISZERO
00000dc0: JUMPDEST
00000dc1: ISZERO
00000dc2: PUSH2 0x0ded
00000dc5: JUMPI
00000dc6: PUSH1 0x40
00000dc8: MLOAD
00000dc9: PUSH4 0x19ca5ebb
00000dce: PUSH1 0xe0
00000dd0: SHL
00000dd1: DUP2
00000dd2: MSTORE
00000dd3: PUSH6 0xffffffffffff
00000dda: DUP3
00000ddb: AND
00000ddc: PUSH1 0x04
00000dde: DUP3
00000ddf: ADD
00000de0: MSTORE
00000de1: PUSH1 0x24
00000de3: ADD
00000de4: JUMPDEST
00000de5: PUSH1 0x40
00000de7: MLOAD
00000de8: DUP1
00000de9: SWAP2
00000dea: SUB
00000deb: SWAP1
00000dec: REVERT
00000ded: JUMPDEST
00000dee: POP
00000def: POP
00000df0: PUSH1 0x01
00000df2: DUP1
00000df3: SLOAD
00000df4: PUSH6 0xffffffffffff
00000dfb: PUSH1 0xa0
00000dfd: SHL
00000dfe: NOT
00000dff: AND
00000e00: SWAP1
00000e01: SSTORE
00000e02: JUMPDEST
00000e03: PUSH2 0x0d45
00000e06: DUP3
00000e07: DUP3
00000e08: PUSH2 0x1ecc
00000e0b: JUMP
00000e0c: JUMPDEST
00000e0d: PUSH1 0x00
00000e0f: PUSH2 0x0e17
00000e12: DUP2
00000e13: PUSH2 0x1e8a
00000e16: JUMP
00000e17: JUMPDEST
00000e18: PUSH1 0x00
00000e1a: JUMPDEST
00000e1b: PUSH1 0x03
00000e1d: DUP2
00000e1e: LT
00000e1f: ISZERO
00000e20: PUSH2 0x0ea3
00000e23: JUMPI
00000e24: PUSH1 0x00
00000e26: JUMPDEST
00000e27: DUP4
00000e28: DUP3
00000e29: PUSH1 0x03
00000e2b: DUP2
00000e2c: LT
00000e2d: PUSH2 0x0e38
00000e30: JUMPI
00000e31: PUSH2 0x0e38
00000e34: PUSH2 0x3b52
00000e37: JUMP
00000e38: JUMPDEST
00000e39: POP
00000e3a: POP
00000e3b: PUSH1 0x04
00000e3d: DUP2
00000e3e: LT
00000e3f: ISZERO
00000e40: PUSH2 0x0e9a
00000e43: JUMPI
00000e44: PUSH3 0x0f4240
00000e48: DUP5
00000e49: DUP4
00000e4a: PUSH1 0x03
00000e4c: DUP2
00000e4d: LT
00000e4e: PUSH2 0x0e59
00000e51: JUMPI
00000e52: PUSH2 0x0e59
00000e55: PUSH2 0x3b52
00000e58: JUMP
00000e59: JUMPDEST
00000e5a: PUSH1 0x80
00000e5c: MUL
00000e5d: ADD
00000e5e: DUP3
00000e5f: PUSH1 0x04
00000e61: DUP2
00000e62: LT
00000e63: PUSH2 0x0e6e
00000e66: JUMPI
00000e67: PUSH2 0x0e6e
00000e6a: PUSH2 0x3b52
00000e6d: JUMP
00000e6e: JUMPDEST
00000e6f: PUSH1 0x20
00000e71: MUL
00000e72: ADD
00000e73: CALLDATALOAD
00000e74: GT
00000e75: ISZERO
00000e76: PUSH2 0x0e92
00000e79: JUMPI
00000e7a: PUSH1 0x40
00000e7c: MLOAD
00000e7d: PUSH4 0x5c974e3d
00000e82: PUSH1 0xe1
00000e84: SHL
00000e85: DUP2
00000e86: MSTORE
00000e87: PUSH1 0x04
00000e89: ADD
00000e8a: PUSH1 0x40
00000e8c: MLOAD
00000e8d: DUP1
00000e8e: SWAP2
00000e8f: SUB
00000e90: SWAP1
00000e91: REVERT
00000e92: JUMPDEST
00000e93: PUSH1 0x01
00000e95: ADD
00000e96: PUSH2 0x0e26
00000e99: JUMP
00000e9a: JUMPDEST
00000e9b: POP
00000e9c: PUSH1 0x01
00000e9e: ADD
00000e9f: PUSH2 0x0e1a
00000ea2: JUMP
00000ea3: JUMPDEST
00000ea4: POP
00000ea5: PUSH2 0x0eb1
00000ea8: PUSH1 0x0c
00000eaa: DUP4
00000eab: PUSH1 0x03
00000ead: PUSH2 0x34b2
00000eb0: JUMP
00000eb1: JUMPDEST
00000eb2: POP
00000eb3: PUSH32 0xa4bbfe7be6fa22e38e905e9631ab066c34ba5e6ebbac33eef843aef33aa1d8a4
00000ed4: DUP3
00000ed5: PUSH1 0x40
00000ed7: MLOAD
00000ed8: PUSH2 0x0d11
00000edb: SWAP2
00000edc: SWAP1
00000edd: PUSH2 0x3cd0
00000ee0: JUMP
00000ee1: JUMPDEST
00000ee2: PUSH32 0x00000000000000000000000000000000000000000000000000000000686ff190
00000f03: TIMESTAMP
00000f04: LT
00000f05: ISZERO
00000f06: PUSH2 0x0f22
00000f09: JUMPI
00000f0a: PUSH1 0x40
00000f0c: MLOAD
00000f0d: PUSH4 0x16851a37
00000f12: PUSH1 0xe1
00000f14: SHL
00000f15: DUP2
00000f16: MSTORE
00000f17: PUSH1 0x04
00000f19: ADD
00000f1a: PUSH1 0x40
00000f1c: MLOAD
00000f1d: DUP1
00000f1e: SWAP2
00000f1f: SUB
00000f20: SWAP1
00000f21: REVERT
00000f22: JUMPDEST
00000f23: DUP3
00000f24: TIMESTAMP
00000f25: GT
00000f26: ISZERO
00000f27: PUSH2 0x0f43
00000f2a: JUMPI
00000f2b: PUSH1 0x40
00000f2d: MLOAD
00000f2e: PUSH4 0x4171a5bf
00000f33: PUSH1 0xe0
00000f35: SHL
00000f36: DUP2
00000f37: MSTORE
00000f38: PUSH1 0x04
00000f3a: ADD
00000f3b: PUSH1 0x40
00000f3d: MLOAD
00000f3e: DUP1
00000f3f: SWAP2
00000f40: SUB
00000f41: SWAP1
00000f42: REVERT
00000f43: JUMPDEST
00000f44: PUSH1 0x07
00000f46: SLOAD
00000f47: DUP7
00000f48: LT
00000f49: PUSH2 0x0f65
00000f4c: JUMPI
00000f4d: PUSH1 0x40
00000f4f: MLOAD
00000f50: PUSH4 0x63df8171
00000f55: PUSH1 0xe0
00000f57: SHL
00000f58: DUP2
00000f59: MSTORE
00000f5a: PUSH1 0x04
00000f5c: ADD
00000f5d: PUSH1 0x40
00000f5f: MLOAD
00000f60: DUP1
00000f61: SWAP2
00000f62: SUB
00000f63: SWAP1
00000f64: REVERT
00000f65: JUMPDEST
00000f66: PUSH1 0x00
00000f68: PUSH1 0x07
00000f6a: DUP8
00000f6b: DUP2
00000f6c: SLOAD
00000f6d: DUP2
00000f6e: LT
00000f6f: PUSH2 0x0f7a
00000f72: JUMPI
00000f73: PUSH2 0x0f7a
00000f76: PUSH2 0x3b52
00000f79: JUMP
00000f7a: JUMPDEST
00000f7b: PUSH1 0x00
00000f7d: SWAP2
00000f7e: DUP3
00000f7f: MSTORE
00000f80: PUSH1 0x20
00000f82: SWAP1
00000f83: SWAP2
00000f84: KECCAK256
00000f85: ADD
00000f86: SLOAD
00000f87: PUSH1 0x01
00000f89: PUSH1 0x01
00000f8b: PUSH1 0xa0
00000f8d: SHL
00000f8e: SUB
00000f8f: AND
00000f90: SWAP1
00000f91: POP
00000f92: PUSH1 0x12
00000f94: DUP2
00000f95: ISZERO
00000f96: PUSH2 0x1001
00000f99: JUMPI
00000f9a: DUP2
00000f9b: PUSH1 0x01
00000f9d: PUSH1 0x01
00000f9f: PUSH1 0xa0
00000fa1: SHL
00000fa2: SUB
00000fa3: AND
00000fa4: PUSH4 0x313ce567
00000fa9: PUSH1 0x40
00000fab: MLOAD
00000fac: DUP2
00000fad: PUSH4 0xffffffff
00000fb2: AND
00000fb3: PUSH1 0xe0
00000fb5: SHL
00000fb6: DUP2
00000fb7: MSTORE
00000fb8: PUSH1 0x04
00000fba: ADD
00000fbb: PUSH1 0x20
00000fbd: PUSH1 0x40
00000fbf: MLOAD
00000fc0: DUP1
00000fc1: DUP4
00000fc2: SUB
00000fc3: DUP2
00000fc4: DUP7
00000fc5: GAS
00000fc6: STATICCALL
00000fc7: ISZERO
00000fc8: DUP1
00000fc9: ISZERO
00000fca: PUSH2 0x0fd7
00000fcd: JUMPI
00000fce: RETURNDATASIZE
00000fcf: PUSH1 0x00
00000fd1: DUP1
00000fd2: RETURNDATACOPY
00000fd3: RETURNDATASIZE
00000fd4: PUSH1 0x00
00000fd6: REVERT
00000fd7: JUMPDEST
00000fd8: POP
00000fd9: POP
00000fda: POP
00000fdb: POP
00000fdc: PUSH1 0x40
00000fde: MLOAD
00000fdf: RETURNDATASIZE
00000fe0: PUSH1 0x1f
00000fe2: NOT
00000fe3: PUSH1 0x1f
00000fe5: DUP3
00000fe6: ADD
00000fe7: AND
00000fe8: DUP3
00000fe9: ADD
00000fea: DUP1
00000feb: PUSH1 0x40
00000fed: MSTORE
00000fee: POP
00000fef: DUP2
00000ff0: ADD
00000ff1: SWAP1
00000ff2: PUSH2 0x0ffb
00000ff5: SWAP2
00000ff6: SWAP1
00000ff7: PUSH2 0x3b68
00000ffa: JUMP
00000ffb: JUMPDEST
00000ffc: PUSH1 0xff
00000ffe: AND
00000fff: SWAP1
00001000: POP
00001001: JUMPDEST
00001002: DUP1
00001003: PUSH32 0x000000000000000000000000024475619e5d37cf7b5b445e943dbeb7edd2f408
00001024: PUSH1 0x01
00001026: PUSH1 0x01
00001028: PUSH1 0xa0
0000102a: SHL
0000102b: SUB
0000102c: AND
0000102d: PUSH4 0x313ce567
00001032: PUSH1 0x40
00001034: MLOAD
00001035: DUP2
00001036: PUSH4 0xffffffff
0000103b: AND
0000103c: PUSH1 0xe0
0000103e: SHL
0000103f: DUP2
00001040: MSTORE
00001041: PUSH1 0x04
00001043: ADD
00001044: PUSH1 0x20
00001046: PUSH1 0x40
00001048: MLOAD
00001049: DUP1
0000104a: DUP4
0000104b: SUB
0000104c: DUP2
0000104d: DUP7
0000104e: GAS
0000104f: STATICCALL
00001050: ISZERO
00001051: DUP1
00001052: ISZERO
00001053: PUSH2 0x1060
00001056: JUMPI
00001057: RETURNDATASIZE
00001058: PUSH1 0x00
0000105a: DUP1
0000105b: RETURNDATACOPY
0000105c: RETURNDATASIZE
0000105d: PUSH1 0x00
0000105f: REVERT
00001060: JUMPDEST
00001061: POP
00001062: POP
00001063: POP
00001064: POP
00001065: PUSH1 0x40
00001067: MLOAD
00001068: RETURNDATASIZE
00001069: PUSH1 0x1f
0000106b: NOT
0000106c: PUSH1 0x1f
0000106e: DUP3
0000106f: ADD
00001070: AND
00001071: DUP3
00001072: ADD
00001073: DUP1
00001074: PUSH1 0x40
00001076: MSTORE
00001077: POP
00001078: DUP2
00001079: ADD
0000107a: SWAP1
0000107b: PUSH2 0x1084
0000107e: SWAP2
0000107f: SWAP1
00001080: PUSH2 0x3b68
00001083: JUMP
00001084: JUMPDEST
00001085: PUSH1 0xff
00001087: AND
00001088: PUSH2 0x1091
0000108b: SWAP2
0000108c: SWAP1
0000108d: PUSH2 0x3d04
00001090: JUMP
00001091: JUMPDEST
00001092: PUSH2 0x109c
00001095: SWAP1
00001096: PUSH1 0x0a
00001098: PUSH2 0x3d17
0000109b: JUMP
0000109c: JUMPDEST
0000109d: DUP10
0000109e: LT
0000109f: ISZERO
000010a0: PUSH2 0x10bc
000010a3: JUMPI
000010a4: PUSH1 0x40
000010a6: MLOAD
000010a7: PUSH4 0x1c26df2d
000010ac: PUSH1 0xe1
000010ae: SHL
000010af: DUP2
000010b0: MSTORE
000010b1: PUSH1 0x04
000010b3: ADD
000010b4: PUSH1 0x40
000010b6: MLOAD
000010b7: DUP1
000010b8: SWAP2
000010b9: SUB
000010ba: SWAP1
000010bb: REVERT
000010bc: JUMPDEST
000010bd: PUSH1 0x00
000010bf: PUSH32 0x000000000000000000000000024475619e5d37cf7b5b445e943dbeb7edd2f408
000010e0: PUSH1 0x01
000010e2: PUSH1 0x01
000010e4: PUSH1 0xa0
000010e6: SHL
000010e7: SUB
000010e8: AND
000010e9: PUSH4 0x313ce567
000010ee: PUSH1 0x40
000010f0: MLOAD
000010f1: DUP2
000010f2: PUSH4 0xffffffff
000010f7: AND
000010f8: PUSH1 0xe0
000010fa: SHL
000010fb: DUP2
000010fc: MSTORE
000010fd: PUSH1 0x04
000010ff: ADD
00001100: PUSH1 0x20
00001102: PUSH1 0x40
00001104: MLOAD
00001105: DUP1
00001106: DUP4
00001107: SUB
00001108: DUP2
00001109: DUP7
0000110a: GAS
0000110b: STATICCALL
0000110c: ISZERO
0000110d: DUP1
0000110e: ISZERO
0000110f: PUSH2 0x111c
00001112: JUMPI
00001113: RETURNDATASIZE
00001114: PUSH1 0x00
00001116: DUP1
00001117: RETURNDATACOPY
00001118: RETURNDATASIZE
00001119: PUSH1 0x00
0000111b: REVERT
0000111c: JUMPDEST
0000111d: POP
0000111e: POP
0000111f: POP
00001120: POP
00001121: PUSH1 0x40
00001123: MLOAD
00001124: RETURNDATASIZE
00001125: PUSH1 0x1f
00001127: NOT
00001128: PUSH1 0x1f
0000112a: DUP3
0000112b: ADD
0000112c: AND
0000112d: DUP3
0000112e: ADD
0000112f: DUP1
00001130: PUSH1 0x40
00001132: MSTORE
00001133: POP
00001134: DUP2
00001135: ADD
00001136: SWAP1
00001137: PUSH2 0x1140
0000113a: SWAP2
0000113b: SWAP1
0000113c: PUSH2 0x3b68
0000113f: JUMP
00001140: JUMPDEST
00001141: PUSH2 0x114b
00001144: SWAP1
00001145: PUSH1 0x0a
00001147: PUSH2 0x3c88
0000114a: JUMP
0000114b: JUMPDEST
0000114c: DUP11
0000114d: PUSH1 0x05
0000114f: DUP12
00001150: DUP2
00001151: SLOAD
00001152: DUP2
00001153: LT
00001154: PUSH2 0x115f
00001157: JUMPI
00001158: PUSH2 0x115f
0000115b: PUSH2 0x3b52
0000115e: JUMP
0000115f: JUMPDEST
00001160: SWAP1
00001161: PUSH1 0x00
00001163: MSTORE
00001164: PUSH1 0x20
00001166: PUSH1 0x00
00001168: KECCAK256
00001169: ADD
0000116a: SLOAD
0000116b: PUSH2 0x1174
0000116e: SWAP2
0000116f: SWAP1
00001170: PUSH2 0x3c97
00001173: JUMP
00001174: JUMPDEST
00001175: PUSH2 0x117e
00001178: SWAP2
00001179: SWAP1
0000117a: PUSH2 0x3cae
0000117d: JUMP
0000117e: JUMPDEST
0000117f: SWAP1
00001180: POP
00001181: PUSH2 0x0cb3
00001184: CALLER
00001185: DUP10
00001186: DUP13
00001187: DUP5
00001188: DUP8
00001189: DUP13
0000118a: DUP13
0000118b: DUP13
0000118c: DUP13
0000118d: PUSH2 0x1c5d
00001190: JUMP
00001191: JUMPDEST
00001192: PUSH1 0x00
00001194: PUSH2 0x119c
00001197: DUP2
00001198: PUSH2 0x1e8a
0000119b: JUMP
0000119c: JUMPDEST
0000119d: PUSH1 0x01
0000119f: PUSH1 0x01
000011a1: PUSH1 0xa0
000011a3: SHL
000011a4: SUB
000011a5: DUP5
000011a6: AND
000011a7: PUSH2 0x1224
000011aa: JUMPI
000011ab: PUSH1 0x00
000011ad: DUP4
000011ae: PUSH1 0x01
000011b0: PUSH1 0x01
000011b2: PUSH1 0xa0
000011b4: SHL
000011b5: SUB
000011b6: AND
000011b7: DUP4
000011b8: PUSH1 0x40
000011ba: MLOAD
000011bb: PUSH1 0x00
000011bd: PUSH1 0x40
000011bf: MLOAD
000011c0: DUP1
000011c1: DUP4
000011c2: SUB
000011c3: DUP2
000011c4: DUP6
000011c5: DUP8
000011c6: GAS
000011c7: CALL
000011c8: SWAP3
000011c9: POP
000011ca: POP
000011cb: POP
000011cc: RETURNDATASIZE
000011cd: DUP1
000011ce: PUSH1 0x00
000011d0: DUP2
000011d1: EQ
000011d2: PUSH2 0x11f7
000011d5: JUMPI
000011d6: PUSH1 0x40
000011d8: MLOAD
000011d9: SWAP2
000011da: POP
000011db: PUSH1 0x1f
000011dd: NOT
000011de: PUSH1 0x3f
000011e0: RETURNDATASIZE
000011e1: ADD
000011e2: AND
000011e3: DUP3
000011e4: ADD
000011e5: PUSH1 0x40
000011e7: MSTORE
000011e8: RETURNDATASIZE
000011e9: DUP3
000011ea: MSTORE
000011eb: RETURNDATASIZE
000011ec: PUSH1 0x00
000011ee: PUSH1 0x20
000011f0: DUP5
000011f1: ADD
000011f2: RETURNDATACOPY
000011f3: PUSH2 0x11fc
000011f6: JUMP
000011f7: JUMPDEST
000011f8: PUSH1 0x60
000011fa: SWAP2
000011fb: POP
000011fc: JUMPDEST
000011fd: POP
000011fe: POP
000011ff: SWAP1
00001200: POP
00001201: DUP1
00001202: PUSH2 0x121e
00001205: JUMPI
00001206: PUSH1 0x40
00001208: MLOAD
00001209: PUSH4 0x4c67134d
0000120e: PUSH1 0xe1
00001210: SHL
00001211: DUP2
00001212: MSTORE
00001213: PUSH1 0x04
00001215: ADD
00001216: PUSH1 0x40
00001218: MLOAD
00001219: DUP1
0000121a: SWAP2
0000121b: SUB
0000121c: SWAP1
0000121d: REVERT
0000121e: JUMPDEST
0000121f: POP
00001220: PUSH2 0x1238
00001223: JUMP
00001224: JUMPDEST
00001225: PUSH2 0x1238
00001228: PUSH1 0x01
0000122a: PUSH1 0x01
0000122c: PUSH1 0xa0
0000122e: SHL
0000122f: SUB
00001230: DUP6
00001231: AND
00001232: DUP5
00001233: DUP5
00001234: PUSH2 0x1f04
00001237: JUMP
00001238: JUMPDEST
00001239: PUSH1 0x40
0000123b: DUP1
0000123c: MLOAD
0000123d: PUSH1 0x01
0000123f: PUSH1 0x01
00001241: PUSH1 0xa0
00001243: SHL
00001244: SUB
00001245: DUP1
00001246: DUP8
00001247: AND
00001248: DUP3
00001249: MSTORE
0000124a: DUP6
0000124b: AND
0000124c: PUSH1 0x20
0000124e: DUP3
0000124f: ADD
00001250: MSTORE
00001251: SWAP1
00001252: DUP2
00001253: ADD
00001254: DUP4
00001255: SWAP1
00001256: MSTORE
00001257: PUSH32 0x6337ed398c0e8467698c581374fdce4db14922df487b5a39483079f5f59b60a4
00001278: SWAP1
00001279: PUSH1 0x60
0000127b: ADD
0000127c: PUSH1 0x40
0000127e: MLOAD
0000127f: DUP1
00001280: SWAP2
00001281: SUB
00001282: SWAP1
00001283: LOG1
00001284: POP
00001285: POP
00001286: POP
00001287: POP
00001288: JUMP
00001289: JUMPDEST
0000128a: PUSH1 0x00
0000128c: PUSH2 0x1294
0000128f: DUP2
00001290: PUSH2 0x1e8a
00001293: JUMP
00001294: JUMPDEST
00001295: PUSH2 0x0d45
00001298: DUP3
00001299: PUSH2 0x1f63
0000129c: JUMP
0000129d: JUMPDEST
0000129e: PUSH1 0x00
000012a0: PUSH2 0x12a8
000012a3: DUP2
000012a4: PUSH2 0x1e8a
000012a7: JUMP
000012a8: JUMPDEST
000012a9: PUSH2 0x0d45
000012ac: DUP3
000012ad: PUSH2 0x1fd6
000012b0: JUMP
000012b1: JUMPDEST
000012b2: PUSH1 0x0c
000012b4: DUP3
000012b5: PUSH1 0x03
000012b7: DUP2
000012b8: LT
000012b9: PUSH2 0x12c1
000012bc: JUMPI
000012bd: PUSH1 0x00
000012bf: DUP1
000012c0: REVERT
000012c1: JUMPDEST
000012c2: PUSH1 0x04
000012c4: MUL
000012c5: ADD
000012c6: DUP2
000012c7: PUSH1 0x04
000012c9: DUP2
000012ca: LT
000012cb: PUSH2 0x12d3
000012ce: JUMPI
000012cf: PUSH1 0x00
000012d1: DUP1
000012d2: REVERT
000012d3: JUMPDEST
000012d4: ADD
000012d5: SLOAD
000012d6: SWAP2
000012d7: POP
000012d8: DUP3
000012d9: SWAP1
000012da: POP
000012db: JUMP
000012dc: JUMPDEST
000012dd: PUSH1 0x00
000012df: PUSH1 0x60
000012e1: DUP1
000012e2: PUSH1 0x00
000012e4: DUP1
000012e5: PUSH1 0x00
000012e7: PUSH1 0x60
000012e9: PUSH2 0x12f0
000012ec: PUSH2 0x203f
000012ef: JUMP
000012f0: JUMPDEST
000012f1: PUSH2 0x12f8
000012f4: PUSH2 0x206c
000012f7: JUMP
000012f8: JUMPDEST
000012f9: PUSH1 0x40
000012fb: DUP1
000012fc: MLOAD
000012fd: PUSH1 0x00
000012ff: DUP1
00001300: DUP3
00001301: MSTORE
00001302: PUSH1 0x20
00001304: DUP3
00001305: ADD
00001306: SWAP1
00001307: SWAP3
00001308: MSTORE
00001309: PUSH1 0x0f
0000130b: PUSH1 0xf8
0000130d: SHL
0000130e: SWAP12
0000130f: SWAP4
00001310: SWAP11
00001311: POP
00001312: SWAP2
00001313: SWAP9
00001314: POP
00001315: CHAINID
00001316: SWAP8
00001317: POP
00001318: ADDRESS
00001319: SWAP7
0000131a: POP
0000131b: SWAP5
0000131c: POP
0000131d: SWAP3
0000131e: POP
0000131f: SWAP1
00001320: POP
00001321: JUMP
00001322: JUMPDEST
00001323: PUSH1 0x00
00001325: PUSH2 0x1336
00001328: PUSH1 0x02
0000132a: SLOAD
0000132b: PUSH1 0x01
0000132d: PUSH1 0x01
0000132f: PUSH1 0xa0
00001331: SHL
00001332: SUB
00001333: AND
00001334: SWAP1
00001335: JUMP
00001336: JUMPDEST
00001337: SWAP1
00001338: POP
00001339: SWAP1
0000133a: JUMP
0000133b: JUMPDEST
0000133c: PUSH32 0x00000000000000000000000000000000000000000000000000000000686ff190
0000135d: TIMESTAMP
0000135e: LT
0000135f: ISZERO
00001360: PUSH2 0x137c
00001363: JUMPI
00001364: PUSH1 0x40
00001366: MLOAD
00001367: PUSH4 0x16851a37
0000136c: PUSH1 0xe1
0000136e: SHL
0000136f: DUP2
00001370: MSTORE
00001371: PUSH1 0x04
00001373: ADD
00001374: PUSH1 0x40
00001376: MLOAD
00001377: DUP1
00001378: SWAP2
00001379: SUB
0000137a: SWAP1
0000137b: REVERT
0000137c: JUMPDEST
0000137d: PUSH1 0x07
0000137f: SLOAD
00001380: DUP2
00001381: LT
00001382: PUSH2 0x139e
00001385: JUMPI
00001386: PUSH1 0x40
00001388: MLOAD
00001389: PUSH4 0x63df8171
0000138e: PUSH1 0xe0
00001390: SHL
00001391: DUP2
00001392: MSTORE
00001393: PUSH1 0x04
00001395: ADD
00001396: PUSH1 0x40
00001398: MLOAD
00001399: DUP1
0000139a: SWAP2
0000139b: SUB
0000139c: SWAP1
0000139d: REVERT
0000139e: JUMPDEST
0000139f: PUSH1 0x00
000013a1: PUSH1 0x06
000013a3: DUP3
000013a4: DUP2
000013a5: SLOAD
000013a6: DUP2
000013a7: LT
000013a8: PUSH2 0x13b3
000013ab: JUMPI
000013ac: PUSH2 0x13b3
000013af: PUSH2 0x3b52
000013b2: JUMP
000013b3: JUMPDEST
000013b4: SWAP1
000013b5: PUSH1 0x00
000013b7: MSTORE
000013b8: PUSH1 0x20
000013ba: PUSH1 0x00
000013bc: KECCAK256
000013bd: ADD
000013be: SLOAD
000013bf: SWAP1
000013c0: POP
000013c1: DUP1
000013c2: DUP4
000013c3: LT
000013c4: ISZERO
000013c5: PUSH2 0x13e1
000013c8: JUMPI
000013c9: PUSH1 0x40
000013cb: MLOAD
000013cc: PUSH4 0x3a4d1f31
000013d1: PUSH1 0xe2
000013d3: SHL
000013d4: DUP2
000013d5: MSTORE
000013d6: PUSH1 0x04
000013d8: ADD
000013d9: PUSH1 0x40
000013db: MLOAD
000013dc: DUP1
000013dd: SWAP2
000013de: SUB
000013df: SWAP1
000013e0: REVERT
000013e1: JUMPDEST
000013e2: PUSH1 0x00
000013e4: PUSH1 0x07
000013e6: DUP4
000013e7: DUP2
000013e8: SLOAD
000013e9: DUP2
000013ea: LT
000013eb: PUSH2 0x13f6
000013ee: JUMPI
000013ef: PUSH2 0x13f6
000013f2: PUSH2 0x3b52
000013f5: JUMP
000013f6: JUMPDEST
000013f7: SWAP1
000013f8: PUSH1 0x00
000013fa: MSTORE
000013fb: PUSH1 0x20
000013fd: PUSH1 0x00
000013ff: KECCAK256
00001400: ADD
00001401: PUSH1 0x00
00001403: SWAP1
00001404: SLOAD
00001405: SWAP1
00001406: PUSH2 0x0100
00001409: EXP
0000140a: SWAP1
0000140b: DIV
0000140c: PUSH1 0x01
0000140e: PUSH1 0x01
00001410: PUSH1 0xa0
00001412: SHL
00001413: SUB
00001414: AND
00001415: SWAP1
00001416: POP
00001417: PUSH1 0x00
00001419: DUP3
0000141a: PUSH32 0x000000000000000000000000024475619e5d37cf7b5b445e943dbeb7edd2f408
0000143b: PUSH1 0x01
0000143d: PUSH1 0x01
0000143f: PUSH1 0xa0
00001441: SHL
00001442: SUB
00001443: AND
00001444: PUSH4 0x313ce567
00001449: PUSH1 0x40
0000144b: MLOAD
0000144c: DUP2
0000144d: PUSH4 0xffffffff
00001452: AND
00001453: PUSH1 0xe0
00001455: SHL
00001456: DUP2
00001457: MSTORE
00001458: PUSH1 0x04
0000145a: ADD
0000145b: PUSH1 0x20
0000145d: PUSH1 0x40
0000145f: MLOAD
00001460: DUP1
00001461: DUP4
00001462: SUB
00001463: DUP2
00001464: DUP7
00001465: GAS
00001466: STATICCALL
00001467: ISZERO
00001468: DUP1
00001469: ISZERO
0000146a: PUSH2 0x1477
0000146d: JUMPI
0000146e: RETURNDATASIZE
0000146f: PUSH1 0x00
00001471: DUP1
00001472: RETURNDATACOPY
00001473: RETURNDATASIZE
00001474: PUSH1 0x00
00001476: REVERT
00001477: JUMPDEST
00001478: POP
00001479: POP
0000147a: POP
0000147b: POP
0000147c: PUSH1 0x40
0000147e: MLOAD
0000147f: RETURNDATASIZE
00001480: PUSH1 0x1f
00001482: NOT
00001483: PUSH1 0x1f
00001485: DUP3
00001486: ADD
00001487: AND
00001488: DUP3
00001489: ADD
0000148a: DUP1
0000148b: PUSH1 0x40
0000148d: MSTORE
0000148e: POP
0000148f: DUP2
00001490: ADD
00001491: SWAP1
00001492: PUSH2 0x149b
00001495: SWAP2
00001496: SWAP1
00001497: PUSH2 0x3b68
0000149a: JUMP
0000149b: JUMPDEST
0000149c: PUSH2 0x14a6
0000149f: SWAP1
000014a0: PUSH1 0x0a
000014a2: PUSH2 0x3c88
000014a5: JUMP
000014a6: JUMPDEST
000014a7: PUSH2 0x14b0
000014aa: SWAP1
000014ab: DUP8
000014ac: PUSH2 0x3c97
000014af: JUMP
000014b0: JUMPDEST
000014b1: PUSH2 0x14ba
000014b4: SWAP2
000014b5: SWAP1
000014b6: PUSH2 0x3cae
000014b9: JUMP
000014ba: JUMPDEST
000014bb: SWAP1
000014bc: POP
000014bd: PUSH2 0x14c8
000014c0: CALLER
000014c1: DUP3
000014c2: DUP8
000014c3: DUP6
000014c4: PUSH2 0x2099
000014c7: JUMP
000014c8: JUMPDEST
000014c9: POP
000014ca: POP
000014cb: POP
000014cc: POP
000014cd: POP
000014ce: JUMP
000014cf: JUMPDEST
000014d0: PUSH1 0x00
000014d2: SWAP2
000014d3: DUP3
000014d4: MSTORE
000014d5: PUSH1 0x20
000014d7: DUP3
000014d8: DUP2
000014d9: MSTORE
000014da: PUSH1 0x40
000014dc: DUP1
000014dd: DUP5
000014de: KECCAK256
000014df: PUSH1 0x01
000014e1: PUSH1 0x01
000014e3: PUSH1 0xa0
000014e5: SHL
000014e6: SUB
000014e7: SWAP4
000014e8: SWAP1
000014e9: SWAP4
000014ea: AND
000014eb: DUP5
000014ec: MSTORE
000014ed: SWAP2
000014ee: SWAP1
000014ef: MSTORE
000014f0: SWAP1
000014f1: KECCAK256
000014f2: SLOAD
000014f3: PUSH1 0xff
000014f5: AND
000014f6: SWAP1
000014f7: JUMP
000014f8: JUMPDEST
000014f9: PUSH1 0x00
000014fb: PUSH2 0x1503
000014fe: DUP2
000014ff: PUSH2 0x1e8a
00001502: JUMP
00001503: JUMPDEST
00001504: PUSH2 0x1510
00001507: PUSH1 0x18
00001509: DUP4
0000150a: PUSH1 0x04
0000150c: PUSH2 0x34f6
0000150f: JUMP
00001510: JUMPDEST
00001511: POP
00001512: PUSH32 0xb709889bf6c2a7c2d0bfeed028e368519d927f34970354721d44924c1f2d7190
00001533: DUP3
00001534: PUSH1 0x40
00001536: MLOAD
00001537: PUSH2 0x0d11
0000153a: SWAP2
0000153b: SWAP1
0000153c: PUSH2 0x3d23
0000153f: JUMP
00001540: JUMPDEST
00001541: PUSH1 0x00
00001543: DUP1
00001544: MLOAD
00001545: PUSH1 0x20
00001547: PUSH2 0x3e6f
0000154a: DUP4
0000154b: CODECOPY
0000154c: DUP2
0000154d: MLOAD
0000154e: SWAP2
0000154f: MSTORE
00001550: PUSH2 0x1558
00001553: DUP2
00001554: PUSH2 0x1e8a
00001557: JUMP
00001558: JUMPDEST
00001559: PUSH2 0x1565
0000155c: DUP7
0000155d: DUP7
0000155e: DUP7
0000155f: DUP7
00001560: DUP7
00001561: PUSH2 0x21be
00001564: JUMP
00001565: JUMPDEST
00001566: POP
00001567: POP
00001568: POP
00001569: POP
0000156a: POP
0000156b: POP
0000156c: JUMP
0000156d: JUMPDEST
0000156e: PUSH1 0x02
00001570: SLOAD
00001571: PUSH1 0x00
00001573: SWAP1
00001574: PUSH1 0x01
00001576: PUSH1 0xd0
00001578: SHL
00001579: SWAP1
0000157a: DIV
0000157b: PUSH6 0xffffffffffff
00001582: AND
00001583: DUP1
00001584: ISZERO
00001585: ISZERO
00001586: DUP1
00001587: ISZERO
00001588: PUSH2 0x1599
0000158b: JUMPI
0000158c: POP
0000158d: TIMESTAMP
0000158e: PUSH6 0xffffffffffff
00001595: DUP3
00001596: AND
00001597: LT
00001598: ISZERO
00001599: JUMPDEST
0000159a: PUSH2 0x15a5
0000159d: JUMPI
0000159e: PUSH1 0x00
000015a0: DUP1
000015a1: PUSH2 0x15b9
000015a4: JUMP
000015a5: JUMPDEST
000015a6: PUSH1 0x02
000015a8: SLOAD
000015a9: PUSH1 0x01
000015ab: PUSH1 0xa0
000015ad: SHL
000015ae: SWAP1
000015af: DIV
000015b0: PUSH6 0xffffffffffff
000015b7: AND
000015b8: DUP2
000015b9: JUMPDEST
000015ba: SWAP2
000015bb: POP
000015bc: SWAP2
000015bd: POP
000015be: SWAP1
000015bf: SWAP2
000015c0: JUMP
000015c1: JUMPDEST
000015c2: PUSH32 0x00000000000000000000000000000000000000000000000000000000686ff190
000015e3: TIMESTAMP
000015e4: LT
000015e5: ISZERO
000015e6: PUSH2 0x1602
000015e9: JUMPI
000015ea: PUSH1 0x40
000015ec: MLOAD
000015ed: PUSH4 0x16851a37
000015f2: PUSH1 0xe1
000015f4: SHL
000015f5: DUP2
000015f6: MSTORE
000015f7: PUSH1 0x04
000015f9: ADD
000015fa: PUSH1 0x40
000015fc: MLOAD
000015fd: DUP1
000015fe: SWAP2
000015ff: SUB
00001600: SWAP1
00001601: REVERT
00001602: JUMPDEST
00001603: PUSH1 0x07
00001605: SLOAD
00001606: DUP2
00001607: LT
00001608: PUSH2 0x1624
0000160b: JUMPI
0000160c: PUSH1 0x40
0000160e: MLOAD
0000160f: PUSH4 0x63df8171
00001614: PUSH1 0xe0
00001616: SHL
00001617: DUP2
00001618: MSTORE
00001619: PUSH1 0x04
0000161b: ADD
0000161c: PUSH1 0x40
0000161e: MLOAD
0000161f: DUP1
00001620: SWAP2
00001621: SUB
00001622: SWAP1
00001623: REVERT
00001624: JUMPDEST
00001625: PUSH1 0x00
00001627: PUSH1 0x07
00001629: DUP3
0000162a: DUP2
0000162b: SLOAD
0000162c: DUP2
0000162d: LT
0000162e: PUSH2 0x1639
00001631: JUMPI
00001632: PUSH2 0x1639
00001635: PUSH2 0x3b52
00001638: JUMP
00001639: JUMPDEST
0000163a: PUSH1 0x00
0000163c: SWAP2
0000163d: DUP3
0000163e: MSTORE
0000163f: PUSH1 0x20
00001641: SWAP1
00001642: SWAP2
00001643: KECCAK256
00001644: ADD
00001645: SLOAD
00001646: PUSH1 0x01
00001648: PUSH1 0x01
0000164a: PUSH1 0xa0
0000164c: SHL
0000164d: SUB
0000164e: AND
0000164f: SWAP1
00001650: POP
00001651: PUSH1 0x12
00001653: DUP2
00001654: ISZERO
00001655: PUSH2 0x16c0
00001658: JUMPI
00001659: DUP2
0000165a: PUSH1 0x01
0000165c: PUSH1 0x01
0000165e: PUSH1 0xa0
00001660: SHL
00001661: SUB
00001662: AND
00001663: PUSH4 0x313ce567
00001668: PUSH1 0x40
0000166a: MLOAD
0000166b: DUP2
0000166c: PUSH4 0xffffffff
00001671: AND
00001672: PUSH1 0xe0
00001674: SHL
00001675: DUP2
00001676: MSTORE
00001677: PUSH1 0x04
00001679: ADD
0000167a: PUSH1 0x20
0000167c: PUSH1 0x40
0000167e: MLOAD
0000167f: DUP1
00001680: DUP4
00001681: SUB
00001682: DUP2
00001683: DUP7
00001684: GAS
00001685: STATICCALL
00001686: ISZERO
00001687: DUP1
00001688: ISZERO
00001689: PUSH2 0x1696
0000168c: JUMPI
0000168d: RETURNDATASIZE
0000168e: PUSH1 0x00
00001690: DUP1
00001691: RETURNDATACOPY
00001692: RETURNDATASIZE
00001693: PUSH1 0x00
00001695: REVERT
00001696: JUMPDEST
00001697: POP
00001698: POP
00001699: POP
0000169a: POP
0000169b: PUSH1 0x40
0000169d: MLOAD
0000169e: RETURNDATASIZE
0000169f: PUSH1 0x1f
000016a1: NOT
000016a2: PUSH1 0x1f
000016a4: DUP3
000016a5: ADD
000016a6: AND
000016a7: DUP3
000016a8: ADD
000016a9: DUP1
000016aa: PUSH1 0x40
000016ac: MSTORE
000016ad: POP
000016ae: DUP2
000016af: ADD
000016b0: SWAP1
000016b1: PUSH2 0x16ba
000016b4: SWAP2
000016b5: SWAP1
000016b6: PUSH2 0x3b68
000016b9: JUMP
000016ba: JUMPDEST
000016bb: PUSH1 0xff
000016bd: AND
000016be: SWAP1
000016bf: POP
000016c0: JUMPDEST
000016c1: DUP1
000016c2: PUSH32 0x000000000000000000000000024475619e5d37cf7b5b445e943dbeb7edd2f408
000016e3: PUSH1 0x01
000016e5: PUSH1 0x01
000016e7: PUSH1 0xa0
000016e9: SHL
000016ea: SUB
000016eb: AND
000016ec: PUSH4 0x313ce567
000016f1: PUSH1 0x40
000016f3: MLOAD
000016f4: DUP2
000016f5: PUSH4 0xffffffff
000016fa: AND
000016fb: PUSH1 0xe0
000016fd: SHL
000016fe: DUP2
000016ff: MSTORE
00001700: PUSH1 0x04
00001702: ADD
00001703: PUSH1 0x20
00001705: PUSH1 0x40
00001707: MLOAD
00001708: DUP1
00001709: DUP4
0000170a: SUB
0000170b: DUP2
0000170c: DUP7
0000170d: GAS
0000170e: STATICCALL
0000170f: ISZERO
00001710: DUP1
00001711: ISZERO
00001712: PUSH2 0x171f
00001715: JUMPI
00001716: RETURNDATASIZE
00001717: PUSH1 0x00
00001719: DUP1
0000171a: RETURNDATACOPY
0000171b: RETURNDATASIZE
0000171c: PUSH1 0x00
0000171e: REVERT
0000171f: JUMPDEST
00001720: POP
00001721: POP
00001722: POP
00001723: POP
00001724: PUSH1 0x40
00001726: MLOAD
00001727: RETURNDATASIZE
00001728: PUSH1 0x1f
0000172a: NOT
0000172b: PUSH1 0x1f
0000172d: DUP3
0000172e: ADD
0000172f: AND
00001730: DUP3
00001731: ADD
00001732: DUP1
00001733: PUSH1 0x40
00001735: MSTORE
00001736: POP
00001737: DUP2
00001738: ADD
00001739: SWAP1
0000173a: PUSH2 0x1743
0000173d: SWAP2
0000173e: SWAP1
0000173f: PUSH2 0x3b68
00001742: JUMP
00001743: JUMPDEST
00001744: PUSH1 0xff
00001746: AND
00001747: PUSH2 0x1750
0000174a: SWAP2
0000174b: SWAP1
0000174c: PUSH2 0x3d04
0000174f: JUMP
00001750: JUMPDEST
00001751: PUSH2 0x175b
00001754: SWAP1
00001755: PUSH1 0x0a
00001757: PUSH2 0x3d17
0000175a: JUMP
0000175b: JUMPDEST
0000175c: DUP5
0000175d: LT
0000175e: ISZERO
0000175f: PUSH2 0x177b
00001762: JUMPI
00001763: PUSH1 0x40
00001765: MLOAD
00001766: PUSH4 0x37ecb2bb
0000176b: PUSH1 0xe0
0000176d: SHL
0000176e: DUP2
0000176f: MSTORE
00001770: PUSH1 0x04
00001772: ADD
00001773: PUSH1 0x40
00001775: MLOAD
00001776: DUP1
00001777: SWAP2
00001778: SUB
00001779: SWAP1
0000177a: REVERT
0000177b: JUMPDEST
0000177c: PUSH1 0x00
0000177e: PUSH1 0x06
00001780: DUP5
00001781: DUP2
00001782: SLOAD
00001783: DUP2
00001784: LT
00001785: PUSH2 0x1790
00001788: JUMPI
00001789: PUSH2 0x1790
0000178c: PUSH2 0x3b52
0000178f: JUMP
00001790: JUMPDEST
00001791: SWAP1
00001792: PUSH1 0x00
00001794: MSTORE
00001795: PUSH1 0x20
00001797: PUSH1 0x00
00001799: KECCAK256
0000179a: ADD
0000179b: SLOAD
0000179c: SWAP1
0000179d: POP
0000179e: PUSH1 0x00
000017a0: PUSH32 0x000000000000000000000000024475619e5d37cf7b5b445e943dbeb7edd2f408
000017c1: PUSH1 0x01
000017c3: PUSH1 0x01
000017c5: PUSH1 0xa0
000017c7: SHL
000017c8: SUB
000017c9: AND
000017ca: PUSH4 0x313ce567
000017cf: PUSH1 0x40
000017d1: MLOAD
000017d2: DUP2
000017d3: PUSH4 0xffffffff
000017d8: AND
000017d9: PUSH1 0xe0
000017db: SHL
000017dc: DUP2
000017dd: MSTORE
000017de: PUSH1 0x04
000017e0: ADD
000017e1: PUSH1 0x20
000017e3: PUSH1 0x40
000017e5: MLOAD
000017e6: DUP1
000017e7: DUP4
000017e8: SUB
000017e9: DUP2
000017ea: DUP7
000017eb: GAS
000017ec: STATICCALL
000017ed: ISZERO
000017ee: DUP1
000017ef: ISZERO
000017f0: PUSH2 0x17fd
000017f3: JUMPI
000017f4: RETURNDATASIZE
000017f5: PUSH1 0x00
000017f7: DUP1
000017f8: RETURNDATACOPY
000017f9: RETURNDATASIZE
000017fa: PUSH1 0x00
000017fc: REVERT
000017fd: JUMPDEST
000017fe: POP
000017ff: POP
00001800: POP
00001801: POP
00001802: PUSH1 0x40
00001804: MLOAD
00001805: RETURNDATASIZE
00001806: PUSH1 0x1f
00001808: NOT
00001809: PUSH1 0x1f
0000180b: DUP3
0000180c: ADD
0000180d: AND
0000180e: DUP3
0000180f: ADD
00001810: DUP1
00001811: PUSH1 0x40
00001813: MSTORE
00001814: POP
00001815: DUP2
00001816: ADD
00001817: SWAP1
00001818: PUSH2 0x1821
0000181b: SWAP2
0000181c: SWAP1
0000181d: PUSH2 0x3b68
00001820: JUMP
00001821: JUMPDEST
00001822: PUSH2 0x182c
00001825: SWAP1
00001826: PUSH1 0x0a
00001828: PUSH2 0x3c88
0000182b: JUMP
0000182c: JUMPDEST
0000182d: PUSH2 0x1836
00001830: DUP8
00001831: DUP5
00001832: PUSH2 0x3c97
00001835: JUMP
00001836: JUMPDEST
00001837: PUSH2 0x1840
0000183a: SWAP2
0000183b: SWAP1
0000183c: PUSH2 0x3cae
0000183f: JUMP
00001840: JUMPDEST
00001841: SWAP1
00001842: POP
00001843: PUSH2 0x1565
00001846: CALLER
00001847: DUP8
00001848: DUP4
00001849: DUP8
0000184a: PUSH2 0x2099
0000184d: JUMP
0000184e: JUMPDEST
0000184f: PUSH1 0x00
00001851: PUSH2 0x1859
00001854: DUP2
00001855: PUSH2 0x1e8a
00001858: JUMP
00001859: JUMPDEST
0000185a: DUP7
0000185b: ISZERO
0000185c: DUP1
0000185d: PUSH2 0x1866
00001860: JUMPI
00001861: POP
00001862: DUP7
00001863: DUP6
00001864: EQ
00001865: ISZERO
00001866: JUMPDEST
00001867: DUP1
00001868: PUSH2 0x1871
0000186b: JUMPI
0000186c: POP
0000186d: DUP7
0000186e: DUP4
0000186f: EQ
00001870: ISZERO
00001871: JUMPDEST
00001872: ISZERO
00001873: PUSH2 0x188f
00001876: JUMPI
00001877: PUSH1 0x40
00001879: MLOAD
0000187a: PUSH4 0x4ec48105
0000187f: PUSH1 0xe1
00001881: SHL
00001882: DUP2
00001883: MSTORE
00001884: PUSH1 0x04
00001886: ADD
00001887: PUSH1 0x40
00001889: MLOAD
0000188a: DUP1
0000188b: SWAP2
0000188c: SUB
0000188d: SWAP1
0000188e: REVERT
0000188f: JUMPDEST
00001890: PUSH2 0x189b
00001893: PUSH1 0x07
00001895: DUP10
00001896: DUP10
00001897: PUSH2 0x3530
0000189a: JUMP
0000189b: JUMPDEST
0000189c: POP
0000189d: PUSH2 0x18a9
000018a0: DUP7
000018a1: DUP7
000018a2: DUP7
000018a3: DUP7
000018a4: DUP7
000018a5: PUSH2 0x21be
000018a8: JUMP
000018a9: JUMPDEST
000018aa: PUSH32 0x9e81c6516c0b37af4c6bcae34dab17ecd14e1f0754df5852763fefa1402927f7
000018cb: DUP9
000018cc: DUP9
000018cd: PUSH1 0x40
000018cf: MLOAD
000018d0: PUSH2 0x18da
000018d3: SWAP3
000018d4: SWAP2
000018d5: SWAP1
000018d6: PUSH2 0x3d32
000018d9: JUMP
000018da: JUMPDEST
000018db: PUSH1 0x40
000018dd: MLOAD
000018de: DUP1
000018df: SWAP2
000018e0: SUB
000018e1: SWAP1
000018e2: LOG1
000018e3: POP
000018e4: POP
000018e5: POP
000018e6: POP
000018e7: POP
000018e8: POP
000018e9: POP
000018ea: POP
000018eb: JUMP
000018ec: JUMPDEST
000018ed: PUSH1 0x00
000018ef: PUSH2 0x18f7
000018f2: DUP2
000018f3: PUSH2 0x1e8a
000018f6: JUMP
000018f7: JUMPDEST
000018f8: PUSH1 0x24
000018fa: DUP3
000018fb: SWAP1
000018fc: SSTORE
000018fd: PUSH1 0x40
000018ff: MLOAD
00001900: DUP3
00001901: DUP2
00001902: MSTORE
00001903: PUSH32 0xff9c68f0cb4c990dfe8433cb28eda336b0625662999cb9b6f50d348faea12579
00001924: SWAP1
00001925: PUSH1 0x20
00001927: ADD
00001928: PUSH2 0x0d11
0000192b: JUMP
0000192c: JUMPDEST
0000192d: PUSH1 0x00
0000192f: PUSH2 0x1937
00001932: DUP2
00001933: PUSH2 0x1e8a
00001936: JUMP
00001937: JUMPDEST
00001938: PUSH1 0x01
0000193a: PUSH1 0x01
0000193c: PUSH1 0xa0
0000193e: SHL
0000193f: SUB
00001940: DUP3
00001941: AND
00001942: PUSH2 0x195e
00001945: JUMPI
00001946: PUSH1 0x40
00001948: MLOAD
00001949: PUSH4 0xd92e233d
0000194e: PUSH1 0xe0
00001950: SHL
00001951: DUP2
00001952: MSTORE
00001953: PUSH1 0x04
00001955: ADD
00001956: PUSH1 0x40
00001958: MLOAD
00001959: DUP1
0000195a: SWAP2
0000195b: SUB
0000195c: SWAP1
0000195d: REVERT
0000195e: JUMPDEST
0000195f: PUSH1 0x26
00001961: SLOAD
00001962: PUSH1 0x01
00001964: PUSH1 0x01
00001966: PUSH1 0xa0
00001968: SHL
00001969: SUB
0000196a: AND
0000196b: ISZERO
0000196c: PUSH2 0x1996
0000196f: JUMPI
00001970: PUSH1 0x26
00001972: SLOAD
00001973: PUSH2 0x1994
00001976: SWAP1
00001977: PUSH1 0x00
00001979: DUP1
0000197a: MLOAD
0000197b: PUSH1 0x20
0000197d: PUSH2 0x3e6f
00001980: DUP4
00001981: CODECOPY
00001982: DUP2
00001983: MLOAD
00001984: SWAP2
00001985: MSTORE
00001986: SWAP1
00001987: PUSH1 0x01
00001989: PUSH1 0x01
0000198b: PUSH1 0xa0
0000198d: SHL
0000198e: SUB
0000198f: AND
00001990: PUSH2 0x2253
00001993: JUMP
00001994: JUMPDEST
00001995: POP
00001996: JUMPDEST
00001997: PUSH2 0x19ae
0000199a: PUSH1 0x00
0000199c: DUP1
0000199d: MLOAD
0000199e: PUSH1 0x20
000019a0: PUSH2 0x3e6f
000019a3: DUP4
000019a4: CODECOPY
000019a5: DUP2
000019a6: MLOAD
000019a7: SWAP2
000019a8: MSTORE
000019a9: DUP4
000019aa: PUSH2 0x2297
000019ad: JUMP
000019ae: JUMPDEST
000019af: POP
000019b0: PUSH1 0x26
000019b2: DUP1
000019b3: SLOAD
000019b4: PUSH1 0x01
000019b6: PUSH1 0x01
000019b8: PUSH1 0xa0
000019ba: SHL
000019bb: SUB
000019bc: NOT
000019bd: AND
000019be: PUSH1 0x01
000019c0: PUSH1 0x01
000019c2: PUSH1 0xa0
000019c4: SHL
000019c5: SUB
000019c6: DUP5
000019c7: AND
000019c8: SWAP1
000019c9: DUP2
000019ca: OR
000019cb: SWAP1
000019cc: SWAP2
000019cd: SSTORE
000019ce: PUSH1 0x40
000019d0: MLOAD
000019d1: SWAP1
000019d2: DUP2
000019d3: MSTORE
000019d4: PUSH32 0x25e685c2df1877d5fb41d4b737f7070c25654faadfdea2de79ab95d2b4100f1e
000019f5: SWAP1
000019f6: PUSH1 0x20
000019f8: ADD
000019f9: PUSH2 0x0d11
000019fc: JUMP
000019fd: JUMPDEST
000019fe: PUSH1 0x05
00001a00: DUP2
00001a01: DUP2
00001a02: SLOAD
00001a03: DUP2
00001a04: LT
00001a05: PUSH2 0x1a0d
00001a08: JUMPI
00001a09: PUSH1 0x00
00001a0b: DUP1
00001a0c: REVERT
00001a0d: JUMPDEST
00001a0e: PUSH1 0x00
00001a10: SWAP2
00001a11: DUP3
00001a12: MSTORE
00001a13: PUSH1 0x20
00001a15: SWAP1
00001a16: SWAP2
00001a17: KECCAK256
00001a18: ADD
00001a19: SLOAD
00001a1a: SWAP1
00001a1b: POP
00001a1c: DUP2
00001a1d: JUMP
00001a1e: JUMPDEST
00001a1f: PUSH1 0x06
00001a21: DUP2
00001a22: DUP2
00001a23: SLOAD
00001a24: DUP2
00001a25: LT
00001a26: PUSH2 0x1a0d
00001a29: JUMPI
00001a2a: PUSH1 0x00
00001a2c: DUP1
00001a2d: REVERT
00001a2e: JUMPDEST
00001a2f: PUSH1 0x02
00001a31: SLOAD
00001a32: PUSH1 0x00
00001a34: SWAP1
00001a35: PUSH1 0x01
00001a37: PUSH1 0xd0
00001a39: SHL
00001a3a: SWAP1
00001a3b: DIV
00001a3c: PUSH6 0xffffffffffff
00001a43: AND
00001a44: DUP1
00001a45: ISZERO
00001a46: ISZERO
00001a47: DUP1
00001a48: ISZERO
00001a49: PUSH2 0x1a59
00001a4c: JUMPI
00001a4d: POP
00001a4e: TIMESTAMP
00001a4f: PUSH6 0xffffffffffff
00001a56: DUP3
00001a57: AND
00001a58: LT
00001a59: JUMPDEST
00001a5a: PUSH2 0x1a74
00001a5d: JUMPI
00001a5e: PUSH1 0x01
00001a60: SLOAD
00001a61: PUSH1 0x01
00001a63: PUSH1 0xd0
00001a65: SHL
00001a66: SWAP1
00001a67: DIV
00001a68: PUSH6 0xffffffffffff
00001a6f: AND
00001a70: PUSH2 0x1a87
00001a73: JUMP
00001a74: JUMPDEST
00001a75: PUSH1 0x02
00001a77: SLOAD
00001a78: PUSH1 0x01
00001a7a: PUSH1 0xa0
00001a7c: SHL
00001a7d: SWAP1
00001a7e: DIV
00001a7f: PUSH6 0xffffffffffff
00001a86: AND
00001a87: JUMPDEST
00001a88: SWAP2
00001a89: POP
00001a8a: POP
00001a8b: SWAP1
00001a8c: JUMP
00001a8d: JUMPDEST
00001a8e: PUSH1 0x00
00001a90: PUSH2 0x1a97
00001a93: PUSH2 0x1acd
00001a96: JUMP
00001a97: JUMPDEST
00001a98: POP
00001a99: SWAP1
00001a9a: POP
00001a9b: CALLER
00001a9c: PUSH1 0x01
00001a9e: PUSH1 0x01
00001aa0: PUSH1 0xa0
00001aa2: SHL
00001aa3: SUB
00001aa4: DUP3
00001aa5: AND
00001aa6: EQ
00001aa7: PUSH2 0x1ac5
00001aaa: JUMPI
00001aab: PUSH1 0x40
00001aad: MLOAD
00001aae: PUSH4 0x61164011
00001ab3: PUSH1 0xe1
00001ab5: SHL
00001ab6: DUP2
00001ab7: MSTORE
00001ab8: CALLER
00001ab9: PUSH1 0x04
00001abb: DUP3
00001abc: ADD
00001abd: MSTORE
00001abe: PUSH1 0x24
00001ac0: ADD
00001ac1: PUSH2 0x0de4
00001ac4: JUMP
00001ac5: JUMPDEST
00001ac6: PUSH2 0x0cd2
00001ac9: PUSH2 0x22ff
00001acc: JUMP
00001acd: JUMPDEST
00001ace: PUSH1 0x01
00001ad0: SLOAD
00001ad1: PUSH1 0x01
00001ad3: PUSH1 0x01
00001ad5: PUSH1 0xa0
00001ad7: SHL
00001ad8: SUB
00001ad9: DUP2
00001ada: AND
00001adb: SWAP2
00001adc: PUSH1 0x01
00001ade: PUSH1 0xa0
00001ae0: SHL
00001ae1: SWAP1
00001ae2: SWAP2
00001ae3: DIV
00001ae4: PUSH6 0xffffffffffff
00001aeb: AND
00001aec: SWAP1
00001aed: JUMP
00001aee: JUMPDEST
00001aef: DUP2
00001af0: PUSH2 0x1b0c
00001af3: JUMPI
00001af4: PUSH1 0x40
00001af6: MLOAD
00001af7: PUSH4 0x1fe1e13d
00001afc: PUSH1 0xe1
00001afe: SHL
00001aff: DUP2
00001b00: MSTORE
00001b01: PUSH1 0x04
00001b03: ADD
00001b04: PUSH1 0x40
00001b06: MLOAD
00001b07: DUP1
00001b08: SWAP2
00001b09: SUB
00001b0a: SWAP1
00001b0b: REVERT
00001b0c: JUMPDEST
00001b0d: PUSH2 0x0d45
00001b10: DUP3
00001b11: DUP3
00001b12: PUSH2 0x2398
00001b15: JUMP
00001b16: JUMPDEST
00001b17: PUSH1 0x00
00001b19: PUSH2 0x1b21
00001b1c: DUP2
00001b1d: PUSH2 0x1e8a
00001b20: JUMP
00001b21: JUMPDEST
00001b22: PUSH2 0x0cd2
00001b25: PUSH2 0x23bd
00001b28: JUMP
00001b29: JUMPDEST
00001b2a: PUSH1 0x08
00001b2c: DUP2
00001b2d: PUSH1 0x04
00001b2f: DUP2
00001b30: LT
00001b31: PUSH2 0x0d59
00001b34: JUMPI
00001b35: PUSH1 0x00
00001b37: DUP1
00001b38: REVERT
00001b39: JUMPDEST
00001b3a: PUSH1 0x18
00001b3c: DUP2
00001b3d: PUSH1 0x04
00001b3f: DUP2
00001b40: LT
00001b41: PUSH2 0x0d59
00001b44: JUMPI
00001b45: PUSH1 0x00
00001b47: DUP1
00001b48: REVERT
00001b49: JUMPDEST
00001b4a: PUSH1 0x00
00001b4c: PUSH2 0x1b54
00001b4f: DUP2
00001b50: PUSH2 0x1e8a
00001b53: JUMP
00001b54: JUMPDEST
00001b55: PUSH1 0x00
00001b57: JUMPDEST
00001b58: PUSH1 0x04
00001b5a: DUP2
00001b5b: LT
00001b5c: ISZERO
00001b5d: PUSH2 0x1ba2
00001b60: JUMPI
00001b61: PUSH3 0x0f4240
00001b65: DUP4
00001b66: DUP3
00001b67: PUSH1 0x04
00001b69: DUP2
00001b6a: LT
00001b6b: PUSH2 0x1b76
00001b6e: JUMPI
00001b6f: PUSH2 0x1b76
00001b72: PUSH2 0x3b52
00001b75: JUMP
00001b76: JUMPDEST
00001b77: PUSH1 0x20
00001b79: MUL
00001b7a: ADD
00001b7b: CALLDATALOAD
00001b7c: GT
00001b7d: ISZERO
00001b7e: PUSH2 0x1b9a
00001b81: JUMPI
00001b82: PUSH1 0x40
00001b84: MLOAD
00001b85: PUSH4 0x5c974e3d
00001b8a: PUSH1 0xe1
00001b8c: SHL
00001b8d: DUP2
00001b8e: MSTORE
00001b8f: PUSH1 0x04
00001b91: ADD
00001b92: PUSH1 0x40
00001b94: MLOAD
00001b95: DUP1
00001b96: SWAP2
00001b97: SUB
00001b98: SWAP1
00001b99: REVERT
00001b9a: JUMPDEST
00001b9b: PUSH1 0x01
00001b9d: ADD
00001b9e: PUSH2 0x1b57
00001ba1: JUMP
00001ba2: JUMPDEST
00001ba3: POP
00001ba4: PUSH2 0x1bb0
00001ba7: PUSH1 0x08
00001ba9: DUP4
00001baa: PUSH1 0x04
00001bac: PUSH2 0x34f6
00001baf: JUMP
00001bb0: JUMPDEST
00001bb1: POP
00001bb2: PUSH32 0x68f87e434983087aebcfc2f1224d675931bc31f0a9f3632fd22c69ad08aa2cbb
00001bd3: DUP3
00001bd4: PUSH1 0x40
00001bd6: MLOAD
00001bd7: PUSH2 0x0d11
00001bda: SWAP2
00001bdb: SWAP1
00001bdc: PUSH2 0x3d23
00001bdf: JUMP
00001be0: JUMPDEST
00001be1: PUSH1 0x00
00001be3: PUSH2 0x1beb
00001be6: DUP2
00001be7: PUSH2 0x1e8a
00001bea: JUMP
00001beb: JUMPDEST
00001bec: PUSH2 0x1bf8
00001bef: PUSH1 0x1c
00001bf1: DUP4
00001bf2: PUSH1 0x04
00001bf4: PUSH2 0x34f6
00001bf7: JUMP
00001bf8: JUMPDEST
00001bf9: POP
00001bfa: PUSH32 0xf08e39565c9237a3c6ff674a763abe2c6a4be95d39ef8e22db5edbb9d6e13632
00001c1b: DUP3
00001c1c: PUSH1 0x40
00001c1e: MLOAD
00001c1f: PUSH2 0x0d11
00001c22: SWAP2
00001c23: SWAP1
00001c24: PUSH2 0x3d23
00001c27: JUMP
00001c28: JUMPDEST
00001c29: PUSH1 0x00
00001c2b: PUSH1 0x01
00001c2d: PUSH1 0x01
00001c2f: PUSH1 0xe0
00001c31: SHL
00001c32: SUB
00001c33: NOT
00001c34: DUP3
00001c35: AND
00001c36: PUSH4 0x7965db0b
00001c3b: PUSH1 0xe0
00001c3d: SHL
00001c3e: EQ
00001c3f: DUP1
00001c40: PUSH2 0x0ad0
00001c43: JUMPI
00001c44: POP
00001c45: PUSH4 0x01ffc9a7
00001c4a: PUSH1 0xe0
00001c4c: SHL
00001c4d: PUSH1 0x01
00001c4f: PUSH1 0x01
00001c51: PUSH1 0xe0
00001c53: SHL
00001c54: SUB
00001c55: NOT
00001c56: DUP4
00001c57: AND
00001c58: EQ
00001c59: PUSH2 0x0ad0
00001c5c: JUMP
00001c5d: JUMPDEST
00001c5e: PUSH1 0x40
00001c60: DUP1
00001c61: MLOAD
00001c62: PUSH32 0x3ae15b903b0ac48ca42840358899ad2501724741924507a38b5e4f1c9ef1508c
00001c83: PUSH1 0x20
00001c85: DUP1
00001c86: DUP4
00001c87: ADD
00001c88: SWAP2
00001c89: SWAP1
00001c8a: SWAP2
00001c8b: MSTORE
00001c8c: PUSH1 0x01
00001c8e: PUSH1 0x01
00001c90: PUSH1 0xa0
00001c92: SHL
00001c93: SUB
00001c94: DUP1
00001c95: DUP14
00001c96: AND
00001c97: DUP4
00001c98: DUP6
00001c99: ADD
00001c9a: MSTORE
00001c9b: DUP9
00001c9c: AND
00001c9d: PUSH1 0x60
00001c9f: DUP4
00001ca0: ADD
00001ca1: MSTORE
00001ca2: PUSH1 0x80
00001ca4: DUP3
00001ca5: ADD
00001ca6: DUP8
00001ca7: SWAP1
00001ca8: MSTORE
00001ca9: PUSH1 0xa0
00001cab: DUP3
00001cac: ADD
00001cad: DUP7
00001cae: SWAP1
00001caf: MSTORE
00001cb0: PUSH1 0xc0
00001cb2: DUP1
00001cb3: DUP4
00001cb4: ADD
00001cb5: DUP7
00001cb6: SWAP1
00001cb7: MSTORE
00001cb8: DUP4
00001cb9: MLOAD
00001cba: DUP1
00001cbb: DUP5
00001cbc: SUB
00001cbd: SWAP1
00001cbe: SWAP2
00001cbf: ADD
00001cc0: DUP2
00001cc1: MSTORE
00001cc2: PUSH1 0xe0
00001cc4: SWAP1
00001cc5: SWAP3
00001cc6: ADD
00001cc7: SWAP1
00001cc8: SWAP3
00001cc9: MSTORE
00001cca: DUP1
00001ccb: MLOAD
00001ccc: SWAP2
00001ccd: ADD
00001cce: KECCAK256
00001ccf: PUSH2 0x1cd9
00001cd2: DUP2
00001cd3: DUP5
00001cd4: DUP5
00001cd5: PUSH2 0x23c8
00001cd8: JUMP
00001cd9: JUMPDEST
00001cda: POP
00001cdb: PUSH2 0x1ce3
00001cde: DUP8
00001cdf: PUSH2 0x2467
00001ce2: JUMP
00001ce3: JUMPDEST
00001ce4: PUSH1 0x00
00001ce6: PUSH2 0x1cef
00001ce9: DUP11
00001cea: DUP10
00001ceb: PUSH2 0x252f
00001cee: JUMP
00001cef: JUMPDEST
00001cf0: SWAP1
00001cf1: POP
00001cf2: PUSH1 0x01
00001cf4: PUSH1 0x01
00001cf6: PUSH1 0xa0
00001cf8: SHL
00001cf9: SUB
00001cfa: DUP7
00001cfb: AND
00001cfc: PUSH2 0x1da8
00001cff: JUMPI
00001d00: DUP7
00001d01: CALLVALUE
00001d02: LT
00001d03: ISZERO
00001d04: PUSH2 0x1d20
00001d07: JUMPI
00001d08: PUSH1 0x40
00001d0a: MLOAD
00001d0b: PUSH4 0xbb201b49
00001d10: PUSH1 0xe0
00001d12: SHL
00001d13: DUP2
00001d14: MSTORE
00001d15: PUSH1 0x04
00001d17: ADD
00001d18: PUSH1 0x40
00001d1a: MLOAD
00001d1b: DUP1
00001d1c: SWAP2
00001d1d: SUB
00001d1e: SWAP1
00001d1f: REVERT
00001d20: JUMPDEST
00001d21: DUP7
00001d22: CALLVALUE
00001d23: GT
00001d24: ISZERO
00001d25: PUSH2 0x1da3
00001d28: JUMPI
00001d29: PUSH1 0x00
00001d2b: PUSH1 0x01
00001d2d: PUSH1 0x01
00001d2f: PUSH1 0xa0
00001d31: SHL
00001d32: SUB
00001d33: DUP12
00001d34: AND
00001d35: PUSH2 0x1d3e
00001d38: DUP10
00001d39: CALLVALUE
00001d3a: PUSH2 0x3d04
00001d3d: JUMP
00001d3e: JUMPDEST
00001d3f: PUSH1 0x40
00001d41: MLOAD
00001d42: PUSH1 0x00
00001d44: DUP2
00001d45: DUP2
00001d46: DUP2
00001d47: DUP6
00001d48: DUP8
00001d49: GAS
00001d4a: CALL
00001d4b: SWAP3
00001d4c: POP
00001d4d: POP
00001d4e: POP
00001d4f: RETURNDATASIZE
00001d50: DUP1
00001d51: PUSH1 0x00
00001d53: DUP2
00001d54: EQ
00001d55: PUSH2 0x1d7a
00001d58: JUMPI
00001d59: PUSH1 0x40
00001d5b: MLOAD
00001d5c: SWAP2
00001d5d: POP
00001d5e: PUSH1 0x1f
00001d60: NOT
00001d61: PUSH1 0x3f
00001d63: RETURNDATASIZE
00001d64: ADD
00001d65: AND
00001d66: DUP3
00001d67: ADD
00001d68: PUSH1 0x40
00001d6a: MSTORE
00001d6b: RETURNDATASIZE
00001d6c: DUP3
00001d6d: MSTORE
00001d6e: RETURNDATASIZE
00001d6f: PUSH1 0x00
00001d71: PUSH1 0x20
00001d73: DUP5
00001d74: ADD
00001d75: RETURNDATACOPY
00001d76: PUSH2 0x1d7f
00001d79: JUMP
00001d7a: JUMPDEST
00001d7b: PUSH1 0x60
00001d7d: SWAP2
00001d7e: POP
00001d7f: JUMPDEST
00001d80: POP
00001d81: POP
00001d82: SWAP1
00001d83: POP
00001d84: DUP1
00001d85: PUSH2 0x1da1
00001d88: JUMPI
00001d89: PUSH1 0x40
00001d8b: MLOAD
00001d8c: PUSH4 0x4c67134d
00001d91: PUSH1 0xe1
00001d93: SHL
00001d94: DUP2
00001d95: MSTORE
00001d96: PUSH1 0x04
00001d98: ADD
00001d99: PUSH1 0x40
00001d9b: MLOAD
00001d9c: DUP1
00001d9d: SWAP2
00001d9e: SUB
00001d9f: SWAP1
00001da0: REVERT
00001da1: JUMPDEST
00001da2: POP
00001da3: JUMPDEST
00001da4: PUSH2 0x1ddc
00001da7: JUMP
00001da8: JUMPDEST
00001da9: CALLVALUE
00001daa: ISZERO
00001dab: PUSH2 0x1dc7
00001dae: JUMPI
00001daf: PUSH1 0x40
00001db1: MLOAD
00001db2: PUSH4 0xbb201b49
00001db7: PUSH1 0xe0
00001db9: SHL
00001dba: DUP2
00001dbb: MSTORE
00001dbc: PUSH1 0x04
00001dbe: ADD
00001dbf: PUSH1 0x40
00001dc1: MLOAD
00001dc2: DUP1
00001dc3: SWAP2
00001dc4: SUB
00001dc5: SWAP1
00001dc6: REVERT
00001dc7: JUMPDEST
00001dc8: PUSH2 0x1ddc
00001dcb: PUSH1 0x01
00001dcd: PUSH1 0x01
00001dcf: PUSH1 0xa0
00001dd1: SHL
00001dd2: SUB
00001dd3: DUP8
00001dd4: AND
00001dd5: DUP12
00001dd6: ADDRESS
00001dd7: DUP11
00001dd8: PUSH2 0x2591
00001ddb: JUMP
00001ddc: JUMPDEST
00001ddd: PUSH2 0x1e1b
00001de0: DUP11
00001de1: PUSH2 0x1dea
00001de4: DUP4
00001de5: DUP12
00001de6: PUSH2 0x3d7f
00001de9: JUMP
00001dea: JUMPDEST
00001deb: PUSH1 0x01
00001ded: PUSH1 0x01
00001def: PUSH1 0xa0
00001df1: SHL
00001df2: SUB
00001df3: PUSH32 0x000000000000000000000000024475619e5d37cf7b5b445e943dbeb7edd2f408
00001e14: AND
00001e15: SWAP2
00001e16: SWAP1
00001e17: PUSH2 0x1f04
00001e1a: JUMP
00001e1b: JUMPDEST
00001e1c: PUSH2 0x1e26
00001e1f: DUP11
00001e20: DUP11
00001e21: DUP11
00001e22: PUSH2 0x25ca
00001e25: JUMP
00001e26: JUMPDEST
00001e27: PUSH2 0x1e32
00001e2a: DUP11
00001e2b: DUP9
00001e2c: DUP9
00001e2d: DUP9
00001e2e: PUSH2 0x28ef
00001e31: JUMP
00001e32: JUMPDEST
00001e33: PUSH1 0x40
00001e35: DUP1
00001e36: MLOAD
00001e37: DUP10
00001e38: DUP2
00001e39: MSTORE
00001e3a: PUSH1 0x20
00001e3c: DUP2
00001e3d: ADD
00001e3e: DUP4
00001e3f: SWAP1
00001e40: MSTORE
00001e41: SWAP1
00001e42: DUP2
00001e43: ADD
00001e44: DUP9
00001e45: SWAP1
00001e46: MSTORE
00001e47: PUSH1 0x01
00001e49: PUSH1 0x01
00001e4b: PUSH1 0xa0
00001e4d: SHL
00001e4e: SUB
00001e4f: DUP12
00001e50: AND
00001e51: SWAP1
00001e52: PUSH32 0x2b0c4dfbf2e34a2292e9110d6ea90d7c78f54b3aebe3974d2db7197308f21ff8
00001e73: SWAP1
00001e74: PUSH1 0x60
00001e76: ADD
00001e77: PUSH1 0x40
00001e79: MLOAD
00001e7a: DUP1
00001e7b: SWAP2
00001e7c: SUB
00001e7d: SWAP1
00001e7e: LOG2
00001e7f: POP
00001e80: POP
00001e81: POP
00001e82: POP
00001e83: POP
00001e84: POP
00001e85: POP
00001e86: POP
00001e87: POP
00001e88: POP
00001e89: JUMP
00001e8a: JUMPDEST
00001e8b: PUSH2 0x0cd2
00001e8e: DUP2
00001e8f: CALLER
00001e90: PUSH2 0x2b65
00001e93: JUMP
00001e94: JUMPDEST
00001e95: PUSH2 0x1e9f
00001e98: PUSH1 0x00
00001e9a: DUP1
00001e9b: PUSH2 0x2b9e
00001e9e: JUMP
00001e9f: JUMPDEST
00001ea0: JUMP
00001ea1: JUMPDEST
00001ea2: PUSH1 0x00
00001ea4: DUP3
00001ea5: DUP2
00001ea6: MSTORE
00001ea7: PUSH1 0x20
00001ea9: DUP2
00001eaa: SWAP1
00001eab: MSTORE
00001eac: PUSH1 0x40
00001eae: SWAP1
00001eaf: KECCAK256
00001eb0: PUSH1 0x01
00001eb2: ADD
00001eb3: SLOAD
00001eb4: PUSH2 0x1ebc
00001eb7: DUP2
00001eb8: PUSH2 0x1e8a
00001ebb: JUMP
00001ebc: JUMPDEST
00001ebd: PUSH2 0x1ec6
00001ec0: DUP4
00001ec1: DUP4
00001ec2: PUSH2 0x2297
00001ec5: JUMP
00001ec6: JUMPDEST
00001ec7: POP
00001ec8: POP
00001ec9: POP
00001eca: POP
00001ecb: JUMP
00001ecc: JUMPDEST
00001ecd: PUSH1 0x01
00001ecf: PUSH1 0x01
00001ed1: PUSH1 0xa0
00001ed3: SHL
00001ed4: SUB
00001ed5: DUP2
00001ed6: AND
00001ed7: CALLER
00001ed8: EQ
00001ed9: PUSH2 0x1ef5
00001edc: JUMPI
00001edd: PUSH1 0x40
00001edf: MLOAD
00001ee0: PUSH4 0x334bd919
00001ee5: PUSH1 0xe1
00001ee7: SHL
00001ee8: DUP2
00001ee9: MSTORE
00001eea: PUSH1 0x04
00001eec: ADD
00001eed: PUSH1 0x40
00001eef: MLOAD
00001ef0: DUP1
00001ef1: SWAP2
00001ef2: SUB
00001ef3: SWAP1
00001ef4: REVERT
00001ef5: JUMPDEST
00001ef6: PUSH2 0x1eff
00001ef9: DUP3
00001efa: DUP3
00001efb: PUSH2 0x2253
00001efe: JUMP
00001eff: JUMPDEST
00001f00: POP
00001f01: POP
00001f02: POP
00001f03: JUMP
00001f04: JUMPDEST
00001f05: PUSH1 0x40
00001f07: MLOAD
00001f08: PUSH1 0x01
00001f0a: PUSH1 0x01
00001f0c: PUSH1 0xa0
00001f0e: SHL
00001f0f: SUB
00001f10: DUP4
00001f11: DUP2
00001f12: AND
00001f13: PUSH1 0x24
00001f15: DUP4
00001f16: ADD
00001f17: MSTORE
00001f18: PUSH1 0x44
00001f1a: DUP3
00001f1b: ADD
00001f1c: DUP4
00001f1d: SWAP1
00001f1e: MSTORE
00001f1f: PUSH2 0x1eff
00001f22: SWAP2
00001f23: DUP6
00001f24: SWAP2
00001f25: DUP3
00001f26: AND
00001f27: SWAP1
00001f28: PUSH4 0xa9059cbb
00001f2d: SWAP1
00001f2e: PUSH1 0x64
00001f30: ADD
00001f31: JUMPDEST
00001f32: PUSH1 0x40
00001f34: MLOAD
00001f35: PUSH1 0x20
00001f37: DUP2
00001f38: DUP4
00001f39: SUB
00001f3a: SUB
00001f3b: DUP2
00001f3c: MSTORE
00001f3d: SWAP1
00001f3e: PUSH1 0x40
00001f40: MSTORE
00001f41: SWAP2
00001f42: POP
00001f43: PUSH1 0xe0
00001f45: SHL
00001f46: PUSH1 0x20
00001f48: DUP3
00001f49: ADD
00001f4a: DUP1
00001f4b: MLOAD
00001f4c: PUSH1 0x01
00001f4e: PUSH1 0x01
00001f50: PUSH1 0xe0
00001f52: SHL
00001f53: SUB
00001f54: DUP4
00001f55: DUP2
00001f56: DUP4
00001f57: AND
00001f58: OR
00001f59: DUP4
00001f5a: MSTORE
00001f5b: POP
00001f5c: POP
00001f5d: POP
00001f5e: POP
00001f5f: PUSH2 0x2c5e
00001f62: JUMP
00001f63: JUMPDEST
00001f64: PUSH1 0x00
00001f66: PUSH2 0x1f6d
00001f69: PUSH2 0x1a2e
00001f6c: JUMP
00001f6d: JUMPDEST
00001f6e: PUSH2 0x1f76
00001f71: TIMESTAMP
00001f72: PUSH2 0x2ccf
00001f75: JUMP
00001f76: JUMPDEST
00001f77: PUSH2 0x1f80
00001f7a: SWAP2
00001f7b: SWAP1
00001f7c: PUSH2 0x3d92
00001f7f: JUMP
00001f80: JUMPDEST
00001f81: SWAP1
00001f82: POP
00001f83: PUSH2 0x1f8c
00001f86: DUP3
00001f87: DUP3
00001f88: PUSH2 0x2d06
00001f8b: JUMP
00001f8c: JUMPDEST
00001f8d: PUSH1 0x40
00001f8f: MLOAD
00001f90: PUSH6 0xffffffffffff
00001f97: DUP3
00001f98: AND
00001f99: DUP2
00001f9a: MSTORE
00001f9b: PUSH1 0x01
00001f9d: PUSH1 0x01
00001f9f: PUSH1 0xa0
00001fa1: SHL
00001fa2: SUB
00001fa3: DUP4
00001fa4: AND
00001fa5: SWAP1
00001fa6: PUSH32 0x3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed6
00001fc7: SWAP1
00001fc8: PUSH1 0x20
00001fca: ADD
00001fcb: PUSH1 0x40
00001fcd: MLOAD
00001fce: DUP1
00001fcf: SWAP2
00001fd0: SUB
00001fd1: SWAP1
00001fd2: LOG2
00001fd3: POP
00001fd4: POP
00001fd5: JUMP
00001fd6: JUMPDEST
00001fd7: PUSH1 0x00
00001fd9: PUSH2 0x1fe1
00001fdc: DUP3
00001fdd: PUSH2 0x2d85
00001fe0: JUMP
00001fe1: JUMPDEST
00001fe2: PUSH2 0x1fea
00001fe5: TIMESTAMP
00001fe6: PUSH2 0x2ccf
00001fe9: JUMP
00001fea: JUMPDEST
00001feb: PUSH2 0x1ff4
00001fee: SWAP2
00001fef: SWAP1
00001ff0: PUSH2 0x3d92
00001ff3: JUMP
00001ff4: JUMPDEST
00001ff5: SWAP1
00001ff6: POP
00001ff7: PUSH2 0x2000
00001ffa: DUP3
00001ffb: DUP3
00001ffc: PUSH2 0x2b9e
00001fff: JUMP
00002000: JUMPDEST
00002001: PUSH1 0x40
00002003: DUP1
00002004: MLOAD
00002005: PUSH6 0xffffffffffff
0000200c: DUP1
0000200d: DUP6
0000200e: AND
0000200f: DUP3
00002010: MSTORE
00002011: DUP4
00002012: AND
00002013: PUSH1 0x20
00002015: DUP3
00002016: ADD
00002017: MSTORE
00002018: PUSH32 0xf1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b
00002039: SWAP2
0000203a: ADD
0000203b: PUSH2 0x0d11
0000203e: JUMP
0000203f: JUMPDEST
00002040: PUSH1 0x60
00002042: PUSH2 0x1336
00002045: PUSH32 0x436f6c6c656374697665204d696e642041492053616c65000000000000000017
00002066: PUSH1 0x03
00002068: PUSH2 0x2dcd
0000206b: JUMP
0000206c: JUMPDEST
0000206d: PUSH1 0x60
0000206f: PUSH2 0x1336
00002072: PUSH32 0x3100000000000000000000000000000000000000000000000000000000000001
00002093: PUSH1 0x04
00002095: PUSH2 0x2dcd
00002098: JUMP
00002099: JUMPDEST
0000209a: PUSH2 0x20a3
0000209d: DUP5
0000209e: DUP5
0000209f: PUSH2 0x2e78
000020a2: JUMP
000020a3: JUMPDEST
000020a4: PUSH2 0x20d8
000020a7: PUSH1 0x01
000020a9: PUSH1 0x01
000020ab: PUSH1 0xa0
000020ad: SHL
000020ae: SUB
000020af: PUSH32 0x000000000000000000000000024475619e5d37cf7b5b445e943dbeb7edd2f408
000020d0: AND
000020d1: DUP6
000020d2: ADDRESS
000020d3: DUP7
000020d4: PUSH2 0x2591
000020d7: JUMP
000020d8: JUMPDEST
000020d9: PUSH1 0x01
000020db: PUSH1 0x01
000020dd: PUSH1 0xa0
000020df: SHL
000020e0: SUB
000020e1: DUP2
000020e2: AND
000020e3: PUSH2 0x2160
000020e6: JUMPI
000020e7: PUSH1 0x00
000020e9: DUP5
000020ea: PUSH1 0x01
000020ec: PUSH1 0x01
000020ee: PUSH1 0xa0
000020f0: SHL
000020f1: SUB
000020f2: AND
000020f3: DUP4
000020f4: PUSH1 0x40
000020f6: MLOAD
000020f7: PUSH1 0x00
000020f9: PUSH1 0x40
000020fb: MLOAD
000020fc: DUP1
000020fd: DUP4
000020fe: SUB
000020ff: DUP2
00002100: DUP6
00002101: DUP8
00002102: GAS
00002103: CALL
00002104: SWAP3
00002105: POP
00002106: POP
00002107: POP
00002108: RETURNDATASIZE
00002109: DUP1
0000210a: PUSH1 0x00
0000210c: DUP2
0000210d: EQ
0000210e: PUSH2 0x2133
00002111: JUMPI
00002112: PUSH1 0x40
00002114: MLOAD
00002115: SWAP2
00002116: POP
00002117: PUSH1 0x1f
00002119: NOT
0000211a: PUSH1 0x3f
0000211c: RETURNDATASIZE
0000211d: ADD
0000211e: AND
0000211f: DUP3
00002120: ADD
00002121: PUSH1 0x40
00002123: MSTORE
00002124: RETURNDATASIZE
00002125: DUP3
00002126: MSTORE
00002127: RETURNDATASIZE
00002128: PUSH1 0x00
0000212a: PUSH1 0x20
0000212c: DUP5
0000212d: ADD
0000212e: RETURNDATACOPY
0000212f: PUSH2 0x2138
00002132: JUMP
00002133: JUMPDEST
00002134: PUSH1 0x60
00002136: SWAP2
00002137: POP
00002138: JUMPDEST
00002139: POP
0000213a: POP
0000213b: SWAP1
0000213c: POP
0000213d: DUP1
0000213e: PUSH2 0x215a
00002141: JUMPI
00002142: PUSH1 0x40
00002144: MLOAD
00002145: PUSH4 0x4c67134d
0000214a: PUSH1 0xe1
0000214c: SHL
0000214d: DUP2
0000214e: MSTORE
0000214f: PUSH1 0x04
00002151: ADD
00002152: PUSH1 0x40
00002154: MLOAD
00002155: DUP1
00002156: SWAP2
00002157: SUB
00002158: SWAP1
00002159: REVERT
0000215a: JUMPDEST
0000215b: POP
0000215c: PUSH2 0x2174
0000215f: JUMP
00002160: JUMPDEST
00002161: PUSH2 0x2174
00002164: PUSH1 0x01
00002166: PUSH1 0x01
00002168: PUSH1 0xa0
0000216a: SHL
0000216b: SUB
0000216c: DUP3
0000216d: AND
0000216e: DUP6
0000216f: DUP5
00002170: PUSH2 0x1f04
00002173: JUMP
00002174: JUMPDEST
00002175: PUSH1 0x40
00002177: DUP1
00002178: MLOAD
00002179: DUP5
0000217a: DUP2
0000217b: MSTORE
0000217c: PUSH1 0x20
0000217e: DUP2
0000217f: ADD
00002180: DUP5
00002181: SWAP1
00002182: MSTORE
00002183: PUSH1 0x01
00002185: PUSH1 0x01
00002187: PUSH1 0xa0
00002189: SHL
0000218a: SUB
0000218b: DUP7
0000218c: AND
0000218d: SWAP2
0000218e: PUSH32 0x35ea94addbc62df281ade49cc2ad9b3d9259166170cf702928b4ddc045f7256e
000021af: SWAP2
000021b0: ADD
000021b1: PUSH1 0x40
000021b3: MLOAD
000021b4: DUP1
000021b5: SWAP2
000021b6: SUB
000021b7: SWAP1
000021b8: LOG2
000021b9: POP
000021ba: POP
000021bb: POP
000021bc: POP
000021bd: JUMP
000021be: JUMPDEST
000021bf: PUSH1 0x07
000021c1: SLOAD
000021c2: DUP5
000021c3: EQ
000021c4: ISZERO
000021c5: DUP1
000021c6: PUSH2 0x21cf
000021c9: JUMPI
000021ca: POP
000021cb: DUP4
000021cc: DUP3
000021cd: EQ
000021ce: ISZERO
000021cf: JUMPDEST
000021d0: ISZERO
000021d1: PUSH2 0x21ed
000021d4: JUMPI
000021d5: PUSH1 0x40
000021d7: MLOAD
000021d8: PUSH4 0x4ec48105
000021dd: PUSH1 0xe1
000021df: SHL
000021e0: DUP2
000021e1: MSTORE
000021e2: PUSH1 0x04
000021e4: ADD
000021e5: PUSH1 0x40
000021e7: MLOAD
000021e8: DUP1
000021e9: SWAP2
000021ea: SUB
000021eb: SWAP1
000021ec: REVERT
000021ed: JUMPDEST
000021ee: PUSH2 0x21f9
000021f1: PUSH1 0x05
000021f3: DUP7
000021f4: DUP7
000021f5: PUSH2 0x3583
000021f8: JUMP
000021f9: JUMPDEST
000021fa: POP
000021fb: PUSH2 0x2206
000021fe: PUSH1 0x06
00002200: DUP5
00002201: DUP5
00002202: PUSH2 0x3583
00002205: JUMP
00002206: JUMPDEST
00002207: POP
00002208: PUSH1 0x20
0000220a: DUP2
0000220b: SWAP1
0000220c: SSTORE
0000220d: PUSH1 0x40
0000220f: MLOAD
00002210: PUSH32 0xe7665182a9b510cbd21318ff5dba2977e73bdf425912faf311ec7a261f838b89
00002231: SWAP1
00002232: PUSH2 0x2244
00002235: SWAP1
00002236: DUP8
00002237: SWAP1
00002238: DUP8
00002239: SWAP1
0000223a: DUP8
0000223b: SWAP1
0000223c: DUP8
0000223d: SWAP1
0000223e: DUP8
0000223f: SWAP1
00002240: PUSH2 0x3de2
00002243: JUMP
00002244: JUMPDEST
00002245: PUSH1 0x40
00002247: MLOAD
00002248: DUP1
00002249: SWAP2
0000224a: SUB
0000224b: SWAP1
0000224c: LOG1
0000224d: POP
0000224e: POP
0000224f: POP
00002250: POP
00002251: POP
00002252: JUMP
00002253: JUMPDEST
00002254: PUSH1 0x00
00002256: DUP3
00002257: ISZERO
00002258: DUP1
00002259: ISZERO
0000225a: PUSH2 0x2270
0000225d: JUMPI
0000225e: POP
0000225f: PUSH1 0x02
00002261: SLOAD
00002262: PUSH1 0x01
00002264: PUSH1 0x01
00002266: PUSH1 0xa0
00002268: SHL
00002269: SUB
0000226a: DUP4
0000226b: DUP2
0000226c: AND
0000226d: SWAP2
0000226e: AND
0000226f: EQ
00002270: JUMPDEST
00002271: ISZERO
00002272: PUSH2 0x2286
00002275: JUMPI
00002276: PUSH1 0x02
00002278: DUP1
00002279: SLOAD
0000227a: PUSH1 0x01
0000227c: PUSH1 0x01
0000227e: PUSH1 0xa0
00002280: SHL
00002281: SUB
00002282: NOT
00002283: AND
00002284: SWAP1
00002285: SSTORE
00002286: JUMPDEST
00002287: PUSH2 0x2290
0000228a: DUP4
0000228b: DUP4
0000228c: PUSH2 0x2ef5
0000228f: JUMP
00002290: JUMPDEST
00002291: SWAP4
00002292: SWAP3
00002293: POP
00002294: POP
00002295: POP
00002296: JUMP
00002297: JUMPDEST
00002298: PUSH1 0x00
0000229a: DUP3
0000229b: PUSH2 0x22f5
0000229e: JUMPI
0000229f: PUSH1 0x00
000022a1: PUSH2 0x22b2
000022a4: PUSH1 0x02
000022a6: SLOAD
000022a7: PUSH1 0x01
000022a9: PUSH1 0x01
000022ab: PUSH1 0xa0
000022ad: SHL
000022ae: SUB
000022af: AND
000022b0: SWAP1
000022b1: JUMP
000022b2: JUMPDEST
000022b3: PUSH1 0x01
000022b5: PUSH1 0x01
000022b7: PUSH1 0xa0
000022b9: SHL
000022ba: SUB
000022bb: AND
000022bc: EQ
000022bd: PUSH2 0x22d9
000022c0: JUMPI
000022c1: PUSH1 0x40
000022c3: MLOAD
000022c4: PUSH4 0x1fe1e13d
000022c9: PUSH1 0xe1
000022cb: SHL
000022cc: DUP2
000022cd: MSTORE
000022ce: PUSH1 0x04
000022d0: ADD
000022d1: PUSH1 0x40
000022d3: MLOAD
000022d4: DUP1
000022d5: SWAP2
000022d6: SUB
000022d7: SWAP1
000022d8: REVERT
000022d9: JUMPDEST
000022da: PUSH1 0x02
000022dc: DUP1
000022dd: SLOAD
000022de: PUSH1 0x01
000022e0: PUSH1 0x01
000022e2: PUSH1 0xa0
000022e4: SHL
000022e5: SUB
000022e6: NOT
000022e7: AND
000022e8: PUSH1 0x01
000022ea: PUSH1 0x01
000022ec: PUSH1 0xa0
000022ee: SHL
000022ef: SUB
000022f0: DUP5
000022f1: AND
000022f2: OR
000022f3: SWAP1
000022f4: SSTORE
000022f5: JUMPDEST
000022f6: PUSH2 0x2290
000022f9: DUP4
000022fa: DUP4
000022fb: PUSH2 0x2f68
000022fe: JUMP
000022ff: JUMPDEST
00002300: PUSH1 0x00
00002302: DUP1
00002303: PUSH2 0x230a
00002306: PUSH2 0x1acd
00002309: JUMP
0000230a: JUMPDEST
0000230b: SWAP2
0000230c: POP
0000230d: SWAP2
0000230e: POP
0000230f: PUSH2 0x231f
00002312: DUP2
00002313: PUSH6 0xffffffffffff
0000231a: AND
0000231b: ISZERO
0000231c: ISZERO
0000231d: SWAP1
0000231e: JUMP
0000231f: JUMPDEST
00002320: ISZERO
00002321: DUP1
00002322: PUSH2 0x2333
00002325: JUMPI
00002326: POP
00002327: TIMESTAMP
00002328: PUSH6 0xffffffffffff
0000232f: DUP3
00002330: AND
00002331: LT
00002332: ISZERO
00002333: JUMPDEST
00002334: ISZERO
00002335: PUSH2 0x235b
00002338: JUMPI
00002339: PUSH1 0x40
0000233b: MLOAD
0000233c: PUSH4 0x19ca5ebb
00002341: PUSH1 0xe0
00002343: SHL
00002344: DUP2
00002345: MSTORE
00002346: PUSH6 0xffffffffffff
0000234d: DUP3
0000234e: AND
0000234f: PUSH1 0x04
00002351: DUP3
00002352: ADD
00002353: MSTORE
00002354: PUSH1 0x24
00002356: ADD
00002357: PUSH2 0x0de4
0000235a: JUMP
0000235b: JUMPDEST
0000235c: PUSH2 0x2377
0000235f: PUSH1 0x00
00002361: PUSH2 0x2372
00002364: PUSH1 0x02
00002366: SLOAD
00002367: PUSH1 0x01
00002369: PUSH1 0x01
0000236b: PUSH1 0xa0
0000236d: SHL
0000236e: SUB
0000236f: AND
00002370: SWAP1
00002371: JUMP
00002372: JUMPDEST
00002373: PUSH2 0x2253
00002376: JUMP
00002377: JUMPDEST
00002378: POP
00002379: PUSH2 0x2383
0000237c: PUSH1 0x00
0000237e: DUP4
0000237f: PUSH2 0x2297
00002382: JUMP
00002383: JUMPDEST
00002384: POP
00002385: POP
00002386: PUSH1 0x01
00002388: DUP1
00002389: SLOAD
0000238a: PUSH1 0x01
0000238c: PUSH1 0x01
0000238e: PUSH1 0xd0
00002390: SHL
00002391: SUB
00002392: NOT
00002393: AND
00002394: SWAP1
00002395: SSTORE
00002396: POP
00002397: JUMP
00002398: JUMPDEST
00002399: PUSH1 0x00
0000239b: DUP3
0000239c: DUP2
0000239d: MSTORE
0000239e: PUSH1 0x20
000023a0: DUP2
000023a1: SWAP1
000023a2: MSTORE
000023a3: PUSH1 0x40
000023a5: SWAP1
000023a6: KECCAK256
000023a7: PUSH1 0x01
000023a9: ADD
000023aa: SLOAD
000023ab: PUSH2 0x23b3
000023ae: DUP2
000023af: PUSH2 0x1e8a
000023b2: JUMP
000023b3: JUMPDEST
000023b4: PUSH2 0x1ec6
000023b7: DUP4
000023b8: DUP4
000023b9: PUSH2 0x2253
000023bc: JUMP
000023bd: JUMPDEST
000023be: PUSH2 0x1e9f
000023c1: PUSH1 0x00
000023c3: DUP1
000023c4: PUSH2 0x2d06
000023c7: JUMP
000023c8: JUMPDEST
000023c9: PUSH1 0x00
000023cb: DUP3
000023cc: DUP2
000023cd: MSTORE
000023ce: PUSH1 0x28
000023d0: PUSH1 0x20
000023d2: MSTORE
000023d3: PUSH1 0x40
000023d5: SWAP1
000023d6: KECCAK256
000023d7: SLOAD
000023d8: PUSH1 0xff
000023da: AND
000023db: ISZERO
000023dc: PUSH2 0x23fb
000023df: JUMPI
000023e0: PUSH1 0x40
000023e2: MLOAD
000023e3: PUSH4 0x01c4fa3d
000023e8: PUSH1 0xe5
000023ea: SHL
000023eb: DUP2
000023ec: MSTORE
000023ed: PUSH1 0x04
000023ef: DUP2
000023f0: ADD
000023f1: DUP4
000023f2: SWAP1
000023f3: MSTORE
000023f4: PUSH1 0x24
000023f6: ADD
000023f7: PUSH2 0x0de4
000023fa: JUMP
000023fb: JUMPDEST
000023fc: PUSH1 0x00
000023fe: PUSH2 0x2406
00002401: DUP5
00002402: PUSH2 0x2ff2
00002405: JUMP
00002406: JUMPDEST
00002407: SWAP1
00002408: POP
00002409: PUSH1 0x00
0000240b: PUSH2 0x2414
0000240e: DUP3
0000240f: DUP5
00002410: PUSH2 0x301f
00002413: JUMP
00002414: JUMPDEST
00002415: PUSH1 0x26
00002417: SLOAD
00002418: SWAP1
00002419: SWAP2
0000241a: POP
0000241b: PUSH1 0x01
0000241d: PUSH1 0x01
0000241f: PUSH1 0xa0
00002421: SHL
00002422: SUB
00002423: DUP1
00002424: DUP4
00002425: AND
00002426: SWAP2
00002427: AND
00002428: EQ
00002429: PUSH2 0x2445
0000242c: JUMPI
0000242d: PUSH1 0x40
0000242f: MLOAD
00002430: PUSH4 0x8baa579f
00002435: PUSH1 0xe0
00002437: SHL
00002438: DUP2
00002439: MSTORE
0000243a: PUSH1 0x04
0000243c: ADD
0000243d: PUSH1 0x40
0000243f: MLOAD
00002440: DUP1
00002441: SWAP2
00002442: SUB
00002443: SWAP1
00002444: REVERT
00002445: JUMPDEST
00002446: POP
00002447: POP
00002448: POP
00002449: PUSH1 0x00
0000244b: DUP2
0000244c: DUP2
0000244d: MSTORE
0000244e: PUSH1 0x28
00002450: PUSH1 0x20
00002452: MSTORE
00002453: PUSH1 0x40
00002455: SWAP1
00002456: KECCAK256
00002457: DUP1
00002458: SLOAD
00002459: PUSH1 0xff
0000245b: NOT
0000245c: AND
0000245d: PUSH1 0x01
0000245f: OR
00002460: SWAP1
00002461: SSTORE
00002462: PUSH1 0x25
00002464: SSTORE
00002465: POP
00002466: JUMP
00002467: JUMPDEST
00002468: PUSH1 0x22
0000246a: SLOAD
0000246b: PUSH1 0x23
0000246d: SLOAD
0000246e: PUSH1 0x00
00002470: SWAP1
00002471: PUSH3 0x015180
00002475: SWAP1
00002476: PUSH2 0x24a0
00002479: SWAP1
0000247a: PUSH32 0x00000000000000000000000000000000000000000000000000000000686ff190
0000249b: SWAP1
0000249c: PUSH2 0x3d04
0000249f: JUMP
000024a0: JUMPDEST
000024a1: PUSH2 0x24aa
000024a4: SWAP2
000024a5: SWAP1
000024a6: PUSH2 0x3cae
000024a9: JUMP
000024aa: JUMPDEST
000024ab: PUSH3 0x015180
000024af: PUSH2 0x24d8
000024b2: PUSH32 0x00000000000000000000000000000000000000000000000000000000686ff190
000024d3: TIMESTAMP
000024d4: PUSH2 0x3d04
000024d7: JUMP
000024d8: JUMPDEST
000024d9: PUSH2 0x24e2
000024dc: SWAP2
000024dd: SWAP1
000024de: PUSH2 0x3cae
000024e1: JUMP
000024e2: JUMPDEST
000024e3: PUSH2 0x24ec
000024e6: SWAP2
000024e7: SWAP1
000024e8: PUSH2 0x3d04
000024eb: JUMP
000024ec: JUMPDEST
000024ed: GT
000024ee: ISZERO
000024ef: PUSH2 0x24fa
000024f2: JUMPI
000024f3: POP
000024f4: TIMESTAMP
000024f5: PUSH1 0x23
000024f7: SSTORE
000024f8: PUSH1 0x00
000024fa: JUMPDEST
000024fb: PUSH2 0x2504
000024fe: DUP3
000024ff: DUP3
00002500: PUSH2 0x3d7f
00002503: JUMP
00002504: JUMPDEST
00002505: SWAP1
00002506: POP
00002507: PUSH1 0x21
00002509: SLOAD
0000250a: DUP2
0000250b: GT
0000250c: ISZERO
0000250d: PUSH2 0x2529
00002510: JUMPI
00002511: PUSH1 0x40
00002513: MLOAD
00002514: PUSH4 0x9f77df07
00002519: PUSH1 0xe0
0000251b: SHL
0000251c: DUP2
0000251d: MSTORE
0000251e: PUSH1 0x04
00002520: ADD
00002521: PUSH1 0x40
00002523: MLOAD
00002524: DUP1
00002525: SWAP2
00002526: SUB
00002527: SWAP1
00002528: REVERT
00002529: JUMPDEST
0000252a: PUSH1 0x22
0000252c: SSTORE
0000252d: POP
0000252e: JUMP
0000252f: JUMPDEST
00002530: PUSH1 0x01
00002532: PUSH1 0x01
00002534: PUSH1 0xa0
00002536: SHL
00002537: SUB
00002538: DUP3
00002539: AND
0000253a: PUSH1 0x00
0000253c: SWAP1
0000253d: DUP2
0000253e: MSTORE
0000253f: PUSH1 0x27
00002541: PUSH1 0x20
00002543: MSTORE
00002544: PUSH1 0x40
00002546: DUP2
00002547: KECCAK256
00002548: SLOAD
00002549: PUSH1 0xff
0000254b: AND
0000254c: PUSH3 0x0f4240
00002550: PUSH1 0x08
00002552: DUP3
00002553: PUSH1 0x03
00002555: DUP2
00002556: GT
00002557: ISZERO
00002558: PUSH2 0x2563
0000255b: JUMPI
0000255c: PUSH2 0x2563
0000255f: PUSH2 0x3866
00002562: JUMP
00002563: JUMPDEST
00002564: PUSH1 0x04
00002566: DUP2
00002567: LT
00002568: PUSH2 0x2573
0000256b: JUMPI
0000256c: PUSH2 0x2573
0000256f: PUSH2 0x3b52
00002572: JUMP
00002573: JUMPDEST
00002574: ADD
00002575: SLOAD
00002576: PUSH2 0x257f
00002579: SWAP1
0000257a: DUP6
0000257b: PUSH2 0x3c97
0000257e: JUMP
0000257f: JUMPDEST
00002580: PUSH2 0x2589
00002583: SWAP2
00002584: SWAP1
00002585: PUSH2 0x3cae
00002588: JUMP
00002589: JUMPDEST
0000258a: SWAP5
0000258b: SWAP4
0000258c: POP
0000258d: POP
0000258e: POP
0000258f: POP
00002590: JUMP
00002591: JUMPDEST
00002592: PUSH1 0x40
00002594: MLOAD
00002595: PUSH1 0x01
00002597: PUSH1 0x01
00002599: PUSH1 0xa0
0000259b: SHL
0000259c: SUB
0000259d: DUP5
0000259e: DUP2
0000259f: AND
000025a0: PUSH1 0x24
000025a2: DUP4
000025a3: ADD
000025a4: MSTORE
000025a5: DUP4
000025a6: DUP2
000025a7: AND
000025a8: PUSH1 0x44
000025aa: DUP4
000025ab: ADD
000025ac: MSTORE
000025ad: PUSH1 0x64
000025af: DUP3
000025b0: ADD
000025b1: DUP4
000025b2: SWAP1
000025b3: MSTORE
000025b4: PUSH2 0x1ec6
000025b7: SWAP2
000025b8: DUP7
000025b9: SWAP2
000025ba: DUP3
000025bb: AND
000025bc: SWAP1
000025bd: PUSH4 0x23b872dd
000025c2: SWAP1
000025c3: PUSH1 0x84
000025c5: ADD
000025c6: PUSH2 0x1f31
000025c9: JUMP
000025ca: JUMPDEST
000025cb: PUSH1 0x01
000025cd: PUSH1 0x01
000025cf: PUSH1 0xa0
000025d1: SHL
000025d2: SUB
000025d3: DUP4
000025d4: AND
000025d5: PUSH1 0x00
000025d7: SWAP1
000025d8: DUP2
000025d9: MSTORE
000025da: PUSH1 0x27
000025dc: PUSH1 0x20
000025de: MSTORE
000025df: PUSH1 0x40
000025e1: DUP1
000025e2: DUP3
000025e3: KECCAK256
000025e4: DUP2
000025e5: MLOAD
000025e6: PUSH1 0xa0
000025e8: DUP2
000025e9: ADD
000025ea: SWAP1
000025eb: SWAP3
000025ec: MSTORE
000025ed: DUP1
000025ee: SLOAD
000025ef: DUP3
000025f0: SWAP1
000025f1: PUSH1 0xff
000025f3: AND
000025f4: PUSH1 0x03
000025f6: DUP2
000025f7: GT
000025f8: ISZERO
000025f9: PUSH2 0x2604
000025fc: JUMPI
000025fd: PUSH2 0x2604
00002600: PUSH2 0x3866
00002603: JUMP
00002604: JUMPDEST
00002605: PUSH1 0x03
00002607: DUP2
00002608: GT
00002609: ISZERO
0000260a: PUSH2 0x2615
0000260d: JUMPI
0000260e: PUSH2 0x2615
00002611: PUSH2 0x3866
00002614: JUMP
00002615: JUMPDEST
00002616: DUP2
00002617: MSTORE
00002618: DUP2
00002619: SLOAD
0000261a: PUSH1 0x20
0000261c: SWAP1
0000261d: SWAP2
0000261e: ADD
0000261f: SWAP1
00002620: PUSH2 0x0100
00002623: SWAP1
00002624: DIV
00002625: PUSH1 0xff
00002627: AND
00002628: PUSH1 0x03
0000262a: DUP2
0000262b: GT
0000262c: ISZERO
0000262d: PUSH2 0x2638
00002630: JUMPI
00002631: PUSH2 0x2638
00002634: PUSH2 0x3866
00002637: JUMP
00002638: JUMPDEST
00002639: PUSH1 0x03
0000263b: DUP2
0000263c: GT
0000263d: ISZERO
0000263e: PUSH2 0x2649
00002641: JUMPI
00002642: PUSH2 0x2649
00002645: PUSH2 0x3866
00002648: JUMP
00002649: JUMPDEST
0000264a: DUP2
0000264b: MSTORE
0000264c: PUSH1 0x01
0000264e: DUP3
0000264f: ADD
00002650: SLOAD
00002651: PUSH1 0x20
00002653: DUP3
00002654: ADD
00002655: MSTORE
00002656: PUSH1 0x02
00002658: DUP3
00002659: ADD
0000265a: SLOAD
0000265b: PUSH1 0x40
0000265d: DUP3
0000265e: ADD
0000265f: MSTORE
00002660: PUSH1 0x03
00002662: SWAP1
00002663: SWAP2
00002664: ADD
00002665: SLOAD
00002666: PUSH1 0x01
00002668: PUSH1 0x01
0000266a: PUSH1 0xa0
0000266c: SHL
0000266d: SUB
0000266e: AND
0000266f: PUSH1 0x60
00002671: SWAP2
00002672: DUP3
00002673: ADD
00002674: MSTORE
00002675: DUP2
00002676: ADD
00002677: MLOAD
00002678: SWAP1
00002679: SWAP2
0000267a: POP
0000267b: ISZERO
0000267c: DUP1
0000267d: ISZERO
0000267e: PUSH2 0x268f
00002681: JUMPI
00002682: POP
00002683: PUSH1 0x01
00002685: PUSH1 0x01
00002687: PUSH1 0xa0
00002689: SHL
0000268a: SUB
0000268b: DUP4
0000268c: AND
0000268d: ISZERO
0000268e: ISZERO
0000268f: JUMPDEST
00002690: ISZERO
00002691: PUSH2 0x2782
00002694: JUMPI
00002695: PUSH1 0x01
00002697: PUSH1 0x01
00002699: PUSH1 0xa0
0000269b: SHL
0000269c: SUB
0000269d: DUP4
0000269e: AND
0000269f: PUSH1 0x00
000026a1: SWAP1
000026a2: DUP2
000026a3: MSTORE
000026a4: PUSH1 0x27
000026a6: PUSH1 0x20
000026a8: MSTORE
000026a9: PUSH1 0x40
000026ab: SWAP1
000026ac: DUP2
000026ad: SWAP1
000026ae: KECCAK256
000026af: DUP2
000026b0: MLOAD
000026b1: PUSH1 0xa0
000026b3: DUP2
000026b4: ADD
000026b5: SWAP1
000026b6: SWAP3
000026b7: MSTORE
000026b8: DUP1
000026b9: SLOAD
000026ba: PUSH2 0x274c
000026bd: SWAP3
000026be: DUP7
000026bf: SWAP3
000026c0: SWAP1
000026c1: SWAP2
000026c2: DUP3
000026c3: SWAP1
000026c4: PUSH1 0xff
000026c6: AND
000026c7: PUSH1 0x03
000026c9: DUP2
000026ca: GT
000026cb: ISZERO
000026cc: PUSH2 0x26d7
000026cf: JUMPI
000026d0: PUSH2 0x26d7
000026d3: PUSH2 0x3866
000026d6: JUMP
000026d7: JUMPDEST
000026d8: PUSH1 0x03
000026da: DUP2
000026db: GT
000026dc: ISZERO
000026dd: PUSH2 0x26e8
000026e0: JUMPI
000026e1: PUSH2 0x26e8
000026e4: PUSH2 0x3866
000026e7: JUMP
000026e8: JUMPDEST
000026e9: DUP2
000026ea: MSTORE
000026eb: DUP2
000026ec: SLOAD
000026ed: PUSH1 0x20
000026ef: SWAP1
000026f0: SWAP2
000026f1: ADD
000026f2: SWAP1
000026f3: PUSH2 0x0100
000026f6: SWAP1
000026f7: DIV
000026f8: PUSH1 0xff
000026fa: AND
000026fb: PUSH1 0x03
000026fd: DUP2
000026fe: GT
000026ff: ISZERO
00002700: PUSH2 0x270b
00002703: JUMPI
00002704: PUSH2 0x270b
00002707: PUSH2 0x3866
0000270a: JUMP
0000270b: JUMPDEST
0000270c: PUSH1 0x03
0000270e: DUP2
0000270f: GT
00002710: ISZERO
00002711: PUSH2 0x271c
00002714: JUMPI
00002715: PUSH2 0x271c
00002718: PUSH2 0x3866
0000271b: JUMP
0000271c: JUMPDEST
0000271d: DUP2
0000271e: MSTORE
0000271f: PUSH1 0x01
00002721: DUP3
00002722: ADD
00002723: SLOAD
00002724: PUSH1 0x20
00002726: DUP3
00002727: ADD
00002728: MSTORE
00002729: PUSH1 0x02
0000272b: DUP3
0000272c: ADD
0000272d: SLOAD
0000272e: PUSH1 0x40
00002730: DUP3
00002731: ADD
00002732: MSTORE
00002733: PUSH1 0x03
00002735: SWAP1
00002736: SWAP2
00002737: ADD
00002738: SLOAD
00002739: PUSH1 0x01
0000273b: PUSH1 0x01
0000273d: PUSH1 0xa0
0000273f: SHL
00002740: SUB
00002741: AND
00002742: PUSH1 0x60
00002744: SWAP1
00002745: SWAP2
00002746: ADD
00002747: MSTORE
00002748: PUSH2 0x3049
0000274b: JUMP
0000274c: JUMPDEST
0000274d: PUSH1 0x01
0000274f: PUSH1 0x01
00002751: PUSH1 0xa0
00002753: SHL
00002754: SUB
00002755: DUP5
00002756: DUP2
00002757: AND
00002758: PUSH1 0x00
0000275a: SWAP1
0000275b: DUP2
0000275c: MSTORE
0000275d: PUSH1 0x27
0000275f: PUSH1 0x20
00002761: MSTORE
00002762: PUSH1 0x40
00002764: SWAP1
00002765: KECCAK256
00002766: PUSH1 0x03
00002768: ADD
00002769: DUP1
0000276a: SLOAD
0000276b: PUSH1 0x01
0000276d: PUSH1 0x01
0000276f: PUSH1 0xa0
00002771: SHL
00002772: SUB
00002773: NOT
00002774: AND
00002775: SWAP2
00002776: DUP6
00002777: AND
00002778: SWAP2
00002779: DUP3
0000277a: OR
0000277b: SWAP1
0000277c: SSTORE
0000277d: PUSH1 0x80
0000277f: DUP3
00002780: ADD
00002781: MSTORE
00002782: JUMPDEST
00002783: PUSH1 0x00
00002785: JUMPDEST
00002786: PUSH1 0x03
00002788: DUP2
00002789: LT
0000278a: ISZERO
0000278b: PUSH2 0x14c8
0000278e: JUMPI
0000278f: PUSH1 0x80
00002791: DUP3
00002792: ADD
00002793: MLOAD
00002794: PUSH1 0x01
00002796: PUSH1 0x01
00002798: PUSH1 0xa0
0000279a: SHL
0000279b: SUB
0000279c: AND
0000279d: ISZERO
0000279e: PUSH2 0x14c8
000027a1: JUMPI
000027a2: PUSH1 0x80
000027a4: DUP3
000027a5: ADD
000027a6: MLOAD
000027a7: PUSH1 0x01
000027a9: PUSH1 0x01
000027ab: PUSH1 0xa0
000027ad: SHL
000027ae: SUB
000027af: DUP2
000027b0: AND
000027b1: PUSH1 0x00
000027b3: SWAP1
000027b4: DUP2
000027b5: MSTORE
000027b6: PUSH1 0x27
000027b8: PUSH1 0x20
000027ba: MSTORE
000027bb: PUSH1 0x40
000027bd: SWAP1
000027be: DUP2
000027bf: SWAP1
000027c0: KECCAK256
000027c1: DUP2
000027c2: MLOAD
000027c3: PUSH1 0xa0
000027c5: DUP2
000027c6: ADD
000027c7: SWAP1
000027c8: SWAP3
000027c9: MSTORE
000027ca: DUP1
000027cb: SLOAD
000027cc: DUP3
000027cd: SWAP1
000027ce: PUSH1 0xff
000027d0: AND
000027d1: PUSH1 0x03
000027d3: DUP2
000027d4: GT
000027d5: ISZERO
000027d6: PUSH2 0x27e1
000027d9: JUMPI
000027da: PUSH2 0x27e1
000027dd: PUSH2 0x3866
000027e0: JUMP
000027e1: JUMPDEST
000027e2: PUSH1 0x03
000027e4: DUP2
000027e5: GT
000027e6: ISZERO
000027e7: PUSH2 0x27f2
000027ea: JUMPI
000027eb: PUSH2 0x27f2
000027ee: PUSH2 0x3866
000027f1: JUMP
000027f2: JUMPDEST
000027f3: DUP2
000027f4: MSTORE
000027f5: DUP2
000027f6: SLOAD
000027f7: PUSH1 0x20
000027f9: SWAP1
000027fa: SWAP2
000027fb: ADD
000027fc: SWAP1
000027fd: PUSH2 0x0100
00002800: SWAP1
00002801: DIV
00002802: PUSH1 0xff
00002804: AND
00002805: PUSH1 0x03
00002807: DUP2
00002808: GT
00002809: ISZERO
0000280a: PUSH2 0x2815
0000280d: JUMPI
0000280e: PUSH2 0x2815
00002811: PUSH2 0x3866
00002814: JUMP
00002815: JUMPDEST
00002816: PUSH1 0x03
00002818: DUP2
00002819: GT
0000281a: ISZERO
0000281b: PUSH2 0x2826
0000281e: JUMPI
0000281f: PUSH2 0x2826
00002822: PUSH2 0x3866
00002825: JUMP
00002826: JUMPDEST
00002827: DUP2
00002828: MSTORE
00002829: PUSH1 0x01
0000282b: DUP3
0000282c: ADD
0000282d: SLOAD
0000282e: PUSH1 0x20
00002830: DUP3
00002831: ADD
00002832: MSTORE
00002833: PUSH1 0x02
00002835: DUP3
00002836: ADD
00002837: SLOAD
00002838: PUSH1 0x40
0000283a: DUP3
0000283b: ADD
0000283c: MSTORE
0000283d: PUSH1 0x03
0000283f: SWAP2
00002840: DUP3
00002841: ADD
00002842: SLOAD
00002843: PUSH1 0x01
00002845: PUSH1 0x01
00002847: PUSH1 0xa0
00002849: SHL
0000284a: SUB
0000284b: AND
0000284c: PUSH1 0x60
0000284e: SWAP1
0000284f: SWAP2
00002850: ADD
00002851: MSTORE
00002852: SWAP1
00002853: SWAP4
00002854: POP
00002855: PUSH1 0x00
00002857: SWAP1
00002858: PUSH3 0x0f4240
0000285c: SWAP1
0000285d: PUSH1 0x0c
0000285f: SWAP1
00002860: DUP6
00002861: SWAP1
00002862: DUP2
00002863: LT
00002864: PUSH2 0x286f
00002867: JUMPI
00002868: PUSH2 0x286f
0000286b: PUSH2 0x3b52
0000286e: JUMP
0000286f: JUMPDEST
00002870: PUSH1 0x04
00002872: MUL
00002873: ADD
00002874: DUP6
00002875: PUSH1 0x20
00002877: ADD
00002878: MLOAD
00002879: PUSH1 0x03
0000287b: DUP2
0000287c: GT
0000287d: ISZERO
0000287e: PUSH2 0x2889
00002881: JUMPI
00002882: PUSH2 0x2889
00002885: PUSH2 0x3866
00002888: JUMP
00002889: JUMPDEST
0000288a: PUSH1 0x04
0000288c: DUP2
0000288d: LT
0000288e: PUSH2 0x2899
00002891: JUMPI
00002892: PUSH2 0x2899
00002895: PUSH2 0x3b52
00002898: JUMP
00002899: JUMPDEST
0000289a: ADD
0000289b: SLOAD
0000289c: PUSH2 0x28a5
0000289f: SWAP1
000028a0: DUP8
000028a1: PUSH2 0x3c97
000028a4: JUMP
000028a5: JUMPDEST
000028a6: PUSH2 0x28af
000028a9: SWAP2
000028aa: SWAP1
000028ab: PUSH2 0x3cae
000028ae: JUMP
000028af: JUMPDEST
000028b0: SWAP1
000028b1: POP
000028b2: PUSH2 0x28e5
000028b5: PUSH1 0x01
000028b7: PUSH1 0x01
000028b9: PUSH1 0xa0
000028bb: SHL
000028bc: SUB
000028bd: PUSH32 0x000000000000000000000000024475619e5d37cf7b5b445e943dbeb7edd2f408
000028de: AND
000028df: DUP4
000028e0: DUP4
000028e1: PUSH2 0x1f04
000028e4: JUMP
000028e5: JUMPDEST
000028e6: POP
000028e7: POP
000028e8: PUSH1 0x01
000028ea: ADD
000028eb: PUSH2 0x2785
000028ee: JUMP
000028ef: JUMPDEST
000028f0: PUSH1 0x12
000028f2: PUSH1 0x01
000028f4: PUSH1 0x01
000028f6: PUSH1 0xa0
000028f8: SHL
000028f9: SUB
000028fa: DUP4
000028fb: AND
000028fc: ISZERO
000028fd: PUSH2 0x2968
00002900: JUMPI
00002901: DUP3
00002902: PUSH1 0x01
00002904: PUSH1 0x01
00002906: PUSH1 0xa0
00002908: SHL
00002909: SUB
0000290a: AND
0000290b: PUSH4 0x313ce567
00002910: PUSH1 0x40
00002912: MLOAD
00002913: DUP2
00002914: PUSH4 0xffffffff
00002919: AND
0000291a: PUSH1 0xe0
0000291c: SHL
0000291d: DUP2
0000291e: MSTORE
0000291f: PUSH1 0x04
00002921: ADD
00002922: PUSH1 0x20
00002924: PUSH1 0x40
00002926: MLOAD
00002927: DUP1
00002928: DUP4
00002929: SUB
0000292a: DUP2
0000292b: DUP7
0000292c: GAS
0000292d: STATICCALL
0000292e: ISZERO
0000292f: DUP1
00002930: ISZERO
00002931: PUSH2 0x293e
00002934: JUMPI
00002935: RETURNDATASIZE
00002936: PUSH1 0x00
00002938: DUP1
00002939: RETURNDATACOPY
0000293a: RETURNDATASIZE
0000293b: PUSH1 0x00
0000293d: REVERT
0000293e: JUMPDEST
0000293f: POP
00002940: POP
00002941: POP
00002942: POP
00002943: PUSH1 0x40
00002945: MLOAD
00002946: RETURNDATASIZE
00002947: PUSH1 0x1f
00002949: NOT
0000294a: PUSH1 0x1f
0000294c: DUP3
0000294d: ADD
0000294e: AND
0000294f: DUP3
00002950: ADD
00002951: DUP1
00002952: PUSH1 0x40
00002954: MSTORE
00002955: POP
00002956: DUP2
00002957: ADD
00002958: SWAP1
00002959: PUSH2 0x2962
0000295c: SWAP2
0000295d: SWAP1
0000295e: PUSH2 0x3b68
00002961: JUMP
00002962: JUMPDEST
00002963: PUSH1 0xff
00002965: AND
00002966: SWAP1
00002967: POP
00002968: JUMPDEST
00002969: PUSH1 0x00
0000296b: PUSH2 0x2975
0000296e: DUP3
0000296f: PUSH1 0x0a
00002971: PUSH2 0x3d17
00002974: JUMP
00002975: JUMPDEST
00002976: PUSH2 0x297f
00002979: DUP5
0000297a: DUP8
0000297b: PUSH2 0x3c97
0000297e: JUMP
0000297f: JUMPDEST
00002980: PUSH2 0x2989
00002983: SWAP2
00002984: SWAP1
00002985: PUSH2 0x3cae
00002988: JUMP
00002989: JUMPDEST
0000298a: PUSH1 0x01
0000298c: PUSH1 0x01
0000298e: PUSH1 0xa0
00002990: SHL
00002991: SUB
00002992: DUP8
00002993: AND
00002994: PUSH1 0x00
00002996: SWAP1
00002997: DUP2
00002998: MSTORE
00002999: PUSH1 0x27
0000299b: PUSH1 0x20
0000299d: MSTORE
0000299e: PUSH1 0x40
000029a0: DUP2
000029a1: KECCAK256
000029a2: PUSH1 0x02
000029a4: ADD
000029a5: DUP1
000029a6: SLOAD
000029a7: SWAP3
000029a8: SWAP4
000029a9: POP
000029aa: DUP4
000029ab: SWAP3
000029ac: SWAP1
000029ad: SWAP2
000029ae: SWAP1
000029af: PUSH2 0x29b9
000029b2: SWAP1
000029b3: DUP5
000029b4: SWAP1
000029b5: PUSH2 0x3d7f
000029b8: JUMP
000029b9: JUMPDEST
000029ba: SWAP1
000029bb: SWAP2
000029bc: SSTORE
000029bd: POP
000029be: POP
000029bf: PUSH1 0x01
000029c1: PUSH1 0x01
000029c3: PUSH1 0xa0
000029c5: SHL
000029c6: SUB
000029c7: DUP7
000029c8: AND
000029c9: PUSH1 0x00
000029cb: SWAP1
000029cc: DUP2
000029cd: MSTORE
000029ce: PUSH1 0x27
000029d0: PUSH1 0x20
000029d2: MSTORE
000029d3: PUSH1 0x40
000029d5: DUP1
000029d6: DUP3
000029d7: KECCAK256
000029d8: DUP2
000029d9: MLOAD
000029da: PUSH1 0xa0
000029dc: DUP2
000029dd: ADD
000029de: SWAP1
000029df: SWAP3
000029e0: MSTORE
000029e1: DUP1
000029e2: SLOAD
000029e3: DUP3
000029e4: SWAP1
000029e5: PUSH1 0xff
000029e7: AND
000029e8: PUSH1 0x03
000029ea: DUP2
000029eb: GT
000029ec: ISZERO
000029ed: PUSH2 0x29f8
000029f0: JUMPI
000029f1: PUSH2 0x29f8
000029f4: PUSH2 0x3866
000029f7: JUMP
000029f8: JUMPDEST
000029f9: PUSH1 0x03
000029fb: DUP2
000029fc: GT
000029fd: ISZERO
000029fe: PUSH2 0x2a09
00002a01: JUMPI
00002a02: PUSH2 0x2a09
00002a05: PUSH2 0x3866
00002a08: JUMP
00002a09: JUMPDEST
00002a0a: DUP2
00002a0b: MSTORE
00002a0c: DUP2
00002a0d: SLOAD
00002a0e: PUSH1 0x20
00002a10: SWAP1
00002a11: SWAP2
00002a12: ADD
00002a13: SWAP1
00002a14: PUSH2 0x0100
00002a17: SWAP1
00002a18: DIV
00002a19: PUSH1 0xff
00002a1b: AND
00002a1c: PUSH1 0x03
00002a1e: DUP2
00002a1f: GT
00002a20: ISZERO
00002a21: PUSH2 0x2a2c
00002a24: JUMPI
00002a25: PUSH2 0x2a2c
00002a28: PUSH2 0x3866
00002a2b: JUMP
00002a2c: JUMPDEST
00002a2d: PUSH1 0x03
00002a2f: DUP2
00002a30: GT
00002a31: ISZERO
00002a32: PUSH2 0x2a3d
00002a35: JUMPI
00002a36: PUSH2 0x2a3d
00002a39: PUSH2 0x3866
00002a3c: JUMP
00002a3d: JUMPDEST
00002a3e: DUP2
00002a3f: MSTORE
00002a40: PUSH1 0x01
00002a42: DUP3
00002a43: ADD
00002a44: SLOAD
00002a45: PUSH1 0x20
00002a47: DUP3
00002a48: ADD
00002a49: MSTORE
00002a4a: PUSH1 0x02
00002a4c: DUP3
00002a4d: ADD
00002a4e: SLOAD
00002a4f: PUSH1 0x40
00002a51: DUP3
00002a52: ADD
00002a53: MSTORE
00002a54: PUSH1 0x03
00002a56: SWAP2
00002a57: DUP3
00002a58: ADD
00002a59: SLOAD
00002a5a: PUSH1 0x01
00002a5c: PUSH1 0x01
00002a5e: PUSH1 0xa0
00002a60: SHL
00002a61: SUB
00002a62: AND
00002a63: PUSH1 0x60
00002a65: SWAP1
00002a66: SWAP2
00002a67: ADD
00002a68: MSTORE
00002a69: SWAP1
00002a6a: SWAP2
00002a6b: POP
00002a6c: DUP2
00002a6d: MLOAD
00002a6e: PUSH1 0x03
00002a70: DUP2
00002a71: GT
00002a72: ISZERO
00002a73: PUSH2 0x2a7e
00002a76: JUMPI
00002a77: PUSH2 0x2a7e
00002a7a: PUSH2 0x3866
00002a7d: JUMP
00002a7e: JUMPDEST
00002a7f: EQ
00002a80: PUSH2 0x2b52
00002a83: JUMPI
00002a84: PUSH1 0x1b
00002a86: SLOAD
00002a87: PUSH2 0x2a94
00002a8a: SWAP1
00002a8b: PUSH3 0x0f4240
00002a8f: SWAP1
00002a90: PUSH2 0x3c97
00002a93: JUMP
00002a94: JUMPDEST
00002a95: DUP2
00002a96: PUSH1 0x60
00002a98: ADD
00002a99: MLOAD
00002a9a: LT
00002a9b: PUSH2 0x2ace
00002a9e: JUMPI
00002a9f: PUSH1 0x01
00002aa1: PUSH1 0x01
00002aa3: PUSH1 0xa0
00002aa5: SHL
00002aa6: SUB
00002aa7: DUP8
00002aa8: AND
00002aa9: PUSH1 0x00
00002aab: SWAP1
00002aac: DUP2
00002aad: MSTORE
00002aae: PUSH1 0x27
00002ab0: PUSH1 0x20
00002ab2: MSTORE
00002ab3: PUSH1 0x40
00002ab5: SWAP1
00002ab6: KECCAK256
00002ab7: DUP1
00002ab8: SLOAD
00002ab9: PUSH1 0x03
00002abb: SWAP2
00002abc: SWAP1
00002abd: PUSH1 0xff
00002abf: NOT
00002ac0: AND
00002ac1: PUSH1 0x01
00002ac3: DUP4
00002ac4: JUMPDEST
00002ac5: MUL
00002ac6: OR
00002ac7: SWAP1
00002ac8: SSTORE
00002ac9: POP
00002aca: PUSH2 0x2b52
00002acd: JUMP
00002ace: JUMPDEST
00002acf: PUSH1 0x1a
00002ad1: SLOAD
00002ad2: PUSH2 0x2adf
00002ad5: SWAP1
00002ad6: PUSH3 0x0f4240
00002ada: SWAP1
00002adb: PUSH2 0x3c97
00002ade: JUMP
00002adf: JUMPDEST
00002ae0: DUP2
00002ae1: PUSH1 0x60
00002ae3: ADD
00002ae4: MLOAD
00002ae5: LT
00002ae6: PUSH2 0x2b13
00002ae9: JUMPI
00002aea: PUSH1 0x01
00002aec: PUSH1 0x01
00002aee: PUSH1 0xa0
00002af0: SHL
00002af1: SUB
00002af2: DUP8
00002af3: AND
00002af4: PUSH1 0x00
00002af6: SWAP1
00002af7: DUP2
00002af8: MSTORE
00002af9: PUSH1 0x27
00002afb: PUSH1 0x20
00002afd: MSTORE
00002afe: PUSH1 0x40
00002b00: SWAP1
00002b01: KECCAK256
00002b02: DUP1
00002b03: SLOAD
00002b04: PUSH1 0x02
00002b06: SWAP2
00002b07: SWAP1
00002b08: PUSH1 0xff
00002b0a: NOT
00002b0b: AND
00002b0c: PUSH1 0x01
00002b0e: DUP4
00002b0f: PUSH2 0x2ac4
00002b12: JUMP
00002b13: JUMPDEST
00002b14: PUSH1 0x19
00002b16: SLOAD
00002b17: PUSH2 0x2b24
00002b1a: SWAP1
00002b1b: PUSH3 0x0f4240
00002b1f: SWAP1
00002b20: PUSH2 0x3c97
00002b23: JUMP
00002b24: JUMPDEST
00002b25: DUP2
00002b26: PUSH1 0x60
00002b28: ADD
00002b29: MLOAD
00002b2a: LT
00002b2b: PUSH2 0x2b52
00002b2e: JUMPI
00002b2f: PUSH1 0x01
00002b31: PUSH1 0x01
00002b33: PUSH1 0xa0
00002b35: SHL
00002b36: SUB
00002b37: DUP8
00002b38: AND
00002b39: PUSH1 0x00
00002b3b: SWAP1
00002b3c: DUP2
00002b3d: MSTORE
00002b3e: PUSH1 0x27
00002b40: PUSH1 0x20
00002b42: MSTORE
00002b43: PUSH1 0x40
00002b45: SWAP1
00002b46: KECCAK256
00002b47: DUP1
00002b48: SLOAD
00002b49: PUSH1 0xff
00002b4b: NOT
00002b4c: AND
00002b4d: PUSH1 0x01
00002b4f: OR
00002b50: SWAP1
00002b51: SSTORE
00002b52: JUMPDEST
00002b53: PUSH2 0x2b5c
00002b56: DUP8
00002b57: DUP3
00002b58: PUSH2 0x3049
00002b5b: JUMP
00002b5c: JUMPDEST
00002b5d: POP
00002b5e: POP
00002b5f: POP
00002b60: POP
00002b61: POP
00002b62: POP
00002b63: POP
00002b64: JUMP
00002b65: JUMPDEST
00002b66: PUSH2 0x2b6f
00002b69: DUP3
00002b6a: DUP3
00002b6b: PUSH2 0x14cf
00002b6e: JUMP
00002b6f: JUMPDEST
00002b70: PUSH2 0x0d45
00002b73: JUMPI
00002b74: PUSH1 0x40
00002b76: MLOAD
00002b77: PUSH4 0xe2517d3f
00002b7c: PUSH1 0xe0
00002b7e: SHL
00002b7f: DUP2
00002b80: MSTORE
00002b81: PUSH1 0x01
00002b83: PUSH1 0x01
00002b85: PUSH1 0xa0
00002b87: SHL
00002b88: SUB
00002b89: DUP3
00002b8a: AND
00002b8b: PUSH1 0x04
00002b8d: DUP3
00002b8e: ADD
00002b8f: MSTORE
00002b90: PUSH1 0x24
00002b92: DUP2
00002b93: ADD
00002b94: DUP4
00002b95: SWAP1
00002b96: MSTORE
00002b97: PUSH1 0x44
00002b99: ADD
00002b9a: PUSH2 0x0de4
00002b9d: JUMP
00002b9e: JUMPDEST
00002b9f: PUSH1 0x02
00002ba1: SLOAD
00002ba2: PUSH1 0x01
00002ba4: PUSH1 0xd0
00002ba6: SHL
00002ba7: SWAP1
00002ba8: DIV
00002ba9: PUSH6 0xffffffffffff
00002bb0: AND
00002bb1: DUP1
00002bb2: ISZERO
00002bb3: PUSH2 0x2c21
00002bb6: JUMPI
00002bb7: TIMESTAMP
00002bb8: PUSH6 0xffffffffffff
00002bbf: DUP3
00002bc0: AND
00002bc1: LT
00002bc2: ISZERO
00002bc3: PUSH2 0x2bf7
00002bc6: JUMPI
00002bc7: PUSH1 0x02
00002bc9: SLOAD
00002bca: PUSH1 0x01
00002bcc: DUP1
00002bcd: SLOAD
00002bce: PUSH1 0x01
00002bd0: PUSH1 0x01
00002bd2: PUSH1 0xd0
00002bd4: SHL
00002bd5: SUB
00002bd6: AND
00002bd7: PUSH1 0x01
00002bd9: PUSH1 0xa0
00002bdb: SHL
00002bdc: SWAP1
00002bdd: SWAP3
00002bde: DIV
00002bdf: PUSH6 0xffffffffffff
00002be6: AND
00002be7: PUSH1 0x01
00002be9: PUSH1 0xd0
00002beb: SHL
00002bec: MUL
00002bed: SWAP2
00002bee: SWAP1
00002bef: SWAP2
00002bf0: OR
00002bf1: SWAP1
00002bf2: SSTORE
00002bf3: PUSH2 0x2c21
00002bf6: JUMP
00002bf7: JUMPDEST
00002bf8: PUSH1 0x40
00002bfa: MLOAD
00002bfb: PUSH32 0x2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec5
00002c1c: SWAP1
00002c1d: PUSH1 0x00
00002c1f: SWAP1
00002c20: LOG1
00002c21: JUMPDEST
00002c22: POP
00002c23: PUSH1 0x02
00002c25: DUP1
00002c26: SLOAD
00002c27: PUSH1 0x01
00002c29: PUSH1 0x01
00002c2b: PUSH1 0xa0
00002c2d: SHL
00002c2e: SUB
00002c2f: AND
00002c30: PUSH1 0x01
00002c32: PUSH1 0xa0
00002c34: SHL
00002c35: PUSH6 0xffffffffffff
00002c3c: SWAP5
00002c3d: DUP6
00002c3e: AND
00002c3f: MUL
00002c40: PUSH1 0x01
00002c42: PUSH1 0x01
00002c44: PUSH1 0xd0
00002c46: SHL
00002c47: SUB
00002c48: AND
00002c49: OR
00002c4a: PUSH1 0x01
00002c4c: PUSH1 0xd0
00002c4e: SHL
00002c4f: SWAP3
00002c50: SWAP1
00002c51: SWAP4
00002c52: AND
00002c53: SWAP2
00002c54: SWAP1
00002c55: SWAP2
00002c56: MUL
00002c57: SWAP2
00002c58: SWAP1
00002c59: SWAP2
00002c5a: OR
00002c5b: SWAP1
00002c5c: SSTORE
00002c5d: JUMP
00002c5e: JUMPDEST
00002c5f: PUSH1 0x00
00002c61: DUP1
00002c62: PUSH1 0x20
00002c64: PUSH1 0x00
00002c66: DUP5
00002c67: MLOAD
00002c68: PUSH1 0x20
00002c6a: DUP7
00002c6b: ADD
00002c6c: PUSH1 0x00
00002c6e: DUP9
00002c6f: GAS
00002c70: CALL
00002c71: DUP1
00002c72: PUSH2 0x2c81
00002c75: JUMPI
00002c76: PUSH1 0x40
00002c78: MLOAD
00002c79: RETURNDATASIZE
00002c7a: PUSH1 0x00
00002c7c: DUP3
00002c7d: RETURNDATACOPY
00002c7e: RETURNDATASIZE
00002c7f: DUP2
00002c80: REVERT
00002c81: JUMPDEST
00002c82: POP
00002c83: POP
00002c84: PUSH1 0x00
00002c86: MLOAD
00002c87: RETURNDATASIZE
00002c88: SWAP2
00002c89: POP
00002c8a: DUP2
00002c8b: ISZERO
00002c8c: PUSH2 0x2c99
00002c8f: JUMPI
00002c90: DUP1
00002c91: PUSH1 0x01
00002c93: EQ
00002c94: ISZERO
00002c95: PUSH2 0x2ca6
00002c98: JUMP
00002c99: JUMPDEST
00002c9a: PUSH1 0x01
00002c9c: PUSH1 0x01
00002c9e: PUSH1 0xa0
00002ca0: SHL
00002ca1: SUB
00002ca2: DUP5
00002ca3: AND
00002ca4: EXTCODESIZE
00002ca5: ISZERO
00002ca6: JUMPDEST
00002ca7: ISZERO
00002ca8: PUSH2 0x1ec6
00002cab: JUMPI
00002cac: PUSH1 0x40
00002cae: MLOAD
00002caf: PUSH4 0x5274afe7
00002cb4: PUSH1 0xe0
00002cb6: SHL
00002cb7: DUP2
00002cb8: MSTORE
00002cb9: PUSH1 0x01
00002cbb: PUSH1 0x01
00002cbd: PUSH1 0xa0
00002cbf: SHL
00002cc0: SUB
00002cc1: DUP6
00002cc2: AND
00002cc3: PUSH1 0x04
00002cc5: DUP3
00002cc6: ADD
00002cc7: MSTORE
00002cc8: PUSH1 0x24
00002cca: ADD
00002ccb: PUSH2 0x0de4
00002cce: JUMP
00002ccf: JUMPDEST
00002cd0: PUSH1 0x00
00002cd2: PUSH6 0xffffffffffff
00002cd9: DUP3
00002cda: GT
00002cdb: ISZERO
00002cdc: PUSH2 0x2d02
00002cdf: JUMPI
00002ce0: PUSH1 0x40
00002ce2: MLOAD
00002ce3: PUSH4 0x06dfcc65
00002ce8: PUSH1 0xe4
00002cea: SHL
00002ceb: DUP2
00002cec: MSTORE
00002ced: PUSH1 0x30
00002cef: PUSH1 0x04
00002cf1: DUP3
00002cf2: ADD
00002cf3: MSTORE
00002cf4: PUSH1 0x24
00002cf6: DUP2
00002cf7: ADD
00002cf8: DUP4
00002cf9: SWAP1
00002cfa: MSTORE
00002cfb: PUSH1 0x44
00002cfd: ADD
00002cfe: PUSH2 0x0de4
00002d01: JUMP
00002d02: JUMPDEST
00002d03: POP
00002d04: SWAP1
00002d05: JUMP
00002d06: JUMPDEST
00002d07: PUSH1 0x00
00002d09: PUSH2 0x2d10
00002d0c: PUSH2 0x1acd
00002d0f: JUMP
00002d10: JUMPDEST
00002d11: PUSH1 0x01
00002d13: DUP1
00002d14: SLOAD
00002d15: PUSH6 0xffffffffffff
00002d1c: DUP7
00002d1d: AND
00002d1e: PUSH1 0x01
00002d20: PUSH1 0xa0
00002d22: SHL
00002d23: MUL
00002d24: PUSH1 0x01
00002d26: PUSH1 0x01
00002d28: PUSH1 0xd0
00002d2a: SHL
00002d2b: SUB
00002d2c: NOT
00002d2d: SWAP1
00002d2e: SWAP2
00002d2f: AND
00002d30: PUSH1 0x01
00002d32: PUSH1 0x01
00002d34: PUSH1 0xa0
00002d36: SHL
00002d37: SUB
00002d38: DUP9
00002d39: AND
00002d3a: OR
00002d3b: OR
00002d3c: SWAP1
00002d3d: SSTORE
00002d3e: SWAP2
00002d3f: POP
00002d40: PUSH2 0x2d52
00002d43: SWAP1
00002d44: POP
00002d45: DUP2
00002d46: PUSH6 0xffffffffffff
00002d4d: AND
00002d4e: ISZERO
00002d4f: ISZERO
00002d50: SWAP1
00002d51: JUMP
00002d52: JUMPDEST
00002d53: ISZERO
00002d54: PUSH2 0x1eff
00002d57: JUMPI
00002d58: PUSH1 0x40
00002d5a: MLOAD
00002d5b: PUSH32 0x8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a9605109
00002d7c: SWAP1
00002d7d: PUSH1 0x00
00002d7f: SWAP1
00002d80: LOG1
00002d81: POP
00002d82: POP
00002d83: POP
00002d84: JUMP
00002d85: JUMPDEST
00002d86: PUSH1 0x00
00002d88: DUP1
00002d89: PUSH2 0x2d90
00002d8c: PUSH2 0x1a2e
00002d8f: JUMP
00002d90: JUMPDEST
00002d91: SWAP1
00002d92: POP
00002d93: DUP1
00002d94: PUSH6 0xffffffffffff
00002d9b: AND
00002d9c: DUP4
00002d9d: PUSH6 0xffffffffffff
00002da4: AND
00002da5: GT
00002da6: PUSH2 0x2db8
00002da9: JUMPI
00002daa: PUSH2 0x2db3
00002dad: DUP4
00002dae: DUP3
00002daf: PUSH2 0x3e1c
00002db2: JUMP
00002db3: JUMPDEST
00002db4: PUSH2 0x2290
00002db7: JUMP
00002db8: JUMPDEST
00002db9: PUSH2 0x2290
00002dbc: PUSH6 0xffffffffffff
00002dc3: DUP5
00002dc4: AND
00002dc5: PUSH3 0x069780
00002dc9: PUSH2 0x313b
00002dcc: JUMP
00002dcd: JUMPDEST
00002dce: PUSH1 0x60
00002dd0: PUSH1 0xff
00002dd2: DUP4
00002dd3: EQ
00002dd4: PUSH2 0x2de7
00002dd7: JUMPI
00002dd8: PUSH2 0x2de0
00002ddb: DUP4
00002ddc: PUSH2 0x314b
00002ddf: JUMP
00002de0: JUMPDEST
00002de1: SWAP1
00002de2: POP
00002de3: PUSH2 0x0ad0
00002de6: JUMP
00002de7: JUMPDEST
00002de8: DUP2
00002de9: DUP1
00002dea: SLOAD
00002deb: PUSH2 0x2df3
00002dee: SWAP1
00002def: PUSH2 0x3e3a
00002df2: JUMP
00002df3: JUMPDEST
00002df4: DUP1
00002df5: PUSH1 0x1f
00002df7: ADD
00002df8: PUSH1 0x20
00002dfa: DUP1
00002dfb: SWAP2
00002dfc: DIV
00002dfd: MUL
00002dfe: PUSH1 0x20
00002e00: ADD
00002e01: PUSH1 0x40
00002e03: MLOAD
00002e04: SWAP1
00002e05: DUP2
00002e06: ADD
00002e07: PUSH1 0x40
00002e09: MSTORE
00002e0a: DUP1
00002e0b: SWAP3
00002e0c: SWAP2
00002e0d: SWAP1
00002e0e: DUP2
00002e0f: DUP2
00002e10: MSTORE
00002e11: PUSH1 0x20
00002e13: ADD
00002e14: DUP3
00002e15: DUP1
00002e16: SLOAD
00002e17: PUSH2 0x2e1f
00002e1a: SWAP1
00002e1b: PUSH2 0x3e3a
00002e1e: JUMP
00002e1f: JUMPDEST
00002e20: DUP1
00002e21: ISZERO
00002e22: PUSH2 0x2e6c
00002e25: JUMPI
00002e26: DUP1
00002e27: PUSH1 0x1f
00002e29: LT
00002e2a: PUSH2 0x2e41
00002e2d: JUMPI
00002e2e: PUSH2 0x0100
00002e31: DUP1
00002e32: DUP4
00002e33: SLOAD
00002e34: DIV
00002e35: MUL
00002e36: DUP4
00002e37: MSTORE
00002e38: SWAP2
00002e39: PUSH1 0x20
00002e3b: ADD
00002e3c: SWAP2
00002e3d: PUSH2 0x2e6c
00002e40: JUMP
00002e41: JUMPDEST
00002e42: DUP3
00002e43: ADD
00002e44: SWAP2
00002e45: SWAP1
00002e46: PUSH1 0x00
00002e48: MSTORE
00002e49: PUSH1 0x20
00002e4b: PUSH1 0x00
00002e4d: KECCAK256
00002e4e: SWAP1
00002e4f: JUMPDEST
00002e50: DUP2
00002e51: SLOAD
00002e52: DUP2
00002e53: MSTORE
00002e54: SWAP1
00002e55: PUSH1 0x01
00002e57: ADD
00002e58: SWAP1
00002e59: PUSH1 0x20
00002e5b: ADD
00002e5c: DUP1
00002e5d: DUP4
00002e5e: GT
00002e5f: PUSH2 0x2e4f
00002e62: JUMPI
00002e63: DUP3
00002e64: SWAP1
00002e65: SUB
00002e66: PUSH1 0x1f
00002e68: AND
00002e69: DUP3
00002e6a: ADD
00002e6b: SWAP2
00002e6c: JUMPDEST
00002e6d: POP
00002e6e: POP
00002e6f: POP
00002e70: POP
00002e71: POP
00002e72: SWAP1
00002e73: POP
00002e74: PUSH2 0x0ad0
00002e77: JUMP
00002e78: JUMPDEST
00002e79: PUSH1 0x24
00002e7b: SLOAD
00002e7c: PUSH1 0x01
00002e7e: PUSH1 0x01
00002e80: PUSH1 0xa0
00002e82: SHL
00002e83: SUB
00002e84: DUP4
00002e85: AND
00002e86: PUSH1 0x00
00002e88: SWAP1
00002e89: DUP2
00002e8a: MSTORE
00002e8b: PUSH1 0x27
00002e8d: PUSH1 0x20
00002e8f: MSTORE
00002e90: PUSH1 0x40
00002e92: SWAP1
00002e93: KECCAK256
00002e94: PUSH1 0x01
00002e96: ADD
00002e97: SLOAD
00002e98: PUSH2 0x2ea2
00002e9b: SWAP1
00002e9c: DUP4
00002e9d: SWAP1
00002e9e: PUSH2 0x3d7f
00002ea1: JUMP
00002ea2: JUMPDEST
00002ea3: GT
00002ea4: ISZERO
00002ea5: PUSH2 0x2ec1
00002ea8: JUMPI
00002ea9: PUSH1 0x40
00002eab: MLOAD
00002eac: PUSH4 0xd570fc1f
00002eb1: PUSH1 0xe0
00002eb3: SHL
00002eb4: DUP2
00002eb5: MSTORE
00002eb6: PUSH1 0x04
00002eb8: ADD
00002eb9: PUSH1 0x40
00002ebb: MLOAD
00002ebc: DUP1
00002ebd: SWAP2
00002ebe: SUB
00002ebf: SWAP1
00002ec0: REVERT
00002ec1: JUMPDEST
00002ec2: PUSH1 0x01
00002ec4: PUSH1 0x01
00002ec6: PUSH1 0xa0
00002ec8: SHL
00002ec9: SUB
00002eca: DUP3
00002ecb: AND
00002ecc: PUSH1 0x00
00002ece: SWAP1
00002ecf: DUP2
00002ed0: MSTORE
00002ed1: PUSH1 0x27
00002ed3: PUSH1 0x20
00002ed5: MSTORE
00002ed6: PUSH1 0x40
00002ed8: DUP2
00002ed9: KECCAK256
00002eda: PUSH1 0x01
00002edc: ADD
00002edd: DUP1
00002ede: SLOAD
00002edf: DUP4
00002ee0: SWAP3
00002ee1: SWAP1
00002ee2: PUSH2 0x2eec
00002ee5: SWAP1
00002ee6: DUP5
00002ee7: SWAP1
00002ee8: PUSH2 0x3d7f
00002eeb: JUMP
00002eec: JUMPDEST
00002eed: SWAP1
00002eee: SWAP2
00002eef: SSTORE
00002ef0: POP
00002ef1: POP
00002ef2: POP
00002ef3: POP
00002ef4: JUMP
00002ef5: JUMPDEST
00002ef6: PUSH1 0x00
00002ef8: PUSH2 0x2f01
00002efb: DUP4
00002efc: DUP4
00002efd: PUSH2 0x14cf
00002f00: JUMP
00002f01: JUMPDEST
00002f02: ISZERO
00002f03: PUSH2 0x2f60
00002f06: JUMPI
00002f07: PUSH1 0x00
00002f09: DUP4
00002f0a: DUP2
00002f0b: MSTORE
00002f0c: PUSH1 0x20
00002f0e: DUP2
00002f0f: DUP2
00002f10: MSTORE
00002f11: PUSH1 0x40
00002f13: DUP1
00002f14: DUP4
00002f15: KECCAK256
00002f16: PUSH1 0x01
00002f18: PUSH1 0x01
00002f1a: PUSH1 0xa0
00002f1c: SHL
00002f1d: SUB
00002f1e: DUP7
00002f1f: AND
00002f20: DUP1
00002f21: DUP6
00002f22: MSTORE
00002f23: SWAP3
00002f24: MSTORE
00002f25: DUP1
00002f26: DUP4
00002f27: KECCAK256
00002f28: DUP1
00002f29: SLOAD
00002f2a: PUSH1 0xff
00002f2c: NOT
00002f2d: AND
00002f2e: SWAP1
00002f2f: SSTORE
00002f30: MLOAD
00002f31: CALLER
00002f32: SWAP3
00002f33: DUP7
00002f34: SWAP2
00002f35: PUSH32 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b
00002f56: SWAP2
00002f57: SWAP1
00002f58: LOG4
00002f59: POP
00002f5a: PUSH1 0x01
00002f5c: PUSH2 0x0ad0
00002f5f: JUMP
00002f60: JUMPDEST
00002f61: POP
00002f62: PUSH1 0x00
00002f64: PUSH2 0x0ad0
00002f67: JUMP
00002f68: JUMPDEST
00002f69: PUSH1 0x00
00002f6b: PUSH2 0x2f74
00002f6e: DUP4
00002f6f: DUP4
00002f70: PUSH2 0x14cf
00002f73: JUMP
00002f74: JUMPDEST
00002f75: PUSH2 0x2f60
00002f78: JUMPI
00002f79: PUSH1 0x00
00002f7b: DUP4
00002f7c: DUP2
00002f7d: MSTORE
00002f7e: PUSH1 0x20
00002f80: DUP2
00002f81: DUP2
00002f82: MSTORE
00002f83: PUSH1 0x40
00002f85: DUP1
00002f86: DUP4
00002f87: KECCAK256
00002f88: PUSH1 0x01
00002f8a: PUSH1 0x01
00002f8c: PUSH1 0xa0
00002f8e: SHL
00002f8f: SUB
00002f90: DUP7
00002f91: AND
00002f92: DUP5
00002f93: MSTORE
00002f94: SWAP1
00002f95: SWAP2
00002f96: MSTORE
00002f97: SWAP1
00002f98: KECCAK256
00002f99: DUP1
00002f9a: SLOAD
00002f9b: PUSH1 0xff
00002f9d: NOT
00002f9e: AND
00002f9f: PUSH1 0x01
00002fa1: OR
00002fa2: SWAP1
00002fa3: SSTORE
00002fa4: PUSH2 0x2faa
00002fa7: CALLER
00002fa8: SWAP1
00002fa9: JUMP
00002faa: JUMPDEST
00002fab: PUSH1 0x01
00002fad: PUSH1 0x01
00002faf: PUSH1 0xa0
00002fb1: SHL
00002fb2: SUB
00002fb3: AND
00002fb4: DUP3
00002fb5: PUSH1 0x01
00002fb7: PUSH1 0x01
00002fb9: PUSH1 0xa0
00002fbb: SHL
00002fbc: SUB
00002fbd: AND
00002fbe: DUP5
00002fbf: PUSH32 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d
00002fe0: PUSH1 0x40
00002fe2: MLOAD
00002fe3: PUSH1 0x40
00002fe5: MLOAD
00002fe6: DUP1
00002fe7: SWAP2
00002fe8: SUB
00002fe9: SWAP1
00002fea: LOG4
00002feb: POP
00002fec: PUSH1 0x01
00002fee: PUSH2 0x0ad0
00002ff1: JUMP
00002ff2: JUMPDEST
00002ff3: PUSH1 0x00
00002ff5: PUSH2 0x0ad0
00002ff8: PUSH2 0x2fff
00002ffb: PUSH2 0x318a
00002ffe: JUMP
00002fff: JUMPDEST
00003000: DUP4
00003001: PUSH1 0x40
00003003: MLOAD
00003004: PUSH2 0x1901
00003007: PUSH1 0xf0
00003009: SHL
0000300a: DUP2
0000300b: MSTORE
0000300c: PUSH1 0x02
0000300e: DUP2
0000300f: ADD
00003010: SWAP3
00003011: SWAP1
00003012: SWAP3
00003013: MSTORE
00003014: PUSH1 0x22
00003016: DUP3
00003017: ADD
00003018: MSTORE
00003019: PUSH1 0x42
0000301b: SWAP1
0000301c: KECCAK256
0000301d: SWAP1
0000301e: JUMP
0000301f: JUMPDEST
00003020: PUSH1 0x00
00003022: DUP1
00003023: PUSH1 0x00
00003025: DUP1
00003026: PUSH2 0x302f
00003029: DUP7
0000302a: DUP7
0000302b: PUSH2 0x32b5
0000302e: JUMP
0000302f: JUMPDEST
00003030: SWAP3
00003031: POP
00003032: SWAP3
00003033: POP
00003034: SWAP3
00003035: POP
00003036: PUSH2 0x303f
00003039: DUP3
0000303a: DUP3
0000303b: PUSH2 0x3302
0000303e: JUMP
0000303f: JUMPDEST
00003040: POP
00003041: SWAP1
00003042: SWAP5
00003043: SWAP4
00003044: POP
00003045: POP
00003046: POP
00003047: POP
00003048: JUMP
00003049: JUMPDEST
0000304a: PUSH1 0x03
0000304c: DUP2
0000304d: PUSH1 0x20
0000304f: ADD
00003050: MLOAD
00003051: PUSH1 0x03
00003053: DUP2
00003054: GT
00003055: ISZERO
00003056: PUSH2 0x3061
00003059: JUMPI
0000305a: PUSH2 0x3061
0000305d: PUSH2 0x3866
00003060: JUMP
00003061: JUMPDEST
00003062: EQ
00003063: PUSH2 0x0d45
00003066: JUMPI
00003067: PUSH1 0x1f
00003069: SLOAD
0000306a: PUSH2 0x3077
0000306d: SWAP1
0000306e: PUSH3 0x0f4240
00003072: SWAP1
00003073: PUSH2 0x3c97
00003076: JUMP
00003077: JUMPDEST
00003078: DUP2
00003079: PUSH1 0x60
0000307b: ADD
0000307c: MLOAD
0000307d: LT
0000307e: PUSH2 0x30b2
00003081: JUMPI
00003082: PUSH1 0x01
00003084: PUSH1 0x01
00003086: PUSH1 0xa0
00003088: SHL
00003089: SUB
0000308a: DUP3
0000308b: AND
0000308c: PUSH1 0x00
0000308e: SWAP1
0000308f: DUP2
00003090: MSTORE
00003091: PUSH1 0x27
00003093: PUSH1 0x20
00003095: MSTORE
00003096: PUSH1 0x40
00003098: SWAP1
00003099: KECCAK256
0000309a: DUP1
0000309b: SLOAD
0000309c: PUSH1 0x03
0000309e: SWAP2
0000309f: SWAP1
000030a0: PUSH2 0xff00
000030a3: NOT
000030a4: AND
000030a5: PUSH2 0x0100
000030a8: DUP4
000030a9: JUMPDEST
000030aa: MUL
000030ab: OR
000030ac: SWAP1
000030ad: SSTORE
000030ae: POP
000030af: POP
000030b0: POP
000030b1: JUMP
000030b2: JUMPDEST
000030b3: PUSH1 0x1e
000030b5: SLOAD
000030b6: PUSH2 0x30c3
000030b9: SWAP1
000030ba: PUSH3 0x0f4240
000030be: SWAP1
000030bf: PUSH2 0x3c97
000030c2: JUMP
000030c3: JUMPDEST
000030c4: DUP2
000030c5: PUSH1 0x60
000030c7: ADD
000030c8: MLOAD
000030c9: LT
000030ca: PUSH2 0x30f9
000030cd: JUMPI
000030ce: PUSH1 0x01
000030d0: PUSH1 0x01
000030d2: PUSH1 0xa0
000030d4: SHL
000030d5: SUB
000030d6: DUP3
000030d7: AND
000030d8: PUSH1 0x00
000030da: SWAP1
000030db: DUP2
000030dc: MSTORE
000030dd: PUSH1 0x27
000030df: PUSH1 0x20
000030e1: MSTORE
000030e2: PUSH1 0x40
000030e4: SWAP1
000030e5: KECCAK256
000030e6: DUP1
000030e7: SLOAD
000030e8: PUSH1 0x02
000030ea: SWAP2
000030eb: SWAP1
000030ec: PUSH2 0xff00
000030ef: NOT
000030f0: AND
000030f1: PUSH2 0x0100
000030f4: DUP4
000030f5: PUSH2 0x30a9
000030f8: JUMP
000030f9: JUMPDEST
000030fa: PUSH1 0x1d
000030fc: SLOAD
000030fd: PUSH2 0x310a
00003100: SWAP1
00003101: PUSH3 0x0f4240
00003105: SWAP1
00003106: PUSH2 0x3c97
00003109: JUMP
0000310a: JUMPDEST
0000310b: DUP2
0000310c: PUSH1 0x60
0000310e: ADD
0000310f: MLOAD
00003110: LT
00003111: PUSH2 0x0d45
00003114: JUMPI
00003115: POP
00003116: PUSH1 0x01
00003118: PUSH1 0x01
0000311a: PUSH1 0xa0
0000311c: SHL
0000311d: SUB
0000311e: AND
0000311f: PUSH1 0x00
00003121: SWAP1
00003122: DUP2
00003123: MSTORE
00003124: PUSH1 0x27
00003126: PUSH1 0x20
00003128: MSTORE
00003129: PUSH1 0x40
0000312b: SWAP1
0000312c: KECCAK256
0000312d: DUP1
0000312e: SLOAD
0000312f: PUSH2 0xff00
00003132: NOT
00003133: AND
00003134: PUSH2 0x0100
00003137: OR
00003138: SWAP1
00003139: SSTORE
0000313a: JUMP
0000313b: JUMPDEST
0000313c: PUSH1 0x00
0000313e: DUP3
0000313f: DUP3
00003140: XOR
00003141: DUP3
00003142: DUP5
00003143: LT
00003144: MUL
00003145: DUP3
00003146: XOR
00003147: PUSH2 0x2290
0000314a: JUMP
0000314b: JUMPDEST
0000314c: PUSH1 0x60
0000314e: PUSH1 0x00
00003150: PUSH2 0x3158
00003153: DUP4
00003154: PUSH2 0x33bb
00003157: JUMP
00003158: JUMPDEST
00003159: PUSH1 0x40
0000315b: DUP1
0000315c: MLOAD
0000315d: PUSH1 0x20
0000315f: DUP1
00003160: DUP3
00003161: MSTORE
00003162: DUP2
00003163: DUP4
00003164: ADD
00003165: SWAP1
00003166: SWAP3
00003167: MSTORE
00003168: SWAP2
00003169: SWAP3
0000316a: POP
0000316b: PUSH1 0x00
0000316d: SWAP2
0000316e: SWAP1
0000316f: PUSH1 0x20
00003171: DUP3
00003172: ADD
00003173: DUP2
00003174: DUP1
00003175: CALLDATASIZE
00003176: DUP4
00003177: CALLDATACOPY
00003178: POP
00003179: POP
0000317a: POP
0000317b: SWAP2
0000317c: DUP3
0000317d: MSTORE
0000317e: POP
0000317f: PUSH1 0x20
00003181: DUP2
00003182: ADD
00003183: SWAP3
00003184: SWAP1
00003185: SWAP3
00003186: MSTORE
00003187: POP
00003188: SWAP1
00003189: JUMP
0000318a: JUMPDEST
0000318b: PUSH1 0x00
0000318d: ADDRESS
0000318e: PUSH1 0x01
00003190: PUSH1 0x01
00003192: PUSH1 0xa0
00003194: SHL
00003195: SUB
00003196: PUSH32 0x00000000000000000000000080c1c65463427ea785fb7b03ba84b91f49f272eb
000031b7: AND
000031b8: EQ
000031b9: DUP1
000031ba: ISZERO
000031bb: PUSH2 0x31e3
000031be: JUMPI
000031bf: POP
000031c0: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
000031e1: CHAINID
000031e2: EQ
000031e3: JUMPDEST
000031e4: ISZERO
000031e5: PUSH2 0x320d
000031e8: JUMPI
000031e9: POP
000031ea: PUSH32 0xbfcac33433501f4ffd5730b8a8731419d1350f28d0fe740e97e9777d7f6133d2
0000320b: SWAP1
0000320c: JUMP
0000320d: JUMPDEST
0000320e: PUSH2 0x1336
00003211: PUSH1 0x40
00003213: DUP1
00003214: MLOAD
00003215: PUSH32 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f
00003236: PUSH1 0x20
00003238: DUP3
00003239: ADD
0000323a: MSTORE
0000323b: PUSH32 0x3aa853933d94bf5f87075a55123cdf13da42a7bb41deac8382928646c065cc78
0000325c: SWAP2
0000325d: DUP2
0000325e: ADD
0000325f: SWAP2
00003260: SWAP1
00003261: SWAP2
00003262: MSTORE
00003263: PUSH32 0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6
00003284: PUSH1 0x60
00003286: DUP3
00003287: ADD
00003288: MSTORE
00003289: CHAINID
0000328a: PUSH1 0x80
0000328c: DUP3
0000328d: ADD
0000328e: MSTORE
0000328f: ADDRESS
00003290: PUSH1 0xa0
00003292: DUP3
00003293: ADD
00003294: MSTORE
00003295: PUSH1 0x00
00003297: SWAP1
00003298: PUSH1 0xc0
0000329a: ADD
0000329b: PUSH1 0x40
0000329d: MLOAD
0000329e: PUSH1 0x20
000032a0: DUP2
000032a1: DUP4
000032a2: SUB
000032a3: SUB
000032a4: DUP2
000032a5: MSTORE
000032a6: SWAP1
000032a7: PUSH1 0x40
000032a9: MSTORE
000032aa: DUP1
000032ab: MLOAD
000032ac: SWAP1
000032ad: PUSH1 0x20
000032af: ADD
000032b0: KECCAK256
000032b1: SWAP1
000032b2: POP
000032b3: SWAP1
000032b4: JUMP
000032b5: JUMPDEST
000032b6: PUSH1 0x00
000032b8: DUP1
000032b9: PUSH1 0x00
000032bb: DUP4
000032bc: MLOAD
000032bd: PUSH1 0x41
000032bf: SUB
000032c0: PUSH2 0x32ef
000032c3: JUMPI
000032c4: PUSH1 0x20
000032c6: DUP5
000032c7: ADD
000032c8: MLOAD
000032c9: PUSH1 0x40
000032cb: DUP6
000032cc: ADD
000032cd: MLOAD
000032ce: PUSH1 0x60
000032d0: DUP7
000032d1: ADD
000032d2: MLOAD
000032d3: PUSH1 0x00
000032d5: BYTE
000032d6: PUSH2 0x32e1
000032d9: DUP9
000032da: DUP3
000032db: DUP6
000032dc: DUP6
000032dd: PUSH2 0x33e3
000032e0: JUMP
000032e1: JUMPDEST
000032e2: SWAP6
000032e3: POP
000032e4: SWAP6
000032e5: POP
000032e6: SWAP6
000032e7: POP
000032e8: POP
000032e9: POP
000032ea: POP
000032eb: PUSH2 0x32fb
000032ee: JUMP
000032ef: JUMPDEST
000032f0: POP
000032f1: POP
000032f2: DUP2
000032f3: MLOAD
000032f4: PUSH1 0x00
000032f6: SWAP2
000032f7: POP
000032f8: PUSH1 0x02
000032fa: SWAP1
000032fb: JUMPDEST
000032fc: SWAP3
000032fd: POP
000032fe: SWAP3
000032ff: POP
00003300: SWAP3
00003301: JUMP
00003302: JUMPDEST
00003303: PUSH1 0x00
00003305: DUP3
00003306: PUSH1 0x03
00003308: DUP2
00003309: GT
0000330a: ISZERO
0000330b: PUSH2 0x3316
0000330e: JUMPI
0000330f: PUSH2 0x3316
00003312: PUSH2 0x3866
00003315: JUMP
00003316: JUMPDEST
00003317: SUB
00003318: PUSH2 0x331f
0000331b: JUMPI
0000331c: POP
0000331d: POP
0000331e: JUMP
0000331f: JUMPDEST
00003320: PUSH1 0x01
00003322: DUP3
00003323: PUSH1 0x03
00003325: DUP2
00003326: GT
00003327: ISZERO
00003328: PUSH2 0x3333
0000332b: JUMPI
0000332c: PUSH2 0x3333
0000332f: PUSH2 0x3866
00003332: JUMP
00003333: JUMPDEST
00003334: SUB
00003335: PUSH2 0x3351
00003338: JUMPI
00003339: PUSH1 0x40
0000333b: MLOAD
0000333c: PUSH4 0xf645eedf
00003341: PUSH1 0xe0
00003343: SHL
00003344: DUP2
00003345: MSTORE
00003346: PUSH1 0x04
00003348: ADD
00003349: PUSH1 0x40
0000334b: MLOAD
0000334c: DUP1
0000334d: SWAP2
0000334e: SUB
0000334f: SWAP1
00003350: REVERT
00003351: JUMPDEST
00003352: PUSH1 0x02
00003354: DUP3
00003355: PUSH1 0x03
00003357: DUP2
00003358: GT
00003359: ISZERO
0000335a: PUSH2 0x3365
0000335d: JUMPI
0000335e: PUSH2 0x3365
00003361: PUSH2 0x3866
00003364: JUMP
00003365: JUMPDEST
00003366: SUB
00003367: PUSH2 0x3386
0000336a: JUMPI
0000336b: PUSH1 0x40
0000336d: MLOAD
0000336e: PUSH4 0xfce698f7
00003373: PUSH1 0xe0
00003375: SHL
00003376: DUP2
00003377: MSTORE
00003378: PUSH1 0x04
0000337a: DUP2
0000337b: ADD
0000337c: DUP3
0000337d: SWAP1
0000337e: MSTORE
0000337f: PUSH1 0x24
00003381: ADD
00003382: PUSH2 0x0de4
00003385: JUMP
00003386: JUMPDEST
00003387: PUSH1 0x03
00003389: DUP3
0000338a: PUSH1 0x03
0000338c: DUP2
0000338d: GT
0000338e: ISZERO
0000338f: PUSH2 0x339a
00003392: JUMPI
00003393: PUSH2 0x339a
00003396: PUSH2 0x3866
00003399: JUMP
0000339a: JUMPDEST
0000339b: SUB
0000339c: PUSH2 0x0d45
0000339f: JUMPI
000033a0: PUSH1 0x40
000033a2: MLOAD
000033a3: PUSH4 0x35e2f383
000033a8: PUSH1 0xe2
000033aa: SHL
000033ab: DUP2
000033ac: MSTORE
000033ad: PUSH1 0x04
000033af: DUP2
000033b0: ADD
000033b1: DUP3
000033b2: SWAP1
000033b3: MSTORE
000033b4: PUSH1 0x24
000033b6: ADD
000033b7: PUSH2 0x0de4
000033ba: JUMP
000033bb: JUMPDEST
000033bc: PUSH1 0x00
000033be: PUSH1 0xff
000033c0: DUP3
000033c1: AND
000033c2: PUSH1 0x1f
000033c4: DUP2
000033c5: GT
000033c6: ISZERO
000033c7: PUSH2 0x0ad0
000033ca: JUMPI
000033cb: PUSH1 0x40
000033cd: MLOAD
000033ce: PUSH4 0x2cd44ac3
000033d3: PUSH1 0xe2
000033d5: SHL
000033d6: DUP2
000033d7: MSTORE
000033d8: PUSH1 0x04
000033da: ADD
000033db: PUSH1 0x40
000033dd: MLOAD
000033de: DUP1
000033df: SWAP2
000033e0: SUB
000033e1: SWAP1
000033e2: REVERT
000033e3: JUMPDEST
000033e4: PUSH1 0x00
000033e6: DUP1
000033e7: DUP1
000033e8: PUSH32 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0
00003409: DUP5
0000340a: GT
0000340b: ISZERO
0000340c: PUSH2 0x341e
0000340f: JUMPI
00003410: POP
00003411: PUSH1 0x00
00003413: SWAP2
00003414: POP
00003415: PUSH1 0x03
00003417: SWAP1
00003418: POP
00003419: DUP3
0000341a: PUSH2 0x34a8
0000341d: JUMP
0000341e: JUMPDEST
0000341f: PUSH1 0x40
00003421: DUP1
00003422: MLOAD
00003423: PUSH1 0x00
00003425: DUP1
00003426: DUP3
00003427: MSTORE
00003428: PUSH1 0x20
0000342a: DUP3
0000342b: ADD
0000342c: DUP1
0000342d: DUP5
0000342e: MSTORE
0000342f: DUP11
00003430: SWAP1
00003431: MSTORE
00003432: PUSH1 0xff
00003434: DUP10
00003435: AND
00003436: SWAP3
00003437: DUP3
00003438: ADD
00003439: SWAP3
0000343a: SWAP1
0000343b: SWAP3
0000343c: MSTORE
0000343d: PUSH1 0x60
0000343f: DUP2
00003440: ADD
00003441: DUP8
00003442: SWAP1
00003443: MSTORE
00003444: PUSH1 0x80
00003446: DUP2
00003447: ADD
00003448: DUP7
00003449: SWAP1
0000344a: MSTORE
0000344b: PUSH1 0x01
0000344d: SWAP1
0000344e: PUSH1 0xa0
00003450: ADD
00003451: PUSH1 0x20
00003453: PUSH1 0x40
00003455: MLOAD
00003456: PUSH1 0x20
00003458: DUP2
00003459: SUB
0000345a: SWAP1
0000345b: DUP1
0000345c: DUP5
0000345d: SUB
0000345e: SWAP1
0000345f: DUP6
00003460: GAS
00003461: STATICCALL
00003462: ISZERO
00003463: DUP1
00003464: ISZERO
00003465: PUSH2 0x3472
00003468: JUMPI
00003469: RETURNDATASIZE
0000346a: PUSH1 0x00
0000346c: DUP1
0000346d: RETURNDATACOPY
0000346e: RETURNDATASIZE
0000346f: PUSH1 0x00
00003471: REVERT
00003472: JUMPDEST
00003473: POP
00003474: POP
00003475: PUSH1 0x40
00003477: MLOAD
00003478: PUSH1 0x1f
0000347a: NOT
0000347b: ADD
0000347c: MLOAD
0000347d: SWAP2
0000347e: POP
0000347f: POP
00003480: PUSH1 0x01
00003482: PUSH1 0x01
00003484: PUSH1 0xa0
00003486: SHL
00003487: SUB
00003488: DUP2
00003489: AND
0000348a: PUSH2 0x349e
0000348d: JUMPI
0000348e: POP
0000348f: PUSH1 0x00
00003491: SWAP3
00003492: POP
00003493: PUSH1 0x01
00003495: SWAP2
00003496: POP
00003497: DUP3
00003498: SWAP1
00003499: POP
0000349a: PUSH2 0x34a8
0000349d: JUMP
0000349e: JUMPDEST
0000349f: SWAP3
000034a0: POP
000034a1: PUSH1 0x00
000034a3: SWAP2
000034a4: POP
000034a5: DUP2
000034a6: SWAP1
000034a7: POP
000034a8: JUMPDEST
000034a9: SWAP5
000034aa: POP
000034ab: SWAP5
000034ac: POP
000034ad: SWAP5
000034ae: SWAP2
000034af: POP
000034b0: POP
000034b1: JUMP
000034b2: JUMPDEST
000034b3: PUSH1 0x0c
000034b5: DUP4
000034b6: ADD
000034b7: SWAP2
000034b8: DUP4
000034b9: SWAP1
000034ba: DUP3
000034bb: ISZERO
000034bc: PUSH2 0x34ea
000034bf: JUMPI
000034c0: SWAP2
000034c1: PUSH1 0x80
000034c3: MUL
000034c4: DUP3
000034c5: ADD
000034c6: JUMPDEST
000034c7: DUP3
000034c8: DUP2
000034c9: GT
000034ca: ISZERO
000034cb: PUSH2 0x34ea
000034ce: JUMPI
000034cf: PUSH2 0x34da
000034d2: DUP3
000034d3: DUP5
000034d4: PUSH1 0x04
000034d6: PUSH2 0x34f6
000034d9: JUMP
000034da: JUMPDEST
000034db: POP
000034dc: SWAP2
000034dd: PUSH1 0x80
000034df: ADD
000034e0: SWAP2
000034e1: SWAP1
000034e2: PUSH1 0x04
000034e4: ADD
000034e5: SWAP1
000034e6: PUSH2 0x34c6
000034e9: JUMP
000034ea: JUMPDEST
000034eb: POP
000034ec: PUSH2 0x2d02
000034ef: SWAP3
000034f0: SWAP2
000034f1: POP
000034f2: PUSH2 0x35bd
000034f5: JUMP
000034f6: JUMPDEST
000034f7: DUP3
000034f8: PUSH1 0x04
000034fa: DUP2
000034fb: ADD
000034fc: SWAP3
000034fd: DUP3
000034fe: ISZERO
000034ff: PUSH2 0x3524
00003502: JUMPI
00003503: SWAP2
00003504: PUSH1 0x20
00003506: MUL
00003507: DUP3
00003508: ADD
00003509: JUMPDEST
0000350a: DUP3
0000350b: DUP2
0000350c: GT
0000350d: ISZERO
0000350e: PUSH2 0x3524
00003511: JUMPI
00003512: DUP3
00003513: CALLDATALOAD
00003514: DUP3
00003515: SSTORE
00003516: SWAP2
00003517: PUSH1 0x20
00003519: ADD
0000351a: SWAP2
0000351b: SWAP1
0000351c: PUSH1 0x01
0000351e: ADD
0000351f: SWAP1
00003520: PUSH2 0x3509
00003523: JUMP
00003524: JUMPDEST
00003525: POP
00003526: PUSH2 0x2d02
00003529: SWAP3
0000352a: SWAP2
0000352b: POP
0000352c: PUSH2 0x35e5
0000352f: JUMP
00003530: JUMPDEST
00003531: DUP3
00003532: DUP1
00003533: SLOAD
00003534: DUP3
00003535: DUP3
00003536: SSTORE
00003537: SWAP1
00003538: PUSH1 0x00
0000353a: MSTORE
0000353b: PUSH1 0x20
0000353d: PUSH1 0x00
0000353f: KECCAK256
00003540: SWAP1
00003541: DUP2
00003542: ADD
00003543: SWAP3
00003544: DUP3
00003545: ISZERO
00003546: PUSH2 0x3524
00003549: JUMPI
0000354a: SWAP2
0000354b: PUSH1 0x20
0000354d: MUL
0000354e: DUP3
0000354f: ADD
00003550: JUMPDEST
00003551: DUP3
00003552: DUP2
00003553: GT
00003554: ISZERO
00003555: PUSH2 0x3524
00003558: JUMPI
00003559: DUP2
0000355a: SLOAD
0000355b: PUSH1 0x01
0000355d: PUSH1 0x01
0000355f: PUSH1 0xa0
00003561: SHL
00003562: SUB
00003563: NOT
00003564: AND
00003565: PUSH1 0x01
00003567: PUSH1 0x01
00003569: PUSH1 0xa0
0000356b: SHL
0000356c: SUB
0000356d: DUP5
0000356e: CALLDATALOAD
0000356f: AND
00003570: OR
00003571: DUP3
00003572: SSTORE
00003573: PUSH1 0x20
00003575: SWAP1
00003576: SWAP3
00003577: ADD
00003578: SWAP2
00003579: PUSH1 0x01
0000357b: SWAP1
0000357c: SWAP2
0000357d: ADD
0000357e: SWAP1
0000357f: PUSH2 0x3550
00003582: JUMP
00003583: JUMPDEST
00003584: DUP3
00003585: DUP1
00003586: SLOAD
00003587: DUP3
00003588: DUP3
00003589: SSTORE
0000358a: SWAP1
0000358b: PUSH1 0x00
0000358d: MSTORE
0000358e: PUSH1 0x20
00003590: PUSH1 0x00
00003592: KECCAK256
00003593: SWAP1
00003594: DUP2
00003595: ADD
00003596: SWAP3
00003597: DUP3
00003598: ISZERO
00003599: PUSH2 0x3524
0000359c: JUMPI
0000359d: SWAP2
0000359e: PUSH1 0x20
000035a0: MUL
000035a1: DUP3
000035a2: ADD
000035a3: DUP3
000035a4: DUP2
000035a5: GT
000035a6: ISZERO
000035a7: PUSH2 0x3524
000035aa: JUMPI
000035ab: DUP3
000035ac: CALLDATALOAD
000035ad: DUP3
000035ae: SSTORE
000035af: SWAP2
000035b0: PUSH1 0x20
000035b2: ADD
000035b3: SWAP2
000035b4: SWAP1
000035b5: PUSH1 0x01
000035b7: ADD
000035b8: SWAP1
000035b9: PUSH2 0x3509
000035bc: JUMP
000035bd: JUMPDEST
000035be: DUP1
000035bf: DUP3
000035c0: GT
000035c1: ISZERO
000035c2: PUSH2 0x2d02
000035c5: JUMPI
000035c6: PUSH1 0x00
000035c8: DUP1
000035c9: DUP3
000035ca: SSTORE
000035cb: PUSH1 0x01
000035cd: DUP3
000035ce: ADD
000035cf: DUP2
000035d0: SWAP1
000035d1: SSTORE
000035d2: PUSH1 0x02
000035d4: DUP3
000035d5: ADD
000035d6: DUP2
000035d7: SWAP1
000035d8: SSTORE
000035d9: PUSH1 0x03
000035db: DUP3
000035dc: ADD
000035dd: SSTORE
000035de: PUSH1 0x04
000035e0: ADD
000035e1: PUSH2 0x35bd
000035e4: JUMP
000035e5: JUMPDEST
000035e6: JUMPDEST
000035e7: DUP1
000035e8: DUP3
000035e9: GT
000035ea: ISZERO
000035eb: PUSH2 0x2d02
000035ee: JUMPI
000035ef: PUSH1 0x00
000035f1: DUP2
000035f2: SSTORE
000035f3: PUSH1 0x01
000035f5: ADD
000035f6: PUSH2 0x35e6
000035f9: JUMP
000035fa: JUMPDEST
000035fb: PUSH1 0x00
000035fd: PUSH1 0x20
000035ff: DUP3
00003600: DUP5
00003601: SUB
00003602: SLT
00003603: ISZERO
00003604: PUSH2 0x360c
00003607: JUMPI
00003608: PUSH1 0x00
0000360a: DUP1
0000360b: REVERT
0000360c: JUMPDEST
0000360d: DUP2
0000360e: CALLDATALOAD
0000360f: PUSH1 0x01
00003611: PUSH1 0x01
00003613: PUSH1 0xe0
00003615: SHL
00003616: SUB
00003617: NOT
00003618: DUP2
00003619: AND
0000361a: DUP2
0000361b: EQ
0000361c: PUSH2 0x2290
0000361f: JUMPI
00003620: PUSH1 0x00
00003622: DUP1
00003623: REVERT
00003624: JUMPDEST
00003625: PUSH1 0x00
00003627: PUSH1 0x20
00003629: DUP3
0000362a: DUP5
0000362b: SUB
0000362c: SLT
0000362d: ISZERO
0000362e: PUSH2 0x3636
00003631: JUMPI
00003632: PUSH1 0x00
00003634: DUP1
00003635: REVERT
00003636: JUMPDEST
00003637: POP
00003638: CALLDATALOAD
00003639: SWAP2
0000363a: SWAP1
0000363b: POP
0000363c: JUMP
0000363d: JUMPDEST
0000363e: PUSH1 0x01
00003640: PUSH1 0x01
00003642: PUSH1 0xa0
00003644: SHL
00003645: SUB
00003646: DUP2
00003647: AND
00003648: DUP2
00003649: EQ
0000364a: PUSH2 0x0cd2
0000364d: JUMPI
0000364e: PUSH1 0x00
00003650: DUP1
00003651: REVERT
00003652: JUMPDEST
00003653: PUSH4 0x4e487b71
00003658: PUSH1 0xe0
0000365a: SHL
0000365b: PUSH1 0x00
0000365d: MSTORE
0000365e: PUSH1 0x41
00003660: PUSH1 0x04
00003662: MSTORE
00003663: PUSH1 0x24
00003665: PUSH1 0x00
00003667: REVERT
00003668: JUMPDEST
00003669: PUSH1 0x00
0000366b: DUP1
0000366c: PUSH1 0x00
0000366e: DUP1
0000366f: PUSH1 0x00
00003671: DUP1
00003672: PUSH1 0x00
00003674: PUSH1 0xe0
00003676: DUP9
00003677: DUP11
00003678: SUB
00003679: SLT
0000367a: ISZERO
0000367b: PUSH2 0x3683
0000367e: JUMPI
0000367f: PUSH1 0x00
00003681: DUP1
00003682: REVERT
00003683: JUMPDEST
00003684: DUP8
00003685: CALLDATALOAD
00003686: SWAP7
00003687: POP
00003688: PUSH1 0x20
0000368a: DUP9
0000368b: ADD
0000368c: CALLDATALOAD
0000368d: SWAP6
0000368e: POP
0000368f: PUSH1 0x40
00003691: DUP9
00003692: ADD
00003693: CALLDATALOAD
00003694: PUSH2 0x369c
00003697: DUP2
00003698: PUSH2 0x363d
0000369b: JUMP
0000369c: JUMPDEST
0000369d: SWAP5
0000369e: POP
0000369f: PUSH1 0x60
000036a1: DUP9
000036a2: ADD
000036a3: CALLDATALOAD
000036a4: SWAP4
000036a5: POP
000036a6: PUSH1 0x80
000036a8: DUP9
000036a9: ADD
000036aa: CALLDATALOAD
000036ab: SWAP3
000036ac: POP
000036ad: PUSH1 0xa0
000036af: DUP9
000036b0: ADD
000036b1: CALLDATALOAD
000036b2: SWAP2
000036b3: POP
000036b4: PUSH1 0xc0
000036b6: DUP9
000036b7: ADD
000036b8: CALLDATALOAD
000036b9: PUSH8 0xffffffffffffffff
000036c2: DUP2
000036c3: GT
000036c4: ISZERO
000036c5: PUSH2 0x36cd
000036c8: JUMPI
000036c9: PUSH1 0x00
000036cb: DUP1
000036cc: REVERT
000036cd: JUMPDEST
000036ce: DUP9
000036cf: ADD
000036d0: PUSH1 0x1f
000036d2: DUP2
000036d3: ADD
000036d4: DUP11
000036d5: SGT
000036d6: PUSH2 0x36de
000036d9: JUMPI
000036da: PUSH1 0x00
000036dc: DUP1
000036dd: REVERT
000036de: JUMPDEST
000036df: DUP1
000036e0: CALLDATALOAD
000036e1: PUSH8 0xffffffffffffffff
000036ea: DUP2
000036eb: GT
000036ec: ISZERO
000036ed: PUSH2 0x36f8
000036f0: JUMPI
000036f1: PUSH2 0x36f8
000036f4: PUSH2 0x3652
000036f7: JUMP
000036f8: JUMPDEST
000036f9: PUSH1 0x40
000036fb: MLOAD
000036fc: PUSH1 0x1f
000036fe: DUP3
000036ff: ADD
00003700: PUSH1 0x1f
00003702: NOT
00003703: SWAP1
00003704: DUP2
00003705: AND
00003706: PUSH1 0x3f
00003708: ADD
00003709: AND
0000370a: DUP2
0000370b: ADD
0000370c: PUSH8 0xffffffffffffffff
00003715: DUP2
00003716: GT
00003717: DUP3
00003718: DUP3
00003719: LT
0000371a: OR
0000371b: ISZERO
0000371c: PUSH2 0x3727
0000371f: JUMPI
00003720: PUSH2 0x3727
00003723: PUSH2 0x3652
00003726: JUMP
00003727: JUMPDEST
00003728: PUSH1 0x40
0000372a: MSTORE
0000372b: DUP2
0000372c: DUP2
0000372d: MSTORE
0000372e: DUP3
0000372f: DUP3
00003730: ADD
00003731: PUSH1 0x20
00003733: ADD
00003734: DUP13
00003735: LT
00003736: ISZERO
00003737: PUSH2 0x373f
0000373a: JUMPI
0000373b: PUSH1 0x00
0000373d: DUP1
0000373e: REVERT
0000373f: JUMPDEST
00003740: DUP2
00003741: PUSH1 0x20
00003743: DUP5
00003744: ADD
00003745: PUSH1 0x20
00003747: DUP4
00003748: ADD
00003749: CALLDATACOPY
0000374a: PUSH1 0x00
0000374c: PUSH1 0x20
0000374e: DUP4
0000374f: DUP4
00003750: ADD
00003751: ADD
00003752: MSTORE
00003753: DUP1
00003754: SWAP4
00003755: POP
00003756: POP
00003757: POP
00003758: POP
00003759: SWAP3
0000375a: SWAP6
0000375b: SWAP9
0000375c: SWAP2
0000375d: SWAP5
0000375e: SWAP8
0000375f: POP
00003760: SWAP3
00003761: SWAP6
00003762: POP
00003763: JUMP
00003764: JUMPDEST
00003765: PUSH1 0x00
00003767: DUP1
00003768: PUSH1 0x40
0000376a: DUP4
0000376b: DUP6
0000376c: SUB
0000376d: SLT
0000376e: ISZERO
0000376f: PUSH2 0x3777
00003772: JUMPI
00003773: PUSH1 0x00
00003775: DUP1
00003776: REVERT
00003777: JUMPDEST
00003778: DUP3
00003779: CALLDATALOAD
0000377a: SWAP2
0000377b: POP
0000377c: PUSH1 0x20
0000377e: DUP4
0000377f: ADD
00003780: CALLDATALOAD
00003781: PUSH2 0x3789
00003784: DUP2
00003785: PUSH2 0x363d
00003788: JUMP
00003789: JUMPDEST
0000378a: DUP1
0000378b: SWAP2
0000378c: POP
0000378d: POP
0000378e: SWAP3
0000378f: POP
00003790: SWAP3
00003791: SWAP1
00003792: POP
00003793: JUMP
00003794: JUMPDEST
00003795: PUSH1 0x00
00003797: PUSH2 0x0180
0000379a: DUP3
0000379b: DUP5
0000379c: SUB
0000379d: SLT
0000379e: ISZERO
0000379f: PUSH2 0x37a7
000037a2: JUMPI
000037a3: PUSH1 0x00
000037a5: DUP1
000037a6: REVERT
000037a7: JUMPDEST
000037a8: DUP3
000037a9: PUSH2 0x0180
000037ac: DUP4
000037ad: ADD
000037ae: GT
000037af: ISZERO
000037b0: PUSH2 0x37b8
000037b3: JUMPI
000037b4: PUSH1 0x00
000037b6: DUP1
000037b7: REVERT
000037b8: JUMPDEST
000037b9: POP
000037ba: SWAP2
000037bb: SWAP1
000037bc: POP
000037bd: JUMP
000037be: JUMPDEST
000037bf: PUSH1 0x00
000037c1: DUP1
000037c2: PUSH1 0x00
000037c4: PUSH1 0x60
000037c6: DUP5
000037c7: DUP7
000037c8: SUB
000037c9: SLT
000037ca: ISZERO
000037cb: PUSH2 0x37d3
000037ce: JUMPI
000037cf: PUSH1 0x00
000037d1: DUP1
000037d2: REVERT
000037d3: JUMPDEST
000037d4: DUP4
000037d5: CALLDATALOAD
000037d6: PUSH2 0x37de
000037d9: DUP2
000037da: PUSH2 0x363d
000037dd: JUMP
000037de: JUMPDEST
000037df: SWAP3
000037e0: POP
000037e1: PUSH1 0x20
000037e3: DUP5
000037e4: ADD
000037e5: CALLDATALOAD
000037e6: PUSH2 0x37ee
000037e9: DUP2
000037ea: PUSH2 0x363d
000037ed: JUMP
000037ee: JUMPDEST
000037ef: SWAP3
000037f0: SWAP6
000037f1: SWAP3
000037f2: SWAP5
000037f3: POP
000037f4: POP
000037f5: POP
000037f6: PUSH1 0x40
000037f8: SWAP2
000037f9: SWAP1
000037fa: SWAP2
000037fb: ADD
000037fc: CALLDATALOAD
000037fd: SWAP1
000037fe: JUMP
000037ff: JUMPDEST
00003800: PUSH1 0x00
00003802: PUSH1 0x20
00003804: DUP3
00003805: DUP5
00003806: SUB
00003807: SLT
00003808: ISZERO
00003809: PUSH2 0x3811
0000380c: JUMPI
0000380d: PUSH1 0x00
0000380f: DUP1
00003810: REVERT
00003811: JUMPDEST
00003812: DUP2
00003813: CALLDATALOAD
00003814: PUSH2 0x2290
00003817: DUP2
00003818: PUSH2 0x363d
0000381b: JUMP
0000381c: JUMPDEST
0000381d: PUSH1 0x00
0000381f: PUSH1 0x20
00003821: DUP3
00003822: DUP5
00003823: SUB
00003824: SLT
00003825: ISZERO
00003826: PUSH2 0x382e
00003829: JUMPI
0000382a: PUSH1 0x00
0000382c: DUP1
0000382d: REVERT
0000382e: JUMPDEST
0000382f: DUP2
00003830: CALLDATALOAD
00003831: PUSH6 0xffffffffffff
00003838: DUP2
00003839: AND
0000383a: DUP2
0000383b: EQ
0000383c: PUSH2 0x2290
0000383f: JUMPI
00003840: PUSH1 0x00
00003842: DUP1
00003843: REVERT
00003844: JUMPDEST
00003845: PUSH1 0x00
00003847: DUP1
00003848: PUSH1 0x40
0000384a: DUP4
0000384b: DUP6
0000384c: SUB
0000384d: SLT
0000384e: ISZERO
0000384f: PUSH2 0x3857
00003852: JUMPI
00003853: PUSH1 0x00
00003855: DUP1
00003856: REVERT
00003857: JUMPDEST
00003858: POP
00003859: POP
0000385a: DUP1
0000385b: CALLDATALOAD
0000385c: SWAP3
0000385d: PUSH1 0x20
0000385f: SWAP1
00003860: SWAP2
00003861: ADD
00003862: CALLDATALOAD
00003863: SWAP2
00003864: POP
00003865: JUMP
00003866: JUMPDEST
00003867: PUSH4 0x4e487b71
0000386c: PUSH1 0xe0
0000386e: SHL
0000386f: PUSH1 0x00
00003871: MSTORE
00003872: PUSH1 0x21
00003874: PUSH1 0x04
00003876: MSTORE
00003877: PUSH1 0x24
00003879: PUSH1 0x00
0000387b: REVERT
0000387c: JUMPDEST
0000387d: PUSH1 0x04
0000387f: DUP2
00003880: LT
00003881: PUSH2 0x389a
00003884: JUMPI
00003885: PUSH4 0x4e487b71
0000388a: PUSH1 0xe0
0000388c: SHL
0000388d: PUSH1 0x00
0000388f: MSTORE
00003890: PUSH1 0x21
00003892: PUSH1 0x04
00003894: MSTORE
00003895: PUSH1 0x24
00003897: PUSH1 0x00
00003899: REVERT
0000389a: JUMPDEST
0000389b: SWAP1
0000389c: MSTORE
0000389d: JUMP
0000389e: JUMPDEST
0000389f: PUSH1 0xa0
000038a1: DUP2
000038a2: ADD
000038a3: PUSH2 0x38ac
000038a6: DUP3
000038a7: DUP9
000038a8: PUSH2 0x387c
000038ab: JUMP
000038ac: JUMPDEST
000038ad: PUSH2 0x38b9
000038b0: PUSH1 0x20
000038b2: DUP4
000038b3: ADD
000038b4: DUP8
000038b5: PUSH2 0x387c
000038b8: JUMP
000038b9: JUMPDEST
000038ba: PUSH1 0x40
000038bc: DUP3
000038bd: ADD
000038be: SWAP5
000038bf: SWAP1
000038c0: SWAP5
000038c1: MSTORE
000038c2: PUSH1 0x60
000038c4: DUP2
000038c5: ADD
000038c6: SWAP3
000038c7: SWAP1
000038c8: SWAP3
000038c9: MSTORE
000038ca: PUSH1 0x01
000038cc: PUSH1 0x01
000038ce: PUSH1 0xa0
000038d0: SHL
000038d1: SUB
000038d2: AND
000038d3: PUSH1 0x80
000038d5: SWAP1
000038d6: SWAP2
000038d7: ADD
000038d8: MSTORE
000038d9: SWAP3
000038da: SWAP2
000038db: POP
000038dc: POP
000038dd: JUMP
000038de: JUMPDEST
000038df: PUSH1 0x00
000038e1: DUP2
000038e2: MLOAD
000038e3: DUP1
000038e4: DUP5
000038e5: MSTORE
000038e6: PUSH1 0x00
000038e8: JUMPDEST
000038e9: DUP2
000038ea: DUP2
000038eb: LT
000038ec: ISZERO
000038ed: PUSH2 0x3904
000038f0: JUMPI
000038f1: PUSH1 0x20
000038f3: DUP2
000038f4: DUP6
000038f5: ADD
000038f6: DUP2
000038f7: ADD
000038f8: MLOAD
000038f9: DUP7
000038fa: DUP4
000038fb: ADD
000038fc: DUP3
000038fd: ADD
000038fe: MSTORE
000038ff: ADD
00003900: PUSH2 0x38e8
00003903: JUMP
00003904: JUMPDEST
00003905: POP
00003906: PUSH1 0x00
00003908: PUSH1 0x20
0000390a: DUP3
0000390b: DUP7
0000390c: ADD
0000390d: ADD
0000390e: MSTORE
0000390f: PUSH1 0x20
00003911: PUSH1 0x1f
00003913: NOT
00003914: PUSH1 0x1f
00003916: DUP4
00003917: ADD
00003918: AND
00003919: DUP6
0000391a: ADD
0000391b: ADD
0000391c: SWAP2
0000391d: POP
0000391e: POP
0000391f: SWAP3
00003920: SWAP2
00003921: POP
00003922: POP
00003923: JUMP
00003924: JUMPDEST
00003925: PUSH1 0xff
00003927: PUSH1 0xf8
00003929: SHL
0000392a: DUP9
0000392b: AND
0000392c: DUP2
0000392d: MSTORE
0000392e: PUSH1 0xe0
00003930: PUSH1 0x20
00003932: DUP3
00003933: ADD
00003934: MSTORE
00003935: PUSH1 0x00
00003937: PUSH2 0x3943
0000393a: PUSH1 0xe0
0000393c: DUP4
0000393d: ADD
0000393e: DUP10
0000393f: PUSH2 0x38de
00003942: JUMP
00003943: JUMPDEST
00003944: DUP3
00003945: DUP2
00003946: SUB
00003947: PUSH1 0x40
00003949: DUP5
0000394a: ADD
0000394b: MSTORE
0000394c: PUSH2 0x3955
0000394f: DUP2
00003950: DUP10
00003951: PUSH2 0x38de
00003954: JUMP
00003955: JUMPDEST
00003956: PUSH1 0x60
00003958: DUP5
00003959: ADD
0000395a: DUP9
0000395b: SWAP1
0000395c: MSTORE
0000395d: PUSH1 0x01
0000395f: PUSH1 0x01
00003961: PUSH1 0xa0
00003963: SHL
00003964: SUB
00003965: DUP8
00003966: AND
00003967: PUSH1 0x80
00003969: DUP6
0000396a: ADD
0000396b: MSTORE
0000396c: PUSH1 0xa0
0000396e: DUP5
0000396f: ADD
00003970: DUP7
00003971: SWAP1
00003972: MSTORE
00003973: DUP4
00003974: DUP2
00003975: SUB
00003976: PUSH1 0xc0
00003978: DUP6
00003979: ADD
0000397a: MSTORE
0000397b: DUP5
0000397c: MLOAD
0000397d: DUP1
0000397e: DUP3
0000397f: MSTORE
00003980: PUSH1 0x20
00003982: DUP1
00003983: DUP8
00003984: ADD
00003985: SWAP4
00003986: POP
00003987: SWAP1
00003988: SWAP2
00003989: ADD
0000398a: SWAP1
0000398b: PUSH1 0x00
0000398d: JUMPDEST
0000398e: DUP2
0000398f: DUP2
00003990: LT
00003991: ISZERO
00003992: PUSH2 0x39ab
00003995: JUMPI
00003996: DUP4
00003997: MLOAD
00003998: DUP4
00003999: MSTORE
0000399a: PUSH1 0x20
0000399c: SWAP4
0000399d: DUP5
0000399e: ADD
0000399f: SWAP4
000039a0: SWAP1
000039a1: SWAP3
000039a2: ADD
000039a3: SWAP2
000039a4: PUSH1 0x01
000039a6: ADD
000039a7: PUSH2 0x398d
000039aa: JUMP
000039ab: JUMPDEST
000039ac: POP
000039ad: SWAP1
000039ae: SWAP12
000039af: SWAP11
000039b0: POP
000039b1: POP
000039b2: POP
000039b3: POP
000039b4: POP
000039b5: POP
000039b6: POP
000039b7: POP
000039b8: POP
000039b9: POP
000039ba: POP
000039bb: JUMP
000039bc: JUMPDEST
000039bd: PUSH1 0x00
000039bf: PUSH1 0x80
000039c1: DUP3
000039c2: DUP5
000039c3: SUB
000039c4: SLT
000039c5: ISZERO
000039c6: PUSH2 0x39ce
000039c9: JUMPI
000039ca: PUSH1 0x00
000039cc: DUP1
000039cd: REVERT
000039ce: JUMPDEST
000039cf: DUP3
000039d0: PUSH1 0x80
000039d2: DUP4
000039d3: ADD
000039d4: GT
000039d5: ISZERO
000039d6: PUSH2 0x37b8
000039d9: JUMPI
000039da: PUSH1 0x00
000039dc: DUP1
000039dd: REVERT
000039de: JUMPDEST
000039df: PUSH1 0x00
000039e1: DUP1
000039e2: DUP4
000039e3: PUSH1 0x1f
000039e5: DUP5
000039e6: ADD
000039e7: SLT
000039e8: PUSH2 0x39f0
000039eb: JUMPI
000039ec: PUSH1 0x00
000039ee: DUP1
000039ef: REVERT
000039f0: JUMPDEST
000039f1: POP
000039f2: DUP2
000039f3: CALLDATALOAD
000039f4: PUSH8 0xffffffffffffffff
000039fd: DUP2
000039fe: GT
000039ff: ISZERO
00003a00: PUSH2 0x3a08
00003a03: JUMPI
00003a04: PUSH1 0x00
00003a06: DUP1
00003a07: REVERT
00003a08: JUMPDEST
00003a09: PUSH1 0x20
00003a0b: DUP4
00003a0c: ADD
00003a0d: SWAP2
00003a0e: POP
00003a0f: DUP4
00003a10: PUSH1 0x20
00003a12: DUP3
00003a13: PUSH1 0x05
00003a15: SHL
00003a16: DUP6
00003a17: ADD
00003a18: ADD
00003a19: GT
00003a1a: ISZERO
00003a1b: PUSH2 0x3a23
00003a1e: JUMPI
00003a1f: PUSH1 0x00
00003a21: DUP1
00003a22: REVERT
00003a23: JUMPDEST
00003a24: SWAP3
00003a25: POP
00003a26: SWAP3
00003a27: SWAP1
00003a28: POP
00003a29: JUMP
00003a2a: JUMPDEST
00003a2b: PUSH1 0x00
00003a2d: DUP1
00003a2e: PUSH1 0x00
00003a30: DUP1
00003a31: PUSH1 0x00
00003a33: PUSH1 0x60
00003a35: DUP7
00003a36: DUP9
00003a37: SUB
00003a38: SLT
00003a39: ISZERO
00003a3a: PUSH2 0x3a42
00003a3d: JUMPI
00003a3e: PUSH1 0x00
00003a40: DUP1
00003a41: REVERT
00003a42: JUMPDEST
00003a43: DUP6
00003a44: CALLDATALOAD
00003a45: PUSH8 0xffffffffffffffff
00003a4e: DUP2
00003a4f: GT
00003a50: ISZERO
00003a51: PUSH2 0x3a59
00003a54: JUMPI
00003a55: PUSH1 0x00
00003a57: DUP1
00003a58: REVERT
00003a59: JUMPDEST
00003a5a: PUSH2 0x3a65
00003a5d: DUP9
00003a5e: DUP3
00003a5f: DUP10
00003a60: ADD
00003a61: PUSH2 0x39de
00003a64: JUMP
00003a65: JUMPDEST
00003a66: SWAP1
00003a67: SWAP7
00003a68: POP
00003a69: SWAP5
00003a6a: POP
00003a6b: POP
00003a6c: PUSH1 0x20
00003a6e: DUP7
00003a6f: ADD
00003a70: CALLDATALOAD
00003a71: PUSH8 0xffffffffffffffff
00003a7a: DUP2
00003a7b: GT
00003a7c: ISZERO
00003a7d: PUSH2 0x3a85
00003a80: JUMPI
00003a81: PUSH1 0x00
00003a83: DUP1
00003a84: REVERT
00003a85: JUMPDEST
00003a86: PUSH2 0x3a91
00003a89: DUP9
00003a8a: DUP3
00003a8b: DUP10
00003a8c: ADD
00003a8d: PUSH2 0x39de
00003a90: JUMP
00003a91: JUMPDEST
00003a92: SWAP7
00003a93: SWAP10
00003a94: SWAP6
00003a95: SWAP9
00003a96: POP
00003a97: SWAP7
00003a98: PUSH1 0x40
00003a9a: ADD
00003a9b: CALLDATALOAD
00003a9c: SWAP5
00003a9d: SWAP4
00003a9e: POP
00003a9f: POP
00003aa0: POP
00003aa1: POP
00003aa2: JUMP
00003aa3: JUMPDEST
00003aa4: PUSH1 0x00
00003aa6: DUP1
00003aa7: PUSH1 0x00
00003aa9: DUP1
00003aaa: PUSH1 0x00
00003aac: DUP1
00003aad: PUSH1 0x00
00003aaf: PUSH1 0x80
00003ab1: DUP9
00003ab2: DUP11
00003ab3: SUB
00003ab4: SLT
00003ab5: ISZERO
00003ab6: PUSH2 0x3abe
00003ab9: JUMPI
00003aba: PUSH1 0x00
00003abc: DUP1
00003abd: REVERT
00003abe: JUMPDEST
00003abf: DUP8
00003ac0: CALLDATALOAD
00003ac1: PUSH8 0xffffffffffffffff
00003aca: DUP2
00003acb: GT
00003acc: ISZERO
00003acd: PUSH2 0x3ad5
00003ad0: JUMPI
00003ad1: PUSH1 0x00
00003ad3: DUP1
00003ad4: REVERT
00003ad5: JUMPDEST
00003ad6: PUSH2 0x3ae1
00003ad9: DUP11
00003ada: DUP3
00003adb: DUP12
00003adc: ADD
00003add: PUSH2 0x39de
00003ae0: JUMP
00003ae1: JUMPDEST
00003ae2: SWAP1
00003ae3: SWAP9
00003ae4: POP
00003ae5: SWAP7
00003ae6: POP
00003ae7: POP
00003ae8: PUSH1 0x20
00003aea: DUP9
00003aeb: ADD
00003aec: CALLDATALOAD
00003aed: PUSH8 0xffffffffffffffff
00003af6: DUP2
00003af7: GT
00003af8: ISZERO
00003af9: PUSH2 0x3b01
00003afc: JUMPI
00003afd: PUSH1 0x00
00003aff: DUP1
00003b00: REVERT
00003b01: JUMPDEST
00003b02: PUSH2 0x3b0d
00003b05: DUP11
00003b06: DUP3
00003b07: DUP12
00003b08: ADD
00003b09: PUSH2 0x39de
00003b0c: JUMP
00003b0d: JUMPDEST
00003b0e: SWAP1
00003b0f: SWAP7
00003b10: POP
00003b11: SWAP5
00003b12: POP
00003b13: POP
00003b14: PUSH1 0x40
00003b16: DUP9
00003b17: ADD
00003b18: CALLDATALOAD
00003b19: PUSH8 0xffffffffffffffff
00003b22: DUP2
00003b23: GT
00003b24: ISZERO
00003b25: PUSH2 0x3b2d
00003b28: JUMPI
00003b29: PUSH1 0x00
00003b2b: DUP1
00003b2c: REVERT
00003b2d: JUMPDEST
00003b2e: PUSH2 0x3b39
00003b31: DUP11
00003b32: DUP3
00003b33: DUP12
00003b34: ADD
00003b35: PUSH2 0x39de
00003b38: JUMP
00003b39: JUMPDEST
00003b3a: SWAP9
00003b3b: SWAP12
00003b3c: SWAP8
00003b3d: SWAP11
00003b3e: POP
00003b3f: SWAP6
00003b40: SWAP9
00003b41: SWAP5
00003b42: SWAP8
00003b43: SWAP6
00003b44: SWAP7
00003b45: PUSH1 0x60
00003b47: SWAP1
00003b48: SWAP6
00003b49: ADD
00003b4a: CALLDATALOAD
00003b4b: SWAP5
00003b4c: SWAP4
00003b4d: POP
00003b4e: POP
00003b4f: POP
00003b50: POP
00003b51: JUMP
00003b52: JUMPDEST
00003b53: PUSH4 0x4e487b71
00003b58: PUSH1 0xe0
00003b5a: SHL
00003b5b: PUSH1 0x00
00003b5d: MSTORE
00003b5e: PUSH1 0x32
00003b60: PUSH1 0x04
00003b62: MSTORE
00003b63: PUSH1 0x24
00003b65: PUSH1 0x00
00003b67: REVERT
00003b68: JUMPDEST
00003b69: PUSH1 0x00
00003b6b: PUSH1 0x20
00003b6d: DUP3
00003b6e: DUP5
00003b6f: SUB
00003b70: SLT
00003b71: ISZERO
00003b72: PUSH2 0x3b7a
00003b75: JUMPI
00003b76: PUSH1 0x00
00003b78: DUP1
00003b79: REVERT
00003b7a: JUMPDEST
00003b7b: DUP2
00003b7c: MLOAD
00003b7d: PUSH1 0xff
00003b7f: DUP2
00003b80: AND
00003b81: DUP2
00003b82: EQ
00003b83: PUSH2 0x2290
00003b86: JUMPI
00003b87: PUSH1 0x00
00003b89: DUP1
00003b8a: REVERT
00003b8b: JUMPDEST
00003b8c: PUSH4 0x4e487b71
00003b91: PUSH1 0xe0
00003b93: SHL
00003b94: PUSH1 0x00
00003b96: MSTORE
00003b97: PUSH1 0x11
00003b99: PUSH1 0x04
00003b9b: MSTORE
00003b9c: PUSH1 0x24
00003b9e: PUSH1 0x00
00003ba0: REVERT
00003ba1: JUMPDEST
00003ba2: PUSH1 0x01
00003ba4: DUP2
00003ba5: JUMPDEST
00003ba6: PUSH1 0x01
00003ba8: DUP5
00003ba9: GT
00003baa: ISZERO
00003bab: PUSH2 0x3bdc
00003bae: JUMPI
00003baf: DUP1
00003bb0: DUP6
00003bb1: DIV
00003bb2: DUP2
00003bb3: GT
00003bb4: ISZERO
00003bb5: PUSH2 0x3bc0
00003bb8: JUMPI
00003bb9: PUSH2 0x3bc0
00003bbc: PUSH2 0x3b8b
00003bbf: JUMP
00003bc0: JUMPDEST
00003bc1: PUSH1 0x01
00003bc3: DUP5
00003bc4: AND
00003bc5: ISZERO
00003bc6: PUSH2 0x3bce
00003bc9: JUMPI
00003bca: SWAP1
00003bcb: DUP2
00003bcc: MUL
00003bcd: SWAP1
00003bce: JUMPDEST
00003bcf: PUSH1 0x01
00003bd1: SWAP4
00003bd2: SWAP1
00003bd3: SWAP4
00003bd4: SHR
00003bd5: SWAP3
00003bd6: DUP1
00003bd7: MUL
00003bd8: PUSH2 0x3ba5
00003bdb: JUMP
00003bdc: JUMPDEST
00003bdd: SWAP4
00003bde: POP
00003bdf: SWAP4
00003be0: SWAP2
00003be1: POP
00003be2: POP
00003be3: JUMP
00003be4: JUMPDEST
00003be5: PUSH1 0x00
00003be7: DUP3
00003be8: PUSH2 0x3bf3
00003beb: JUMPI
00003bec: POP
00003bed: PUSH1 0x01
00003bef: PUSH2 0x0ad0
00003bf2: JUMP
00003bf3: JUMPDEST
00003bf4: DUP2
00003bf5: PUSH2 0x3c00
00003bf8: JUMPI
00003bf9: POP
00003bfa: PUSH1 0x00
00003bfc: PUSH2 0x0ad0
00003bff: JUMP
00003c00: JUMPDEST
00003c01: DUP2
00003c02: PUSH1 0x01
00003c04: DUP2
00003c05: EQ
00003c06: PUSH2 0x3c16
00003c09: JUMPI
00003c0a: PUSH1 0x02
00003c0c: DUP2
00003c0d: EQ
00003c0e: PUSH2 0x3c20
00003c11: JUMPI
00003c12: PUSH2 0x3c3c
00003c15: JUMP
00003c16: JUMPDEST
00003c17: PUSH1 0x01
00003c19: SWAP2
00003c1a: POP
00003c1b: POP
00003c1c: PUSH2 0x0ad0
00003c1f: JUMP
00003c20: JUMPDEST
00003c21: PUSH1 0xff
00003c23: DUP5
00003c24: GT
00003c25: ISZERO
00003c26: PUSH2 0x3c31
00003c29: JUMPI
00003c2a: PUSH2 0x3c31
00003c2d: PUSH2 0x3b8b
00003c30: JUMP
00003c31: JUMPDEST
00003c32: POP
00003c33: POP
00003c34: PUSH1 0x01
00003c36: DUP3
00003c37: SHL
00003c38: PUSH2 0x0ad0
00003c3b: JUMP
00003c3c: JUMPDEST
00003c3d: POP
00003c3e: PUSH1 0x20
00003c40: DUP4
00003c41: LT
00003c42: PUSH2 0x0133
00003c45: DUP4
00003c46: LT
00003c47: AND
00003c48: PUSH1 0x4e
00003c4a: DUP5
00003c4b: LT
00003c4c: PUSH1 0x0b
00003c4e: DUP5
00003c4f: LT
00003c50: AND
00003c51: OR
00003c52: ISZERO
00003c53: PUSH2 0x3c5f
00003c56: JUMPI
00003c57: POP
00003c58: DUP2
00003c59: DUP2
00003c5a: EXP
00003c5b: PUSH2 0x0ad0
00003c5e: JUMP
00003c5f: JUMPDEST
00003c60: PUSH2 0x3c6c
00003c63: PUSH1 0x00
00003c65: NOT
00003c66: DUP5
00003c67: DUP5
00003c68: PUSH2 0x3ba1
00003c6b: JUMP
00003c6c: JUMPDEST
00003c6d: DUP1
00003c6e: PUSH1 0x00
00003c70: NOT
00003c71: DIV
00003c72: DUP3
00003c73: GT
00003c74: ISZERO
00003c75: PUSH2 0x3c80
00003c78: JUMPI
00003c79: PUSH2 0x3c80
00003c7c: PUSH2 0x3b8b
00003c7f: JUMP
00003c80: JUMPDEST
00003c81: MUL
00003c82: SWAP4
00003c83: SWAP3
00003c84: POP
00003c85: POP
00003c86: POP
00003c87: JUMP
00003c88: JUMPDEST
00003c89: PUSH1 0x00
00003c8b: PUSH2 0x2290
00003c8e: PUSH1 0xff
00003c90: DUP5
00003c91: AND
00003c92: DUP4
00003c93: PUSH2 0x3be4
00003c96: JUMP
00003c97: JUMPDEST
00003c98: DUP1
00003c99: DUP3
00003c9a: MUL
00003c9b: DUP2
00003c9c: ISZERO
00003c9d: DUP3
00003c9e: DUP3
00003c9f: DIV
00003ca0: DUP5
00003ca1: EQ
00003ca2: OR
00003ca3: PUSH2 0x0ad0
00003ca6: JUMPI
00003ca7: PUSH2 0x0ad0
00003caa: PUSH2 0x3b8b
00003cad: JUMP
00003cae: JUMPDEST
00003caf: PUSH1 0x00
00003cb1: DUP3
00003cb2: PUSH2 0x3ccb
00003cb5: JUMPI
00003cb6: PUSH4 0x4e487b71
00003cbb: PUSH1 0xe0
00003cbd: SHL
00003cbe: PUSH1 0x00
00003cc0: MSTORE
00003cc1: PUSH1 0x12
00003cc3: PUSH1 0x04
00003cc5: MSTORE
00003cc6: PUSH1 0x24
00003cc8: PUSH1 0x00
00003cca: REVERT
00003ccb: JUMPDEST
00003ccc: POP
00003ccd: DIV
00003cce: SWAP1
00003ccf: JUMP
00003cd0: JUMPDEST
00003cd1: PUSH2 0x0180
00003cd4: DUP2
00003cd5: ADD
00003cd6: DUP2
00003cd7: DUP4
00003cd8: PUSH1 0x00
00003cda: JUMPDEST
00003cdb: PUSH1 0x03
00003cdd: DUP2
00003cde: LT
00003cdf: ISZERO
00003ce0: PUSH2 0x3cfb
00003ce3: JUMPI
00003ce4: PUSH1 0x80
00003ce6: DUP3
00003ce7: DUP5
00003ce8: CALLDATACOPY
00003ce9: PUSH1 0x80
00003ceb: SWAP3
00003cec: DUP4
00003ced: ADD
00003cee: SWAP3
00003cef: SWAP2
00003cf0: SWAP1
00003cf1: SWAP2
00003cf2: ADD
00003cf3: SWAP1
00003cf4: PUSH1 0x01
00003cf6: ADD
00003cf7: PUSH2 0x3cda
00003cfa: JUMP
00003cfb: JUMPDEST
00003cfc: POP
00003cfd: POP
00003cfe: POP
00003cff: SWAP3
00003d00: SWAP2
00003d01: POP
00003d02: POP
00003d03: JUMP
00003d04: JUMPDEST
00003d05: DUP2
00003d06: DUP2
00003d07: SUB
00003d08: DUP2
00003d09: DUP2
00003d0a: GT
00003d0b: ISZERO
00003d0c: PUSH2 0x0ad0
00003d0f: JUMPI
00003d10: PUSH2 0x0ad0
00003d13: PUSH2 0x3b8b
00003d16: JUMP
00003d17: JUMPDEST
00003d18: PUSH1 0x00
00003d1a: PUSH2 0x2290
00003d1d: DUP4
00003d1e: DUP4
00003d1f: PUSH2 0x3be4
00003d22: JUMP
00003d23: JUMPDEST
00003d24: PUSH1 0x80
00003d26: DUP2
00003d27: DUP2
00003d28: ADD
00003d29: SWAP1
00003d2a: DUP4
00003d2b: DUP4
00003d2c: CALLDATACOPY
00003d2d: SWAP3
00003d2e: SWAP2
00003d2f: POP
00003d30: POP
00003d31: JUMP
00003d32: JUMPDEST
00003d33: PUSH1 0x20
00003d35: DUP1
00003d36: DUP3
00003d37: MSTORE
00003d38: DUP2
00003d39: ADD
00003d3a: DUP3
00003d3b: SWAP1
00003d3c: MSTORE
00003d3d: PUSH1 0x00
00003d3f: DUP4
00003d40: PUSH1 0x40
00003d42: DUP4
00003d43: ADD
00003d44: DUP3
00003d45: JUMPDEST
00003d46: DUP6
00003d47: DUP2
00003d48: LT
00003d49: ISZERO
00003d4a: PUSH2 0x3d75
00003d4d: JUMPI
00003d4e: DUP3
00003d4f: CALLDATALOAD
00003d50: PUSH2 0x3d58
00003d53: DUP2
00003d54: PUSH2 0x363d
00003d57: JUMP
00003d58: JUMPDEST
00003d59: PUSH1 0x01
00003d5b: PUSH1 0x01
00003d5d: PUSH1 0xa0
00003d5f: SHL
00003d60: SUB
00003d61: AND
00003d62: DUP3
00003d63: MSTORE
00003d64: PUSH1 0x20
00003d66: SWAP3
00003d67: DUP4
00003d68: ADD
00003d69: SWAP3
00003d6a: SWAP1
00003d6b: SWAP2
00003d6c: ADD
00003d6d: SWAP1
00003d6e: PUSH1 0x01
00003d70: ADD
00003d71: PUSH2 0x3d45
00003d74: JUMP
00003d75: JUMPDEST
00003d76: POP
00003d77: SWAP6
00003d78: SWAP5
00003d79: POP
00003d7a: POP
00003d7b: POP
00003d7c: POP
00003d7d: POP
00003d7e: JUMP
00003d7f: JUMPDEST
00003d80: DUP1
00003d81: DUP3
00003d82: ADD
00003d83: DUP1
00003d84: DUP3
00003d85: GT
00003d86: ISZERO
00003d87: PUSH2 0x0ad0
00003d8a: JUMPI
00003d8b: PUSH2 0x0ad0
00003d8e: PUSH2 0x3b8b
00003d91: JUMP
00003d92: JUMPDEST
00003d93: PUSH6 0xffffffffffff
00003d9a: DUP2
00003d9b: DUP2
00003d9c: AND
00003d9d: DUP4
00003d9e: DUP3
00003d9f: AND
00003da0: ADD
00003da1: SWAP1
00003da2: DUP2
00003da3: GT
00003da4: ISZERO
00003da5: PUSH2 0x0ad0
00003da8: JUMPI
00003da9: PUSH2 0x0ad0
00003dac: PUSH2 0x3b8b
00003daf: JUMP
00003db0: JUMPDEST
00003db1: DUP2
00003db2: DUP4
00003db3: MSTORE
00003db4: PUSH1 0x00
00003db6: PUSH1 0x01
00003db8: PUSH1 0x01
00003dba: PUSH1 0xfb
00003dbc: SHL
00003dbd: SUB
00003dbe: DUP4
00003dbf: GT
00003dc0: ISZERO
00003dc1: PUSH2 0x3dc9
00003dc4: JUMPI
00003dc5: PUSH1 0x00
00003dc7: DUP1
00003dc8: REVERT
00003dc9: JUMPDEST
00003dca: DUP3
00003dcb: PUSH1 0x05
00003dcd: SHL
00003dce: DUP1
00003dcf: DUP4
00003dd0: PUSH1 0x20
00003dd2: DUP8
00003dd3: ADD
00003dd4: CALLDATACOPY
00003dd5: SWAP4
00003dd6: SWAP1
00003dd7: SWAP4
00003dd8: ADD
00003dd9: PUSH1 0x20
00003ddb: ADD
00003ddc: SWAP4
00003ddd: SWAP3
00003dde: POP
00003ddf: POP
00003de0: POP
00003de1: JUMP
00003de2: JUMPDEST
00003de3: PUSH1 0x60
00003de5: DUP2
00003de6: MSTORE
00003de7: PUSH1 0x00
00003de9: PUSH2 0x3df6
00003dec: PUSH1 0x60
00003dee: DUP4
00003def: ADD
00003df0: DUP8
00003df1: DUP10
00003df2: PUSH2 0x3db0
00003df5: JUMP
00003df6: JUMPDEST
00003df7: DUP3
00003df8: DUP2
00003df9: SUB
00003dfa: PUSH1 0x20
00003dfc: DUP5
00003dfd: ADD
00003dfe: MSTORE
00003dff: PUSH2 0x3e09
00003e02: DUP2
00003e03: DUP7
00003e04: DUP9
00003e05: PUSH2 0x3db0
00003e08: JUMP
00003e09: JUMPDEST
00003e0a: SWAP2
00003e0b: POP
00003e0c: POP
00003e0d: DUP3
00003e0e: PUSH1 0x40
00003e10: DUP4
00003e11: ADD
00003e12: MSTORE
00003e13: SWAP7
00003e14: SWAP6
00003e15: POP
00003e16: POP
00003e17: POP
00003e18: POP
00003e19: POP
00003e1a: POP
00003e1b: JUMP
00003e1c: JUMPDEST
00003e1d: PUSH6 0xffffffffffff
00003e24: DUP3
00003e25: DUP2
00003e26: AND
00003e27: DUP3
00003e28: DUP3
00003e29: AND
00003e2a: SUB
00003e2b: SWAP1
00003e2c: DUP2
00003e2d: GT
00003e2e: ISZERO
00003e2f: PUSH2 0x0ad0
00003e32: JUMPI
00003e33: PUSH2 0x0ad0
00003e36: PUSH2 0x3b8b
00003e39: JUMP
00003e3a: JUMPDEST
00003e3b: PUSH1 0x01
00003e3d: DUP2
00003e3e: DUP2
00003e3f: SHR
00003e40: SWAP1
00003e41: DUP3
00003e42: AND
00003e43: DUP1
00003e44: PUSH2 0x3e4e
00003e47: JUMPI
00003e48: PUSH1 0x7f
00003e4a: DUP3
00003e4b: AND
00003e4c: SWAP2
00003e4d: POP
00003e4e: JUMPDEST
00003e4f: PUSH1 0x20
00003e51: DUP3
00003e52: LT
00003e53: DUP2
00003e54: SUB
00003e55: PUSH2 0x37b8
00003e58: JUMPI
00003e59: PUSH4 0x4e487b71
00003e5e: PUSH1 0xe0
00003e60: SHL
00003e61: PUSH1 0x00
00003e63: MSTORE
00003e64: PUSH1 0x22
00003e66: PUSH1 0x04
00003e68: MSTORE
00003e69: PUSH1 0x24
00003e6b: PUSH1 0x00
00003e6d: REVERT
00003e6e: INVALID
00003e6f: SWAP8
00003e70: PUSH7 0x7070c54ef182b0
00003e78: CREATE2
00003e79: DUP6
00003e7a: DUP12
00003e7b: SUB
00003e7c: UNKNOWN(0x4B)
00003e7d: UNKNOWN(0xEA)
00003e7e: UNKNOWN(0xC1)
00003e7f: UNKNOWN(0xB6)
00003e80: RETURN
00003e81: ADDMOD
00003e82: SWAP11
00003e83: LOG2
00003e84: UNKNOWN(0xD3)
00003e85: XOR
00003e86: DUP12
00003e87: UNKNOWN(0xB1)
00003e88: UNKNOWN(0xE8)
00003e89: SWAP3
00003e8a: SWAP16
00003e8b: UNKNOWN(0x4F)
00003e8c: UNKNOWN(0xA9)
00003e8d: UNKNOWN(0xB9)
00003e8e: UNKNOWN(0x29)
00003e8f: LOG2
00003e90: PUSH5 0x6970667358
00003e96: UNKNOWN(0x22)
00003e97: SLT
00003e98: KECCAK256
00003e99: MCOPY
00003e9a: PUSH26 0xd2fa04b5f006c8f231e0da4dec297139dc34bc096df27524160d
00003eb5: SLOAD
00003eb6: UNKNOWN(0xD4)
00003eb7: DUP9
00003eb8: UNKNOWN(0xE1)
00003eb9: PUSH5 0x736f6c6343
00003ebf: STOP
00003ec0: ADDMOD
00003ec1: SHR
00003ec2: STOP
00003ec3: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x2e5b2e7ea3601f21abcaa9bac406fdeb33c1e6644b235bfb40f4f6dcc909de57
call_targets: 0x80c1c65463427ea785fb7b03ba84b91f49f272eb
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x2e5b2e7ea3601f21abcaa9bac406fdeb33c1e6644b235bfb40f4f6dcc909de57",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x80c1c65463427ea785fb7b03ba84b91f49f272eb"
    ],
    "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": "0xdc173042",
            "selector": "0xdc173042",
            "calldata_variants": [
                "0xdc173042",
                "0xdc1730420000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf5b541a6",
            "selector": "0xf5b541a6",
            "calldata_variants": [
                "0xf5b541a6",
                "0xf5b541a60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf9d9e31b",
            "selector": "0xf9d9e31b",
            "calldata_variants": [
                "0xf9d9e31b",
                "0xf9d9e31b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfa5a89f1",
            "selector": "0xfa5a89f1",
            "calldata_variants": [
                "0xfa5a89f1",
                "0xfa5a89f10000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd547741f",
            "selector": "0xd547741f",
            "calldata_variants": [
                "0xd547741f",
                "0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd602b9fd",
            "selector": "0xd602b9fd",
            "calldata_variants": [
                "0xd602b9fd",
                "0xd602b9fd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xda71c017",
            "selector": "0xda71c017",
            "calldata_variants": [
                "0xda71c017",
                "0xda71c0170000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc26e2c03",
            "selector": "0xc26e2c03",
            "calldata_variants": [
                "0xc26e2c03",
                "0xc26e2c030000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4551,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 7498,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 8451,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 4,
    "guards_detected": [],
    "untrusted_call_count": 4
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x2e5b2e7ea3601f21abcaa9bac406fdeb33c1e6644b235bfb40f4f6dcc909de57
call_targets: 0x80c1c65463427ea785fb7b03ba84b91f49f272eb
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x2e5b2e7ea3601f21abcaa9bac406fdeb33c1e6644b235bfb40f4f6dcc909de57",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x80c1c65463427ea785fb7b03ba84b91f49f272eb"
    ],
    "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": "0xdc173042",
            "selector": "0xdc173042",
            "calldata_variants": [
                "0xdc173042",
                "0xdc1730420000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf5b541a6",
            "selector": "0xf5b541a6",
            "calldata_variants": [
                "0xf5b541a6",
                "0xf5b541a60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf9d9e31b",
            "selector": "0xf9d9e31b",
            "calldata_variants": [
                "0xf9d9e31b",
                "0xf9d9e31b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfa5a89f1",
            "selector": "0xfa5a89f1",
            "calldata_variants": [
                "0xfa5a89f1",
                "0xfa5a89f10000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd547741f",
            "selector": "0xd547741f",
            "calldata_variants": [
                "0xd547741f",
                "0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd602b9fd",
            "selector": "0xd602b9fd",
            "calldata_variants": [
                "0xd602b9fd",
                "0xd602b9fd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xda71c017",
            "selector": "0xda71c017",
            "calldata_variants": [
                "0xda71c017",
                "0xda71c0170000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc26e2c03",
            "selector": "0xc26e2c03",
            "calldata_variants": [
                "0xc26e2c03",
                "0xc26e2c030000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4551,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 7498,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 8451,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 4,
    "guards_detected": []
}
high other slither Sale._executeTokenSell(address,uint256,uint256,IERC20Metadata) (contracts/Sale.sol#376-395) sends eth to arbitrary user 85 no
view
evidence_json
{
    "impact": "High",
    "detector": "arbitrary-send-eth",
    "elements": [
        {
            "name": "_executeTokenSell",
            "type": "function",
            "source_mapping": {
                "lines": [
                    376,
                    377,
                    378,
                    379,
                    380,
                    381,
                    382,
                    383,
                    384,
                    385,
                    386,
                    387,
                    388,
                    389,
                    390,
                    391,
                    392,
                    393,
                    394,
                    395
                ],
                "start": 14382,
                "length": 638,
                "ending_column": 17,
                "is_dependency": false,
                "filename_short": "contracts/Sale.sol",
                "starting_column": 22,
                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                "filename_relative": "contracts/Sale.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "Sale",
                    "type": "contract",
                    "source_mapping": {
                        "lines": [
                            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,
                            214,
                            215,
                            216,
                            217,
                            218,
                            219,
                            220,
                            221,
                            222,
                            223,
                            224,
                            225,
                            226,
                            227,
                            228,
                            229,
                            230,
                            231,
                            232,
                            233,
                            234,
                            235,
                            236,
                            237,
                            238,
                            239,
                            240,
                            241,
                            242,
                            243,
                            244,
                            245,
                            246,
                            247,
                            248,
                            249,
                            250,
                            251,
                            252,
                            253,
                            254,
                            255,
                            256,
                            257,
                            258,
                            259,
                            260,
                            261,
                            262,
                            263,
                            264,
                            265,
                            266,
                            267,
                            268,
                            269,
                            270,
                            271,
                            272,
                            273,
                            274,
                            275,
                            276,
                            277,
                            278,
                            279,
                            280,
                            281,
                            282,
                            283,
                            284,
                            285,
                            286,
                            287,
                            288,
                            289,
                            290,
                            291,
                            292,
                            293,
                            294,
                            295,
                            296,
                            297,
                            298,
                            299,
                            300,
                            301,
                            302,
                            303,
                            304,
                            305,
                            306,
                            307,
                            308,
                            309,
                            310,
                            311,
                            312,
                            313,
                            314,
                            315,
                            316,
                            317,
                            318,
                            319,
                            320,
                            321,
                            322,
                            323,
                            324,
                            325,
                            326,
                            327,
                            328,
                            329,
                            330,
                            331,
                            332,
                            333,
                            334,
                            335,
                            336,
                            337,
                            338,
                            339,
                            340,
                            341,
                            342,
                            343,
                            344,
                            345,
                            346,
                            347,
                            348,
                            349,
                            350,
                            351,
                            352,
                            353,
                            354,
                            355,
                            356,
                            357,
                            358,
                            359,
                            360,
                            361,
                            362,
                            363,
                            364,
                            365,
                            366,
                            367,
                            368,
                            369,
                            370,
                            371,
                            372,
                            373,
                            374,
                            375,
                            376,
                            377,
                            378,
                            379,
                            380,
                            381,
                            382,
                            383,
                            384,
                            385,
                            386,
                            387,
                            388,
                            389,
                            390,
                            391,
                            392,
                            393,
                            394,
                            395,
                            396,
                            397,
                            398,
                            399,
                            400,
                            401,
                            402,
                            403,
                            404,
                            405,
                            406,
                            407,
                            408,
                            409,
                            410,
                            411,
                            412,
                            413,
                            414,
                            415,
                            416,
                            417,
                            418,
                            419,
                            420,
                            421,
                            422,
                            423,
                            424,
                            425,
                            426,
                            427,
                            428,
                            429,
                            430,
                            431,
                            432,
                            433,
                            434,
                            435,
                            436,
                            437,
                            438,
                            439,
                            440,
                            441,
                            442,
                            443,
                            444,
                            445,
                            446,
                            447,
                            448,
                            449,
                            450,
                            451,
                            452,
                            453,
                            454,
                            455,
                            456,
                            457,
                            458,
                            459,
                            460,
                            461,
                            462,
                            463,
                            464,
                            465,
                            466,
                            467,
                            468,
                            469,
                            470,
                            471,
                            472,
                            473,
                            474,
                            475,
                            476,
                            477,
                            478,
                            479,
                            480,
                            481,
                            482,
                            483,
                            484,
                            485,
                            486,
                            487,
                            488,
                            489,
                            490,
                            491,
                            492,
                            493,
                            494,
                            495,
                            496,
                            497,
                            498,
                            499,
                            500,
                            501,
                            502
                        ],
                        "start": 519,
                        "length": 19502,
                        "ending_column": 11,
                        "is_dependency": false,
                        "filename_short": "contracts/Sale.sol",
                        "starting_column": 71,
                        "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                        "filename_relative": "contracts/Sale.sol"
                    }
                },
                "signature": "_executeTokenSell(address,uint256,uint256,IERC20Metadata)"
            }
        },
        {
            "name": "(success,None) = seller.call{value: payTokenAmount}()",
            "type": "node",
            "source_mapping": {
                "lines": [
                    384,
                    385,
                    386,
                    387,
                    388
                ],
                "start": 14748,
                "length": 57,
                "ending_column": 9,
                "is_dependency": false,
                "filename_short": "contracts/Sale.sol",
                "starting_column": 73,
                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                "filename_relative": "contracts/Sale.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "_executeTokenSell",
                    "type": "function",
                    "source_mapping": {
                        "lines": [
                            376,
                            377,
                            378,
                            379,
                            380,
                            381,
                            382,
                            383,
                            384,
                            385,
                            386,
                            387,
                            388,
                            389,
                            390,
                            391,
                            392,
                            393,
                            394,
                            395
                        ],
                        "start": 14382,
                        "length": 638,
                        "ending_column": 17,
                        "is_dependency": false,
                        "filename_short": "contracts/Sale.sol",
                        "starting_column": 22,
                        "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                        "filename_relative": "contracts/Sale.sol"
                    },
                    "type_specific_fields": {
                        "parent": {
                            "name": "Sale",
                            "type": "contract",
                            "source_mapping": {
                                "lines": [
                                    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,
                                    214,
                                    215,
                                    216,
                                    217,
                                    218,
                                    219,
                                    220,
                                    221,
                                    222,
                                    223,
                                    224,
                                    225,
                                    226,
                                    227,
                                    228,
                                    229,
                                    230,
                                    231,
                                    232,
                                    233,
                                    234,
                                    235,
                                    236,
                                    237,
                                    238,
                                    239,
                                    240,
                                    241,
                                    242,
                                    243,
                                    244,
                                    245,
                                    246,
                                    247,
                                    248,
                                    249,
                                    250,
                                    251,
                                    252,
                                    253,
                                    254,
                                    255,
                                    256,
                                    257,
                                    258,
                                    259,
                                    260,
                                    261,
                                    262,
                                    263,
                                    264,
                                    265,
                                    266,
                                    267,
                                    268,
                                    269,
                                    270,
                                    271,
                                    272,
                                    273,
                                    274,
                                    275,
                                    276,
                                    277,
                                    278,
                                    279,
                                    280,
                                    281,
                                    282,
                                    283,
                                    284,
                                    285,
                                    286,
                                    287,
                                    288,
                                    289,
                                    290,
                                    291,
                                    292,
                                    293,
                                    294,
                                    295,
                                    296,
                                    297,
                                    298,
                                    299,
                                    300,
                                    301,
                                    302,
                                    303,
                                    304,
                                    305,
                                    306,
                                    307,
                                    308,
                                    309,
                                    310,
                                    311,
                                    312,
                                    313,
                                    314,
                                    315,
                                    316,
                                    317,
                                    318,
                                    319,
                                    320,
                                    321,
                                    322,
                                    323,
                                    324,
                                    325,
                                    326,
                                    327,
                                    328,
                                    329,
                                    330,
                                    331,
                                    332,
                                    333,
                                    334,
                                    335,
                                    336,
                                    337,
                                    338,
                                    339,
                                    340,
                                    341,
                                    342,
                                    343,
                                    344,
                                    345,
                                    346,
                                    347,
                                    348,
                                    349,
                                    350,
                                    351,
                                    352,
                                    353,
                                    354,
                                    355,
                                    356,
                                    357,
                                    358,
                                    359,
                                    360,
                                    361,
                                    362,
                                    363,
                                    364,
                                    365,
                                    366,
                                    367,
                                    368,
                                    369,
                                    370,
                                    371,
                                    372,
                                    373,
                                    374,
                                    375,
                                    376,
                                    377,
                                    378,
                                    379,
                                    380,
                                    381,
                                    382,
                                    383,
                                    384,
                                    385,
                                    386,
                                    387,
                                    388,
                                    389,
                                    390,
                                    391,
                                    392,
                                    393,
                                    394,
                                    395,
                                    396,
                                    397,
                                    398,
                                    399,
                                    400,
                                    401,
                                    402,
                                    403,
                                    404,
                                    405,
                                    406,
                                    407,
                                    408,
                                    409,
                                    410,
                                    411,
                                    412,
                                    413,
                                    414,
                                    415,
                                    416,
                                    417,
                                    418,
                                    419,
                                    420,
                                    421,
                                    422,
                                    423,
                                    424,
                                    425,
                                    426,
                                    427,
                                    428,
                                    429,
                                    430,
                                    431,
                                    432,
                                    433,
                                    434,
                                    435,
                                    436,
                                    437,
                                    438,
                                    439,
                                    440,
                                    441,
                                    442,
                                    443,
                                    444,
                                    445,
                                    446,
                                    447,
                                    448,
                                    449,
                                    450,
                                    451,
                                    452,
                                    453,
                                    454,
                                    455,
                                    456,
                                    457,
                                    458,
                                    459,
                                    460,
                                    461,
                                    462,
                                    463,
                                    464,
                                    465,
                                    466,
                                    467,
                                    468,
                                    469,
                                    470,
                                    471,
                                    472,
                                    473,
                                    474,
                                    475,
                                    476,
                                    477,
                                    478,
                                    479,
                                    480,
                                    481,
                                    482,
                                    483,
                                    484,
                                    485,
                                    486,
                                    487,
                                    488,
                                    489,
                                    490,
                                    491,
                                    492,
                                    493,
                                    494,
                                    495,
                                    496,
                                    497,
                                    498,
                                    499,
                                    500,
                                    501,
                                    502
                                ],
                                "start": 519,
                                "length": 19502,
                                "ending_column": 11,
                                "is_dependency": false,
                                "filename_short": "contracts/Sale.sol",
                                "starting_column": 71,
                                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                                "filename_relative": "contracts/Sale.sol"
                            }
                        },
                        "signature": "_executeTokenSell(address,uint256,uint256,IERC20Metadata)"
                    }
                }
            }
        }
    ],
    "locations": [
        {
            "file": "contracts/Sale.sol",
            "name": "_executeTokenSell",
            "type": "function",
            "lines": [
                376,
                377,
                378,
                379,
                380,
                381,
                382,
                383,
                384,
                385,
                386,
                387,
                388,
                389,
                390,
                391,
                392,
                393,
                394,
                395
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "(success,None) = seller.call{value: payTokenAmount}()",
            "type": "node",
            "lines": [
                384,
                385,
                386,
                387,
                388
            ]
        }
    ],
    "description": "Sale._executeTokenSell(address,uint256,uint256,IERC20Metadata) (contracts/Sale.sol#376-395) sends eth to arbitrary user\n\tDangerous calls:\n\t- (success,None) = seller.call{value: payTokenAmount}() (contracts/Sale.sol#384-388)"
}
high reentrancy slither Reentrancy in Sale._executeTokenBuy(address,address,uint256,uint256,IERC20Metadata,uint256,uint256,uint256,bytes) (contracts/Sale.sol#338-376): 85 no
view
evidence_json
{
    "impact": "High",
    "detector": "reentrancy-eth",
    "elements": [
        {
            "name": "_executeTokenBuy",
            "type": "function",
            "source_mapping": {
                "lines": [
                    338,
                    339,
                    340,
                    341,
                    342,
                    343,
                    344,
                    345,
                    346,
                    347,
                    348,
                    349,
                    350,
                    351,
                    352,
                    353,
                    354,
                    355,
                    356,
                    357,
                    358,
                    359,
                    360,
                    361,
                    362,
                    363,
                    364,
                    365,
                    366,
                    367,
                    368,
                    369,
                    370,
                    371,
                    372,
                    373,
                    374,
                    375,
                    376
                ],
                "start": 12977,
                "length": 1399,
                "ending_column": 16,
                "is_dependency": false,
                "filename_short": "contracts/Sale.sol",
                "starting_column": 23,
                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                "filename_relative": "contracts/Sale.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "Sale",
                    "type": "contract",
                    "source_mapping": {
                        "lines": [
                            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,
                            214,
                            215,
                            216,
                            217,
                            218,
                            219,
                            220,
                            221,
                            222,
                            223,
                            224,
                            225,
                            226,
                            227,
                            228,
                            229,
                            230,
                            231,
                            232,
                            233,
                            234,
                            235,
                            236,
                            237,
                            238,
                            239,
                            240,
                            241,
                            242,
                            243,
                            244,
                            245,
                            246,
                            247,
                            248,
                            249,
                            250,
                            251,
                            252,
                            253,
                            254,
                            255,
                            256,
                            257,
                            258,
                            259,
                            260,
                            261,
                            262,
                            263,
                            264,
                            265,
                            266,
                            267,
                            268,
                            269,
                            270,
                            271,
                            272,
                            273,
                            274,
                            275,
                            276,
                            277,
                            278,
                            279,
                            280,
                            281,
                            282,
                            283,
                            284,
                            285,
                            286,
                            287,
                            288,
                            289,
                            290,
                            291,
                            292,
                            293,
                            294,
                            295,
                            296,
                            297,
                            298,
                            299,
                            300,
                            301,
                            302,
                            303,
                            304,
                            305,
                            306,
                            307,
                            308,
                            309,
                            310,
                            311,
                            312,
                            313,
                            314,
                            315,
                            316,
                            317,
                            318,
                            319,
                            320,
                            321,
                            322,
                            323,
                            324,
                            325,
                            326,
                            327,
                            328,
                            329,
                            330,
                            331,
                            332,
                            333,
                            334,
                            335,
                            336,
                            337,
                            338,
                            339,
                            340,
                            341,
                            342,
                            343,
                            344,
                            345,
                            346,
                            347,
                            348,
                            349,
                            350,
                            351,
                            352,
                            353,
                            354,
                            355,
                            356,
                            357,
                            358,
                            359,
                            360,
                            361,
                            362,
                            363,
                            364,
                            365,
                            366,
                            367,
                            368,
                            369,
                            370,
                            371,
                            372,
                            373,
                            374,
                            375,
                            376,
                            377,
                            378,
                            379,
                            380,
                            381,
                            382,
                            383,
                            384,
                            385,
                            386,
                            387,
                            388,
                            389,
                            390,
                            391,
                            392,
                            393,
                            394,
                            395,
                            396,
                            397,
                            398,
                            399,
                            400,
                            401,
                            402,
                            403,
                            404,
                            405,
                            406,
                            407,
                            408,
                            409,
                            410,
                            411,
                            412,
                            413,
                            414,
                            415,
                            416,
                            417,
                            418,
                            419,
                            420,
                            421,
                            422,
                            423,
                            424,
                            425,
                            426,
                            427,
                            428,
                            429,
                            430,
                            431,
                            432,
                            433,
                            434,
                            435,
                            436,
                            437,
                            438,
                            439,
                            440,
                            441,
                            442,
                            443,
                            444,
                            445,
                            446,
                            447,
                            448,
                            449,
                            450,
                            451,
                            452,
                            453,
                            454,
                            455,
                            456,
                            457,
                            458,
                            459,
                            460,
                            461,
                            462,
                            463,
                            464,
                            465,
                            466,
                            467,
                            468,
                            469,
                            470,
                            471,
                            472,
                            473,
                            474,
                            475,
                            476,
                            477,
                            478,
                            479,
                            480,
                            481,
                            482,
                            483,
                            484,
                            485,
                            486,
                            487,
                            488,
                            489,
                            490,
                            491,
                            492,
                            493,
                            494,
                            495,
                            496,
                            497,
                            498,
                            499,
                            500,
                            501,
                            502
                        ],
                        "start": 519,
                        "length": 19502,
                        "ending_column": 11,
                        "is_dependency": false,
                        "filename_short": "contracts/Sale.sol",
                        "starting_column": 71,
                        "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                        "filename_relative": "contracts/Sale.sol"
                    }
                },
                "signature": "_executeTokenBuy(address,address,uint256,uint256,IERC20Metadata,uint256,uint256,uint256,bytes)"
            }
        },
        {
            "name": "(success,None) = buyer.call{value: msg.value - payTokenAmount}()",
            "type": "node",
            "source_mapping": {
                "lines": [
                    362,
                    363,
                    364,
                    365
                ],
                "start": 13764,
                "length": 68,
                "ending_column": 4,
                "is_dependency": false,
                "filename_short": "contracts/Sale.sol",
                "starting_column": 13,
                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                "filename_relative": "contracts/Sale.sol"
            },
            "additional_fields": {
                "underlying_type": "external_calls"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "_executeTokenBuy",
                    "type": "function",
                    "source_mapping": {
                        "lines": [
                            338,
                            339,
                            340,
                            341,
                            342,
                            343,
                            344,
                            345,
                            346,
                            347,
                            348,
                            349,
                            350,
                            351,
                            352,
                            353,
                            354,
                            355,
                            356,
                            357,
                            358,
                            359,
                            360,
                            361,
                            362,
                            363,
                            364,
                            365,
                            366,
                            367,
                            368,
                            369,
                            370,
                            371,
                            372,
                            373,
                            374,
                            375,
                            376
                        ],
                        "start": 12977,
                        "length": 1399,
                        "ending_column": 16,
                        "is_dependency": false,
                        "filename_short": "contracts/Sale.sol",
                        "starting_column": 23,
                        "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                        "filename_relative": "contracts/Sale.sol"
                    },
                    "type_specific_fields": {
                        "parent": {
                            "name": "Sale",
                            "type": "contract",
                            "source_mapping": {
                                "lines": [
                                    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,
                                    214,
                                    215,
                                    216,
                                    217,
                                    218,
                                    219,
                                    220,
                                    221,
                                    222,
                                    223,
                                    224,
                                    225,
                                    226,
                                    227,
                                    228,
                                    229,
                                    230,
                                    231,
                                    232,
                                    233,
                                    234,
                                    235,
                                    236,
                                    237,
                                    238,
                                    239,
                                    240,
                                    241,
                                    242,
                                    243,
                                    244,
                                    245,
                                    246,
                                    247,
                                    248,
                                    249,
                                    250,
                                    251,
                                    252,
                                    253,
                                    254,
                                    255,
                                    256,
                                    257,
                                    258,
                                    259,
                                    260,
                                    261,
                                    262,
                                    263,
                                    264,
                                    265,
                                    266,
                                    267,
                                    268,
                                    269,
                                    270,
                                    271,
                                    272,
                                    273,
                                    274,
                                    275,
                                    276,
                                    277,
                                    278,
                                    279,
                                    280,
                                    281,
                                    282,
                                    283,
                                    284,
                                    285,
                                    286,
                                    287,
                                    288,
                                    289,
                                    290,
                                    291,
                                    292,
                                    293,
                                    294,
                                    295,
                                    296,
                                    297,
                                    298,
                                    299,
                                    300,
                                    301,
                                    302,
                                    303,
                                    304,
                                    305,
                                    306,
                                    307,
                                    308,
                                    309,
                                    310,
                                    311,
                                    312,
                                    313,
                                    314,
                                    315,
                                    316,
                                    317,
                                    318,
                                    319,
                                    320,
                                    321,
                                    322,
                                    323,
                                    324,
                                    325,
                                    326,
                                    327,
                                    328,
                                    329,
                                    330,
                                    331,
                                    332,
                                    333,
                                    334,
                                    335,
                                    336,
                                    337,
                                    338,
                                    339,
                                    340,
                                    341,
                                    342,
                                    343,
                                    344,
                                    345,
                                    346,
                                    347,
                                    348,
                                    349,
                                    350,
                                    351,
                                    352,
                                    353,
                                    354,
                                    355,
                                    356,
                                    357,
                                    358,
                                    359,
                                    360,
                                    361,
                                    362,
                                    363,
                                    364,
                                    365,
                                    366,
                                    367,
                                    368,
                                    369,
                                    370,
                                    371,
                                    372,
                                    373,
                                    374,
                                    375,
                                    376,
                                    377,
                                    378,
                                    379,
                                    380,
                                    381,
                                    382,
                                    383,
                                    384,
                                    385,
                                    386,
                                    387,
                                    388,
                                    389,
                                    390,
                                    391,
                                    392,
                                    393,
                                    394,
                                    395,
                                    396,
                                    397,
                                    398,
                                    399,
                                    400,
                                    401,
                                    402,
                                    403,
                                    404,
                                    405,
                                    406,
                                    407,
                                    408,
                                    409,
                                    410,
                                    411,
                                    412,
                                    413,
                                    414,
                                    415,
                                    416,
                                    417,
                                    418,
                                    419,
                                    420,
                                    421,
                                    422,
                                    423,
                                    424,
                                    425,
                                    426,
                                    427,
                                    428,
                                    429,
                                    430,
                                    431,
                                    432,
                                    433,
                                    434,
                                    435,
                                    436,
                                    437,
                                    438,
                                    439,
                                    440,
                                    441,
                                    442,
                                    443,
                                    444,
                                    445,
                                    446,
                                    447,
                                    448,
                                    449,
                                    450,
                                    451,
                                    452,
                                    453,
                                    454,
                                    455,
                                    456,
                                    457,
                                    458,
                                    459,
                                    460,
                                    461,
                                    462,
                                    463,
                                    464,
                                    465,
                                    466,
                                    467,
                                    468,
                                    469,
                                    470,
                                    471,
                                    472,
                                    473,
                                    474,
                                    475,
                                    476,
                                    477,
                                    478,
                                    479,
                                    480,
                                    481,
                                    482,
                                    483,
                                    484,
                                    485,
                                    486,
                                    487,
                                    488,
                                    489,
                                    490,
                                    491,
                                    492,
                                    493,
                                    494,
                                    495,
                                    496,
                                    497,
                                    498,
                                    499,
                                    500,
                                    501,
                                    502
                                ],
                                "start": 519,
                                "length": 19502,
                                "ending_column": 11,
                                "is_dependency": false,
                                "filename_short": "contracts/Sale.sol",
                                "starting_column": 71,
                                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                                "filename_relative": "contracts/Sale.sol"
                            }
                        },
                        "signature": "_executeTokenBuy(address,address,uint256,uint256,IERC20Metadata,uint256,uint256,uint256,bytes)"
                    }
                }
            }
        },
        {
            "name": "_checkReferrerAndPayBonus(buyer,referrer,buyTokenAmount)",
            "type": "node",
            "source_mapping": {
                "lines": [
                    371,
                    372
                ],
                "start": 14151,
                "length": 58,
                "ending_column": 5,
                "is_dependency": false,
                "filename_short": "contracts/Sale.sol",
                "starting_column": 34,
                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                "filename_relative": "contracts/Sale.sol"
            },
            "additional_fields": {
                "variable_name": "accountToBuyerInfo",
                "underlying_type": "variables_written"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "_executeTokenBuy",
                    "type": "function",
                    "source_mapping": {
                        "lines": [
                            338,
                            339,
                            340,
                            341,
                            342,
                            343,
                            344,
                            345,
                            346,
                            347,
                            348,
                            349,
                            350,
                            351,
                            352,
                            353,
                            354,
                            355,
                            356,
                            357,
                            358,
                            359,
                            360,
                            361,
                            362,
                            363,
                            364,
                            365,
                            366,
                            367,
                            368,
                            369,
                            370,
                            371,
                            372,
                            373,
                            374,
                            375,
                            376
                        ],
                        "start": 12977,
                        "length": 1399,
                        "ending_column": 16,
                        "is_dependency": false,
                        "filename_short": "contracts/Sale.sol",
                        "starting_column": 23,
                        "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                        "filename_relative": "contracts/Sale.sol"
                    },
                    "type_specific_fields": {
                        "parent": {
                            "name": "Sale",
                            "type": "contract",
                            "source_mapping": {
                                "lines": [
                                    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,
                                    214,
                                    215,
                                    216,
                                    217,
                                    218,
                                    219,
                                    220,
                                    221,
                                    222,
                                    223,
                                    224,
                                    225,
                                    226,
                                    227,
                                    228,
                                    229,
                                    230,
                                    231,
                                    232,
                                    233,
                                    234,
                                    235,
                                    236,
                                    237,
                                    238,
                                    239,
                                    240,
                                    241,
                                    242,
                                    243,
                                    244,
                                    245,
                                    246,
                                    247,
                                    248,
                                    249,
                                    250,
                                    251,
                                    252,
                                    253,
                                    254,
                                    255,
                                    256,
                                    257,
                                    258,
                                    259,
                                    260,
                                    261,
                                    262,
                                    263,
                                    264,
                                    265,
                                    266,
                                    267,
                                    268,
                                    269,
                                    270,
                                    271,
                                    272,
                                    273,
                                    274,
                                    275,
                                    276,
                                    277,
                                    278,
                                    279,
                                    280,
                                    281,
                                    282,
                                    283,
                                    284,
                                    285,
                                    286,
                                    287,
                                    288,
                                    289,
                                    290,
                                    291,
                                    292,
                                    293,
                                    294,
                                    295,
                                    296,
                                    297,
                                    298,
                                    299,
                                    300,
                                    301,
                                    302,
                                    303,
                                    304,
                                    305,
                                    306,
                                    307,
                                    308,
                                    309,
                                    310,
                                    311,
                                    312,
                                    313,
                                    314,
                                    315,
                                    316,
                                    317,
                                    318,
                                    319,
                                    320,
                                    321,
                                    322,
                                    323,
                                    324,
                                    325,
                                    326,
                                    327,
                                    328,
                                    329,
                                    330,
                                    331,
                                    332,
                                    333,
                                    334,
                                    335,
                                    336,
                                    337,
                                    338,
                                    339,
                                    340,
                                    341,
                                    342,
                                    343,
                                    344,
                                    345,
                                    346,
                                    347,
                                    348,
                                    349,
                                    350,
                                    351,
                                    352,
                                    353,
                                    354,
                                    355,
                                    356,
                                    357,
                                    358,
                                    359,
                                    360,
                                    361,
                                    362,
                                    363,
                                    364,
                                    365,
                                    366,
                                    367,
                                    368,
                                    369,
                                    370,
                                    371,
                                    372,
                                    373,
                                    374,
                                    375,
                                    376,
                                    377,
                                    378,
                                    379,
                                    380,
                                    381,
                                    382,
                                    383,
                                    384,
                                    385,
                                    386,
                                    387,
                                    388,
                                    389,
                                    390,
                                    391,
                                    392,
                                    393,
                                    394,
                                    395,
                                    396,
                                    397,
                                    398,
                                    399,
                                    400,
                                    401,
                                    402,
                                    403,
                                    404,
                                    405,
                                    406,
                                    407,
                                    408,
                                    409,
                                    410,
                                    411,
                                    412,
                                    413,
                                    414,
                                    415,
                                    416,
                                    417,
                                    418,
                                    419,
                                    420,
                                    421,
                                    422,
                                    423,
                                    424,
                                    425,
                                    426,
                                    427,
                                    428,
                                    429,
                                    430,
                                    431,
                                    432,
                                    433,
                                    434,
                                    435,
                                    436,
                                    437,
                                    438,
                                    439,
                                    440,
                                    441,
                                    442,
                                    443,
                                    444,
                                    445,
                                    446,
                                    447,
                                    448,
                                    449,
                                    450,
                                    451,
                                    452,
                                    453,
                                    454,
                                    455,
                                    456,
                                    457,
                                    458,
                                    459,
                                    460,
                                    461,
                                    462,
                                    463,
                                    464,
                                    465,
                                    466,
                                    467,
                                    468,
                                    469,
                                    470,
                                    471,
                                    472,
                                    473,
                                    474,
                                    475,
                                    476,
                                    477,
                                    478,
                                    479,
                                    480,
                                    481,
                                    482,
                                    483,
                                    484,
                                    485,
                                    486,
                                    487,
                                    488,
                                    489,
                                    490,
                                    491,
                                    492,
                                    493,
                                    494,
                                    495,
                                    496,
                                    497,
                                    498,
                                    499,
                                    500,
                                    501,
                                    502
                                ],
                                "start": 519,
                                "length": 19502,
                                "ending_column": 11,
                                "is_dependency": false,
                                "filename_short": "contracts/Sale.sol",
                                "starting_column": 71,
                                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                                "filename_relative": "contracts/Sale.sol"
                            }
                        },
                        "signature": "_executeTokenBuy(address,address,uint256,uint256,IERC20Metadata,uint256,uint256,uint256,bytes)"
                    }
                }
            }
        },
        {
            "name": "accountToBuyerInfo[buyer].refStatus = Status.Gold",
            "type": "node",
            "source_mapping": {
                "lines": [
                    440,
                    441
                ],
                "start": 17173,
                "length": 49,
                "ending_column": 12,
                "is_dependency": false,
                "filename_short": "contracts/Sale.sol",
                "starting_column": 76,
                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                "filename_relative": "contracts/Sale.sol"
            },
            "additional_fields": {
                "variable_name": "accountToBuyerInfo",
                "underlying_type": "variables_written"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "_updateRefStatus",
                    "type": "function",
                    "source_mapping": {
                        "lines": [
                            438,
                            439,
                            440,
                            441,
                            442,
                            443,
                            444,
                            445,
                            446,
                            447,
                            448,
                            449,
                            450,
                            451
                        ],
                        "start": 16924,
                        "length": 699,
                        "ending_column": 17,
                        "is_dependency": false,
                        "filename_short": "contracts/Sale.sol",
                        "starting_column": 14,
                        "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                        "filename_relative": "contracts/Sale.sol"
                    },
                    "type_specific_fields": {
                        "parent": {
                            "name": "Sale",
                            "type": "contract",
                            "source_mapping": {
                                "lines": [
                                    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,
                                    214,
                                    215,
                                    216,
                                    217,
                                    218,
                                    219,
                                    220,
                                    221,
                                    222,
                                    223,
                                    224,
                                    225,
                                    226,
                                    227,
                                    228,
                                    229,
                                    230,
                                    231,
                                    232,
                                    233,
                                    234,
                                    235,
                                    236,
                                    237,
                                    238,
                                    239,
                                    240,
                                    241,
                                    242,
                                    243,
                                    244,
                                    245,
                                    246,
                                    247,
                                    248,
                                    249,
                                    250,
                                    251,
                                    252,
                                    253,
                                    254,
                                    255,
                                    256,
                                    257,
                                    258,
                                    259,
                                    260,
                                    261,
                                    262,
                                    263,
                                    264,
                                    265,
                                    266,
                                    267,
                                    268,
                                    269,
                                    270,
                                    271,
                                    272,
                                    273,
                                    274,
                                    275,
                                    276,
                                    277,
                                    278,
                                    279,
                                    280,
                                    281,
                                    282,
                                    283,
                                    284,
                                    285,
                                    286,
                                    287,
                                    288,
                                    289,
                                    290,
                                    291,
                                    292,
                                    293,
                                    294,
                                    295,
                                    296,
                                    297,
                                    298,
                                    299,
                                    300,
                                    301,
                                    302,
                                    303,
                                    304,
                                    305,
                                    306,
                                    307,
                                    308,
                                    309,
                                    310,
                                    311,
                                    312,
                                    313,
                                    314,
                                    315,
                                    316,
                                    317,
                                    318,
                                    319,
                                    320,
                                    321,
                                    322,
                                    323,
                                    324,
                                    325,
                                    326,
                                    327,
                                    328,
                                    329,
                                    330,
                                    331,
                                    332,
                                    333,
                                    334,
                                    335,
                                    336,
                                    337,
                                    338,
                                    339,
                                    340,
                                    341,
                                    342,
                                    343,
                                    344,
                                    345,
                                    346,
                                    347,
                                    348,
                                    349,
                                    350,
                                    351,
                                    352,
                                    353,
                                    354,
                                    355,
                                    356,
                                    357,
                                    358,
                                    359,
                                    360,
                                    361,
                                    362,
                                    363,
                                    364,
                                    365,
                                    366,
                                    367,
                                    368,
                                    369,
                                    370,
                                    371,
                                    372,
                                    373,
                                    374,
                                    375,
                                    376,
                                    377,
                                    378,
                                    379,
                                    380,
                                    381,
                                    382,
                                    383,
                                    384,
                                    385,
                                    386,
                                    387,
                                    388,
                                    389,
                                    390,
                                    391,
                                    392,
                                    393,
                                    394,
                                    395,
                                    396,
                                    397,
                                    398,
                                    399,
                                    400,
                                    401,
                                    402,
                                    403,
                                    404,
                                    405,
                                    406,
                                    407,
                                    408,
                                    409,
                                    410,
                                    411,
                                    412,
                                    413,
                                    414,
                                    415,
                                    416,
                                    417,
                                    418,
                                    419,
                                    420,
                                    421,
                                    422,
                                    423,
                                    424,
                                    425,
                                    426,
                                    427,
                                    428,
                                    429,
                                    430,
                                    431,
                                    432,
                                    433,
                                    434,
                                    435,
                                    436,
                                    437,
                                    438,
                                    439,
                                    440,
                                    441,
                                    442,
                                    443,
                                    444,
                                    445,
                                    446,
                                    447,
                                    448,
                                    449,
                                    450,
                                    451,
                                    452,
                                    453,
                                    454,
                                    455,
                                    456,
                                    457,
                                    458,
                                    459,
                                    460,
                                    461,
                                    462,
                                    463,
                                    464,
                                    465,
                                    466,
                                    467,
                                    468,
                                    469,
                                    470,
                                    471,
                                    472,
                                    473,
                                    474,
                                    475,
                                    476,
                                    477,
                                    478,
                                    479,
                                    480,
                                    481,
                                    482,
                                    483,
                                    484,
                                    485,
                                    486,
                                    487,
                                    488,
                                    489,
                                    490,
                                    491,
                                    492,
                                    493,
                                    494,
                                    495,
                                    496,
                                    497,
                                    498,
                                    499,
                                    500,
                                    501,
                                    502
                                ],
                                "start": 519,
                                "length": 19502,
                                "ending_column": 11,
                                "is_dependency": false,
                                "filename_short": "contracts/Sale.sol",
                                "starting_column": 71,
                                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                                "filename_relative": "contracts/Sale.sol"
                            }
                        },
                        "signature": "_updateRefStatus(address,Sale.BuyerInfo)"
                    }
                }
            }
        },
        {
            "name": "accountToBuyerInfo[buyer].referrer = referrer",
            "type": "node",
            "source_mapping": {
                "lines": [
                    461,
                    462,
                    463
                ],
                "start": 18215,
                "length": 45,
                "ending_column": 1,
                "is_dependency": false,
                "filename_short": "contracts/Sale.sol",
                "starting_column": 28,
                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                "filename_relative": "contracts/Sale.sol"
            },
            "additional_fields": {
                "variable_name": "accountToBuyerInfo",
                "underlying_type": "variables_written"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "_checkReferrerAndPayBonus",
                    "type": "function",
                    "source_mapping": {
                        "lines": [
                            454,
                            455,
                            456,
                            457,
                            458,
                            459,
                            460,
                            461,
                            462,
                            463,
                            464,
                            465,
                            466,
                            467,
                            468,
                            469,
                            470,
                            471
                        ],
                        "start": 17900,
                        "length": 871,
                        "ending_column": 40,
                        "is_dependency": false,
                        "filename_short": "contracts/Sale.sol",
                        "starting_column": 39,
                        "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                        "filename_relative": "contracts/Sale.sol"
                    },
                    "type_specific_fields": {
                        "parent": {
                            "name": "Sale",
                            "type": "contract",
                            "source_mapping": {
                                "lines": [
                                    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,
                                    214,
                                    215,
                                    216,
                                    217,
                                    218,
                                    219,
                                    220,
                                    221,
                                    222,
                                    223,
                                    224,
                                    225,
                                    226,
                                    227,
                                    228,
                                    229,
                                    230,
                                    231,
                                    232,
                                    233,
                                    234,
                                    235,
                                    236,
                                    237,
                                    238,
                                    239,
                                    240,
                                    241,
                                    242,
                                    243,
                                    244,
                                    245,
                                    246,
                                    247,
                                    248,
                                    249,
                                    250,
                                    251,
                                    252,
                                    253,
                                    254,
                                    255,
                                    256,
                                    257,
                                    258,
                                    259,
                                    260,
                                    261,
                                    262,
                                    263,
                                    264,
                                    265,
                                    266,
                                    267,
                                    268,
                                    269,
                                    270,
                                    271,
                                    272,
                                    273,
                                    274,
                                    275,
                                    276,
                                    277,
                                    278,
                                    279,
                                    280,
                                    281,
                                    282,
                                    283,
                                    284,
                                    285,
                                    286,
                                    287,
                                    288,
                                    289,
                                    290,
                                    291,
                                    292,
                                    293,
                                    294,
                                    295,
                                    296,
                                    297,
                                    298,
                                    299,
                                    300,
                                    301,
                                    302,
                                    303,
                                    304,
                                    305,
                                    306,
                                    307,
                                    308,
                                    309,
                                    310,
                                    311,
                                    312,
                                    313,
                                    314,
                                    315,
                                    316,
                                    317,
                                    318,
                                    319,
                                    320,
                                    321,
                                    322,
                                    323,
                                    324,
                                    325,
                                    326,
                                    327,
                                    328,
                                    329,
                                    330,
                                    331,
                                    332,
                                    333,
                                    334,
                                    335,
                                    336,
                                    337,
                                    338,
                                    339,
                                    340,
                                    341,
                                    342,
                                    343,
                                    344,
                                    345,
                                    346,
                                    347,
                                    348,
                                    349,
                                    350,
                                    351,
                                    352,
                                    353,
                                    354,
                                    355,
                                    356,
                                    357,
                                    358,
                                    359,
                                    360,
                                    361,
                                    362,
                                    363,
                                    364,
                                    365,
                                    366,
                                    367,
                                    368,
                                    369,
                                    370,
                                    371,
                                    372,
                                    373,
                                    374,
                                    375,
                                    376,
                                    377,
                                    378,
                                    379,
                                    380,
                                    381,
                                    382,
                                    383,
                                    384,
                                    385,
                                    386,
                                    387,
                                    388,
                                    389,
                                    390,
                                    391,
                                    392,
                                    393,
                                    394,
                                    395,
                                    396,
                                    397,
                                    398,
                                    399,
                                    400,
                                    401,
                                    402,
                                    403,
                                    404,
                                    405,
                                    406,
                                    407,
                                    408,
                                    409,
                                    410,
                                    411,
                                    412,
                                    413,
                                    414,
                                    415,
                                    416,
                                    417,
                                    418,
                                    419,
                                    420,
                                    421,
                                    422,
                                    423,
                                    424,
                                    425,
                                    426,
                                    427,
                                    428,
                                    429,
                                    430,
                                    431,
                                    432,
                                    433,
                                    434,
                                    435,
                                    436,
                                    437,
                                    438,
                                    439,
                                    440,
                                    441,
                                    442,
                                    443,
                                    444,
                                    445,
                                    446,
                                    447,
                                    448,
                                    449,
                                    450,
                                    451,
                                    452,
                                    453,
                                    454,
                                    455,
                                    456,
                                    457,
                                    458,
                                    459,
                                    460,
                                    461,
                                    462,
                                    463,
                                    464,
                                    465,
                                    466,
                                    467,
                                    468,
                                    469,
                                    470,
                                    471,
                                    472,
                                    473,
                                    474,
                                    475,
                                    476,
                                    477,
                                    478,
                                    479,
                                    480,
                                    481,
                                    482,
                                    483,
                                    484,
                                    485,
                                    486,
                                    487,
                                    488,
                                    489,
                                    490,
                                    491,
                                    492,
                                    493,
                                    494,
                                    495,
                                    496,
                                    497,
                                    498,
                                    499,
                                    500,
                                    501,
                                    502
                                ],
                                "start": 519,
                                "length": 19502,
                                "ending_column": 11,
                                "is_dependency": false,
                                "filename_short": "contracts/Sale.sol",
                                "starting_column": 71,
                                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                                "filename_relative": "contracts/Sale.sol"
                            }
                        },
                        "signature": "_checkReferrerAndPayBonus(address,address,uint256)"
                    }
                }
            }
        }
    ],
    "locations": [
        {
            "file": "contracts/Sale.sol",
            "name": "_executeTokenBuy",
            "type": "function",
            "lines": [
                338,
                339,
                340,
                341,
                342,
                343,
                344,
                345,
                346,
                347,
                348,
                349,
                350,
                351,
                352,
                353,
                354,
                355,
                356,
                357,
                358,
                359,
                360,
                361,
                362,
                363,
                364,
                365,
                366,
                367,
                368,
                369,
                370,
                371,
                372,
                373,
                374,
                375,
                376
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "(success,None) = buyer.call{value: msg.value - payTokenAmount}()",
            "type": "node",
            "lines": [
                362,
                363,
                364,
                365
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "_checkReferrerAndPayBonus(buyer,referrer,buyTokenAmount)",
            "type": "node",
            "lines": [
                371,
                372
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "accountToBuyerInfo[buyer].refStatus = Status.Gold",
            "type": "node",
            "lines": [
                440,
                441
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "accountToBuyerInfo[buyer].referrer = referrer",
            "type": "node",
            "lines": [
                461,
                462,
                463
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "accountToBuyerInfo[buyer].refStatus = Status.Silver",
            "type": "node",
            "lines": [
                445,
                446,
                447,
                448
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "accountToBuyerInfo[buyer].refStatus = Status.Bronze",
            "type": "node",
            "lines": [
                450
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "_checkAndUpdateBuyerStatuses(buyer,payTokenAmount,payToken,usdPrice)",
            "type": "node",
            "lines": [
                372,
                373,
                374
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "accountToBuyerInfo[buyer].refStatus = Status.Gold",
            "type": "node",
            "lines": [
                440,
                441
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "accountToBuyerInfo[buyer].refStatus = Status.Silver",
            "type": "node",
            "lines": [
                445,
                446,
                447,
                448
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "accountToBuyerInfo[buyer].payAmountInUSD += payAmountInUSD",
            "type": "node",
            "lines": [
                423,
                424,
                425,
                426
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "accountToBuyerInfo[buyer].refStatus = Status.Bronze",
            "type": "node",
            "lines": [
                450
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "accountToBuyerInfo[buyer].buyStatus = Status.Gold",
            "type": "node",
            "lines": [
                429,
                430,
                431
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "accountToBuyerInfo[buyer].buyStatus = Status.Silver",
            "type": "node",
            "lines": [
                432,
                433
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "accountToBuyerInfo[buyer].buyStatus = Status.Bronze",
            "type": "node",
            "lines": [
                436
            ]
        }
    ],
    "description": "Reentrancy in Sale._executeTokenBuy(address,address,uint256,uint256,IERC20Metadata,uint256,uint256,uint256,bytes) (contracts/Sale.sol#338-376):\n\tExternal calls:\n\t- (success,None) = buyer.call{value: msg.value - payTokenAmount}() (contracts/Sale.sol#362-365)\n\tState variables written after the call(s):\n\t- _checkReferrerAndPayBonus(buyer,referrer,buyTokenAmount) (contracts/Sale.sol#371-372)\n\t\t- accountToBuyerInfo[buyer].refStatus = Status.Gold (contracts/Sale.sol#440-441)\n\t\t- accountToBuyerInfo[buyer].referrer = referrer (contracts/Sale.sol#461-463)\n\t\t- accountToBuyerInfo[buyer].refStatus = Status.Silver (contracts/Sale.sol#445-448)\n\t\t- accountToBuyerInfo[buyer].refStatus = Status.Bronze (contracts/Sale.sol#450)\n\tSale.accountToBuyerInfo (contracts/Sale.sol#91-92) can be used in cross function reentrancies:\n\t- Sale._calcBuyBonus(address,uint256) (contracts/Sale.sol#451-454)\n\t- Sale._checkAndUpdateBuyerStatuses(address,uint256,IERC20Metadata,uint256) (contracts/Sale.sol#413-438)\n\t- Sale._checkAndUpdateSellCounter(address,uint256) (contracts/Sale.sol#408-413)\n\t- Sale._checkReferrerAndPayBonus(address,address,uint256) (contracts/Sale.sol#454-471)\n\t- Sale._updateRefStatus(address,Sale.BuyerInfo) (contracts/Sale.sol#438-451)\n\t- Sale.accountToBuyerInfo (contracts/Sale.sol#91-92)\n\t- _checkAndUpdateBuyerStatuses(buyer,payTokenAmount,payToken,usdPrice) (contracts/Sale.sol#372-374)\n\t\t- accountToBuyerInfo[buyer].refStatus = Status.Gold (contracts/Sale.sol#440-441)\n\t\t- accountToBuyerInfo[buyer].refStatus = Status.Silver (contracts/Sale.sol#445-448)\n\t\t- accountToBuyerInfo[buyer].payAmountInUSD += payAmountInUSD (contracts/Sale.sol#423-426)\n\t\t- accountToBuyerInfo[buyer].refStatus = Status.Bronze (contracts/Sale.sol#450)\n\t\t- accountToBuyerInfo[buyer].buyStatus = Status.Gold (contracts/Sale.sol#429-431)\n\t\t- accountToBuyerInfo[buyer].buyStatus = Status.Silver (contracts/Sale.sol#432-433)\n\t\t- accountToBuyerInfo[buyer].buyStatus = Status.Bronze (contracts/Sale.sol#436)\n\tSale.accountToBuyerInfo (contracts/Sale.sol#91-92) can be used in cross function reentrancies:\n\t- Sale._calcBuyBonus(address,uint256) (contracts/Sale.sol#451-454)\n\t- Sale._checkAndUpdateBuyerStatuses(address,uint256,IERC20Metadata,uint256) (contracts/Sale.sol#413-438)\n\t- Sale._checkAndUpdateSellCounter(address,uint256) (contracts/Sale.sol#408-413)\n\t- Sale._checkReferrerAndPayBonus(address,address,uint256) (contracts/Sale.sol#454-471)\n\t- Sale._updateRefStatus(address,Sale.BuyerInfo) (contracts/Sale.sol#438-451)\n\t- Sale.accountToBuyerInfo (contracts/Sale.sol#91-92)"
}
high other slither Sale.withdrawTokens(IERC20Metadata,address,uint256) (contracts/Sale.sol#258-273) sends eth to arbitrary user 85 no
view
evidence_json
{
    "impact": "High",
    "detector": "arbitrary-send-eth",
    "elements": [
        {
            "name": "withdrawTokens",
            "type": "function",
            "source_mapping": {
                "lines": [
                    258,
                    259,
                    260,
                    261,
                    262,
                    263,
                    264,
                    265,
                    266,
                    267,
                    268,
                    269,
                    270,
                    271,
                    272,
                    273
                ],
                "start": 10006,
                "length": 428,
                "ending_column": 13,
                "is_dependency": false,
                "filename_short": "contracts/Sale.sol",
                "starting_column": 29,
                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                "filename_relative": "contracts/Sale.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "Sale",
                    "type": "contract",
                    "source_mapping": {
                        "lines": [
                            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,
                            214,
                            215,
                            216,
                            217,
                            218,
                            219,
                            220,
                            221,
                            222,
                            223,
                            224,
                            225,
                            226,
                            227,
                            228,
                            229,
                            230,
                            231,
                            232,
                            233,
                            234,
                            235,
                            236,
                            237,
                            238,
                            239,
                            240,
                            241,
                            242,
                            243,
                            244,
                            245,
                            246,
                            247,
                            248,
                            249,
                            250,
                            251,
                            252,
                            253,
                            254,
                            255,
                            256,
                            257,
                            258,
                            259,
                            260,
                            261,
                            262,
                            263,
                            264,
                            265,
                            266,
                            267,
                            268,
                            269,
                            270,
                            271,
                            272,
                            273,
                            274,
                            275,
                            276,
                            277,
                            278,
                            279,
                            280,
                            281,
                            282,
                            283,
                            284,
                            285,
                            286,
                            287,
                            288,
                            289,
                            290,
                            291,
                            292,
                            293,
                            294,
                            295,
                            296,
                            297,
                            298,
                            299,
                            300,
                            301,
                            302,
                            303,
                            304,
                            305,
                            306,
                            307,
                            308,
                            309,
                            310,
                            311,
                            312,
                            313,
                            314,
                            315,
                            316,
                            317,
                            318,
                            319,
                            320,
                            321,
                            322,
                            323,
                            324,
                            325,
                            326,
                            327,
                            328,
                            329,
                            330,
                            331,
                            332,
                            333,
                            334,
                            335,
                            336,
                            337,
                            338,
                            339,
                            340,
                            341,
                            342,
                            343,
                            344,
                            345,
                            346,
                            347,
                            348,
                            349,
                            350,
                            351,
                            352,
                            353,
                            354,
                            355,
                            356,
                            357,
                            358,
                            359,
                            360,
                            361,
                            362,
                            363,
                            364,
                            365,
                            366,
                            367,
                            368,
                            369,
                            370,
                            371,
                            372,
                            373,
                            374,
                            375,
                            376,
                            377,
                            378,
                            379,
                            380,
                            381,
                            382,
                            383,
                            384,
                            385,
                            386,
                            387,
                            388,
                            389,
                            390,
                            391,
                            392,
                            393,
                            394,
                            395,
                            396,
                            397,
                            398,
                            399,
                            400,
                            401,
                            402,
                            403,
                            404,
                            405,
                            406,
                            407,
                            408,
                            409,
                            410,
                            411,
                            412,
                            413,
                            414,
                            415,
                            416,
                            417,
                            418,
                            419,
                            420,
                            421,
                            422,
                            423,
                            424,
                            425,
                            426,
                            427,
                            428,
                            429,
                            430,
                            431,
                            432,
                            433,
                            434,
                            435,
                            436,
                            437,
                            438,
                            439,
                            440,
                            441,
                            442,
                            443,
                            444,
                            445,
                            446,
                            447,
                            448,
                            449,
                            450,
                            451,
                            452,
                            453,
                            454,
                            455,
                            456,
                            457,
                            458,
                            459,
                            460,
                            461,
                            462,
                            463,
                            464,
                            465,
                            466,
                            467,
                            468,
                            469,
                            470,
                            471,
                            472,
                            473,
                            474,
                            475,
                            476,
                            477,
                            478,
                            479,
                            480,
                            481,
                            482,
                            483,
                            484,
                            485,
                            486,
                            487,
                            488,
                            489,
                            490,
                            491,
                            492,
                            493,
                            494,
                            495,
                            496,
                            497,
                            498,
                            499,
                            500,
                            501,
                            502
                        ],
                        "start": 519,
                        "length": 19502,
                        "ending_column": 11,
                        "is_dependency": false,
                        "filename_short": "contracts/Sale.sol",
                        "starting_column": 71,
                        "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                        "filename_relative": "contracts/Sale.sol"
                    }
                },
                "signature": "withdrawTokens(IERC20Metadata,address,uint256)"
            }
        },
        {
            "name": "(success,None) = to.call{value: amount}()",
            "type": "node",
            "source_mapping": {
                "lines": [
                    263,
                    264,
                    265
                ],
                "start": 10205,
                "length": 45,
                "ending_column": 32,
                "is_dependency": false,
                "filename_short": "contracts/Sale.sol",
                "starting_column": 20,
                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                "filename_relative": "contracts/Sale.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "withdrawTokens",
                    "type": "function",
                    "source_mapping": {
                        "lines": [
                            258,
                            259,
                            260,
                            261,
                            262,
                            263,
                            264,
                            265,
                            266,
                            267,
                            268,
                            269,
                            270,
                            271,
                            272,
                            273
                        ],
                        "start": 10006,
                        "length": 428,
                        "ending_column": 13,
                        "is_dependency": false,
                        "filename_short": "contracts/Sale.sol",
                        "starting_column": 29,
                        "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                        "filename_relative": "contracts/Sale.sol"
                    },
                    "type_specific_fields": {
                        "parent": {
                            "name": "Sale",
                            "type": "contract",
                            "source_mapping": {
                                "lines": [
                                    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,
                                    214,
                                    215,
                                    216,
                                    217,
                                    218,
                                    219,
                                    220,
                                    221,
                                    222,
                                    223,
                                    224,
                                    225,
                                    226,
                                    227,
                                    228,
                                    229,
                                    230,
                                    231,
                                    232,
                                    233,
                                    234,
                                    235,
                                    236,
                                    237,
                                    238,
                                    239,
                                    240,
                                    241,
                                    242,
                                    243,
                                    244,
                                    245,
                                    246,
                                    247,
                                    248,
                                    249,
                                    250,
                                    251,
                                    252,
                                    253,
                                    254,
                                    255,
                                    256,
                                    257,
                                    258,
                                    259,
                                    260,
                                    261,
                                    262,
                                    263,
                                    264,
                                    265,
                                    266,
                                    267,
                                    268,
                                    269,
                                    270,
                                    271,
                                    272,
                                    273,
                                    274,
                                    275,
                                    276,
                                    277,
                                    278,
                                    279,
                                    280,
                                    281,
                                    282,
                                    283,
                                    284,
                                    285,
                                    286,
                                    287,
                                    288,
                                    289,
                                    290,
                                    291,
                                    292,
                                    293,
                                    294,
                                    295,
                                    296,
                                    297,
                                    298,
                                    299,
                                    300,
                                    301,
                                    302,
                                    303,
                                    304,
                                    305,
                                    306,
                                    307,
                                    308,
                                    309,
                                    310,
                                    311,
                                    312,
                                    313,
                                    314,
                                    315,
                                    316,
                                    317,
                                    318,
                                    319,
                                    320,
                                    321,
                                    322,
                                    323,
                                    324,
                                    325,
                                    326,
                                    327,
                                    328,
                                    329,
                                    330,
                                    331,
                                    332,
                                    333,
                                    334,
                                    335,
                                    336,
                                    337,
                                    338,
                                    339,
                                    340,
                                    341,
                                    342,
                                    343,
                                    344,
                                    345,
                                    346,
                                    347,
                                    348,
                                    349,
                                    350,
                                    351,
                                    352,
                                    353,
                                    354,
                                    355,
                                    356,
                                    357,
                                    358,
                                    359,
                                    360,
                                    361,
                                    362,
                                    363,
                                    364,
                                    365,
                                    366,
                                    367,
                                    368,
                                    369,
                                    370,
                                    371,
                                    372,
                                    373,
                                    374,
                                    375,
                                    376,
                                    377,
                                    378,
                                    379,
                                    380,
                                    381,
                                    382,
                                    383,
                                    384,
                                    385,
                                    386,
                                    387,
                                    388,
                                    389,
                                    390,
                                    391,
                                    392,
                                    393,
                                    394,
                                    395,
                                    396,
                                    397,
                                    398,
                                    399,
                                    400,
                                    401,
                                    402,
                                    403,
                                    404,
                                    405,
                                    406,
                                    407,
                                    408,
                                    409,
                                    410,
                                    411,
                                    412,
                                    413,
                                    414,
                                    415,
                                    416,
                                    417,
                                    418,
                                    419,
                                    420,
                                    421,
                                    422,
                                    423,
                                    424,
                                    425,
                                    426,
                                    427,
                                    428,
                                    429,
                                    430,
                                    431,
                                    432,
                                    433,
                                    434,
                                    435,
                                    436,
                                    437,
                                    438,
                                    439,
                                    440,
                                    441,
                                    442,
                                    443,
                                    444,
                                    445,
                                    446,
                                    447,
                                    448,
                                    449,
                                    450,
                                    451,
                                    452,
                                    453,
                                    454,
                                    455,
                                    456,
                                    457,
                                    458,
                                    459,
                                    460,
                                    461,
                                    462,
                                    463,
                                    464,
                                    465,
                                    466,
                                    467,
                                    468,
                                    469,
                                    470,
                                    471,
                                    472,
                                    473,
                                    474,
                                    475,
                                    476,
                                    477,
                                    478,
                                    479,
                                    480,
                                    481,
                                    482,
                                    483,
                                    484,
                                    485,
                                    486,
                                    487,
                                    488,
                                    489,
                                    490,
                                    491,
                                    492,
                                    493,
                                    494,
                                    495,
                                    496,
                                    497,
                                    498,
                                    499,
                                    500,
                                    501,
                                    502
                                ],
                                "start": 519,
                                "length": 19502,
                                "ending_column": 11,
                                "is_dependency": false,
                                "filename_short": "contracts/Sale.sol",
                                "starting_column": 71,
                                "filename_absolute": "/tmp/slither-gubm5ea2/contracts/Sale.sol",
                                "filename_relative": "contracts/Sale.sol"
                            }
                        },
                        "signature": "withdrawTokens(IERC20Metadata,address,uint256)"
                    }
                }
            }
        }
    ],
    "locations": [
        {
            "file": "contracts/Sale.sol",
            "name": "withdrawTokens",
            "type": "function",
            "lines": [
                258,
                259,
                260,
                261,
                262,
                263,
                264,
                265,
                266,
                267,
                268,
                269,
                270,
                271,
                272,
                273
            ]
        },
        {
            "file": "contracts/Sale.sol",
            "name": "(success,None) = to.call{value: amount}()",
            "type": "node",
            "lines": [
                263,
                264,
                265
            ]
        }
    ],
    "description": "Sale.withdrawTokens(IERC20Metadata,address,uint256) (contracts/Sale.sol#258-273) sends eth to arbitrary user\n\tDangerous calls:\n\t- (success,None) = to.call{value: amount}() (contracts/Sale.sol#263-265)"
}
high other codex Referrer field is never validated, enabling self-referral and cyclic referral farming 85 no
view
evidence_json
{
    "evidence": "`InvalidReferrer` is declared but never used. On a first buy, `_checkReferrerAndPayBonus` stores any non-zero `referrer` directly, then pays 3 levels of bonuses by repeatedly following `buyerInfo.referrer`. With default `refStatusToRequirements = [0, 0, 5000, 10000]`, `_updateRefStatus` can mark a zero-volume address as Bronze before the payout loop runs.",
    "locations": [
        "contracts/Sale.sol:25",
        "contracts/Sale.sol:152",
        "contracts/Sale.sol:153",
        "contracts/Sale.sol:466",
        "contracts/Sale.sol:468",
        "contracts/Sale.sol:469",
        "contracts/Sale.sol:470",
        "contracts/Sale.sol:473",
        "contracts/Sale.sol:479"
    ],
    "recommendation": "Validate the supplied referrer before storing it or paying bonuses. At minimum, reject `referrer == buyer`, reject obvious cycles, and consider requiring the referrer to be a pre-existing eligible participant. Apply validation before `accountToBuyerInfo[buyer].referrer = referrer` and before traversing the referral chain.",
    "exploit_scenario": "A buyer can set `referrer` to their own address on their first purchase. The contract stores that value without validation, then walks the referral chain for 3 levels and transfers referral bonuses each time. Because Bronze referral status is reachable at zero historical volume by default, the same buyer can immediately collect all 3 referral tiers on their own purchase. After reaching higher referral status, they can keep buying through the same self-reference and siphon 14% to 17.5% extra sale tokens per purchase. Two or more colluding accounts can also create short referral cycles and recycle the same bonus path."
}
medium other detector CREATE/CREATE2 reachable 45 no no
view
trace_id: 0x8e27592399d55f29813d63493ed1f9eb80061c658d234683439c36ff8bfe13f2
validation_json
{
    "sink": "CREATE",
    "errors": 0,
    "status": "unknown",
    "attempts": 32,
    "trace_id": "0x8e27592399d55f29813d63493ed1f9eb80061c658d234683439c36ff8bfe13f2",
    "confirmed": false,
    "trace_mode": "structLogs",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xdc173042",
            "selector": "0xdc173042",
            "calldata_variants": [
                "0xdc173042",
                "0xdc1730420000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf5b541a6",
            "selector": "0xf5b541a6",
            "calldata_variants": [
                "0xf5b541a6",
                "0xf5b541a60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf9d9e31b",
            "selector": "0xf9d9e31b",
            "calldata_variants": [
                "0xf9d9e31b",
                "0xf9d9e31b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfa5a89f1",
            "selector": "0xfa5a89f1",
            "calldata_variants": [
                "0xfa5a89f1",
                "0xfa5a89f10000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd547741f",
            "selector": "0xd547741f",
            "calldata_variants": [
                "0xd547741f",
                "0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd602b9fd",
            "selector": "0xd602b9fd",
            "calldata_variants": [
                "0xd602b9fd",
                "0xd602b9fd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xda71c017",
            "selector": "0xda71c017",
            "calldata_variants": [
                "0xda71c017",
                "0xda71c0170000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc26e2c03",
            "selector": "0xc26e2c03",
            "calldata_variants": [
                "0xc26e2c03",
                "0xc26e2c030000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "create_count": 0,
    "create2_count": 1
}
medium math codex Exact-output buys can mint market tokens for zero payment because rounding-down is unchecked 75 no
view
evidence_json
{
    "evidence": "`buyExactMarketTokenForPayToken` only enforces a minimum `buyAmount` based on decimal difference, then computes `payTokenAmount` with integer division. `_executeTokenBuy` accepts that value as-is and only checks `msg.value < payTokenAmount` or performs `safeTransferFrom(..., payTokenAmount)`. If `payTokenAmount` is zero, both payment branches succeed while `marketToken.safeTransfer` still sends the purchased tokens.",
    "locations": [
        "contracts/Sale.sol:169",
        "contracts/Sale.sol:173",
        "contracts/Sale.sol:174",
        "contracts/Sale.sol:349",
        "contracts/Sale.sol:368",
        "contracts/Sale.sol:375",
        "contracts/Sale.sol:376",
        "contracts/Sale.sol:379"
    ],
    "recommendation": "After computing `payTokenAmount`, require it to be non-zero before proceeding, or round up instead of down for exact-output purchases. Also consider binding `buyAmount` or `payTokenAmount` into the signed payload if quote authorization is meant to cover the full trade terms.",
    "exploit_scenario": "For low-priced payment assets, a buyer can call `buyExactMarketTokenForPayToken` with a small but valid `buyAmount` such that `prices[payTokenIndex] * buyAmount / 10**marketToken.decimals()` rounds down to zero. `_executeTokenBuy` never rejects `payTokenAmount == 0`, so the buyer receives market tokens while paying neither ETH nor ERC20 tokens. Because the signature only covers `(account, payToken, usdPrice, deadline, nonce)` and not `buyAmount`, any valid signed quote for that pay token can be reused with one of these free-buy sizes."
}
low other cast Contract creation opcode present 60 no
view
evidence_json
{
    "notes": "runtime can deploy contracts dynamically via CREATE/CREATE2",
    "create_count": 0,
    "create2_count": 1
}
info other cast Heavy CALL-family usage 55 no
view
evidence_json
{
    "notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
    "call_family_count": 14
}