Source Code
Latest 25 from a total of 163 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Change Rounds Da... | 21698523 | 397 days ago | IN | 0 ETH | 0.00021349 | ||||
| Buy With Eth | 21697814 | 397 days ago | IN | 0.0451577 ETH | 0.00114002 | ||||
| Buy With Eth | 21693677 | 397 days ago | IN | 0.02000999 ETH | 0.00243029 | ||||
| Buy With Eth | 21693642 | 397 days ago | IN | 0.08400999 ETH | 0.0017363 | ||||
| Buy With Eth | 21692414 | 398 days ago | IN | 0.00295718 ETH | 0.0007687 | ||||
| Buy With Eth | 21691816 | 398 days ago | IN | 0.09080996 ETH | 0.00088871 | ||||
| Buy With Eth | 21691225 | 398 days ago | IN | 0.00305276 ETH | 0.00080953 | ||||
| Buy With Eth | 21690191 | 398 days ago | IN | 0.00304992 ETH | 0.00157797 | ||||
| Buy With Eth | 21690002 | 398 days ago | IN | 0.07200937 ETH | 0.00199711 | ||||
| Buy With Eth | 21687963 | 398 days ago | IN | 0.00306498 ETH | 0.00418844 | ||||
| Buy With Eth | 21687925 | 398 days ago | IN | 0.00306498 ETH | 0.00416806 | ||||
| Buy With Eth | 21686390 | 398 days ago | IN | 0.02500961 ETH | 0.00068595 | ||||
| Buy With Eth | 21685488 | 399 days ago | IN | 0.00312298 ETH | 0.00058399 | ||||
| Buy With Eth | 21683272 | 399 days ago | IN | 0.01700953 ETH | 0.00100665 | ||||
| Buy With Eth | 21678976 | 399 days ago | IN | 0.09000945 ETH | 0.00144546 | ||||
| Buy With Eth | 21678776 | 400 days ago | IN | 0.03000981 ETH | 0.00136708 | ||||
| Buy With Eth | 21677415 | 400 days ago | IN | 0.01986959 ETH | 0.00111279 | ||||
| Buy With Eth | 21671536 | 401 days ago | IN | 0.01440976 ETH | 0.00125812 | ||||
| Buy With Eth | 21669498 | 401 days ago | IN | 0.09000997 ETH | 0.00194231 | ||||
| Buy With Eth | 21666043 | 401 days ago | IN | 0.60000926 ETH | 0.00435096 | ||||
| Buy With Eth | 21665138 | 401 days ago | IN | 0.03456043 ETH | 0.00317085 | ||||
| Buy With Eth | 21662928 | 402 days ago | IN | 0.09246191 ETH | 0.0048281 | ||||
| Buy With Eth | 21657307 | 403 days ago | IN | 0.01300922 ETH | 0.00273156 | ||||
| Buy With Eth | 21655050 | 403 days ago | IN | 0.05300955 ETH | 0.00212827 | ||||
| Buy With Eth | 21652159 | 403 days ago | IN | 0.05000984 ETH | 0.00512685 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 21697814 | 397 days ago | 0.00001 ETH | ||||
| Transfer | 21697814 | 397 days ago | 0.04289031 ETH | ||||
| Transfer | 21697814 | 397 days ago | 0.00225738 ETH | ||||
| Transfer | 21693677 | 397 days ago | 0.00001 ETH | ||||
| Transfer | 21693677 | 397 days ago | 0.01899999 ETH | ||||
| Transfer | 21693677 | 397 days ago | 0.00099999 ETH | ||||
| Transfer | 21693642 | 397 days ago | 0.00000999 ETH | ||||
| Transfer | 21693642 | 397 days ago | 0.08399999 ETH | ||||
| Transfer | 21692414 | 398 days ago | 0.00001 ETH | ||||
| Transfer | 21692414 | 398 days ago | 0.00279982 ETH | ||||
| Transfer | 21692414 | 398 days ago | 0.00014735 ETH | ||||
| Transfer | 21691816 | 398 days ago | 0.00000999 ETH | ||||
| Transfer | 21691816 | 398 days ago | 0.08625996 ETH | ||||
| Transfer | 21691816 | 398 days ago | 0.00453999 ETH | ||||
| Transfer | 21691225 | 398 days ago | 0.00001 ETH | ||||
| Transfer | 21691225 | 398 days ago | 0.00289062 ETH | ||||
| Transfer | 21691225 | 398 days ago | 0.00015213 ETH | ||||
| Transfer | 21690191 | 398 days ago | 0.00001 ETH | ||||
| Transfer | 21690191 | 398 days ago | 0.00288792 ETH | ||||
| Transfer | 21690191 | 398 days ago | 0.00015199 ETH | ||||
| Transfer | 21690002 | 398 days ago | 0.00001 ETH | ||||
| Transfer | 21690002 | 398 days ago | 0.0683994 ETH | ||||
| Transfer | 21690002 | 398 days ago | 0.00359996 ETH | ||||
| Transfer | 21687963 | 398 days ago | 0.00001 ETH | ||||
| Transfer | 21687963 | 398 days ago | 0.00290223 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PresaleForEth
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
interface Aggregator {
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
}
interface StakingManager {
function depositByPresale(address _user, uint256 _amount) external;
}
contract PresaleForEth is ReentrancyGuard, Ownable, Pausable {
uint256 public totalTokensSold;
uint256 public startTime;
uint256 public endTime;
uint256 public claimStart;
address public saleToken;
uint256 public baseDecimals;
uint256 public maxTokensToBuy;
uint256 public currentStep;
uint256 public checkPoint;
uint256 public usdRaised;
uint256 public timeConstant;
uint256 public totalBoughtAndStaked;
uint256[][3] public rounds;
uint256[] public prevCheckpoints;
uint256[] public remainingTokensTracker;
uint256[] public percentages;
address[] public wallets;
address public paymentWallet;
address public admin;
bool public dynamicTimeFlag;
bool public whitelistClaimOnly;
bool public stakeingWhitelistStatus;
uint256 public totalCommissionUsdt;
uint256 public totalCommissionNativeToken;
uint8 public constant PERCENTAGE_REFERRAl = 5;
IERC20 public USDTInterface;
Aggregator public aggregatorInterface;
mapping(address => uint256) public userDeposits;
mapping(address => uint256) public addressToAmountReferral;
mapping(address => uint256) public addressToCommissionPercentage;
mapping(address => bool) public hasClaimed;
mapping(address => bool) public isBlacklisted;
mapping(address => bool) public isWhitelisted;
mapping(address => bool) public wertWhitelisted;
StakingManager public stakingManagerInterface;
event SaleTimeSet(uint256 _start, uint256 _end, uint256 timestamp);
event SaleTimeUpdated(
bytes32 indexed key,
uint256 prevValue,
uint256 newValue,
uint256 timestamp
);
event TokensBought(
address indexed user,
uint256 indexed tokensBought,
address indexed purchaseToken,
uint256 amountPaid,
uint256 usdEq,
uint256 timestamp
);
event TokensAdded(
address indexed token,
uint256 noOfTokens,
uint256 timestamp
);
event TokensClaimed(
address indexed user,
uint256 amount,
uint256 timestamp
);
event ClaimStartUpdated(
uint256 prevValue,
uint256 newValue,
uint256 timestamp
);
event MaxTokensUpdated(
uint256 prevValue,
uint256 newValue,
uint256 timestamp
);
event TokensBoughtAndStaked(
address indexed user,
uint256 indexed tokensBought,
address indexed purchaseToken,
uint256 amountPaid,
uint256 usdEq,
uint256 timestamp
);
event TokensClaimedAndStaked(
address indexed user,
uint256 amount,
uint256 timestamp
);
constructor(
address _oracle,
address _usdt,
uint256 _startTime,
uint256 _endTime,
uint256[][3] memory _rounds,
uint256 _maxTokensToBuy,
address _paymentWallet
) {
require(_oracle != address(0), "Zero aggregator address");
require(_usdt != address(0), "Zero USDT address");
require(
_startTime > block.timestamp && _endTime > _startTime,
"Invalid time"
);
// __Pausable_init_unchained();
// __Ownable_init_unchained();
// __ReentrancyGuard_init_unchained();
baseDecimals = (10 ** 18);
aggregatorInterface = Aggregator(_oracle);
USDTInterface = IERC20(_usdt);
startTime = _startTime;
endTime = _endTime;
rounds = _rounds;
maxTokensToBuy = _maxTokensToBuy;
paymentWallet = _paymentWallet;
emit SaleTimeSet(startTime, endTime, block.timestamp);
}
/**
* @dev To pause the presale
*/
function pause() external onlyOwner {
_pause();
}
/**
* @dev To unpause the presale
*/
function unpause() external onlyOwner {
_unpause();
}
/**
* @dev To calculate the price in USD for given amount of tokens.
* @param _amount No of tokens
*/
function calculatePrice(uint256 _amount) public view returns (uint256) {
uint256 USDTAmount;
uint256 total = checkPoint == 0 ? totalTokensSold : checkPoint;
require(_amount <= maxTokensToBuy, "Amount exceeds max tokens to buy");
if (
_amount + total > rounds[0][currentStep] ||
block.timestamp >= rounds[2][currentStep]
) {
require(currentStep < (rounds[0].length - 1), "Wrong params");
if (block.timestamp >= rounds[2][currentStep]) {
require(
rounds[0][currentStep] + _amount <=
rounds[0][currentStep + 1],
"Cant Purchase More in individual tx"
);
USDTAmount = _amount * rounds[1][currentStep + 1];
} else {
uint256 tokenAmountForCurrentPrice = rounds[0][currentStep] -
total;
USDTAmount =
tokenAmountForCurrentPrice *
rounds[1][currentStep] +
(_amount - tokenAmountForCurrentPrice) *
rounds[1][currentStep + 1];
}
} else {
USDTAmount = _amount * rounds[1][currentStep];
}
return USDTAmount;
}
/**
* @dev To update the sale times
* @param _startTime New start time
* @param _endTime New end time
*/
function changeSaleTimes(
uint256 _startTime,
uint256 _endTime
) external onlyOwner {
require(_startTime > 0 || _endTime > 0, "Invalid parameters");
if (_startTime > 0) {
require(block.timestamp < startTime, "Sale already started");
require(block.timestamp < _startTime, "Sale time in past");
uint256 prevValue = startTime;
startTime = _startTime;
emit SaleTimeUpdated(
bytes32("START"),
prevValue,
_startTime,
block.timestamp
);
}
if (_endTime > 0) {
require(_endTime > startTime, "Invalid endTime");
uint256 prevValue = endTime;
endTime = _endTime;
emit SaleTimeUpdated(
bytes32("END"),
prevValue,
_endTime,
block.timestamp
);
}
}
/**
* @dev To get latest ETH price in 10**18 format
*/
function getLatestPrice() public view returns (uint256) {
(, int256 price, , , ) = aggregatorInterface.latestRoundData();
price = (price * (10 ** 10));
return uint256(price);
}
function setSplits(
address[] memory _wallets,
uint256[] memory _percentages
) public onlyOwner {
require(_wallets.length == _percentages.length, "Mismatched arrays");
delete wallets;
delete percentages;
uint256 totalPercentage = 0;
for (uint256 i = 0; i < _wallets.length; i++) {
require(_percentages[i] > 0, "Percentage must be greater than 0");
totalPercentage += _percentages[i];
wallets.push(_wallets[i]);
percentages.push(_percentages[i]);
}
require(totalPercentage == 100, "Total percentage must equal 100");
}
modifier checkSaleState(uint256 amount) {
require(
block.timestamp >= startTime && block.timestamp <= endTime,
"Invalid time for buying"
);
require(amount > 0, "Invalid sale amount");
_;
}
/**
* @dev To buy into a presale using USDT
* @param amount No of tokens to buy
* @param stake boolean flag for token staking
*/
function buyWithUSDT(
uint256 amount,
address referral,
bool stake
) external checkSaleState(amount) whenNotPaused returns (bool) {
uint256 usdPrice = calculatePrice(amount);
totalTokensSold += amount;
uint256 price = usdPrice / (10 ** 12);
if (checkPoint != 0) checkPoint += amount;
uint256 total = totalTokensSold > checkPoint
? totalTokensSold
: checkPoint;
if (
total > rounds[0][currentStep] ||
block.timestamp >= rounds[2][currentStep]
) {
if (block.timestamp >= rounds[2][currentStep]) {
checkPoint = rounds[0][currentStep] + amount;
}
if (dynamicTimeFlag) {
manageTimeDiff();
}
uint256 unsoldTokens = total > rounds[0][currentStep]
? 0
: rounds[0][currentStep] - total - amount;
remainingTokensTracker.push(unsoldTokens);
currentStep += 1;
}
if (stake) {
if (stakeingWhitelistStatus) {
require(
isWhitelisted[_msgSender()],
"User not whitelisted for stake"
);
}
stakingManagerInterface.depositByPresale(
_msgSender(),
amount * baseDecimals
);
totalBoughtAndStaked += amount;
emit TokensBoughtAndStaked(
_msgSender(),
amount,
address(USDTInterface),
price,
usdPrice,
block.timestamp
);
} else {
userDeposits[_msgSender()] += (amount * baseDecimals);
emit TokensBought(
_msgSender(),
amount,
address(USDTInterface),
price,
usdPrice,
block.timestamp
);
}
usdRaised += usdPrice;
uint256 ourAllowance = USDTInterface.allowance(
_msgSender(),
address(this)
);
require(price <= ourAllowance, "Make sure to add enough allowance");
splitUSDTValue(price, referral);
return true;
}
/**
* @dev To buy into a presale using ETH
* @param amount No of tokens to buy
* @param stake boolean flag for token staking
*/
function buyWithEth(
uint256 amount,
address referral,
bool stake
)
external
payable
checkSaleState(amount)
whenNotPaused
nonReentrant
returns (bool)
{
uint256 usdPrice = calculatePrice(amount);
uint256 ethAmount = (usdPrice * baseDecimals) / getLatestPrice();
require(msg.value >= ethAmount, "Less payment");
uint256 excess = msg.value - ethAmount;
totalTokensSold += amount;
if (checkPoint != 0) checkPoint += amount;
uint256 total = totalTokensSold > checkPoint
? totalTokensSold
: checkPoint;
if (
total > rounds[0][currentStep] ||
block.timestamp >= rounds[2][currentStep]
) {
if (block.timestamp >= rounds[2][currentStep]) {
checkPoint = rounds[0][currentStep] + amount;
}
if (dynamicTimeFlag) {
manageTimeDiff();
}
uint256 unsoldTokens = total > rounds[0][currentStep]
? 0
: rounds[0][currentStep] - total - amount;
remainingTokensTracker.push(unsoldTokens);
currentStep += 1;
}
if (stake) {
if (stakeingWhitelistStatus) {
require(
isWhitelisted[_msgSender()],
"User not whitelisted for stake"
);
}
stakingManagerInterface.depositByPresale(
_msgSender(),
amount * baseDecimals
);
totalBoughtAndStaked += amount;
emit TokensBoughtAndStaked(
_msgSender(),
amount,
address(0),
ethAmount,
usdPrice,
block.timestamp
);
} else {
userDeposits[_msgSender()] += (amount * baseDecimals);
emit TokensBought(
_msgSender(),
amount,
address(0),
ethAmount,
usdPrice,
block.timestamp
);
}
usdRaised += usdPrice;
splitETHValue(ethAmount, referral);
if (excess > 0) sendValue(payable(_msgSender()), excess);
return true;
}
/**
* @dev To buy ETH directly from wert .*wert contract address should be whitelisted if wertBuyRestrictionStatus is set true
* @param _user address of the user
* @param _amount No of ETH to buy
* @param stake boolean flag for token staking
*/
function buyWithETHWert(
address _user,
uint256 _amount,
address _referral,
bool stake
)
external
payable
checkSaleState(_amount)
whenNotPaused
nonReentrant
returns (bool)
{
require(
wertWhitelisted[_msgSender()],
"User not whitelisted for this tx"
);
uint256 usdPrice = calculatePrice(_amount);
uint256 ethAmount = (usdPrice * baseDecimals) / getLatestPrice();
require(msg.value >= ethAmount, "Less payment");
uint256 excess = msg.value - ethAmount;
totalTokensSold += _amount;
if (checkPoint != 0) checkPoint += _amount;
uint256 total = totalTokensSold > checkPoint
? totalTokensSold
: checkPoint;
if (
total > rounds[0][currentStep] ||
block.timestamp >= rounds[2][currentStep]
) {
if (block.timestamp >= rounds[2][currentStep]) {
checkPoint = rounds[0][currentStep] + _amount;
}
if (dynamicTimeFlag) {
manageTimeDiff();
}
uint256 unsoldTokens = total > rounds[0][currentStep]
? 0
: rounds[0][currentStep] - total - _amount;
remainingTokensTracker.push(unsoldTokens);
currentStep += 1;
}
if (stake) {
if (stakeingWhitelistStatus) {
require(isWhitelisted[_user], "User not whitelisted for stake");
}
stakingManagerInterface.depositByPresale(
_user,
_amount * baseDecimals
);
totalBoughtAndStaked += _amount;
emit TokensBoughtAndStaked(
_user,
_amount,
address(0),
ethAmount,
usdPrice,
block.timestamp
);
} else {
userDeposits[_user] += (_amount * baseDecimals);
emit TokensBought(
_user,
_amount,
address(0),
ethAmount,
usdPrice,
block.timestamp
);
}
usdRaised += usdPrice;
splitETHValue(ethAmount, _referral);
if (excess > 0) sendValue(payable(_user), excess);
return true;
}
/**
* @dev Helper funtion to get ETH price for given amount
* @param amount No of tokens to buy
*/
function ethBuyHelper(
uint256 amount
) external view returns (uint256 ethAmount) {
uint256 usdPrice = calculatePrice(amount);
ethAmount = (usdPrice * baseDecimals) / getLatestPrice();
}
/**
* @dev Helper funtion to get USDT price for given amount
* @param amount No of tokens to buy
*/
function usdtBuyHelper(
uint256 amount
) external view returns (uint256 usdPrice) {
usdPrice = calculatePrice(amount);
usdPrice = usdPrice / (10 ** 12);
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Low balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "ETH Payment failed");
}
function splitETHValue(uint256 _amount, address _referral) internal {
if (wallets.length == 0) {
uint256 referralReward = 0;
if (_referral != address(0)) {
if (addressToCommissionPercentage[_referral] != 0) {
referralReward =
(_amount * addressToCommissionPercentage[_referral]) /
100;
} else {
referralReward = (_amount * PERCENTAGE_REFERRAl) / 100;
}
sendValue(payable(_referral), referralReward);
addressToAmountReferral[_referral] += 1;
totalCommissionNativeToken += referralReward;
}
uint256 remainingAmount = _amount - referralReward;
require(paymentWallet != address(0), "Payment wallet not set");
sendValue(payable(paymentWallet), remainingAmount);
} else {
uint256 tempCalc;
for (uint256 i = 0; i < wallets.length; i++) {
uint256 amountToTransfer = (_amount * percentages[i]) / 100;
sendValue(payable(wallets[i]), amountToTransfer);
tempCalc += amountToTransfer;
}
if ((_amount - tempCalc) > 0) {
sendValue(
payable(wallets[wallets.length - 1]),
_amount - tempCalc
);
}
}
}
function splitUSDTValue(uint256 _amount, address _referral) internal {
if (wallets.length == 0) {
uint256 referralReward = 0;
require(paymentWallet != address(0), "Payment wallet not set");
if (_referral != address(0)) {
if (addressToCommissionPercentage[_referral] != 0) {
referralReward =
(_amount * addressToCommissionPercentage[_referral]) /
100;
} else {
referralReward = (_amount * PERCENTAGE_REFERRAl) / 100;
}
(bool successForRef, ) = address(USDTInterface).call(
abi.encodeWithSignature(
"transferFrom(address,address,uint256)",
_msgSender(),
_referral,
referralReward
)
);
require(successForRef, "Token payment for referral failed");
addressToAmountReferral[_referral] += 1;
totalCommissionUsdt += referralReward;
}
uint256 remainingAmount = _amount - referralReward;
(bool success, ) = address(USDTInterface).call(
abi.encodeWithSignature(
"transferFrom(address,address,uint256)",
_msgSender(),
paymentWallet,
remainingAmount
)
);
require(success, "Token payment for payment wallet failed");
} else {
uint256 tempCalc;
for (uint256 i = 0; i < wallets.length; i++) {
uint256 amountToTransfer = (_amount * percentages[i]) / 100;
(bool success, ) = address(USDTInterface).call(
abi.encodeWithSignature(
"transferFrom(address,address,uint256)",
_msgSender(),
wallets[i],
amountToTransfer
)
);
require(success, "Token payment failed");
tempCalc += amountToTransfer;
}
if ((_amount - tempCalc) > 0) {
(bool success, ) = address(USDTInterface).call(
abi.encodeWithSignature(
"transferFrom(address,address,uint256)",
_msgSender(),
wallets[wallets.length - 1],
_amount - tempCalc
)
);
require(success, "Token payment failed");
}
}
}
/**
* @dev to initialize staking manager with new addredd
* @param _stakingManagerAddress address of the staking smartcontract
*/
function setStakingManager(
address _stakingManagerAddress
) external onlyOwner {
require(
_stakingManagerAddress != address(0),
"staking manager cannot be inatialized with zero address"
);
stakingManagerInterface = StakingManager(_stakingManagerAddress);
IERC20(saleToken).approve(_stakingManagerAddress, type(uint256).max);
}
/**
* @dev To set the claim start time and sale token address by the owner
* @param _claimStart claim start time
* @param noOfTokens no of tokens to add to the contract
* @param _saleToken sale toke address
*/
function startClaim(
uint256 _claimStart,
uint256 noOfTokens,
address _saleToken,
address _stakingManagerAddress
) external onlyOwner returns (bool) {
require(_saleToken != address(0), "Zero token address");
require(claimStart == 0, "Claim already set");
claimStart = _claimStart;
saleToken = _saleToken;
whitelistClaimOnly = true;
if (_stakingManagerAddress != address(0)) {
stakingManagerInterface = StakingManager(_stakingManagerAddress);
IERC20(_saleToken).approve(
_stakingManagerAddress,
type(uint256).max
);
}
bool success = IERC20(_saleToken).transferFrom(
_msgSender(),
address(this),
noOfTokens
);
require(success, "Token transfer failed");
emit TokensAdded(_saleToken, noOfTokens, block.timestamp);
return true;
}
/**
* @dev To set status for claim whitelisting
* @param _status bool value
*/
function setStakeingWhitelistStatus(bool _status) external onlyOwner {
stakeingWhitelistStatus = _status;
}
/**
* @dev To change the claim start time by the owner
* @param _claimStart new claim start time
*/
function changeClaimStart(
uint256 _claimStart
) external onlyOwner returns (bool) {
require(claimStart > 0, "Initial claim data not set");
require(_claimStart > endTime, "Sale in progress");
require(_claimStart > block.timestamp, "Claim start in past");
uint256 prevValue = claimStart;
claimStart = _claimStart;
emit ClaimStartUpdated(prevValue, _claimStart, block.timestamp);
return true;
}
/**
* @dev To claim tokens after claiming starts
*/
function claim() external whenNotPaused returns (bool) {
require(saleToken != address(0), "Sale token not added");
require(!isBlacklisted[_msgSender()], "This Address is Blacklisted");
if (whitelistClaimOnly) {
require(
isWhitelisted[_msgSender()],
"User not whitelisted for claim"
);
}
require(block.timestamp >= claimStart, "Claim has not started yet");
require(!hasClaimed[_msgSender()], "Already claimed");
hasClaimed[_msgSender()] = true;
uint256 amount = userDeposits[_msgSender()];
require(amount > 0, "Nothing to claim");
delete userDeposits[_msgSender()];
bool success = IERC20(saleToken).transfer(_msgSender(), amount);
require(success, "Token transfer failed");
emit TokensClaimed(_msgSender(), amount, block.timestamp);
return true;
}
function claimAndStake() external whenNotPaused returns (bool) {
require(saleToken != address(0), "Sale token not added");
require(!isBlacklisted[_msgSender()], "This Address is Blacklisted");
if (stakeingWhitelistStatus) {
require(
isWhitelisted[_msgSender()],
"User not whitelisted for stake"
);
}
uint256 amount = userDeposits[_msgSender()];
require(amount > 0, "Nothing to stake");
stakingManagerInterface.depositByPresale(_msgSender(), amount);
delete userDeposits[_msgSender()];
emit TokensClaimedAndStaked(_msgSender(), amount, block.timestamp);
return true;
}
/**
* @dev To add wert contract addresses to whitelist
* @param _addressesToWhitelist addresses of the contract
*/
function whitelistUsersForWERT(
address[] calldata _addressesToWhitelist
) external onlyOwner {
for (uint256 i = 0; i < _addressesToWhitelist.length; i++) {
wertWhitelisted[_addressesToWhitelist[i]] = true;
}
}
/**
* @dev To remove wert contract addresses to whitelist
* @param _addressesToRemoveFromWhitelist addresses of the contracts
*/
function removeFromWhitelistForWERT(
address[] calldata _addressesToRemoveFromWhitelist
) external onlyOwner {
for (uint256 i = 0; i < _addressesToRemoveFromWhitelist.length; i++) {
wertWhitelisted[_addressesToRemoveFromWhitelist[i]] = false;
}
}
function changeMaxTokensToBuy(uint256 _maxTokensToBuy) external onlyOwner {
require(_maxTokensToBuy > 0, "Zero max tokens to buy value");
uint256 prevValue = maxTokensToBuy;
maxTokensToBuy = _maxTokensToBuy;
emit MaxTokensUpdated(prevValue, _maxTokensToBuy, block.timestamp);
}
function changeRoundsData(uint256[][3] memory _rounds) external onlyOwner {
rounds = _rounds;
}
/**
* @dev To add users to blacklist which restricts blacklisted users from claiming
* @param _usersToBlacklist addresses of the users
*/
function blacklistUsers(
address[] calldata _usersToBlacklist
) external onlyOwner {
for (uint256 i = 0; i < _usersToBlacklist.length; i++) {
isBlacklisted[_usersToBlacklist[i]] = true;
}
}
/**
* @dev To remove users from blacklist which restricts blacklisted users from claiming
* @param _userToRemoveFromBlacklist addresses of the users
*/
function removeFromBlacklist(
address[] calldata _userToRemoveFromBlacklist
) external onlyOwner {
for (uint256 i = 0; i < _userToRemoveFromBlacklist.length; i++) {
isBlacklisted[_userToRemoveFromBlacklist[i]] = false;
}
}
/**
* @dev To add users to whitelist which restricts users from claiming if claimWhitelistStatus is true
* @param _usersToWhitelist addresses of the users
*/
function whitelistUsers(
address[] calldata _usersToWhitelist
) external onlyOwner {
for (uint256 i = 0; i < _usersToWhitelist.length; i++) {
isWhitelisted[_usersToWhitelist[i]] = true;
}
}
/**
* @dev To remove users from whitelist which restricts users from claiming if claimWhitelistStatus is true
* @param _userToRemoveFromWhitelist addresses of the users
*/
function removeFromWhitelist(
address[] calldata _userToRemoveFromWhitelist
) external onlyOwner {
for (uint256 i = 0; i < _userToRemoveFromWhitelist.length; i++) {
isWhitelisted[_userToRemoveFromWhitelist[i]] = false;
}
}
/**
* @dev To set status for claim whitelisting
* @param _status bool value
*/
function setClaimWhitelistStatus(bool _status) external onlyOwner {
whitelistClaimOnly = _status;
}
/**
* @dev To set payment wallet address
* @param _newPaymentWallet new payment wallet address
*/
function changePaymentWallet(address _newPaymentWallet) external onlyOwner {
require(_newPaymentWallet != address(0), "address cannot be zero");
paymentWallet = _newPaymentWallet;
}
/**
* @dev To manage time gap between two rounds
*/
function manageTimeDiff() internal {
for (uint256 i; i < rounds[2].length - currentStep; i++) {
rounds[2][currentStep + i] = block.timestamp + i * timeConstant;
}
}
/**
* @dev To set time constant for manageTimeDiff()
* @param _timeConstant time in <days>*24*60*60 format
*/
function setTimeConstant(uint256 _timeConstant) external onlyOwner {
timeConstant = _timeConstant;
}
/**
* @dev To get array of round details at once
* @param _no array index
*/
function roundDetails(
uint256 _no
) external view returns (uint256[] memory) {
return rounds[_no];
}
/**
* @dev to update userDeposits for purchases made on BSC
* @param _users array of users
* @param _userDeposits array of userDeposits associated with users
*/
function updateFromBSC(
address[] calldata _users,
uint256[] calldata _userDeposits
) external onlyOwner {
require(_users.length == _userDeposits.length, "Length mismatch");
for (uint256 i = 0; i < _users.length; i++) {
userDeposits[_users[i]] += _userDeposits[i];
}
}
/**
* @dev Set commission percentage for each wallet
*/
function setCommissionPercentage(
address _refferal,
uint256 _commissionPercentage
) external {
require(
msg.sender == admin || msg.sender == owner(),
"caller not admin or owner"
);
require(
_refferal != address(0),
"The address should be different from address 0"
);
require(
_commissionPercentage <= 70,
"The commission percentage cannot be greater than 70 percent"
);
addressToCommissionPercentage[_refferal] = _commissionPercentage;
}
/**
* @dev To increment the rounds from backend
*/
function incrementCurrentStep() external {
require(
msg.sender == admin || msg.sender == owner(),
"caller not admin or owner"
);
prevCheckpoints.push(checkPoint);
if (dynamicTimeFlag) {
manageTimeDiff();
}
if (checkPoint < rounds[0][currentStep]) {
if (currentStep == 0) {
remainingTokensTracker.push(
rounds[0][currentStep] - totalTokensSold
);
} else {
remainingTokensTracker.push(
rounds[0][currentStep] - checkPoint
);
}
checkPoint = rounds[0][currentStep];
}
currentStep++;
}
/**
* @dev To set admin
* @param _admin new admin wallet address
*/
function setAdmin(address _admin) external onlyOwner {
admin = _admin;
}
/**
* @dev To change details of the round
* @param _step round for which you want to change the details
* @param _checkpoint token tracker amount
*/
function setCurrentStep(
uint256 _step,
uint256 _checkpoint
) external onlyOwner {
currentStep = _step;
checkPoint = _checkpoint;
}
/**
* @dev To set time shift functionality on/off
* @param _dynamicTimeFlag bool value
*/
function setDynamicTimeFlag(bool _dynamicTimeFlag) external onlyOwner {
dynamicTimeFlag = _dynamicTimeFlag;
}
/**
* @dev Function to return remainingTokenTracker Array
*/
function trackRemainingTokens() external view returns (uint256[] memory) {
return remainingTokensTracker;
}
/**
* @dev To update remainingTokensTracker Array
* @param _unsoldTokens input parameters in uint256 array format
*/
function setRemainingTokensArray(uint256[] memory _unsoldTokens) public {
require(
msg.sender == admin || msg.sender == owner(),
"caller not admin or owner"
);
require(_unsoldTokens.length != 0, "cannot update invalid values");
delete remainingTokensTracker;
for (uint256 i; i < _unsoldTokens.length; i++) {
remainingTokensTracker.push(_unsoldTokens[i]);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
require(!paused(), "Pausable: paused");
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
require(paused(), "Pausable: not paused");
_;
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}{
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"foundry-devops/=lib/foundry-devops/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": true,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"address","name":"_usdt","type":"address"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"uint256[][3]","name":"_rounds","type":"uint256[][3]"},{"internalType":"uint256","name":"_maxTokensToBuy","type":"uint256"},{"internalType":"address","name":"_paymentWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ClaimStartUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"MaxTokensUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_start","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_end","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SaleTimeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SaleTimeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"noOfTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdEq","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdEq","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBoughtAndStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensClaimedAndStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PERCENTAGE_REFERRAl","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDTInterface","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToAmountReferral","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToCommissionPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aggregatorInterface","outputs":[{"internalType":"contract Aggregator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_usersToBlacklist","type":"address[]"}],"name":"blacklistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_referral","type":"address"},{"internalType":"bool","name":"stake","type":"bool"}],"name":"buyWithETHWert","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"referral","type":"address"},{"internalType":"bool","name":"stake","type":"bool"}],"name":"buyWithEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"referral","type":"address"},{"internalType":"bool","name":"stake","type":"bool"}],"name":"buyWithUSDT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimStart","type":"uint256"}],"name":"changeClaimStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokensToBuy","type":"uint256"}],"name":"changeMaxTokensToBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPaymentWallet","type":"address"}],"name":"changePaymentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[][3]","name":"_rounds","type":"uint256[][3]"}],"name":"changeRoundsData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"changeSaleTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAndStake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicTimeFlag","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethBuyHelper","outputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementCurrentStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensToBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"percentages","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"prevCheckpoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"remainingTokensTracker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_userToRemoveFromBlacklist","type":"address[]"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_userToRemoveFromWhitelist","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addressesToRemoveFromWhitelist","type":"address[]"}],"name":"removeFromWhitelistForWERT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_no","type":"uint256"}],"name":"roundDetails","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setClaimWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_refferal","type":"address"},{"internalType":"uint256","name":"_commissionPercentage","type":"uint256"}],"name":"setCommissionPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_step","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"name":"setCurrentStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_dynamicTimeFlag","type":"bool"}],"name":"setDynamicTimeFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_unsoldTokens","type":"uint256[]"}],"name":"setRemainingTokensArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"uint256[]","name":"_percentages","type":"uint256[]"}],"name":"setSplits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setStakeingWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingManagerAddress","type":"address"}],"name":"setStakingManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeConstant","type":"uint256"}],"name":"setTimeConstant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeingWhitelistStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingManagerInterface","outputs":[{"internalType":"contract StakingManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimStart","type":"uint256"},{"internalType":"uint256","name":"noOfTokens","type":"uint256"},{"internalType":"address","name":"_saleToken","type":"address"},{"internalType":"address","name":"_stakingManagerAddress","type":"address"}],"name":"startClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeConstant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBoughtAndStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCommissionNativeToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCommissionUsdt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trackRemainingTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256[]","name":"_userDeposits","type":"uint256[]"}],"name":"updateFromBSC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"usdtBuyHelper","outputs":[{"internalType":"uint256","name":"usdPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"wallets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wertWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistClaimOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_usersToWhitelist","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addressesToWhitelist","type":"address[]"}],"name":"whitelistUsersForWERT","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052346103be576146d480380380610019816103c2565b92833981019060e0818303126103be57610032816103e7565b9161003f602083016103e7565b604083015160608401516080850151929590926001600160401b0381116103be57850184601f820112156103be5760405194606086016001600160401b0381118782101761027457604052859160608101908282116103be5780935b8285106103405750505050506100b860c060a087015196016103e7565b9560015f5560015491604051923360018060a01b0382167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36001600160a81b0319163360ff60a01b1916176001556001600160a01b03169182156102fe57506001600160a01b03169081156102c557428311806102bc575b1561028857670de0b6b3a764000060075560018060a01b0319601a541617601a5560018060a01b03196019541617601955600355600455600e905f905b600382106101e05750505060085560018060a01b031660018060a01b031960155416176015557f23f6ad8232d75562dd1c6b37dfc895af6bfc1ecd0fb3b88722c6a5e6b4dc9a2060606003546004546040519182526020820152426040820152a16040516142d890816103fc8239f35b80518051906001600160401b0382116102745768010000000000000000821161027457845482865580831061024e575b50602001845f5260205f205f5b83811061023a575050505060016020819201930191019091610170565b60019060208451940193818401550161021d565b855f528260205f2091820191015b8181106102695750610210565b5f815560010161025c565b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642074696d6560a01b6044820152606490fd5b50828411610133565b60405162461bcd60e51b81526020600482015260116024820152705a65726f2055534454206164647265737360781b6044820152606490fd5b62461bcd60e51b815260206004820152601760248201527f5a65726f2061676772656761746f7220616464726573730000000000000000006044820152606490fd5b84516001600160401b0381116103be57820184601f820112156103be578051906001600160401b038211610274578160051b6020806103808184016103c2565b809581520191830101918783116103be57602001905b8282106103ae5750505081526020948501940161009b565b8151815260209182019101610396565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761027457604052565b51906001600160a01b03821682036103be5756fe60806040526004361015610011575f80fd5b5f5f3560e01c806303b9c5ad1461361557806306ee82c5146135fa57806307f18082146134a85780630a200fc71461345b5780630b2b7f05146134235780630ba36dcd146133eb5780630dc9c838146131f55780631ddc6091146131a85780631fa2bc921461318357806323a8f1c014613155578063278c278b1461309057806329a5a0b6146130635780632dc358e814612f465780633197cbb614612f2957806333f7617814612f0c5780633864660814612ee45780633af32abf14612ea85780633f4ba83a14612e0157806343568eae14612de457806348ff1a39146126305780634e71d92d146123d857806353d99207146123b2578063548db1741461232c5780635bc34f711461230e5780635c975abb146122e85780635ddc568814611fdc5780635df4f35314611f9d57806363a5fde314611f6457806363b2011714611f4657806363e4087914611f18578063641046f414611dc7578063704b6c0214611d75578063715018a614611d0b57806373b2e80e14611ccc57806378e9792514611cae5780637ac139cb14611b725780637ad71f7214611b2e5780637f6fb25314611b1057806381a4da4b146117085780638456cb591461169157806389daf7991461160a5780638ac08082146113fa5780638da5cb5b146113d15780638e15f473146113b657806396f80fb8146113985780639a89c1fb1461136a5780639cfa0f7c1461134c578063a6d42e4e146111e3578063ae104265146111bc578063b00bba6a14611091578063b8977d6d14611042578063ba166a3914610fca578063bb3d676a14610f41578063c23326f314610efe578063c49cc64514610ed5578063c8adff0114610e50578063cad0055614610db9578063cb1a4fc014610c3b578063cff805ab14610c1d578063dad80e8614610bf7578063e19648db14610ba0578063e32204dd14610b77578063e6da921314610b44578063e985e36714610b1b578063eadd94ec14610afd578063ede8915814610adf578063edec5f2714610a57578063f04d688f14610a39578063f2fde38b14610963578063f4463743146108dc578063f597573f146108b3578063f851a4401461088a578063f885838614610850578063fb9a4acd1461074e578063fc893e561461039f5763fe575a871461035e575f80fd5b3461039c57602036600319011261039c5760209060ff906040906001600160a01b036103886136da565b168152601f84522054166040519015158152f35b80fd5b506103a9366137c5565b90929160035442101580610742575b6103c190613a25565b6103cc811515613a71565b6103de60ff60015460a01c1615613ab3565b6103ec600284541415613c43565b600283556103f981613d81565b61041661040860075483613957565b610410613ce1565b9061396a565b9161042383341015613c8f565b61042d8334613aff565b9361043a82600254613af2565b80600255600a54838161072f575b5050600a548082111561072857505b600954610463816137f8565b90549060031b1c8211801561070f575b610639575b5050156105bb5760ff60165460b01c1661059f575b60018060a01b03602254166104a460075483613957565b813b1561059b576040516348e30cb360e11b815233600482015260248101919091529086908290604490829084905af1801561059057610577575b509161054c6001969286856104f961055497600d54613af2565b600d556040517f6f225532a9c33b023b8e48247ad8df9d98f132ae17c769b97ff22d2b278fa73a33918061054042888b846040919493926060820195825260208201520152565b0390a45b600b54613af2565b600b55614098565b80610567575b5055602060405160018152f35b610571903361420b565b5f61055a565b61058286809261371c565b61058c575f6104df565b8480fd5b6040513d88823e3d90fd5b8680fd5b338552602080526105b660ff604087205416613b0c565b61048d565b9161054c6001969286610554956105d460075482613957565b338352601b6020526105eb60408420918254613af2565b90556040517f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d3633918061063142888b846040919493926060820195825260208201520152565b0390a4610544565b8361064382613824565b90549060031b1c4210156106ed575b505060ff60165460a01c166106e0575b6009549083610670836137f8565b90549060031b1c82115f146106b75750505061068b866139fe565b600954600181018091116106a3576009555f80610478565b634e487b7160e01b87526011600452602487fd5b6106d66106db926106ca61068b956137f8565b90549060031b1c613aff565b613aff565b6139fe565b6106e8613f81565b610662565b6106f9610705926137f8565b90549060031b1c613af2565b600a555f83610652565b5061071981613824565b90549060031b1c421015610473565b9050610457565b61073891613af2565b600a555f83610448565b506004544211156103b8565b503461039c57604036600319011261039c576004356001600160401b03811161084c5761077f90369060040161369b565b6024356001600160401b0381116108485761079e90369060040161369b565b6107b660018060a09694961b036001541633146138d2565b80830361081157845b8381106107ca578580f35b806107d8600192848861391d565b35828060a01b036107f26107ed84898961391d565b61392d565b168852601b60205261080960408920918254613af2565b9055016107bf565b60405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606490fd5b8380fd5b5080fd5b503461039c57602036600319011261039c576004359060135482101561039c57602061087b8361383c565b90549060031b1c604051908152f35b503461039c578060031936011261039c576016546040516001600160a01b039091168152602090f35b503461039c578060031936011261039c576019546040516001600160a01b039091168152602090f35b503461039c57602036600319011261039c576004356001600160401b03811161084c5761090d90369060040161369b565b9061092360018060a01b036001541633146138d2565b825b828110610930578380f35b6001906001600160a01b036109496107ed83878761391d565b168552602160205260408520805460ff1916905501610925565b503461039c57602036600319011261039c5761097d6136da565b61099260018060a01b036001541633146138d2565b6001600160a01b031680156109e557600180546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b503461039c578060031936011261039c576020600554604051908152f35b503461039c57602036600319011261039c576004356001600160401b03811161084c57610a8890369060040161369b565b90610a9e60018060a01b036001541633146138d2565b825b828110610aab578380f35b6001906001600160a01b03610ac46107ed83878761391d565b1685526020805260408520805460ff19168317905501610aa0565b503461039c578060031936011261039c576020601854604051908152f35b503461039c578060031936011261039c576020600b54604051908152f35b503461039c578060031936011261039c576006546040516001600160a01b039091168152602090f35b503461039c57610b5336613706565b9190600381101561084c57600e0190815483101561039c57602061087b8484613884565b503461039c578060031936011261039c576015546040516001600160a01b039091168152602090f35b503461039c57602036600319011261039c576004359060115482101561039c57601154821015610be3576020916011825282822001549060031b1c604051908152f35b634e487b7160e01b81526032600452602490fd5b503461039c578060031936011261039c57602060ff60165460b01c166040519015158152f35b503461039c578060031936011261039c576020600a54604051908152f35b503461039c578060031936011261039c57610c5e60ff60015460a01c1615613ab3565b600654610c75906001600160a01b03161515613b58565b338152601f602052610c8e60ff60408320541615613b9b565b60ff60165460b01c16610d9d575b338152601b6020526040812054908115610d65576022546001600160a01b0316803b1561084c576040516348e30cb360e11b8152336004820152602481018490529082908290604490829084905af18015610d5a57908291610d45575b5050338152601b60205260408120556040519081524260208201527ffa4ec67f9254455933eb145bae864b26f29dd0a7bbb76eb11e4d6b8b9b184c2b60403392a2602060405160018152f35b81610d4f9161371c565b61039c57805f610cf9565b6040513d84823e3d90fd5b60405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f207374616b6560801b6044820152606490fd5b33815260208052610db460ff604083205416613b0c565b610c9c565b503461039c57602036600319011261039c57610dd36136da565b610de860018060a01b036001541633146138d2565b6001600160a01b03168015610e12576bffffffffffffffffffffffff60a01b601554161760155580f35b60405162461bcd60e51b8152602060048201526016602482015275616464726573732063616e6e6f74206265207a65726f60501b6044820152606490fd5b503461039c578060031936011261039c5760405160128054808352908352909160208301917fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444915b818110610ebf57610ebb85610eaf8187038261371c565b60405191829182613899565b0390f35b8254845260209093019260019283019201610e98565b503461039c578060031936011261039c57601a546040516001600160a01b039091168152602090f35b503461039c57602036600319011261039c576004359060125482101561039c57601254821015610be3576020916012825282822001549060031b1c604051908152f35b503461039c57602036600319011261039c576004356001600160401b03811161084c57610f7290369060040161369b565b90610f8860018060a01b036001541633146138d2565b825b828110610f95578380f35b6001906001600160a01b03610fae6107ed83878761391d565b168552601f60205260408520805460ff19168317905501610f8a565b503461039c57602036600319011261039c57600435600381101561102e57600e016040519181548084526020840192825260208220915b81811061101857610ebb85610eaf8187038261371c565b8254845260209093019260019283019201611001565b634e487b7160e01b82526032600452602482fd5b503461039c57602036600319011261039c5761105c6136cb565b61107160018060a01b036001541633146138d2565b6016805460ff60b01b191691151560b01b60ff60b01b1691909117905580f35b503461039c57602036600319011261039c576110ab6136da565b6110c060018060a01b036001541633146138d2565b6001600160a01b0316801561115157602280546001600160a01b0319168217905560065460405163095ea7b360e01b815260048101929092525f1960248301526020908290604490829086906001600160a01b03165af18015610d5a57611125575080f35b6111469060203d60201161114a575b61113e818361371c565b810190613be7565b5080f35b503d611134565b60405162461bcd60e51b815260206004820152603760248201527f7374616b696e67206d616e616765722063616e6e6f7420626520696e6174696160448201527f6c697a65642077697468207a65726f20616464726573730000000000000000006064820152608490fd5b503461039c57602036600319011261039c5760206111db600435613d81565b604051908152f35b503461039c57602036600319011261039c576004356001600160401b03811161084c573660238201121561084c5760405190606082018281106001600160401b0382111761133857604052606481018236821161058c5782600401905b82821061130957858561125e60018060a01b036001541633146138d2565b600e9082905b60038210611270578380f35b80518051906001600160401b0382116112f557600160401b82116112f55760209085548387558084106112da575b500184865260208620865b8381106112c6575050505060016020819201930191019091611264565b6001906020845194019381840155016112a9565b6112ef90875f5284845f2091820191016139d4565b8761129e565b634e487b7160e01b86526041600452602486fd5b81356001600160401b03811161059b5760209161132d839260043691890101613768565b815201910190611240565b634e487b7160e01b84526041600452602484fd5b503461039c578060031936011261039c576020600854604051908152f35b503461039c5761137936613706565b9061138f60018060a01b036001541633146138d2565b600955600a5580f35b503461039c578060031936011261039c576020601754604051908152f35b503461039c578060031936011261039c5760206111db613ce1565b503461039c578060031936011261039c576001546040516001600160a01b039091168152602090f35b503461039c57608036600319011261039c576024356114176136f0565b6064356001600160a01b03811693919084900361084c5761144360018060a01b036001541633146138d2565b6001600160a01b03169283156115d05760055461159757600435600555600680546001600160a01b031916851790556016805460ff60a81b1916600160a81b17905580611535575b506040516323b872dd60e01b81523360048201523060248201526044810183905260208160648185885af1918215611529576040927fdc9670dbabdd488b372eb16ebe49a39b3124a12cdffdcefbc89834a408bf8ff894926114f3929161150a575b50613bff565b8151908152426020820152a2602060405160018152f35b611523915060203d60201161114a5761113e818361371c565b5f6114ed565b604051903d90823e3d90fd5b602280546001600160a01b0319168217905560405163095ea7b360e01b815260048101919091525f19602482015260208160448185885af18015610d5a571561148b576115909060203d60201161114a5761113e818361371c565b505f61148b565b60405162461bcd60e51b815260206004820152601160248201527010db185a5b48185b1c9958591e481cd95d607a1b6044820152606490fd5b60405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606490fd5b503461039c57602036600319011261039c576004356001600160401b03811161084c5761163b90369060040161369b565b9061165160018060a01b036001541633146138d2565b825b82811061165e578380f35b6001906001600160a01b036116776107ed83878761391d565b168552601f60205260408520805460ff1916905501611653565b503461039c578060031936011261039c576001546116b96001600160a01b03821633146138d2565b6116c960ff8260a01c1615613ab3565b60ff60a01b1916600160a01b176001556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602090a180f35b50608036600319011261039c5761171d6136da565b906024359161172a6136f0565b926064359081151582036108485760035442101580611b04575b61174d90613a25565b611758811515613a71565b61176a60ff60015460a01c1615613ab3565b611778600285541415613c43565b60028455338452602160205260ff60408520541615611ac05761179a81613d81565b6117a961040860075483613957565b916117b683341015613c8f565b6117c08334613aff565b936117cd82600254613af2565b80600255600a548381611aad575b5050600a5480821115611aa657505b6009546117f6816137f8565b90549060031b1c82118015611a8d575b6119d9575b50501561195c5760ff60165460b01c16611936575b60018060a01b036022541661183760075483613957565b813b15611932576040516348e30cb360e11b81526001600160a01b038816600482015260248101919091529087908290604490829084905af180156119275761190e575b509161054c6001979287856118956118e397600d54613af2565b600d556040517f6f225532a9c33b023b8e48247ad8df9d98f132ae17c769b97ff22d2b278fa73a8c8060a01b038b16918061054042888b846040919493926060820195825260208201520152565b806118f7575b505055602060405160018152f35b61190791848060a01b031661420b565b5f806118e9565b61191987809261371c565b611923575f61187b565b8580fd5b6040513d89823e3d90fd5b8780fd5b6001600160a01b03851686526020805260408620546119579060ff16613b0c565b611820565b9161054c60019792876118e39561197560075482613957565b8b8060a01b038a1690818452601b60205261199560408520918254613af2565b90557f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d366040518061063142888b846040919493926060820195825260208201520152565b836119e382613824565b90549060031b1c421015611a77575b505060ff60165460a01c16611a6a575b6009549083611a10836137f8565b90549060031b1c82115f14611a5757505050611a2b876139fe565b60095460018101809111611a43576009555f8061180b565b634e487b7160e01b88526011600452602488fd5b6106d66106db926106ca611a2b956137f8565b611a72613f81565b611a02565b6106f9611a83926137f8565b600a555f836119f2565b50611a9781613824565b90549060031b1c421015611806565b90506117ea565b611ab691613af2565b600a555f836117db565b606460405162461bcd60e51b815260206004820152602060248201527f55736572206e6f742077686974656c697374656420666f7220746869732074786044820152fd5b50600454421115611744565b503461039c578060031936011261039c576020600d54604051908152f35b503461039c57602036600319011261039c576004359060145482101561039c576020611b5983613854565b905460405160039290921b1c6001600160a01b03168152f35b503461039c57604036600319011261039c57611b8c6136da565b6024359060018060a01b036016541633148015611c9a575b611bad90613988565b6001600160a01b03168015611c3e5760468211611bd3578252601d602052604082205580f35b60405162461bcd60e51b815260206004820152603b60248201527f54686520636f6d6d697373696f6e2070657263656e746167652063616e6e6f7460448201527f2062652067726561746572207468616e2037302070657263656e7400000000006064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f54686520616464726573732073686f756c6420626520646966666572656e742060448201526d066726f6d206164647265737320360941b6064820152608490fd5b506001546001600160a01b03163314611ba4565b503461039c578060031936011261039c576020600354604051908152f35b503461039c57602036600319011261039c5760209060ff906040906001600160a01b03611cf76136da565b168152601e84522054166040519015158152f35b503461039c578060031936011261039c57611d3160018060a01b036001541633146138d2565b600180546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461039c57602036600319011261039c57611d8f6136da565b611da460018060a01b036001541633146138d2565b60018060a01b03166bffffffffffffffffffffffff60a01b601654161760165580f35b503461039c578060031936011261039c576016546001600160a01b031633148015611f04575b611df690613988565b600a54601154600160401b811015611ef05790611e1e826001611e3694016011556011613884565b90919082549060031b91821b915f19901b1916179055565b60ff60165460a01c16611ee3575b600a54600954611e53816137f8565b90549060031b1c8210611e8b575b50506009545f198114611e775760010160095580f35b634e487b7160e01b82526011600452602482fd5b80611ece575050611eb26106db611ea36009546137f8565b90546002549160031b1c613aff565b611ebd6009546137f8565b90549060031b1c600a555f80611e61565b611ede916106ca6106db926137f8565b611eb2565b611eeb613f81565b611e44565b634e487b7160e01b83526041600452602483fd5b506001546001600160a01b03163314611ded565b503461039c57602036600319011261039c57602064e8d4a51000611f3d600435613d81565b04604051908152f35b503461039c578060031936011261039c576020600254604051908152f35b503461039c57602036600319011261039c576020906040906001600160a01b03611f8c6136da565b168152601d83522054604051908152f35b503461039c57602036600319011261039c5760209060ff906040906001600160a01b03611fc86136da565b168152602184522054166040519015158152f35b503461039c57604036600319011261039c576004356001600160401b03811161084c573660238201121561084c57806004013561201881613751565b91612026604051938461371c565b8183526024602084019260051b8201019036821161058c57602401915b8183106122c4575050506024356001600160401b0381116122c05761206c903690600401613768565b61208160018060a01b036001541633146138d2565b815181510361228757601454836014558061224f575b506013548360135580612217575b508291825b81518410156121c6576120bd84846139ea565b5115612177576120d8906120d185856139ea565b5190613af2565b926001600160a01b036120eb82846139ea565b5116601454600160401b8110156121635780600161210c9201601455613854565b81546001600160a01b0360039290921b91821b191692901b91909117905561213481846139ea565b51601354600160401b8110156121635760019291611e1e828561215c94016013556013613884565b01926120aa565b634e487b7160e01b87526041600452602487fd5b60405162461bcd60e51b815260206004820152602160248201527f50657263656e74616765206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608490fd5b60648591036121d25780f35b60405162461bcd60e51b815260206004820152601f60248201527f546f74616c2070657263656e74616765206d75737420657175616c20313030006044820152606490fd5b60138452612249907f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090908101906139d4565b5f6120a5565b60148452612281907fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec908101906139d4565b5f612097565b60405162461bcd60e51b81526020600482015260116024820152704d69736d6174636865642061727261797360781b6044820152606490fd5b8280fd5b82356001600160a01b03811681036122e457815260209283019201612043565b5f80fd5b503461039c578060031936011261039c57602060ff60015460a01c166040519015158152f35b503461039c578060031936011261039c576020600954604051908152f35b503461039c57602036600319011261039c576004356001600160401b03811161084c5761235d90369060040161369b565b9061237360018060a01b036001541633146138d2565b825b828110612380578380f35b6001906001600160a01b036123996107ed83878761391d565b1685526020805260408520805460ff1916905501612375565b503461039c578060031936011261039c57602060ff60165460a81c166040519015158152f35b503461039c578060031936011261039c576123fb60ff60015460a01c1615613ab3565b600654612412906001600160a01b03161515613b58565b338152601f60205261242b60ff60408320541615613b9b565b60ff60165460a81c166125d8575b600554421061259357338152601e60205260ff60408220541661255c57338152601e60205260408120600160ff19825416179055338152601b602052604081205480156125245733808352601b60209081526040808520859055600654905163a9059cbb60e01b81526004810193909352602483018490528290604490829087906001600160a01b03165af1908115612519576124dc92939161150a5750613bff565b6040519081524260208201527f9923b4306c6c030f2bdfbf156517d5983b87e15b96176da122cd4f2effa4ba7b60403392a2602060405160018152f35b6040513d85823e3d90fd5b60405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601960248201527f436c61696d20686173206e6f74207374617274656420796574000000000000006044820152606490fd5b3381526020805260ff6040822054166124395760405162461bcd60e51b815260206004820152601e60248201527f55736572206e6f742077686974656c697374656420666f7220636c61696d00006044820152606490fd5b50346122e45761263f366137c5565b909160035442101580612dd8575b61265690613a25565b612661811515613a71565b61267360ff60015460a01c1615613ab3565b61267c81613d81565b9061268981600254613af2565b928360025564e8d4a51000830493600a548381612dc5575b5050600a5480821115612dbe57505b6009546126bc816137f8565b90549060031b1c82118015612da5575b612cf1575b505015612c775760ff60165460b01c16612c5b575b60018060a01b03602254166126fd60075483613957565b90803b156122e4576040516348e30cb360e11b815233600482015260248101929092525f908290604490829084905af18015612c5057612c36575b50908161274a61279d93600d54613af2565b600d5560018060a01b0360195416906040517f6f225532a9c33b023b8e48247ad8df9d98f132ae17c769b97ff22d2b278fa73a33918061054042888b846040919493926060820195825260208201520152565b600b55601954604051636eb1769f60e11b815233600482015230602482015290602090829060449082906001600160a01b03165afa908115612c2b578491612bf9575b508111612baa578290601454155f14612a2a5760155482919061280d906001600160a01b03161515614053565b6001600160a01b038416806128ef575b50612829929350613aff565b6019546015546040516323b872dd60e01b602082019081523360248301526001600160a01b039283166044830152606482019490945291169190839061287c81608481015b03601f19810183528261371c565b51925af1612888613fd2565b501561289a575b602060405160018152f35b60405162461bcd60e51b815260206004820152602760248201527f546f6b656e207061796d656e7420666f72207061796d656e742077616c6c65746044820152660819985a5b195960ca1b6064820152608490fd5b92839052601d60205260408520549092915015612a1657808452601d60205283806064612920604083205486613957565b04945b6019546040516323b872dd60e01b602082019081523360248301526001600160a01b0393841660448301526064820189905291909216918390612969816084810161286e565b51925af1612975613fd2565b50156129c7578352601c60205260408320805490600182018092116129b3579184939161282993556129a982601754613af2565b601755839261281d565b634e487b7160e01b85526011600452602485fd5b60405162461bcd60e51b815260206004820152602160248201527f546f6b656e207061796d656e7420666f7220726566657272616c206661696c656044820152601960fa1b6064820152608490fd5b83806064612a2385613941565b0494612923565b9150508180925b601454841015612aea57612ae26001916064612a5c612a4f8861383c565b90549060031b1c87613957565b0490612add8580868060a01b0360195416612a768b613854565b90546040516323b872dd60e01b602082019081523360248301526001600160a01b0360039490941b9290921c60a08c901b8c90031692909216604483015260648201889052908390612acb816084810161286e565b51925af1612ad7613fd2565b50614010565b613af2565b930192612a31565b925090612af78382613aff565b612b04575b50505061288f565b6019546014546001600160a01b0390911693905f198101908111612b9657918361286e612acb612b54612b8e9895612b3c8598613854565b905460039190911b1c6001600160a01b031695613aff565b6040516323b872dd60e01b602082019081523360248301526001600160a01b03909616604482015260648101919091529182906084820190565b5f8080612afc565b634e487b7160e01b84526011600452602484fd5b60405162461bcd60e51b815260206004820152602160248201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e636044820152606560f81b6064820152608490fd5b90506020813d602011612c23575b81612c146020938361371c565b8101031261084857515f6127e0565b3d9150612c07565b6040513d86823e3d90fd5b61279d929195505f612c479161371c565b5f949091612738565b6040513d5f823e3d90fd5b335f5260208052612c7260ff60405f205416613b0c565b6126e6565b9061279d91612c8860075482613957565b335f52601b602052612c9f60405f20918254613af2565b905560018060a01b0360195416906040517f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d3633918061063142888b846040919493926060820195825260208201520152565b83612cfb82613824565b90549060031b1c421015612d8f575b505060ff60165460a01c16612d82575b6009549083612d28836137f8565b90549060031b1c82115f14612d6f57505050612d435f6139fe565b60095460018101809111612d5b576009555f806126d1565b634e487b7160e01b5f52601160045260245ffd5b6106d66106db926106ca612d43956137f8565b612d8a613f81565b612d1a565b6106f9612d9b926137f8565b600a555f83612d0a565b50612daf81613824565b90549060031b1c4210156126cc565b90506126b0565b612dce91613af2565b600a555f836126a1565b5060045442111561264d565b346122e4575f3660031901126122e4576020600c54604051908152f35b346122e4575f3660031901126122e457600154612e286001600160a01b03821633146138d2565b60ff8160a01c1615612e6c5760ff60a01b19166001556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602090a1005b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b346122e45760203660031901126122e4576001600160a01b03612ec96136da565b165f5260208052602060ff60405f2054166040519015158152f35b346122e4575f3660031901126122e4576022546040516001600160a01b039091168152602090f35b346122e4575f3660031901126122e4576020600754604051908152f35b346122e4575f3660031901126122e4576020600454604051908152f35b346122e45760203660031901126122e4576004356001600160401b0381116122e457612f76903690600401613768565b6016546001600160a01b03163314801561304f575b612f9490613988565b80511561300a576012545f60125580612fd2575b505f5b8151811015612fd05780612fca612fc4600193856139ea565b516139fe565b01612fab565b005b60125f52613004907fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444908101906139d4565b81612fa8565b60405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f742075706461746520696e76616c69642076616c756573000000006044820152606490fd5b506001546001600160a01b03163314612f8b565b346122e45760203660031901126122e45760206111db610408613087600435613d81565b60075490613957565b346122e45760203660031901126122e4576004356130b960018060a01b036001541633146138d2565b8015613110577f76f9e5e1f6af6a9f180708b77a5c99210fbf19b91f1f194f3918c262b8edf77c90600854908060085561310b6040519283924291846040919493926060820195825260208201520152565b0390a1005b60405162461bcd60e51b815260206004820152601c60248201527f5a65726f206d617820746f6b656e7320746f206275792076616c7565000000006044820152606490fd5b346122e45760203660031901126122e45761317b60018060a01b036001541633146138d2565b600435600c55005b346122e4575f3660031901126122e457602060ff60165460a01c166040519015158152f35b346122e45760203660031901126122e4576131c16136cb565b6131d660018060a01b036001541633146138d2565b6016805460ff60a81b191691151560a81b60ff60a81b16919091179055005b346122e45761320336613706565b9061321960018060a01b036001541633146138d2565b8015801580916133e2575b156133a8576132ce575b508061323657005b600354811115613297577fddd2ed237e6993c9380182683f2c8bec486aaaa429528852cd74dbdb96cea0b2613292600454836004556040519182916211539160ea1b954291846040919493926060820195825260208201520152565b0390a2005b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420656e6454696d6560881b6044820152606490fd5b6003548042101561336c578142101561333357600382905560408051918252602082019290925242918101919091526414d510549560da1b907fddd2ed237e6993c9380182683f2c8bec486aaaa429528852cd74dbdb96cea0b290606090a28161322e565b60405162461bcd60e51b815260206004820152601160248201527014d85b19481d1a5b59481a5b881c185cdd607a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601460248201527314d85b1948185b1c9958591e481cdd185c9d195960621b6044820152606490fd5b60405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d657465727360701b6044820152606490fd5b50821515613224565b346122e45760203660031901126122e4576001600160a01b0361340c6136da565b165f52601b602052602060405f2054604051908152f35b346122e45760203660031901126122e4576001600160a01b036134446136da565b165f52601c602052602060405f2054604051908152f35b346122e45760203660031901126122e4576134746136cb565b61348960018060a01b036001541633146138d2565b6016805460ff60a01b191691151560a01b60ff60a01b16919091179055005b346122e45760203660031901126122e4576004356134d160018060a01b036001541633146138d2565b60055480156135b55760045482111561357d574282111561354257817f5f3a900c85949962b4cc192dd3714dae64071dc2e907049ec720b023270905a4926005556135346040519283924291846040919493926060820195825260208201520152565b0390a1602060405160018152f35b60405162461bcd60e51b815260206004820152601360248201527210db185a5b481cdd185c9d081a5b881c185cdd606a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f53616c6520696e2070726f677265737360801b6044820152606490fd5b60405162461bcd60e51b815260206004820152601a60248201527f496e697469616c20636c61696d2064617461206e6f74207365740000000000006044820152606490fd5b346122e4575f3660031901126122e457602060405160058152f35b346122e45760203660031901126122e4576004356001600160401b0381116122e45761364590369060040161369b565b9061365b60018060a01b036001541633146138d2565b5f5b82811061366657005b6001906001600160a01b0361367f6107ed83878761391d565b165f52602160205260405f208260ff198254161790550161365d565b9181601f840112156122e4578235916001600160401b0383116122e4576020808501948460051b0101116122e457565b6004359081151582036122e457565b600435906001600160a01b03821682036122e457565b604435906001600160a01b03821682036122e457565b60409060031901126122e4576004359060243590565b90601f801991011681019081106001600160401b0382111761373d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161373d5760051b60200190565b9080601f830112156122e457813561377f81613751565b9261378d604051948561371c565b81845260208085019260051b8201019283116122e457602001905b8282106137b55750505090565b81358152602091820191016137a8565b60609060031901126122e457600435906024356001600160a01b03811681036122e4579060443580151581036122e45790565b600e5481101561381057600e5f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b6010548110156138105760105f5260205f2001905f90565b6013548110156138105760135f5260205f2001905f90565b6014548110156138105760145f5260205f2001905f90565b600f5481101561381057600f5f5260205f2001905f90565b8054821015613810575f5260205f2001905f90565b60206040818301928281528451809452019201905f5b8181106138bc5750505090565b82518452602093840193909201916001016138af565b156138d957565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b91908110156138105760051b0190565b356001600160a01b03811681036122e45790565b90600582029180830460051490151715612d5b57565b81810292918115918404141715612d5b57565b8115613974570490565b634e487b7160e01b5f52601260045260245ffd5b1561398f57565b60405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206e6f742061646d696e206f72206f776e6572000000000000006044820152606490fd5b8181106139df575050565b5f81556001016139d4565b80518210156138105760209160051b010190565b60125490600160401b82101561373d57611e1e826001613a2394016012556012613884565b565b15613a2c57565b60405162461bcd60e51b815260206004820152601760248201527f496e76616c69642074696d6520666f7220627579696e670000000000000000006044820152606490fd5b15613a7857565b60405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081cd85b1948185b5bdd5b9d606a1b6044820152606490fd5b15613aba57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b91908201809211612d5b57565b91908203918211612d5b57565b15613b1357565b60405162461bcd60e51b815260206004820152601e60248201527f55736572206e6f742077686974656c697374656420666f72207374616b6500006044820152606490fd5b15613b5f57565b60405162461bcd60e51b815260206004820152601460248201527314d85b19481d1bdad95b881b9bdd08185919195960621b6044820152606490fd5b15613ba257565b60405162461bcd60e51b815260206004820152601b60248201527f54686973204164647265737320697320426c61636b6c697374656400000000006044820152606490fd5b908160209103126122e4575180151581036122e45790565b15613c0657565b60405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606490fd5b15613c4a57565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b15613c9657565b60405162461bcd60e51b815260206004820152600c60248201526b13195cdcc81c185e5b595b9d60a21b6044820152606490fd5b519069ffffffffffffffffffff821682036122e457565b601a54604051633fabe5a360e21b81529060a090829060049082906001600160a01b03165afa908115612c50575f91613d34575b506402540be4008102908082056402540be4001490151715612d5b5790565b905060a0813d60a011613d79575b81613d4f60a0938361371c565b810103126122e457613d6081613cca565b50613d72608060208301519201613cca565b505f613d15565b3d9150613d42565b600a5480613f7b5750600254905b6008548111613f3757613da28282613af2565b9160095492613db0846137f8565b90549060031b1c108015613f1e575b15613f1157600e545f198101908111612d5b57831015613edd57613de283613824565b905460039190911b1c4210613e8c5750613dff816106f9846137f8565b60018301809311612d5b57613e13836137f8565b90549060031b1c10613e3b57613e2b613e389261386c565b90549060031b1c90613957565b90565b60405162461bcd60e51b815260206004820152602360248201527f43616e74205075726368617365204d6f726520696e20696e646976696475616c604482015262040e8f60eb1b6064820152608490fd5b613e9c613ebb916106ca856137f8565b613eb5613ea88561386c565b90549060031b1c82613957565b92613aff565b9160018101809111612d5b57613e3892613e2b613ed79261386c565b90613af2565b60405162461bcd60e51b815260206004820152600c60248201526b57726f6e6720706172616d7360a01b6044820152606490fd5b50613e2b613e389261386c565b50613f2883613824565b90549060031b1c421015613dbf565b606460405162461bcd60e51b815260206004820152602060248201527f416d6f756e742065786365656473206d617820746f6b656e7320746f206275796044820152fd5b90613d8f565b5f5b60105490613f946009548093613aff565b811015613fce57613fc8600192611e1e613fc384613fbd613fb7600c5483613957565b42613af2565b93613af2565b613824565b01613f83565b5050565b3d1561400b573d906001600160401b03821161373d5760405191614000601f8201601f19166020018461371c565b82523d5f602084013e565b606090565b1561401757565b60405162461bcd60e51b8152602060048201526014602482015273151bdad95b881c185e5b595b9d0819985a5b195960621b6044820152606490fd5b1561405a57565b60405162461bcd60e51b815260206004820152601660248201527514185e5b595b9d081dd85b1b195d081b9bdd081cd95d60521b6044820152606490fd5b90601454155f14614165575f906001600160a01b0316806140de575b506140c290613a2392613aff565b6015546001600160a01b03166140d9811515614053565b61420b565b5f818152601d60205260409020549091501561415357805f52601d602052606461410c60405f205484613957565b04905b614119828261420b565b5f52601c60205260405f209081549260018401809411612d5b57613a23936140c2935561414882601854613af2565b6018559250906140b4565b606461415e83613941565b049061410f565b505f90815b6014548310156141bf576141b760019160646141956141888761383c565b90549060031b1c86613957565b0490612add826141a488613854565b878060a01b0391549060031b1c1661420b565b92019161416a565b91506141cb8282613aff565b6141d3575050565b6014545f198101908111612d5b57613a23926141f161420992613854565b905460039190911b1c6001600160a01b031692613aff565b905b81471061426f575f918291829182916001600160a01b03165af161422d613fd2565b501561423557565b60405162461bcd60e51b81526020600482015260126024820152711155120814185e5b595b9d0819985a5b195960721b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a4c6f772062616c616e636560a81b6044820152606490fdfea264697066735822122094c2f1c821214c4704010519eb275b07c49096c90bf3e6ebad46934b3019cb7a64736f6c634300081c00330000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000676b8a47000000000000000000000000000000000000000000000000000000006873360b00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000012a05f2000000000000000000000000000aff53fcc043038038f3961d93d686ddf0224bdaf000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000ba43b740000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000aa87bee5380000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006873360b
Deployed Bytecode
0x60806040526004361015610011575f80fd5b5f5f3560e01c806303b9c5ad1461361557806306ee82c5146135fa57806307f18082146134a85780630a200fc71461345b5780630b2b7f05146134235780630ba36dcd146133eb5780630dc9c838146131f55780631ddc6091146131a85780631fa2bc921461318357806323a8f1c014613155578063278c278b1461309057806329a5a0b6146130635780632dc358e814612f465780633197cbb614612f2957806333f7617814612f0c5780633864660814612ee45780633af32abf14612ea85780633f4ba83a14612e0157806343568eae14612de457806348ff1a39146126305780634e71d92d146123d857806353d99207146123b2578063548db1741461232c5780635bc34f711461230e5780635c975abb146122e85780635ddc568814611fdc5780635df4f35314611f9d57806363a5fde314611f6457806363b2011714611f4657806363e4087914611f18578063641046f414611dc7578063704b6c0214611d75578063715018a614611d0b57806373b2e80e14611ccc57806378e9792514611cae5780637ac139cb14611b725780637ad71f7214611b2e5780637f6fb25314611b1057806381a4da4b146117085780638456cb591461169157806389daf7991461160a5780638ac08082146113fa5780638da5cb5b146113d15780638e15f473146113b657806396f80fb8146113985780639a89c1fb1461136a5780639cfa0f7c1461134c578063a6d42e4e146111e3578063ae104265146111bc578063b00bba6a14611091578063b8977d6d14611042578063ba166a3914610fca578063bb3d676a14610f41578063c23326f314610efe578063c49cc64514610ed5578063c8adff0114610e50578063cad0055614610db9578063cb1a4fc014610c3b578063cff805ab14610c1d578063dad80e8614610bf7578063e19648db14610ba0578063e32204dd14610b77578063e6da921314610b44578063e985e36714610b1b578063eadd94ec14610afd578063ede8915814610adf578063edec5f2714610a57578063f04d688f14610a39578063f2fde38b14610963578063f4463743146108dc578063f597573f146108b3578063f851a4401461088a578063f885838614610850578063fb9a4acd1461074e578063fc893e561461039f5763fe575a871461035e575f80fd5b3461039c57602036600319011261039c5760209060ff906040906001600160a01b036103886136da565b168152601f84522054166040519015158152f35b80fd5b506103a9366137c5565b90929160035442101580610742575b6103c190613a25565b6103cc811515613a71565b6103de60ff60015460a01c1615613ab3565b6103ec600284541415613c43565b600283556103f981613d81565b61041661040860075483613957565b610410613ce1565b9061396a565b9161042383341015613c8f565b61042d8334613aff565b9361043a82600254613af2565b80600255600a54838161072f575b5050600a548082111561072857505b600954610463816137f8565b90549060031b1c8211801561070f575b610639575b5050156105bb5760ff60165460b01c1661059f575b60018060a01b03602254166104a460075483613957565b813b1561059b576040516348e30cb360e11b815233600482015260248101919091529086908290604490829084905af1801561059057610577575b509161054c6001969286856104f961055497600d54613af2565b600d556040517f6f225532a9c33b023b8e48247ad8df9d98f132ae17c769b97ff22d2b278fa73a33918061054042888b846040919493926060820195825260208201520152565b0390a45b600b54613af2565b600b55614098565b80610567575b5055602060405160018152f35b610571903361420b565b5f61055a565b61058286809261371c565b61058c575f6104df565b8480fd5b6040513d88823e3d90fd5b8680fd5b338552602080526105b660ff604087205416613b0c565b61048d565b9161054c6001969286610554956105d460075482613957565b338352601b6020526105eb60408420918254613af2565b90556040517f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d3633918061063142888b846040919493926060820195825260208201520152565b0390a4610544565b8361064382613824565b90549060031b1c4210156106ed575b505060ff60165460a01c166106e0575b6009549083610670836137f8565b90549060031b1c82115f146106b75750505061068b866139fe565b600954600181018091116106a3576009555f80610478565b634e487b7160e01b87526011600452602487fd5b6106d66106db926106ca61068b956137f8565b90549060031b1c613aff565b613aff565b6139fe565b6106e8613f81565b610662565b6106f9610705926137f8565b90549060031b1c613af2565b600a555f83610652565b5061071981613824565b90549060031b1c421015610473565b9050610457565b61073891613af2565b600a555f83610448565b506004544211156103b8565b503461039c57604036600319011261039c576004356001600160401b03811161084c5761077f90369060040161369b565b6024356001600160401b0381116108485761079e90369060040161369b565b6107b660018060a09694961b036001541633146138d2565b80830361081157845b8381106107ca578580f35b806107d8600192848861391d565b35828060a01b036107f26107ed84898961391d565b61392d565b168852601b60205261080960408920918254613af2565b9055016107bf565b60405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606490fd5b8380fd5b5080fd5b503461039c57602036600319011261039c576004359060135482101561039c57602061087b8361383c565b90549060031b1c604051908152f35b503461039c578060031936011261039c576016546040516001600160a01b039091168152602090f35b503461039c578060031936011261039c576019546040516001600160a01b039091168152602090f35b503461039c57602036600319011261039c576004356001600160401b03811161084c5761090d90369060040161369b565b9061092360018060a01b036001541633146138d2565b825b828110610930578380f35b6001906001600160a01b036109496107ed83878761391d565b168552602160205260408520805460ff1916905501610925565b503461039c57602036600319011261039c5761097d6136da565b61099260018060a01b036001541633146138d2565b6001600160a01b031680156109e557600180546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b503461039c578060031936011261039c576020600554604051908152f35b503461039c57602036600319011261039c576004356001600160401b03811161084c57610a8890369060040161369b565b90610a9e60018060a01b036001541633146138d2565b825b828110610aab578380f35b6001906001600160a01b03610ac46107ed83878761391d565b1685526020805260408520805460ff19168317905501610aa0565b503461039c578060031936011261039c576020601854604051908152f35b503461039c578060031936011261039c576020600b54604051908152f35b503461039c578060031936011261039c576006546040516001600160a01b039091168152602090f35b503461039c57610b5336613706565b9190600381101561084c57600e0190815483101561039c57602061087b8484613884565b503461039c578060031936011261039c576015546040516001600160a01b039091168152602090f35b503461039c57602036600319011261039c576004359060115482101561039c57601154821015610be3576020916011825282822001549060031b1c604051908152f35b634e487b7160e01b81526032600452602490fd5b503461039c578060031936011261039c57602060ff60165460b01c166040519015158152f35b503461039c578060031936011261039c576020600a54604051908152f35b503461039c578060031936011261039c57610c5e60ff60015460a01c1615613ab3565b600654610c75906001600160a01b03161515613b58565b338152601f602052610c8e60ff60408320541615613b9b565b60ff60165460b01c16610d9d575b338152601b6020526040812054908115610d65576022546001600160a01b0316803b1561084c576040516348e30cb360e11b8152336004820152602481018490529082908290604490829084905af18015610d5a57908291610d45575b5050338152601b60205260408120556040519081524260208201527ffa4ec67f9254455933eb145bae864b26f29dd0a7bbb76eb11e4d6b8b9b184c2b60403392a2602060405160018152f35b81610d4f9161371c565b61039c57805f610cf9565b6040513d84823e3d90fd5b60405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f207374616b6560801b6044820152606490fd5b33815260208052610db460ff604083205416613b0c565b610c9c565b503461039c57602036600319011261039c57610dd36136da565b610de860018060a01b036001541633146138d2565b6001600160a01b03168015610e12576bffffffffffffffffffffffff60a01b601554161760155580f35b60405162461bcd60e51b8152602060048201526016602482015275616464726573732063616e6e6f74206265207a65726f60501b6044820152606490fd5b503461039c578060031936011261039c5760405160128054808352908352909160208301917fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444915b818110610ebf57610ebb85610eaf8187038261371c565b60405191829182613899565b0390f35b8254845260209093019260019283019201610e98565b503461039c578060031936011261039c57601a546040516001600160a01b039091168152602090f35b503461039c57602036600319011261039c576004359060125482101561039c57601254821015610be3576020916012825282822001549060031b1c604051908152f35b503461039c57602036600319011261039c576004356001600160401b03811161084c57610f7290369060040161369b565b90610f8860018060a01b036001541633146138d2565b825b828110610f95578380f35b6001906001600160a01b03610fae6107ed83878761391d565b168552601f60205260408520805460ff19168317905501610f8a565b503461039c57602036600319011261039c57600435600381101561102e57600e016040519181548084526020840192825260208220915b81811061101857610ebb85610eaf8187038261371c565b8254845260209093019260019283019201611001565b634e487b7160e01b82526032600452602482fd5b503461039c57602036600319011261039c5761105c6136cb565b61107160018060a01b036001541633146138d2565b6016805460ff60b01b191691151560b01b60ff60b01b1691909117905580f35b503461039c57602036600319011261039c576110ab6136da565b6110c060018060a01b036001541633146138d2565b6001600160a01b0316801561115157602280546001600160a01b0319168217905560065460405163095ea7b360e01b815260048101929092525f1960248301526020908290604490829086906001600160a01b03165af18015610d5a57611125575080f35b6111469060203d60201161114a575b61113e818361371c565b810190613be7565b5080f35b503d611134565b60405162461bcd60e51b815260206004820152603760248201527f7374616b696e67206d616e616765722063616e6e6f7420626520696e6174696160448201527f6c697a65642077697468207a65726f20616464726573730000000000000000006064820152608490fd5b503461039c57602036600319011261039c5760206111db600435613d81565b604051908152f35b503461039c57602036600319011261039c576004356001600160401b03811161084c573660238201121561084c5760405190606082018281106001600160401b0382111761133857604052606481018236821161058c5782600401905b82821061130957858561125e60018060a01b036001541633146138d2565b600e9082905b60038210611270578380f35b80518051906001600160401b0382116112f557600160401b82116112f55760209085548387558084106112da575b500184865260208620865b8381106112c6575050505060016020819201930191019091611264565b6001906020845194019381840155016112a9565b6112ef90875f5284845f2091820191016139d4565b8761129e565b634e487b7160e01b86526041600452602486fd5b81356001600160401b03811161059b5760209161132d839260043691890101613768565b815201910190611240565b634e487b7160e01b84526041600452602484fd5b503461039c578060031936011261039c576020600854604051908152f35b503461039c5761137936613706565b9061138f60018060a01b036001541633146138d2565b600955600a5580f35b503461039c578060031936011261039c576020601754604051908152f35b503461039c578060031936011261039c5760206111db613ce1565b503461039c578060031936011261039c576001546040516001600160a01b039091168152602090f35b503461039c57608036600319011261039c576024356114176136f0565b6064356001600160a01b03811693919084900361084c5761144360018060a01b036001541633146138d2565b6001600160a01b03169283156115d05760055461159757600435600555600680546001600160a01b031916851790556016805460ff60a81b1916600160a81b17905580611535575b506040516323b872dd60e01b81523360048201523060248201526044810183905260208160648185885af1918215611529576040927fdc9670dbabdd488b372eb16ebe49a39b3124a12cdffdcefbc89834a408bf8ff894926114f3929161150a575b50613bff565b8151908152426020820152a2602060405160018152f35b611523915060203d60201161114a5761113e818361371c565b5f6114ed565b604051903d90823e3d90fd5b602280546001600160a01b0319168217905560405163095ea7b360e01b815260048101919091525f19602482015260208160448185885af18015610d5a571561148b576115909060203d60201161114a5761113e818361371c565b505f61148b565b60405162461bcd60e51b815260206004820152601160248201527010db185a5b48185b1c9958591e481cd95d607a1b6044820152606490fd5b60405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606490fd5b503461039c57602036600319011261039c576004356001600160401b03811161084c5761163b90369060040161369b565b9061165160018060a01b036001541633146138d2565b825b82811061165e578380f35b6001906001600160a01b036116776107ed83878761391d565b168552601f60205260408520805460ff1916905501611653565b503461039c578060031936011261039c576001546116b96001600160a01b03821633146138d2565b6116c960ff8260a01c1615613ab3565b60ff60a01b1916600160a01b176001556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602090a180f35b50608036600319011261039c5761171d6136da565b906024359161172a6136f0565b926064359081151582036108485760035442101580611b04575b61174d90613a25565b611758811515613a71565b61176a60ff60015460a01c1615613ab3565b611778600285541415613c43565b60028455338452602160205260ff60408520541615611ac05761179a81613d81565b6117a961040860075483613957565b916117b683341015613c8f565b6117c08334613aff565b936117cd82600254613af2565b80600255600a548381611aad575b5050600a5480821115611aa657505b6009546117f6816137f8565b90549060031b1c82118015611a8d575b6119d9575b50501561195c5760ff60165460b01c16611936575b60018060a01b036022541661183760075483613957565b813b15611932576040516348e30cb360e11b81526001600160a01b038816600482015260248101919091529087908290604490829084905af180156119275761190e575b509161054c6001979287856118956118e397600d54613af2565b600d556040517f6f225532a9c33b023b8e48247ad8df9d98f132ae17c769b97ff22d2b278fa73a8c8060a01b038b16918061054042888b846040919493926060820195825260208201520152565b806118f7575b505055602060405160018152f35b61190791848060a01b031661420b565b5f806118e9565b61191987809261371c565b611923575f61187b565b8580fd5b6040513d89823e3d90fd5b8780fd5b6001600160a01b03851686526020805260408620546119579060ff16613b0c565b611820565b9161054c60019792876118e39561197560075482613957565b8b8060a01b038a1690818452601b60205261199560408520918254613af2565b90557f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d366040518061063142888b846040919493926060820195825260208201520152565b836119e382613824565b90549060031b1c421015611a77575b505060ff60165460a01c16611a6a575b6009549083611a10836137f8565b90549060031b1c82115f14611a5757505050611a2b876139fe565b60095460018101809111611a43576009555f8061180b565b634e487b7160e01b88526011600452602488fd5b6106d66106db926106ca611a2b956137f8565b611a72613f81565b611a02565b6106f9611a83926137f8565b600a555f836119f2565b50611a9781613824565b90549060031b1c421015611806565b90506117ea565b611ab691613af2565b600a555f836117db565b606460405162461bcd60e51b815260206004820152602060248201527f55736572206e6f742077686974656c697374656420666f7220746869732074786044820152fd5b50600454421115611744565b503461039c578060031936011261039c576020600d54604051908152f35b503461039c57602036600319011261039c576004359060145482101561039c576020611b5983613854565b905460405160039290921b1c6001600160a01b03168152f35b503461039c57604036600319011261039c57611b8c6136da565b6024359060018060a01b036016541633148015611c9a575b611bad90613988565b6001600160a01b03168015611c3e5760468211611bd3578252601d602052604082205580f35b60405162461bcd60e51b815260206004820152603b60248201527f54686520636f6d6d697373696f6e2070657263656e746167652063616e6e6f7460448201527f2062652067726561746572207468616e2037302070657263656e7400000000006064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f54686520616464726573732073686f756c6420626520646966666572656e742060448201526d066726f6d206164647265737320360941b6064820152608490fd5b506001546001600160a01b03163314611ba4565b503461039c578060031936011261039c576020600354604051908152f35b503461039c57602036600319011261039c5760209060ff906040906001600160a01b03611cf76136da565b168152601e84522054166040519015158152f35b503461039c578060031936011261039c57611d3160018060a01b036001541633146138d2565b600180546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461039c57602036600319011261039c57611d8f6136da565b611da460018060a01b036001541633146138d2565b60018060a01b03166bffffffffffffffffffffffff60a01b601654161760165580f35b503461039c578060031936011261039c576016546001600160a01b031633148015611f04575b611df690613988565b600a54601154600160401b811015611ef05790611e1e826001611e3694016011556011613884565b90919082549060031b91821b915f19901b1916179055565b60ff60165460a01c16611ee3575b600a54600954611e53816137f8565b90549060031b1c8210611e8b575b50506009545f198114611e775760010160095580f35b634e487b7160e01b82526011600452602482fd5b80611ece575050611eb26106db611ea36009546137f8565b90546002549160031b1c613aff565b611ebd6009546137f8565b90549060031b1c600a555f80611e61565b611ede916106ca6106db926137f8565b611eb2565b611eeb613f81565b611e44565b634e487b7160e01b83526041600452602483fd5b506001546001600160a01b03163314611ded565b503461039c57602036600319011261039c57602064e8d4a51000611f3d600435613d81565b04604051908152f35b503461039c578060031936011261039c576020600254604051908152f35b503461039c57602036600319011261039c576020906040906001600160a01b03611f8c6136da565b168152601d83522054604051908152f35b503461039c57602036600319011261039c5760209060ff906040906001600160a01b03611fc86136da565b168152602184522054166040519015158152f35b503461039c57604036600319011261039c576004356001600160401b03811161084c573660238201121561084c57806004013561201881613751565b91612026604051938461371c565b8183526024602084019260051b8201019036821161058c57602401915b8183106122c4575050506024356001600160401b0381116122c05761206c903690600401613768565b61208160018060a01b036001541633146138d2565b815181510361228757601454836014558061224f575b506013548360135580612217575b508291825b81518410156121c6576120bd84846139ea565b5115612177576120d8906120d185856139ea565b5190613af2565b926001600160a01b036120eb82846139ea565b5116601454600160401b8110156121635780600161210c9201601455613854565b81546001600160a01b0360039290921b91821b191692901b91909117905561213481846139ea565b51601354600160401b8110156121635760019291611e1e828561215c94016013556013613884565b01926120aa565b634e487b7160e01b87526041600452602487fd5b60405162461bcd60e51b815260206004820152602160248201527f50657263656e74616765206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608490fd5b60648591036121d25780f35b60405162461bcd60e51b815260206004820152601f60248201527f546f74616c2070657263656e74616765206d75737420657175616c20313030006044820152606490fd5b60138452612249907f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090908101906139d4565b5f6120a5565b60148452612281907fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec908101906139d4565b5f612097565b60405162461bcd60e51b81526020600482015260116024820152704d69736d6174636865642061727261797360781b6044820152606490fd5b8280fd5b82356001600160a01b03811681036122e457815260209283019201612043565b5f80fd5b503461039c578060031936011261039c57602060ff60015460a01c166040519015158152f35b503461039c578060031936011261039c576020600954604051908152f35b503461039c57602036600319011261039c576004356001600160401b03811161084c5761235d90369060040161369b565b9061237360018060a01b036001541633146138d2565b825b828110612380578380f35b6001906001600160a01b036123996107ed83878761391d565b1685526020805260408520805460ff1916905501612375565b503461039c578060031936011261039c57602060ff60165460a81c166040519015158152f35b503461039c578060031936011261039c576123fb60ff60015460a01c1615613ab3565b600654612412906001600160a01b03161515613b58565b338152601f60205261242b60ff60408320541615613b9b565b60ff60165460a81c166125d8575b600554421061259357338152601e60205260ff60408220541661255c57338152601e60205260408120600160ff19825416179055338152601b602052604081205480156125245733808352601b60209081526040808520859055600654905163a9059cbb60e01b81526004810193909352602483018490528290604490829087906001600160a01b03165af1908115612519576124dc92939161150a5750613bff565b6040519081524260208201527f9923b4306c6c030f2bdfbf156517d5983b87e15b96176da122cd4f2effa4ba7b60403392a2602060405160018152f35b6040513d85823e3d90fd5b60405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601960248201527f436c61696d20686173206e6f74207374617274656420796574000000000000006044820152606490fd5b3381526020805260ff6040822054166124395760405162461bcd60e51b815260206004820152601e60248201527f55736572206e6f742077686974656c697374656420666f7220636c61696d00006044820152606490fd5b50346122e45761263f366137c5565b909160035442101580612dd8575b61265690613a25565b612661811515613a71565b61267360ff60015460a01c1615613ab3565b61267c81613d81565b9061268981600254613af2565b928360025564e8d4a51000830493600a548381612dc5575b5050600a5480821115612dbe57505b6009546126bc816137f8565b90549060031b1c82118015612da5575b612cf1575b505015612c775760ff60165460b01c16612c5b575b60018060a01b03602254166126fd60075483613957565b90803b156122e4576040516348e30cb360e11b815233600482015260248101929092525f908290604490829084905af18015612c5057612c36575b50908161274a61279d93600d54613af2565b600d5560018060a01b0360195416906040517f6f225532a9c33b023b8e48247ad8df9d98f132ae17c769b97ff22d2b278fa73a33918061054042888b846040919493926060820195825260208201520152565b600b55601954604051636eb1769f60e11b815233600482015230602482015290602090829060449082906001600160a01b03165afa908115612c2b578491612bf9575b508111612baa578290601454155f14612a2a5760155482919061280d906001600160a01b03161515614053565b6001600160a01b038416806128ef575b50612829929350613aff565b6019546015546040516323b872dd60e01b602082019081523360248301526001600160a01b039283166044830152606482019490945291169190839061287c81608481015b03601f19810183528261371c565b51925af1612888613fd2565b501561289a575b602060405160018152f35b60405162461bcd60e51b815260206004820152602760248201527f546f6b656e207061796d656e7420666f72207061796d656e742077616c6c65746044820152660819985a5b195960ca1b6064820152608490fd5b92839052601d60205260408520549092915015612a1657808452601d60205283806064612920604083205486613957565b04945b6019546040516323b872dd60e01b602082019081523360248301526001600160a01b0393841660448301526064820189905291909216918390612969816084810161286e565b51925af1612975613fd2565b50156129c7578352601c60205260408320805490600182018092116129b3579184939161282993556129a982601754613af2565b601755839261281d565b634e487b7160e01b85526011600452602485fd5b60405162461bcd60e51b815260206004820152602160248201527f546f6b656e207061796d656e7420666f7220726566657272616c206661696c656044820152601960fa1b6064820152608490fd5b83806064612a2385613941565b0494612923565b9150508180925b601454841015612aea57612ae26001916064612a5c612a4f8861383c565b90549060031b1c87613957565b0490612add8580868060a01b0360195416612a768b613854565b90546040516323b872dd60e01b602082019081523360248301526001600160a01b0360039490941b9290921c60a08c901b8c90031692909216604483015260648201889052908390612acb816084810161286e565b51925af1612ad7613fd2565b50614010565b613af2565b930192612a31565b925090612af78382613aff565b612b04575b50505061288f565b6019546014546001600160a01b0390911693905f198101908111612b9657918361286e612acb612b54612b8e9895612b3c8598613854565b905460039190911b1c6001600160a01b031695613aff565b6040516323b872dd60e01b602082019081523360248301526001600160a01b03909616604482015260648101919091529182906084820190565b5f8080612afc565b634e487b7160e01b84526011600452602484fd5b60405162461bcd60e51b815260206004820152602160248201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e636044820152606560f81b6064820152608490fd5b90506020813d602011612c23575b81612c146020938361371c565b8101031261084857515f6127e0565b3d9150612c07565b6040513d86823e3d90fd5b61279d929195505f612c479161371c565b5f949091612738565b6040513d5f823e3d90fd5b335f5260208052612c7260ff60405f205416613b0c565b6126e6565b9061279d91612c8860075482613957565b335f52601b602052612c9f60405f20918254613af2565b905560018060a01b0360195416906040517f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d3633918061063142888b846040919493926060820195825260208201520152565b83612cfb82613824565b90549060031b1c421015612d8f575b505060ff60165460a01c16612d82575b6009549083612d28836137f8565b90549060031b1c82115f14612d6f57505050612d435f6139fe565b60095460018101809111612d5b576009555f806126d1565b634e487b7160e01b5f52601160045260245ffd5b6106d66106db926106ca612d43956137f8565b612d8a613f81565b612d1a565b6106f9612d9b926137f8565b600a555f83612d0a565b50612daf81613824565b90549060031b1c4210156126cc565b90506126b0565b612dce91613af2565b600a555f836126a1565b5060045442111561264d565b346122e4575f3660031901126122e4576020600c54604051908152f35b346122e4575f3660031901126122e457600154612e286001600160a01b03821633146138d2565b60ff8160a01c1615612e6c5760ff60a01b19166001556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602090a1005b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b346122e45760203660031901126122e4576001600160a01b03612ec96136da565b165f5260208052602060ff60405f2054166040519015158152f35b346122e4575f3660031901126122e4576022546040516001600160a01b039091168152602090f35b346122e4575f3660031901126122e4576020600754604051908152f35b346122e4575f3660031901126122e4576020600454604051908152f35b346122e45760203660031901126122e4576004356001600160401b0381116122e457612f76903690600401613768565b6016546001600160a01b03163314801561304f575b612f9490613988565b80511561300a576012545f60125580612fd2575b505f5b8151811015612fd05780612fca612fc4600193856139ea565b516139fe565b01612fab565b005b60125f52613004907fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444908101906139d4565b81612fa8565b60405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f742075706461746520696e76616c69642076616c756573000000006044820152606490fd5b506001546001600160a01b03163314612f8b565b346122e45760203660031901126122e45760206111db610408613087600435613d81565b60075490613957565b346122e45760203660031901126122e4576004356130b960018060a01b036001541633146138d2565b8015613110577f76f9e5e1f6af6a9f180708b77a5c99210fbf19b91f1f194f3918c262b8edf77c90600854908060085561310b6040519283924291846040919493926060820195825260208201520152565b0390a1005b60405162461bcd60e51b815260206004820152601c60248201527f5a65726f206d617820746f6b656e7320746f206275792076616c7565000000006044820152606490fd5b346122e45760203660031901126122e45761317b60018060a01b036001541633146138d2565b600435600c55005b346122e4575f3660031901126122e457602060ff60165460a01c166040519015158152f35b346122e45760203660031901126122e4576131c16136cb565b6131d660018060a01b036001541633146138d2565b6016805460ff60a81b191691151560a81b60ff60a81b16919091179055005b346122e45761320336613706565b9061321960018060a01b036001541633146138d2565b8015801580916133e2575b156133a8576132ce575b508061323657005b600354811115613297577fddd2ed237e6993c9380182683f2c8bec486aaaa429528852cd74dbdb96cea0b2613292600454836004556040519182916211539160ea1b954291846040919493926060820195825260208201520152565b0390a2005b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420656e6454696d6560881b6044820152606490fd5b6003548042101561336c578142101561333357600382905560408051918252602082019290925242918101919091526414d510549560da1b907fddd2ed237e6993c9380182683f2c8bec486aaaa429528852cd74dbdb96cea0b290606090a28161322e565b60405162461bcd60e51b815260206004820152601160248201527014d85b19481d1a5b59481a5b881c185cdd607a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601460248201527314d85b1948185b1c9958591e481cdd185c9d195960621b6044820152606490fd5b60405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d657465727360701b6044820152606490fd5b50821515613224565b346122e45760203660031901126122e4576001600160a01b0361340c6136da565b165f52601b602052602060405f2054604051908152f35b346122e45760203660031901126122e4576001600160a01b036134446136da565b165f52601c602052602060405f2054604051908152f35b346122e45760203660031901126122e4576134746136cb565b61348960018060a01b036001541633146138d2565b6016805460ff60a01b191691151560a01b60ff60a01b16919091179055005b346122e45760203660031901126122e4576004356134d160018060a01b036001541633146138d2565b60055480156135b55760045482111561357d574282111561354257817f5f3a900c85949962b4cc192dd3714dae64071dc2e907049ec720b023270905a4926005556135346040519283924291846040919493926060820195825260208201520152565b0390a1602060405160018152f35b60405162461bcd60e51b815260206004820152601360248201527210db185a5b481cdd185c9d081a5b881c185cdd606a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f53616c6520696e2070726f677265737360801b6044820152606490fd5b60405162461bcd60e51b815260206004820152601a60248201527f496e697469616c20636c61696d2064617461206e6f74207365740000000000006044820152606490fd5b346122e4575f3660031901126122e457602060405160058152f35b346122e45760203660031901126122e4576004356001600160401b0381116122e45761364590369060040161369b565b9061365b60018060a01b036001541633146138d2565b5f5b82811061366657005b6001906001600160a01b0361367f6107ed83878761391d565b165f52602160205260405f208260ff198254161790550161365d565b9181601f840112156122e4578235916001600160401b0383116122e4576020808501948460051b0101116122e457565b6004359081151582036122e457565b600435906001600160a01b03821682036122e457565b604435906001600160a01b03821682036122e457565b60409060031901126122e4576004359060243590565b90601f801991011681019081106001600160401b0382111761373d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161373d5760051b60200190565b9080601f830112156122e457813561377f81613751565b9261378d604051948561371c565b81845260208085019260051b8201019283116122e457602001905b8282106137b55750505090565b81358152602091820191016137a8565b60609060031901126122e457600435906024356001600160a01b03811681036122e4579060443580151581036122e45790565b600e5481101561381057600e5f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b6010548110156138105760105f5260205f2001905f90565b6013548110156138105760135f5260205f2001905f90565b6014548110156138105760145f5260205f2001905f90565b600f5481101561381057600f5f5260205f2001905f90565b8054821015613810575f5260205f2001905f90565b60206040818301928281528451809452019201905f5b8181106138bc5750505090565b82518452602093840193909201916001016138af565b156138d957565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b91908110156138105760051b0190565b356001600160a01b03811681036122e45790565b90600582029180830460051490151715612d5b57565b81810292918115918404141715612d5b57565b8115613974570490565b634e487b7160e01b5f52601260045260245ffd5b1561398f57565b60405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206e6f742061646d696e206f72206f776e6572000000000000006044820152606490fd5b8181106139df575050565b5f81556001016139d4565b80518210156138105760209160051b010190565b60125490600160401b82101561373d57611e1e826001613a2394016012556012613884565b565b15613a2c57565b60405162461bcd60e51b815260206004820152601760248201527f496e76616c69642074696d6520666f7220627579696e670000000000000000006044820152606490fd5b15613a7857565b60405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081cd85b1948185b5bdd5b9d606a1b6044820152606490fd5b15613aba57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b91908201809211612d5b57565b91908203918211612d5b57565b15613b1357565b60405162461bcd60e51b815260206004820152601e60248201527f55736572206e6f742077686974656c697374656420666f72207374616b6500006044820152606490fd5b15613b5f57565b60405162461bcd60e51b815260206004820152601460248201527314d85b19481d1bdad95b881b9bdd08185919195960621b6044820152606490fd5b15613ba257565b60405162461bcd60e51b815260206004820152601b60248201527f54686973204164647265737320697320426c61636b6c697374656400000000006044820152606490fd5b908160209103126122e4575180151581036122e45790565b15613c0657565b60405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606490fd5b15613c4a57565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b15613c9657565b60405162461bcd60e51b815260206004820152600c60248201526b13195cdcc81c185e5b595b9d60a21b6044820152606490fd5b519069ffffffffffffffffffff821682036122e457565b601a54604051633fabe5a360e21b81529060a090829060049082906001600160a01b03165afa908115612c50575f91613d34575b506402540be4008102908082056402540be4001490151715612d5b5790565b905060a0813d60a011613d79575b81613d4f60a0938361371c565b810103126122e457613d6081613cca565b50613d72608060208301519201613cca565b505f613d15565b3d9150613d42565b600a5480613f7b5750600254905b6008548111613f3757613da28282613af2565b9160095492613db0846137f8565b90549060031b1c108015613f1e575b15613f1157600e545f198101908111612d5b57831015613edd57613de283613824565b905460039190911b1c4210613e8c5750613dff816106f9846137f8565b60018301809311612d5b57613e13836137f8565b90549060031b1c10613e3b57613e2b613e389261386c565b90549060031b1c90613957565b90565b60405162461bcd60e51b815260206004820152602360248201527f43616e74205075726368617365204d6f726520696e20696e646976696475616c604482015262040e8f60eb1b6064820152608490fd5b613e9c613ebb916106ca856137f8565b613eb5613ea88561386c565b90549060031b1c82613957565b92613aff565b9160018101809111612d5b57613e3892613e2b613ed79261386c565b90613af2565b60405162461bcd60e51b815260206004820152600c60248201526b57726f6e6720706172616d7360a01b6044820152606490fd5b50613e2b613e389261386c565b50613f2883613824565b90549060031b1c421015613dbf565b606460405162461bcd60e51b815260206004820152602060248201527f416d6f756e742065786365656473206d617820746f6b656e7320746f206275796044820152fd5b90613d8f565b5f5b60105490613f946009548093613aff565b811015613fce57613fc8600192611e1e613fc384613fbd613fb7600c5483613957565b42613af2565b93613af2565b613824565b01613f83565b5050565b3d1561400b573d906001600160401b03821161373d5760405191614000601f8201601f19166020018461371c565b82523d5f602084013e565b606090565b1561401757565b60405162461bcd60e51b8152602060048201526014602482015273151bdad95b881c185e5b595b9d0819985a5b195960621b6044820152606490fd5b1561405a57565b60405162461bcd60e51b815260206004820152601660248201527514185e5b595b9d081dd85b1b195d081b9bdd081cd95d60521b6044820152606490fd5b90601454155f14614165575f906001600160a01b0316806140de575b506140c290613a2392613aff565b6015546001600160a01b03166140d9811515614053565b61420b565b5f818152601d60205260409020549091501561415357805f52601d602052606461410c60405f205484613957565b04905b614119828261420b565b5f52601c60205260405f209081549260018401809411612d5b57613a23936140c2935561414882601854613af2565b6018559250906140b4565b606461415e83613941565b049061410f565b505f90815b6014548310156141bf576141b760019160646141956141888761383c565b90549060031b1c86613957565b0490612add826141a488613854565b878060a01b0391549060031b1c1661420b565b92019161416a565b91506141cb8282613aff565b6141d3575050565b6014545f198101908111612d5b57613a23926141f161420992613854565b905460039190911b1c6001600160a01b031692613aff565b905b81471061426f575f918291829182916001600160a01b03165af161422d613fd2565b501561423557565b60405162461bcd60e51b81526020600482015260126024820152711155120814185e5b595b9d0819985a5b195960721b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a4c6f772062616c616e636560a81b6044820152606490fdfea264697066735822122094c2f1c821214c4704010519eb275b07c49096c90bf3e6ebad46934b3019cb7a64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000676b8a47000000000000000000000000000000000000000000000000000000006873360b00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000012a05f2000000000000000000000000000aff53fcc043038038f3961d93d686ddf0224bdaf000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000ba43b740000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000aa87bee5380000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000006873360b
-----Decoded View---------------
Arg [0] : _oracle (address): 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
Arg [1] : _usdt (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [2] : _startTime (uint256): 1735100999
Arg [3] : _endTime (uint256): 1752380939
Arg [4] : _rounds (uint256[][3]): System.Collections.Generic.List`1[System.Numerics.BigInteger],System.Collections.Generic.List`1[System.Numerics.BigInteger],System.Collections.Generic.List`1[System.Numerics.BigInteger]
Arg [5] : _maxTokensToBuy (uint256): 80000000000
Arg [6] : _paymentWallet (address): 0xAFf53FCc043038038F3961d93d686DDf0224bdAf
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Arg [1] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [2] : 00000000000000000000000000000000000000000000000000000000676b8a47
Arg [3] : 000000000000000000000000000000000000000000000000000000006873360b
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [5] : 00000000000000000000000000000000000000000000000000000012a05f2000
Arg [6] : 000000000000000000000000aff53fcc043038038f3961d93d686ddf0224bdaf
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [8] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [9] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [11] : 000000000000000000000000000000000000000000000000000000ba43b74000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [13] : 000000000000000000000000000000000000000000000000000aa87bee538000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [15] : 000000000000000000000000000000000000000000000000000000006873360b
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.