Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Source Code
Overview
Max Total Supply
1,000,000,000 MRT
Holders
6
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
MeanaRaptor
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
byzantium EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 <0.9.0;
import "./lib/IRouter02.sol";
import "./lib/IERC20.sol";
import "./lib/IFactoryV2.sol";
import "./lib/IV2Pair.sol";
import "./lib/timeAndDate.sol";
import "./Staking.sol";
contract MeanaRaptor is IERC20 {
uint256 public constant maxBuyTaxes = 2500;
bool inSwap;
uint256 public constant maxSellTaxes = 2500;
uint256 public constant maxTransferTaxes = 2500;
uint256 constant taxDivisor = 10000;
uint256 internal _tSupply = 1000000000000000000000000000;
address private _owner;
uint256 private timeSinceLastPairCreated = 0;
uint public sellLimitADay = 10000000000000000000000;
mapping(address => uint256) internal _tokenOwned;
mapping(address => bool) allLiquidityPoolPairs;
mapping(address => mapping(address => uint256)) internal _allowances;
mapping(address => bool) internal _isExcludedFromFees;
mapping(address => bool) internal _isExcludedFromLimits;
mapping(address => bool) internal _liquidityHolders;
Fees public _taxRates =
Fees({buyFee: 500, sellFee: 500, transferFee: 0});
// Fee public feeContract;
StakingContract public staking;
uint public projectFeePercentage;
address public projectFeeWalet;
uint256 internal lastSwap;
uint256 internal _maxTxAmount = (_tSupply * 100) / 10000;
uint256 internal _maxWalletSize = (_tSupply * 200) / 10000;
bool public contractSwapEnabled = false;
uint256 public contractSwapTimer = 0 seconds;
uint256 public swapThreshold;
bool public tradingEnabled = false;
bool public _hasLiquidityBeenAdded = false;
IRouter02 public dexRouter;
address public lpPair;
address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
bool public liquidityPoolInitialized = false;
struct Fees {
uint buyFee;
uint sellFee;
uint transferFee;
}
struct Sold {
uint amount;
uint day;
uint month;
uint year;
}
mapping(address => Sold) public sold;
event OwnershipTransferred(
address indexed pastOwner,
address indexed newOwner
);
event ContractSwapEnabledUpdated(bool enabled);
event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
event TaxUpdated(uint256 buy, uint256 sell, uint256 transfer);
event MaxTransactionAmountUpdated(uint256 amount);
event SwapSettingsUpdated(uint256 threshold, uint256 time);
event paircreated(address pair);
modifier swapLock {
inSwap = true;
_;
inSwap = false;
}
modifier onlyOwner() {
require(_owner == msg.sender, "Caller must be the owner");
_;
}
string internal _name = "Meana Raptor";
string internal _symbol = "MRT";
uint8 internal _decimals = 18;
constructor(address _stakingAddress) payable {
// Set the owner.
_owner = address(msg.sender);
projectFeePercentage = 60;
staking = StakingContract(_stakingAddress);
projectFeeWalet = 0xcEc1709fe5D7f48Fec3c229a8FC9473Ef08014d6;
_tokenOwned[msg.sender] = _tSupply;
emit Transfer(address(0), msg.sender, _tSupply);
// Multichain Token - Will need to rephrase
dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
_isExcludedFromFees[_owner] = true;
_isExcludedFromFees[address(this)] = true;
_isExcludedFromFees[DEAD] = true;
_liquidityHolders[_owner] = true;
}
function balanceOf(address account) public view override(IERC20) returns (uint256) {
return _tokenOwned[account];
}
function confirmLP(
) public onlyOwner{
require(!liquidityPoolInitialized, 'LP already initited');
lpPair = IFactoryV2(dexRouter.factory()).getPair(address(this), dexRouter.WETH());
setLiquidityPoolPair(lpPair, true);
liquidityPoolInitialized = true;
_checkLiquidityAdd(msg.sender);
allowTrading();
}
function setPairAddress (address pair
) public onlyOwner{
require(pair!=address(0),'Invalid address');
setLiquidityPoolPair(pair, true);
}
function preInitializeTransfer(
address to,
uint256 amount
) public onlyOwner {
require(!liquidityPoolInitialized,'Liquidity pool must not be initialized');
amount = amount * 10 ** _decimals;
_completeTransfer(msg.sender, to, amount, false, false, false, true);
}
// Ownable removed as a lib and added here to allow for custom transfers and renouncements.
// This allows for removal of ownership privileges from the owner once renounced or transferred.
function transferOwner(address newOwner) external onlyOwner(){
require(
newOwner != address(0),
"Call renounceOwnership to transfer owner to the zero address"
);
require(
newOwner != DEAD,
"Call renounceOwnership to transfer owner to the zero address"
);
setExcludedFromFees(_owner, false);
setExcludedFromFees(newOwner, true);
if (balanceOf(_owner) > 0) {
_transfer(_owner, newOwner, balanceOf(_owner));
}
_owner = newOwner;
emit OwnershipTransferred(_owner, newOwner);
}
function renounceOwnership() public onlyOwner {
setExcludedFromFees(_owner, false);
_owner = address(0);
emit OwnershipTransferred(_owner, address(0));
}
//===============================================================================================================
function totalSupply() external view override returns (uint256) {
if (_tSupply == 0) {
revert();
}
return _tSupply;
}
function decimals() external view override returns (uint8) {
return _decimals;
}
function symbol() external view override returns (string memory) {
return _symbol;
}
function name() external view override returns (string memory) {
return _name;
}
function getOwner() external view returns (address) {
return _owner;
}
function allowance(
address holder,
address spender
) external view override returns (uint256) {
return _allowances[holder][spender];
}
function transfer(
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function approve(
address spender,
uint256 amount
) public override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function approveContractContingency() public onlyOwner returns (bool) {
_approve(address(this), address(dexRouter), type(uint256).max);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) external override returns (bool) {
if (_allowances[sender][msg.sender] != type(uint256).max) {
_allowances[sender][msg.sender] -= amount;
}
return _transfer(sender, recipient, amount);
}
function setNewRouter(address newRouter) public onlyOwner {
require(newRouter!=address(0),'Invalid address');
IRouter02 _newRouter = IRouter02(newRouter);
address get_pair = IFactoryV2(_newRouter.factory()).getPair(
address(this),
_newRouter.WETH()
);
if (get_pair == address(0)) {
lpPair = IFactoryV2(_newRouter.factory()).createPair(
address(this),
_newRouter.WETH()
);
} else {
lpPair = get_pair;
}
dexRouter = _newRouter;
_approve(address(this), address(dexRouter), type(uint256).max);
}
function setLiquidityPoolPair(
address pair,
bool enabled
) public onlyOwner {
require(pair!=address(0),'Invalid address');
if (!enabled) {
allLiquidityPoolPairs[pair] = false;
} else {
if (timeSinceLastPairCreated != 0) {
require(
block.timestamp - timeSinceLastPairCreated > 3 days,
"3 Day cooldown.!"
);
}
allLiquidityPoolPairs[pair] = true;
timeSinceLastPairCreated = block.timestamp;
}
}
function setTaxes(
uint buyFee,
uint sellFee,
uint transferFee
) external onlyOwner {
require(
buyFee <= maxBuyTaxes &&
sellFee <= maxSellTaxes &&
transferFee <= maxTransferTaxes,
"Cannot exceed maximum"
);
_taxRates.buyFee = buyFee;
_taxRates.sellFee = sellFee;
_taxRates.transferFee = transferFee;
emit TaxUpdated(buyFee, sellFee, transferFee);
}
function setMaxTxPercent(
uint256 percent,
uint256 divisor
) external onlyOwner {
require(
(_tSupply * percent) / divisor >= (_tSupply / 1000),
"Max Transaction amount must be above 0.1% of total supply"
);
_maxTxAmount = (_tSupply * percent) / divisor;
emit MaxTransactionAmountUpdated(_maxTxAmount);
}
function setSwapSettings(
uint256 threshold,
uint256 thresholdDivisor,
uint256 time
) external onlyOwner {
require(threshold > 0,'Threshold has to be higher than 0');
require(thresholdDivisor%10 == 0 && thresholdDivisor > 0,'thresholdDivisor has to be higher than 0 and divisible by 10');
swapThreshold = (_tSupply * threshold) / thresholdDivisor;
contractSwapTimer = time;
emit SwapSettingsUpdated(swapThreshold, time);
}
function setContractSwapEnabled(bool enabled) external onlyOwner {
contractSwapEnabled = enabled;
emit ContractSwapEnabledUpdated(enabled);
}
function preInitializeTransferMultiple(
address[] memory accounts,
uint256[] memory amounts
) external onlyOwner {
require(accounts.length == amounts.length, "Accounts != Amounts");
for (uint8 i = 0; i < accounts.length; i++) {
require(balanceOf(msg.sender) >= amounts[i] * 10 ** _decimals,'Account have lower tokenb balance than needed');
preInitializeTransfer(accounts[i], amounts[i]);
}
}
function allowTrading() internal {
require(!tradingEnabled, "Trading already enabled!");
require(_hasLiquidityBeenAdded, "Liquidity must be added");
tradingEnabled = true;
swapThreshold = (_tSupply * 1) / 10000000;
}
function takeTax(
address from,
bool buy,
bool sell,
uint256 amount
) internal returns (uint256) {
uint256 currentFee;
if (buy) {
currentFee = _taxRates.buyFee;
} else if (sell) {
currentFee = _taxRates.sellFee;
} else {
currentFee = _taxRates.transferFee;
}
uint256 feeAmount = (amount * currentFee) / taxDivisor;
_tokenOwned[address(this)] += feeAmount;
emit Transfer(from, address(this), feeAmount);
return amount - feeAmount;
}
function setMaxWalletSize(
uint256 percent,
uint256 divisor
) external onlyOwner {
require(
(_tSupply * percent) / divisor >= (_tSupply / 1000),
"Max Wallet amount must be above 0.1% of total supply"
);
_maxWalletSize = (_tSupply * percent) / divisor;
}
function setExcludedFromLimits(
address account,
bool enabled
) external onlyOwner {
_isExcludedFromLimits[account] = enabled;
}
function sweepContingency() external onlyOwner {
payable(_owner).transfer(address(this).balance);
}
function contractSwap(uint256 contractTokenBalance) internal swapLock {
// _transfer(address(this),address(feeContract),contractTokenBalance);
uint projectFee = contractTokenBalance * projectFeePercentage/100;
uint stakingReward = contractTokenBalance-projectFee;
_transfer(address(this),address(_owner),projectFee);
_transfer(address(this),address(staking),stakingReward);
staking.entryCol(stakingReward);
}
function isExcludedFromLimits(address account) public view returns (bool) {
return _isExcludedFromLimits[account];
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
function setExcludedFromFees(
address account,
bool enabled
) public onlyOwner {
_isExcludedFromFees[account] = enabled;
}
function getMaxTransaction() public view returns (uint256) {
return _maxTxAmount / (10 ** _decimals);
}
function getMaxWallet() public view returns (uint256) {
return _maxWalletSize / (10 ** _decimals);
}
function _completeTransfer(
address from,
address to,
uint256 amount,
bool takeFee,
bool buy,
bool sell,
bool other
) internal returns (bool) {
_tokenOwned[from] -= amount;
uint256 amountReceived = (takeFee)
? takeTax(from, buy, sell, amount)
: amount;
_tokenOwned[to] += amountReceived;
emit Transfer(from, to, amountReceived);
return true;
}
function _hasLimits(address from, address to) internal view returns (bool) {
return
from != _owner &&
to != _owner &&
tx.origin != _owner &&
!_liquidityHolders[to] &&
!_liquidityHolders[from] &&
to != DEAD &&
to != address(0) &&
from != address(this);
}
function _transfer(
address from,
address to,
uint256 amount
) internal returns (bool) {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
bool buy = false;
bool sell = false;
bool other = false;
if (allLiquidityPoolPairs[from]) {
buy = true;
} else if (allLiquidityPoolPairs[to]) {
sell = true;
} else {
other = true;
}
if (_hasLimits(from, to)) {
if (buy || sell) {
if (!tradingEnabled) {
revert("Trading not yet enabled!");
}
if (
!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]
) {
require(
amount <= _maxTxAmount,
"Transfer amount exceeds the maxTransactionAmount"
);
}
}
if (to != address(dexRouter) && !sell) {
if (!_isExcludedFromLimits[to]) {
require(
balanceOf(to) + amount <= _maxWalletSize,
"Transfer amount exceeds the maxWalletSize."
);
}
}
}
bool takeFee = true;
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
if (sell) {
if (!inSwap && contractSwapEnabled) {
// if (lastSwap + contractSwapTimer < block.timestamp) {
uint256 contractTokenBalance = balanceOf(address(this));
if (contractTokenBalance >= swapThreshold) {
//TODO: check sale limit a day
(uint year , uint month,uint day) = DateTime.timestampToDate(block.timestamp);
if (sold[msg.sender].day==day && sold[msg.sender].month==month && sold[msg.sender].year==year) {
require(sold[msg.sender].amount+amount<=sellLimitADay,"exceeded sell limit for today");
sold[msg.sender].amount+=amount;
} else {
sold[msg.sender].amount=amount;
}
sold[msg.sender].day=day;
sold[msg.sender].month=month;
sold[msg.sender].year=year;
contractTokenBalance = swapThreshold;
contractSwap(contractTokenBalance);
}
// }
}
}
lastSwap = block.timestamp;
return _completeTransfer(from, to, amount, takeFee, buy, sell, other);
}
function distributeTax() public onlyOwner(){
if (lastSwap + contractSwapTimer < block.timestamp) {
uint256 contractTokenBalance = balanceOf(address(this));
if (contractTokenBalance >= swapThreshold) {
contractTokenBalance = swapThreshold;
contractSwap(contractTokenBalance);
lastSwap = block.timestamp;
}
}
}
function setStakingAddress(address _address) external onlyOwner{
require(isContract(_address), "Staking address must be a contract");
staking = StakingContract(_address);
}
// Setter function for project fee Percentage
function setprojectFeePercentage(uint _percentage) external onlyOwner{
require(_percentage <= 100, "Percentage total must be less than or equals to 100");
projectFeePercentage = _percentage;
}
// Setter function for swapFee
function setprojectFeeWalet(address _projectFeeWalet) external onlyOwner{
projectFeeWalet = _projectFeeWalet;
}
function setSellLimitADay(uint _sellLimitADay) external onlyOwner{
sellLimitADay = _sellLimitADay;
}
function _approve(
address sender,
address spender,
uint256 amount
) internal {
require(sender != address(0), "ERC20: Zero Address");
require(spender != address(0), "ERC20: Zero Address");
_allowances[sender][spender] = amount;
emit Approval(sender, spender, amount);
}
function _checkLiquidityAdd(address from) internal {
require(!_hasLiquidityBeenAdded, "Liquidity already added and marked");
_liquidityHolders[from] = true;
_hasLiquidityBeenAdded = true;
contractSwapEnabled = true;
emit ContractSwapEnabledUpdated(true);
}
function initializeLiqudityPool(uint256 amountTokens) public onlyOwner {
require(!liquidityPoolInitialized, "Already initialized");
require(address(this).balance > 0, "Contract must have ETH.");
require(
balanceOf(msg.sender) >= amountTokens * 10 ** 18,
"You do not have enough tokens."
);
lpPair = IFactoryV2(dexRouter.factory()).createPair(
dexRouter.WETH(),
address(this)
);
setLiquidityPoolPair(lpPair, true);
emit paircreated(lpPair);
allLiquidityPoolPairs[lpPair] = true;
_approve(_owner, address(dexRouter), type(uint256).max);
_approve(address(this), address(dexRouter), type(uint256).max);
liquidityPoolInitialized = true;
amountTokens *= 10 ** _decimals;
_completeTransfer(
msg.sender,
address(this),
amountTokens,
false,
false,
false,
true
);
dexRouter.addLiquidityETH{value: address(this).balance}(
address(this),
balanceOf(address(this)),
0, // slippage is unavoidable
0, // slippage is unavoidable
_owner,
block.timestamp
);
_checkLiquidityAdd(msg.sender);
allowTrading();
}
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
// Overflow check required: The rest of the code assumes that totalSupply never overflows
_tSupply += value;
} else {
uint256 fromBalance = _tokenOwned[from];
if (fromBalance < value) {
revert ("Insufficient balance");
}
unchecked {
// Overflow not possible: value <= fromBalance <= totalSupply.
_tokenOwned[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
// Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
_tSupply -= value;
}
} else {
unchecked {
// Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
_tokenOwned[to] += value;
}
}
emit Transfer(from, to, value);
}
function burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ("Invalid sender address");
}
_update(account, address(0), value);
}
function isContract(address _addr) public view returns (bool){
uint32 size;
assembly {
size := extcodesize(_addr)
}
return (size > 0);
}
receive() payable external {}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// ----------------------------------------------------------------------------
// DateTime Library v2.0
//
// A gas-efficient Solidity date and time library
//
// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary
//
// Tested date range 1970/01/01 to 2345/12/31
//
// Conventions:
// Unit | Range | Notes
// :-------- |:-------------:|:-----
// timestamp | >= 0 | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC
// year | 1970 ... 2345 |
// month | 1 ... 12 |
// day | 1 ... 31 |
// hour | 0 ... 23 |
// minute | 0 ... 59 |
// second | 0 ... 59 |
// dayOfWeek | 1 ... 7 | 1 = Monday, ..., 7 = Sunday
//
//
// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.
// ----------------------------------------------------------------------------
library DateTime {
uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;
uint256 constant SECONDS_PER_HOUR = 60 * 60;
uint256 constant SECONDS_PER_MINUTE = 60;
int256 constant OFFSET19700101 = 2440588;
uint256 constant DOW_MON = 1;
uint256 constant DOW_TUE = 2;
uint256 constant DOW_WED = 3;
uint256 constant DOW_THU = 4;
uint256 constant DOW_FRI = 5;
uint256 constant DOW_SAT = 6;
uint256 constant DOW_SUN = 7;
// ------------------------------------------------------------------------
// Calculate the number of days from 1970/01/01 to year/month/day using
// the date conversion algorithm from
// http://aa.usno.navy.mil/faq/docs/JD_Formula.php
// and subtracting the offset 2440588 so that 1970/01/01 is day 0
//
// days = day
// - 32075
// + 1461 * (year + 4800 + (month - 14) / 12) / 4
// + 367 * (month - 2 - (month - 14) / 12 * 12) / 12
// - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4
// - offset
// ------------------------------------------------------------------------
function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {
require(year >= 1970);
int256 _year = int256(year);
int256 _month = int256(month);
int256 _day = int256(day);
int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4
+ (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12
- (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;
_days = uint256(__days);
}
// ------------------------------------------------------------------------
// Calculate year/month/day from the number of days since 1970/01/01 using
// the date conversion algorithm from
// http://aa.usno.navy.mil/faq/docs/JD_Formula.php
// and adding the offset 2440588 so that 1970/01/01 is day 0
//
// int L = days + 68569 + offset
// int N = 4 * L / 146097
// L = L - (146097 * N + 3) / 4
// year = 4000 * (L + 1) / 1461001
// L = L - 1461 * year / 4 + 31
// month = 80 * L / 2447
// dd = L - 2447 * month / 80
// L = month / 11
// month = month + 2 - 12 * L
// year = 100 * (N - 49) + year + L
// ------------------------------------------------------------------------
function _daysToDate(uint256 _days) internal pure returns (uint256 year, uint256 month, uint256 day) {
unchecked {
int256 __days = int256(_days);
int256 L = __days + 68569 + OFFSET19700101;
int256 N = (4 * L) / 146097;
L = L - (146097 * N + 3) / 4;
int256 _year = (4000 * (L + 1)) / 1461001;
L = L - (1461 * _year) / 4 + 31;
int256 _month = (80 * L) / 2447;
int256 _day = L - (2447 * _month) / 80;
L = _month / 11;
_month = _month + 2 - 12 * L;
_year = 100 * (N - 49) + _year + L;
year = uint256(_year);
month = uint256(_month);
day = uint256(_day);
}
}
function timestampFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 timestamp) {
timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY;
}
function timestampFromDateTime(
uint256 year,
uint256 month,
uint256 day,
uint256 hour,
uint256 minute,
uint256 second
)
internal
pure
returns (uint256 timestamp)
{
timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR
+ minute * SECONDS_PER_MINUTE + second;
}
function timestampToDate(uint256 timestamp) internal pure returns (uint256 year, uint256 month, uint256 day) {
unchecked {
(year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
}
}
function timestampToDateTime(uint256 timestamp)
internal
pure
returns (uint256 year, uint256 month, uint256 day, uint256 hour, uint256 minute, uint256 second)
{
unchecked {
(year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
uint256 secs = timestamp % SECONDS_PER_DAY;
hour = secs / SECONDS_PER_HOUR;
secs = secs % SECONDS_PER_HOUR;
minute = secs / SECONDS_PER_MINUTE;
second = secs % SECONDS_PER_MINUTE;
}
}
function isValidDate(uint256 year, uint256 month, uint256 day) internal pure returns (bool valid) {
if (year >= 1970 && month > 0 && month <= 12) {
uint256 daysInMonth = _getDaysInMonth(year, month);
if (day > 0 && day <= daysInMonth) {
valid = true;
}
}
}
function isValidDateTime(uint256 year, uint256 month, uint256 day, uint256 hour, uint256 minute, uint256 second)
internal
pure
returns (bool valid)
{
if (isValidDate(year, month, day)) {
if (hour < 24 && minute < 60 && second < 60) {
valid = true;
}
}
}
function isLeapYear(uint256 timestamp) internal pure returns (bool leapYear) {
(uint256 year,,) = _daysToDate(timestamp / SECONDS_PER_DAY);
leapYear = _isLeapYear(year);
}
function _isLeapYear(uint256 year) internal pure returns (bool leapYear) {
leapYear = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
}
function isWeekDay(uint256 timestamp) internal pure returns (bool weekDay) {
weekDay = getDayOfWeek(timestamp) <= DOW_FRI;
}
function isWeekEnd(uint256 timestamp) internal pure returns (bool weekEnd) {
weekEnd = getDayOfWeek(timestamp) >= DOW_SAT;
}
function getDaysInMonth(uint256 timestamp) internal pure returns (uint256 daysInMonth) {
(uint256 year, uint256 month,) = _daysToDate(timestamp / SECONDS_PER_DAY);
daysInMonth = _getDaysInMonth(year, month);
}
function _getDaysInMonth(uint256 year, uint256 month) internal pure returns (uint256 daysInMonth) {
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
daysInMonth = 31;
} else if (month != 2) {
daysInMonth = 30;
} else {
daysInMonth = _isLeapYear(year) ? 29 : 28;
}
}
// 1 = Monday, 7 = Sunday
function getDayOfWeek(uint256 timestamp) internal pure returns (uint256 dayOfWeek) {
uint256 _days = timestamp / SECONDS_PER_DAY;
dayOfWeek = ((_days + 3) % 7) + 1;
}
function getYear(uint256 timestamp) internal pure returns (uint256 year) {
(year,,) = _daysToDate(timestamp / SECONDS_PER_DAY);
}
function getMonth(uint256 timestamp) internal pure returns (uint256 month) {
(, month,) = _daysToDate(timestamp / SECONDS_PER_DAY);
}
function getDay(uint256 timestamp) internal pure returns (uint256 day) {
(,, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
}
function getHour(uint256 timestamp) internal pure returns (uint256 hour) {
uint256 secs = timestamp % SECONDS_PER_DAY;
hour = secs / SECONDS_PER_HOUR;
}
function getMinute(uint256 timestamp) internal pure returns (uint256 minute) {
uint256 secs = timestamp % SECONDS_PER_HOUR;
minute = secs / SECONDS_PER_MINUTE;
}
function getSecond(uint256 timestamp) internal pure returns (uint256 second) {
second = timestamp % SECONDS_PER_MINUTE;
}
function addYears(uint256 timestamp, uint256 _years) internal pure returns (uint256 newTimestamp) {
(uint256 year, uint256 month, uint256 day) = _daysToDate(timestamp / SECONDS_PER_DAY);
year += _years;
uint256 daysInMonth = _getDaysInMonth(year, month);
if (day > daysInMonth) {
day = daysInMonth;
}
newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + (timestamp % SECONDS_PER_DAY);
require(newTimestamp >= timestamp);
}
function addMonths(uint256 timestamp, uint256 _months) internal pure returns (uint256 newTimestamp) {
(uint256 year, uint256 month, uint256 day) = _daysToDate(timestamp / SECONDS_PER_DAY);
month += _months;
year += (month - 1) / 12;
month = ((month - 1) % 12) + 1;
uint256 daysInMonth = _getDaysInMonth(year, month);
if (day > daysInMonth) {
day = daysInMonth;
}
newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + (timestamp % SECONDS_PER_DAY);
require(newTimestamp >= timestamp);
}
function addDays(uint256 timestamp, uint256 _days) internal pure returns (uint256 newTimestamp) {
newTimestamp = timestamp + _days * SECONDS_PER_DAY;
require(newTimestamp >= timestamp);
}
function addHours(uint256 timestamp, uint256 _hours) internal pure returns (uint256 newTimestamp) {
newTimestamp = timestamp + _hours * SECONDS_PER_HOUR;
require(newTimestamp >= timestamp);
}
function addMinutes(uint256 timestamp, uint256 _minutes) internal pure returns (uint256 newTimestamp) {
newTimestamp = timestamp + _minutes * SECONDS_PER_MINUTE;
require(newTimestamp >= timestamp);
}
function addSeconds(uint256 timestamp, uint256 _seconds) internal pure returns (uint256 newTimestamp) {
newTimestamp = timestamp + _seconds;
require(newTimestamp >= timestamp);
}
function subYears(uint256 timestamp, uint256 _years) internal pure returns (uint256 newTimestamp) {
(uint256 year, uint256 month, uint256 day) = _daysToDate(timestamp / SECONDS_PER_DAY);
year -= _years;
uint256 daysInMonth = _getDaysInMonth(year, month);
if (day > daysInMonth) {
day = daysInMonth;
}
newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + (timestamp % SECONDS_PER_DAY);
require(newTimestamp <= timestamp);
}
function subMonths(uint256 timestamp, uint256 _months) internal pure returns (uint256 newTimestamp) {
(uint256 year, uint256 month, uint256 day) = _daysToDate(timestamp / SECONDS_PER_DAY);
uint256 yearMonth = year * 12 + (month - 1) - _months;
year = yearMonth / 12;
month = (yearMonth % 12) + 1;
uint256 daysInMonth = _getDaysInMonth(year, month);
if (day > daysInMonth) {
day = daysInMonth;
}
newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + (timestamp % SECONDS_PER_DAY);
require(newTimestamp <= timestamp);
}
function subDays(uint256 timestamp, uint256 _days) internal pure returns (uint256 newTimestamp) {
newTimestamp = timestamp - _days * SECONDS_PER_DAY;
require(newTimestamp <= timestamp);
}
function subHours(uint256 timestamp, uint256 _hours) internal pure returns (uint256 newTimestamp) {
newTimestamp = timestamp - _hours * SECONDS_PER_HOUR;
require(newTimestamp <= timestamp);
}
function subMinutes(uint256 timestamp, uint256 _minutes) internal pure returns (uint256 newTimestamp) {
newTimestamp = timestamp - _minutes * SECONDS_PER_MINUTE;
require(newTimestamp <= timestamp);
}
function subSeconds(uint256 timestamp, uint256 _seconds) internal pure returns (uint256 newTimestamp) {
newTimestamp = timestamp - _seconds;
require(newTimestamp <= timestamp);
}
function diffYears(uint256 fromTimestamp, uint256 toTimestamp) internal pure returns (uint256 _years) {
require(fromTimestamp <= toTimestamp);
(uint256 fromYear,,) = _daysToDate(fromTimestamp / SECONDS_PER_DAY);
(uint256 toYear,,) = _daysToDate(toTimestamp / SECONDS_PER_DAY);
_years = toYear - fromYear;
}
function diffMonths(uint256 fromTimestamp, uint256 toTimestamp) internal pure returns (uint256 _months) {
require(fromTimestamp <= toTimestamp);
(uint256 fromYear, uint256 fromMonth,) = _daysToDate(fromTimestamp / SECONDS_PER_DAY);
(uint256 toYear, uint256 toMonth,) = _daysToDate(toTimestamp / SECONDS_PER_DAY);
_months = toYear * 12 + toMonth - fromYear * 12 - fromMonth;
}
function diffDays(uint256 fromTimestamp, uint256 toTimestamp) internal pure returns (uint256 _days) {
require(fromTimestamp <= toTimestamp);
_days = (toTimestamp - fromTimestamp) / SECONDS_PER_DAY;
}
function diffHours(uint256 fromTimestamp, uint256 toTimestamp) internal pure returns (uint256 _hours) {
require(fromTimestamp <= toTimestamp);
_hours = (toTimestamp - fromTimestamp) / SECONDS_PER_HOUR;
}
function diffMinutes(uint256 fromTimestamp, uint256 toTimestamp) internal pure returns (uint256 _minutes) {
require(fromTimestamp <= toTimestamp);
_minutes = (toTimestamp - fromTimestamp) / SECONDS_PER_MINUTE;
}
function diffSeconds(uint256 fromTimestamp, uint256 toTimestamp) internal pure returns (uint256 _seconds) {
require(fromTimestamp <= toTimestamp);
_seconds = toTimestamp - fromTimestamp;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)
pragma solidity >=0.7.0 <0.9.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 EIP-1153 (transient storage) is available on the chain you're deploying at,
* consider using {ReentrancyGuardTransient} instead.
*
* 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;
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
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() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be NOT_ENTERED
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// Any calls to nonReentrant after this point will fail
_status = ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == ENTERED;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.10;
import {Context} from "./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.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor() {
_transferOwnership(msg.sender);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling 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 {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_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
pragma solidity >=0.6.0 <0.9.0;
interface IV2Pair {
function sync() external;
function factory() external view returns (address);
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;
import "./IRouter01.sol";
interface IRouter02 is IRouter01 {
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;
interface IRouter01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
)
external
payable
returns (uint amountToken, uint amountETH, uint liquidity);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function getAmountsOut(
uint amountIn,
address[] calldata path
) external view returns (uint[] memory amounts);
function getAmountsIn(
uint amountOut,
address[] calldata path
) external view returns (uint[] memory amounts);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;
interface IFactoryV2 {
event PairCreated(
address indexed token0,
address indexed token1,
address lpPair,
uint
);
function getPair(
address tokenA,
address tokenB
) external view returns (address lpPair);
function createPair(
address tokenA,
address tokenB
) external returns (address lpPair);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
interface IERC20 {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.10;
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 <0.9.0;
import "./lib/Ownable.sol";
import "./lib/IERC20.sol";
import "./lib/ReentrancyGuard.sol";
contract StakingContract is Ownable , ReentrancyGuard {
enum Tier{One,Two,Three,Flexible}
struct Package{
uint price;
uint maturityRequirement;
uint rewardPoolPercent;
uint count;
}
mapping(Tier => Package) public packages;
struct Staking{
Tier tier;
uint id;
uint lastClaimed;
uint maturityTimestamp;
uint stakedAt;
bool isActive;
address wallet;
}
mapping(uint => Staking) public stakings;
mapping(address => uint[]) public holdings;
struct Collection{
uint t1;
uint t2;
uint t3;
uint tf;
}
mapping(uint =>Collection) internal collections;
IERC20 public token0;
address public feeAddress;
uint public stakingCounter = 0;
uint public collectionCounter = 0;
constructor() {
packages[Tier.One] = Package({price:20000 ether,maturityRequirement:90 days,rewardPoolPercent:15,count:0});
packages[Tier.Two] = Package({price:30000 ether,maturityRequirement:180 days,rewardPoolPercent:30,count:0});
packages[Tier.Three] = Package({price:45000 ether,maturityRequirement:365 days,rewardPoolPercent:50,count:0});
packages[Tier.Flexible] = Package({price:15000 ether,maturityRequirement:0,rewardPoolPercent:5,count:0});
}
event stakingId(uint);
function setRewardDestributionPercent(uint _t1, uint _t2, uint _t3, uint _tf) public onlyOwner(){
require(_t1 + _t2+ _t3 + _tf == 100, "total of percents should be 100" );
packages[Tier.One].rewardPoolPercent = _t1;
packages[Tier.Two].rewardPoolPercent = _t2;
packages[Tier.Three].rewardPoolPercent = _t3;
packages[Tier.Flexible].rewardPoolPercent = _tf;
}
function updatePackage(Tier _tier, uint _price, uint _maturityRequirement) public onlyOwner(){
packages[_tier].price = _price;
packages[_tier].maturityRequirement = _maturityRequirement;
}
function Stake(Tier _tier) public nonReentrant returns(uint _id) {
require(token0.allowance(msg.sender, address(this))>=packages[_tier].price,"Allowance must be greater than fee amount");
token0.transferFrom(msg.sender, address(this), packages[_tier].price);
stakingCounter++;
packages[_tier].count++;
stakings[stakingCounter] = Staking({tier:_tier, id:stakingCounter, lastClaimed:collectionCounter,maturityTimestamp: block.timestamp+packages[_tier].maturityRequirement,stakedAt: block.timestamp,isActive: true,wallet:msg.sender});
holdings[msg.sender].push(stakingCounter);
emit stakingId(stakingCounter);
return stakingCounter;
}
function calculateReward(uint _id) public view returns (uint reward){
uint rewardAmount;
for (uint256 i = stakings[_id].lastClaimed+1; i <= collectionCounter; i++) {
if (stakings[_id].tier==Tier.One) {
rewardAmount+=collections[i].t1;
} else if(stakings[_id].tier==Tier.Two){
rewardAmount+=collections[i].t2;
}else if(stakings[_id].tier==Tier.Three){
rewardAmount+=collections[i].t3;
}else{
rewardAmount+=collections[i].tf;
}
}
return rewardAmount;
}
function unStake(uint _id) public nonReentrant{
bool holds = false;
for (uint i=0; i < holdings[msg.sender].length; i++) {
if (_id == holdings[msg.sender][i]) {
// delete holdings[msg.sender][i];
_burn(holdings[msg.sender], i);
holds = true;
break;
}
}
require(holds==true, "You are not the owner of this staking");
require(stakings[_id].isActive==true,"It has already been unstaked");
require(block.timestamp>=stakings[_id].maturityTimestamp,"Staking is not mature yet");
stakings[_id].isActive=false;
_claim(_id);
}
function _claim(uint _id) internal{
uint reward = calculateReward(_id);
stakings[_id].lastClaimed=collectionCounter;
token0.transfer(stakings[_id].wallet, reward);
}
event amount(uint);
function entryCol(uint _amount) public nonReentrant{
emit amount(_amount);
collectionCounter++;
if (packages[Tier.One].count > 0) {
collections[collectionCounter].t1=(_amount*packages[Tier.One].rewardPoolPercent/100)/packages[Tier.One].count;
}
if (packages[Tier.Two].count > 0) {
collections[collectionCounter].t2=(_amount*packages[Tier.Two].rewardPoolPercent/100)/packages[Tier.Two].count;
}
if(packages[Tier.Three].count > 0) {
collections[collectionCounter].t3=(_amount*packages[Tier.Three].rewardPoolPercent/100)/packages[Tier.Three].count;
}
if(packages[Tier.Flexible].count > 0) {
collections[collectionCounter].tf=(_amount*packages[Tier.Flexible].rewardPoolPercent/100)/packages[Tier.Flexible].count;
}
}
function setToken0(address _token0) public onlyOwner{
require(isContract(_token0),"Token address must be a contract");
token0 = IERC20(_token0);
}
function _burn(uint[] storage array, uint index) internal {
require(index < array.length);
array[index] = array[array.length-1];
array.pop();
}
function isContract(address _addr) public view returns (bool){
uint32 size;
assembly {
size := extcodesize(_addr)
}
return (size > 0);
}
}{
"remappings": [],
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "byzantium",
"libraries": {},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxTransactionAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pastOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SwapSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer","type":"uint256"}],"name":"TaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"}],"name":"paircreated","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiquidityBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"confirmLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"initializeLiqudityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPoolInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"preInitializeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"preInitializeTransferMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"projectFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectFeeWalet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimitADay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLiquidityPoolPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellLimitADay","type":"uint256"}],"name":"setSellLimitADay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setprojectFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_projectFeeWalet","type":"address"}],"name":"setprojectFeeWalet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sold","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"uint256","name":"month","type":"uint256"},{"internalType":"uint256","name":"year","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"contract StakingContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6b033b2e3c9fd0803ce800000060018190556000600381905569021e19e0c9bab240000060045560e06040526101f4608081905260a081905260c0829052600b819055600c55600d556127109062000059906064620002b8565b620000659190620002fd565b60125561271060015460c86200007c9190620002b8565b620000889190620002fd565b6013556014805460ff1916905560006015556017805461ffff191690556018805460a060020a60ff021916905560408051808201909152600c81527f4d65616e6120526170746f7200000000000000000000000000000000000000006020820152601a90620000f8908262000410565b5060408051808201909152600381527f4d525400000000000000000000000000000000000000000000000000000000006020820152601b906200013c908262000410565b50601c805460ff1916601217905560405162003e22388190039081908339810160408190526200016c91620004e3565b60028054600160a060020a031990811633908117909255603c600f55600e8054600160a060020a0385169083161790556010805490911673cec1709fe5d7f48fec3c229a8fc9473ef08014d61790556001546000828152600560205260408082208390555190917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200020291815260200190565b60405180910390a350601780546201000060b060020a031916757a250d5630b4cf539739df2c5dacb4c659f2488d000017905560028054600160a060020a039081166000908152600860209081526040808320805460ff19908116600190811790925530855282852080548216831790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299805482168317905595549094168352600a9091529020805490921617905562000515565b8082028115828204841417620002f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60008262000334577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6002810460018216806200037d57607f821691505b602082108103620003b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f8211156200040b576000818152602081206020601f86010481016020861015620003e65750805b6020601f860104820191505b818110156200040757828155600101620003f2565b5050505b505050565b815167ffffffffffffffff8111156200042d576200042d62000339565b62000445816200043e845462000368565b84620003bd565b602080601f831160018114620004815760008415620004645750858301515b60028086026008870290910a600019041982161786555062000407565b600085815260208120601f198616915b82811015620004b25788860151825594840194600190910190840162000491565b5085821015620004d357878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b600060208284031215620004f657600080fd5b8151600160a060020a03811681146200050e57600080fd5b9392505050565b6138fd80620005256000396000f3fe6080604052600436106103735760003560e060020a900480634fbee193116101ca578063b69dc15d116100fb578063e4fcfd1811610099578063ee5d9c2d11610073578063ee5d9c2d14610a25578063f4e0d9ac14610a3a578063fc942c6414610a5a578063fdb78c0e14610a7a57600080fd5b8063e4fcfd18146109cf578063e9dae5ed146109e5578063eafb5a3c14610a0557600080fd5b8063cbf4b23b116100d5578063cbf4b23b1461093f578063d9ceeafc14610955578063dd62ed3e14610974578063e2b2d17c146109ba57600080fd5b8063b69dc15d1461089c578063c9b017d3146108fe578063cab5ebea1461091f57600080fd5b8063893d20e811610168578063a22d483211610142578063a22d48321461085c578063a9059cbb1461087c578063b1b08f71146105b0578063b3d514fb146105b057600080fd5b8063893d20e8146108145780638a63bd9b1461083257806395d89b411461084757600080fd5b80636f51c387116101a45780636f51c387146107b457806370a08231146107ca578063715018a6146107ea578063777c6891146107ff57600080fd5b80634fbee19314610722578063590ffdce1461075b5780635cce86cd1461077b57600080fd5b806323b872dd116102a457806336fddb0411610242578063452ed4f11161021c578063452ed4f1146106a85780634ada218b146106c85780634cf088d9146106e25780634fb2e45d1461070257600080fd5b806336fddb041461064857806337b5af40146106685780633f3cf56c1461068857600080fd5b80632b605d0e1161027e5780632b605d0e146105c65780632cee7602146105e6578063313ce56714610606578063361f81b01461062857600080fd5b806323b872dd1461057057806326003957146105905780632b28fc7a146105b057600080fd5b80630f3d9c9f1161031157806316b176a6116102eb57806316b176a6146104fb57806318160ddd1461051b5780631857476f146105305780631cc43f071461055057600080fd5b80630f3d9c9f146104a85780630fa604e4146104bf57806316279055146104d457600080fd5b8063069d955f1161034d578063069d955f146103f657806306fdde03146104305780630758d92414610452578063095ea7b31461047857600080fd5b806303fd2a451461037f5780630445b667146103b2578063045c75d3146103d657600080fd5b3661037a57005b600080fd5b34801561038b57600080fd5b5061039561dead81565b604051600160a060020a0390911681526020015b60405180910390f35b3480156103be57600080fd5b506103c860165481565b6040519081526020016103a9565b3480156103e257600080fd5b5060105461039590600160a060020a031681565b34801561040257600080fd5b50600b54600c54600d5461041592919083565b604080519384526020840192909252908201526060016103a9565b34801561043c57600080fd5b50610445610a94565b6040516103a99190613228565b34801561045e57600080fd5b5060175461039590620100009004600160a060020a031681565b34801561048457600080fd5b5061049861049336600461328b565b610b26565b60405190151581526020016103a9565b3480156104b457600080fd5b506104bd610b3d565b005b3480156104cb57600080fd5b506103c8610bb6565b3480156104e057600080fd5b506104986104ef3660046132b7565b3b63ffffffff16151590565b34801561050757600080fd5b506104bd6105163660046132d4565b610bdc565b34801561052757600080fd5b506103c8610d71565b34801561053c57600080fd5b506104bd61054b366004613300565b610d89565b34801561055c57600080fd5b506104bd61056b3660046133ef565b61122b565b34801561057c57600080fd5b5061049861058b3660046134ae565b6113cc565b34801561059c57600080fd5b506104bd6105ab3660046134ef565b611444565b3480156105bc57600080fd5b506103c86109c481565b3480156105d257600080fd5b506104bd6105e1366004613300565b611531565b3480156105f257600080fd5b506104bd61060136600461328b565b6115dd565b34801561061257600080fd5b50601c5460405160ff90911681526020016103a9565b34801561063457600080fd5b506104bd610643366004613300565b6116bc565b34801561065457600080fd5b506104bd610663366004613526565b6116ee565b34801561067457600080fd5b506104bd6106833660046132b7565b611746565b34801561069457600080fd5b506104bd6106a33660046134ef565b611795565b3480156106b457600080fd5b5060185461039590600160a060020a031681565b3480156106d457600080fd5b506017546104989060ff1681565b3480156106ee57600080fd5b50600e5461039590600160a060020a031681565b34801561070e57600080fd5b506104bd61071d3660046132b7565b6118b7565b34801561072e57600080fd5b5061049861073d3660046132b7565b600160a060020a031660009081526008602052604090205460ff1690565b34801561076757600080fd5b506104bd610776366004613526565b6119e8565b34801561078757600080fd5b506104986107963660046132b7565b600160a060020a031660009081526009602052604090205460ff1690565b3480156107c057600080fd5b506103c860045481565b3480156107d657600080fd5b506103c86107e53660046132b7565b611a40565b3480156107f657600080fd5b506104bd611a5b565b34801561080b57600080fd5b506103c8611ade565b34801561082057600080fd5b50600254600160a060020a0316610395565b34801561083e57600080fd5b50610498611aff565b34801561085357600080fd5b50610445611b55565b34801561086857600080fd5b506104bd6108773660046132b7565b611b64565b34801561088857600080fd5b5061049861089736600461328b565b611bc5565b3480156108a857600080fd5b506108de6108b73660046132b7565b60196020526000908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016103a9565b34801561090a57600080fd5b506018546104989060a060020a900460ff1681565b34801561092b57600080fd5b506104bd61093a36600461355b565b611bdc565b34801561094b57600080fd5b506103c8600f5481565b34801561096157600080fd5b5060175461049890610100900460ff1681565b34801561098057600080fd5b506103c861098f366004613576565b600160a060020a03918216600090815260076020908152604080832093909416825291909152205490565b3480156109c657600080fd5b506104bd611c51565b3480156109db57600080fd5b506103c860155481565b3480156109f157600080fd5b506104bd610a003660046132d4565b611eaa565b348015610a1157600080fd5b506104bd610a203660046132b7565b611f95565b348015610a3157600080fd5b506104bd612319565b348015610a4657600080fd5b506104bd610a553660046132b7565b612380565b348015610a6657600080fd5b506104bd610a75366004613526565b61244c565b348015610a8657600080fd5b506014546104989060ff1681565b6060601a8054610aa3906135af565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf906135af565b8015610b1c5780601f10610af157610100808354040283529160200191610b1c565b820191906000526020600020905b815481529060010190602001808311610aff57829003601f168201915b5050505050905090565b6000610b3333848461255e565b5060015b92915050565b600254600160a060020a03163314610b735760405160e560020a62461bcd028152600401610b6a906135ec565b60405180910390fd5b42601554601154610b84919061363c565b1015610bb4576000610b9530611a40565b90506016548110610bb25750601654610bad81612671565b426011555b505b565b601c54600090610bca9060ff16600a613736565b601354610bd7919061375e565b905090565b600254600160a060020a03163314610c095760405160e560020a62461bcd028152600401610b6a906135ec565b60008311610c825760405160e560020a62461bcd02815260206004820152602160248201527f5468726573686f6c642068617320746f20626520686967686572207468616e2060448201527f30000000000000000000000000000000000000000000000000000000000000006064820152608401610b6a565b610c8d600a83613772565b158015610c9a5750600082115b610d0f5760405160e560020a62461bcd02815260206004820152603c60248201527f7468726573686f6c6444697669736f722068617320746f20626520686967686560448201527f72207468616e203020616e6420646976697369626c65206279203130000000006064820152608401610b6a565b8183600154610d1e9190613786565b610d28919061375e565b6016819055601582905560408051918252602082018390527fa9c2e33ddea0675d960a3cc03d364783d03ffc4cad71b5fd3b6b32be3b97185791015b60405180910390a1505050565b6000600154600003610d8257600080fd5b5060015490565b600254600160a060020a03163314610db65760405160e560020a62461bcd028152600401610b6a906135ec565b60185460a060020a900460ff1615610e135760405160e560020a62461bcd02815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610b6a565b3031610e645760405160e560020a62461bcd02815260206004820152601760248201527f436f6e7472616374206d7573742068617665204554482e0000000000000000006044820152606401610b6a565b610e7681670de0b6b3a7640000613786565b610e7f33611a40565b1015610ed05760405160e560020a62461bcd02815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e732e00006044820152606401610b6a565b601760029054906101000a9004600160a060020a0316600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a919061379d565b600160a060020a031663c9c65396601760029054906101000a9004600160a060020a0316600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd2919061379d565b60405160e060020a63ffffffff8416028152600160a060020a0390911660048201523060248201526044016020604051808303816000875af115801561101c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611040919061379d565b60188054600160a060020a031916600160a060020a0392909216918217905561106a90600161244c565b601854604051600160a060020a0390911681527fa5473389c26e5a30fadd1c7deabb92185a98ef2c760dff48daa55d5208345eb69060200160405180910390a1601854600160a060020a039081166000908152600660205260409020805460ff191660011790556002546017546110ef9291821691620100009091041660001961255e565b60175461110f903090620100009004600160a060020a031660001961255e565b6018805474ff0000000000000000000000000000000000000000191660a060020a179055601c546111449060ff16600a613736565b61114e9082613786565b905061116233308360008060006001612761565b50601754620100009004600160a060020a031663f305d7193080319061118781611a40565b60025460405163ffffffff861660e060020a028152600160a060020a039384166004820152602481019290925260006044830181905260648301529190911660848201524260a482015260c40160606040518083038185885af11580156111f2573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061121791906137ba565b5050506112233361283a565b610bb261292e565b600254600160a060020a031633146112585760405160e560020a62461bcd028152600401610b6a906135ec565b80518251146112ac5760405160e560020a62461bcd02815260206004820152601360248201527f4163636f756e747320213d20416d6f756e7473000000000000000000000000006044820152606401610b6a565b60005b82518160ff1610156113c757601c546112cc9060ff16600a613736565b828260ff16815181106112e1576112e16137e8565b60200260200101516112f39190613786565b6112fc33611a40565b10156113735760405160e560020a62461bcd02815260206004820152602d60248201527f4163636f756e742068617665206c6f77657220746f6b656e622062616c616e6360448201527f65207468616e206e6565646564000000000000000000000000000000000000006064820152608401610b6a565b6113b5838260ff168151811061138b5761138b6137e8565b6020026020010151838360ff16815181106113a8576113a86137e8565b60200260200101516115dd565b806113bf81613801565b9150506112af565b505050565b600160a060020a03831660009081526007602090815260408083203384529091528120546000191461143157600160a060020a03841660009081526007602090815260408083203384529091528120805484929061142b908490613820565b90915550505b61143c848484612a0e565b949350505050565b600254600160a060020a031633146114715760405160e560020a62461bcd028152600401610b6a906135ec565b6103e8600154611481919061375e565b81836001546114909190613786565b61149a919061375e565b10156115115760405160e560020a62461bcd02815260206004820152603460248201527f4d61782057616c6c657420616d6f756e74206d7573742062652061626f76652060448201527f302e3125206f6620746f74616c20737570706c790000000000000000000000006064820152608401610b6a565b80826001546115209190613786565b61152a919061375e565b6013555050565b600254600160a060020a0316331461155e5760405160e560020a62461bcd028152600401610b6a906135ec565b60648111156115d85760405160e560020a62461bcd02815260206004820152603360248201527f50657263656e7461676520746f74616c206d757374206265206c65737320746860448201527f616e206f7220657175616c7320746f20313030000000000000000000000000006064820152608401610b6a565b600f55565b600254600160a060020a0316331461160a5760405160e560020a62461bcd028152600401610b6a906135ec565b60185460a060020a900460ff161561168d5760405160e560020a62461bcd02815260206004820152602660248201527f4c697175696469747920706f6f6c206d757374206e6f7420626520696e69746960448201527f616c697a656400000000000000000000000000000000000000000000000000006064820152608401610b6a565b601c5461169e9060ff16600a613736565b6116a89082613786565b90506113c733838360008060006001612761565b600254600160a060020a031633146116e95760405160e560020a62461bcd028152600401610b6a906135ec565b600455565b600254600160a060020a0316331461171b5760405160e560020a62461bcd028152600401610b6a906135ec565b600160a060020a03919091166000908152600960205260409020805460ff1916911515919091179055565b600254600160a060020a031633146117735760405160e560020a62461bcd028152600401610b6a906135ec565b60108054600160a060020a031916600160a060020a0392909216919091179055565b600254600160a060020a031633146117c25760405160e560020a62461bcd028152600401610b6a906135ec565b6103e86001546117d2919061375e565b81836001546117e19190613786565b6117eb919061375e565b10156118625760405160e560020a62461bcd02815260206004820152603960248201527f4d6178205472616e73616374696f6e20616d6f756e74206d757374206265206160448201527f626f766520302e3125206f6620746f74616c20737570706c79000000000000006064820152608401610b6a565b80826001546118719190613786565b61187b919061375e565b60128190556040519081527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac9060200160405180910390a15050565b600254600160a060020a031633146118e45760405160e560020a62461bcd028152600401610b6a906135ec565b600160a060020a03811661190d5760405160e560020a62461bcd028152600401610b6a90613833565b61deac19600160a060020a0382160161193b5760405160e560020a62461bcd028152600401610b6a90613833565b60025461195290600160a060020a031660006119e8565b61195d8160016119e8565b60025460009061197590600160a060020a0316611a40565b111561199c5760025461199a90600160a060020a03168261199582611a40565b612a0e565b505b60028054600160a060020a031916600160a060020a03831690811790915560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600254600160a060020a03163314611a155760405160e560020a62461bcd028152600401610b6a906135ec565b600160a060020a03919091166000908152600860205260409020805460ff1916911515919091179055565b600160a060020a031660009081526005602052604090205490565b600254600160a060020a03163314611a885760405160e560020a62461bcd028152600401610b6a906135ec565b600254611a9f90600160a060020a031660006119e8565b60028054600160a060020a031916905560405160009081907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b601c54600090611af29060ff16600a613736565b601254610bd7919061375e565b600254600090600160a060020a03163314611b2f5760405160e560020a62461bcd028152600401610b6a906135ec565b601754611b4f903090620100009004600160a060020a031660001961255e565b50600190565b6060601b8054610aa3906135af565b600254600160a060020a03163314611b915760405160e560020a62461bcd028152600401610b6a906135ec565b600160a060020a038116611bba5760405160e560020a62461bcd028152600401610b6a90613890565b610bb281600161244c565b6000611bd2338484612a0e565b5060019392505050565b600254600160a060020a03163314611c095760405160e560020a62461bcd028152600401610b6a906135ec565b6014805460ff19168215159081179091556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a150565b600254600160a060020a03163314611c7e5760405160e560020a62461bcd028152600401610b6a906135ec565b60185460a060020a900460ff1615611cdb5760405160e560020a62461bcd02815260206004820152601360248201527f4c5020616c726561647920696e697469746564000000000000000000000000006044820152606401610b6a565b601760029054906101000a9004600160a060020a0316600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d55919061379d565b600160a060020a031663e6a4390530601760029054906101000a9004600160a060020a0316600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dde919061379d565b60405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381865afa158015611e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b919061379d565b60188054600160a060020a031916600160a060020a03929092169182179055611e7590600161244c565b6018805474ff0000000000000000000000000000000000000000191660a060020a179055611ea23361283a565b610bb461292e565b600254600160a060020a03163314611ed75760405160e560020a62461bcd028152600401610b6a906135ec565b6109c48311158015611eeb57506109c48211155b8015611ef957506109c48111155b611f485760405160e560020a62461bcd02815260206004820152601560248201527f43616e6e6f7420657863656564206d6178696d756d00000000000000000000006044820152606401610b6a565b600b839055600c829055600d81905560408051848152602081018490529081018290527fad292e707e8a094bdd1cff9ec5263d8e4e538d8e6e457c032a2dbf7174ebec4b90606001610d64565b600254600160a060020a03163314611fc25760405160e560020a62461bcd028152600401610b6a906135ec565b600160a060020a038116611feb5760405160e560020a62461bcd028152600401610b6a90613890565b6000819050600081600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa158015612033573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612057919061379d565b600160a060020a031663e6a439053084600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156120a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cb919061379d565b60405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381865afa158015612114573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612138919061379d565b9050600160a060020a0381166122b55781600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa158015612189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ad919061379d565b600160a060020a031663c9c653963084600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156121fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612221919061379d565b60405160e060020a63ffffffff8516028152600160a060020a039283166004820152911660248201526044016020604051808303816000875af115801561226c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612290919061379d565b60188054600160a060020a031916600160a060020a03929092169190911790556122d1565b60188054600160a060020a031916600160a060020a0383161790555b6017805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a03858116820292909217928390556113c79230929190041660001961255e565b600254600160a060020a031633146123465760405160e560020a62461bcd028152600401610b6a906135ec565b600254604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610bb2573d6000803e3d6000fd5b600254600160a060020a031633146123ad5760405160e560020a62461bcd028152600401610b6a906135ec565b803b63ffffffff1661242a5760405160e560020a62461bcd02815260206004820152602260248201527f5374616b696e672061646472657373206d757374206265206120636f6e74726160448201527f63740000000000000000000000000000000000000000000000000000000000006064820152608401610b6a565b600e8054600160a060020a031916600160a060020a0392909216919091179055565b600254600160a060020a031633146124795760405160e560020a62461bcd028152600401610b6a906135ec565b600160a060020a0382166124a25760405160e560020a62461bcd028152600401610b6a90613890565b806124c95750600160a060020a03166000908152600660205260409020805460ff19169055565b60035415612533576203f480600354426124e39190613820565b116125335760405160e560020a62461bcd02815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610b6a565b600160a060020a0382166000908152600660205260409020805460ff19166001179055426003555050565b600160a060020a0383166125b75760405160e560020a62461bcd02815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b6a565b600160a060020a0382166126105760405160e560020a62461bcd02815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b6a565b600160a060020a0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000805460ff19166001178155600f5460649061268e9084613786565b612698919061375e565b905060006126a68284613820565b6002549091506126c1903090600160a060020a031684612a0e565b50600e546126da903090600160a060020a031683612a0e565b50600e546040517fd6b3113500000000000000000000000000000000000000000000000000000000815260048101839052600160a060020a039091169063d6b3113590602401600060405180830381600087803b15801561273a57600080fd5b505af115801561274e573d6000803e3d6000fd5b50506000805460ff191690555050505050565b600160a060020a03871660009081526005602052604081208054879190839061278b908490613820565b90915550600090508561279e57866127aa565b6127aa8986868a612fd9565b600160a060020a0389166000908152600560205260408120805492935083929091906127d790849061363c565b9250508190555087600160a060020a031689600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161282391815260200190565b60405180910390a350600198975050505050505050565b601754610100900460ff16156128bb5760405160e560020a62461bcd02815260206004820152602260248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401610b6a565b600160a060020a0381166000908152600a6020908152604091829020805460ff1990811660019081179092556017805461ff001916610100179055601480549091168217905591519182527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579101611c46565b60175460ff16156129845760405160e560020a62461bcd02815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b6a565b601754610100900460ff166129de5760405160e560020a62461bcd02815260206004820152601760248201527f4c6971756964697479206d7573742062652061646465640000000000000000006044820152606401610b6a565b6017805460ff19166001908117909155805462989680916129ff9190613786565b612a09919061375e565b601655565b6000600160a060020a038416612a8f5760405160e560020a62461bcd02815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b6a565b600160a060020a038316612b0e5760405160e560020a62461bcd02815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b6a565b60008211612b875760405160e560020a62461bcd02815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b6a565b600160a060020a0384166000908152600660205260408120548190819060ff1615612bb55760019250612be3565b600160a060020a03861660009081526006602052604090205460ff1615612bdf5760019150612be3565b5060015b612bed8787613096565b15612dec578280612bfb5750815b15612d175760175460ff16612c555760405160e560020a62461bcd02815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b6a565b600160a060020a03871660009081526009602052604090205460ff16158015612c975750600160a060020a03861660009081526009602052604090205460ff16155b15612d1757601254851115612d175760405160e560020a62461bcd02815260206004820152603060248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f72616e73616374696f6e416d6f756e74000000000000000000000000000000006064820152608401610b6a565b601754600160a060020a03878116620100009092041614801590612d39575081155b15612dec57600160a060020a03861660009081526009602052604090205460ff16612dec5760135485612d6b88611a40565b612d75919061363c565b1115612dec5760405160e560020a62461bcd02815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610b6a565b600160a060020a03871660009081526008602052604090205460019060ff1680612e2e5750600160a060020a03871660009081526008602052604090205460ff165b15612e37575060005b8215612fba5760005460ff16158015612e52575060145460ff165b15612fba576000612e6230611a40565b90506016548110612fb8576000806000612e7b4261316d565b33600090815260196020526040902060010154929550909350915081148015612eb557503360009081526019602052604090206002015482145b8015612ed257503360009081526019602052604090206003015483145b15612f705760045433600090815260196020526040902054612ef5908c9061363c565b1115612f465760405160e560020a62461bcd02815260206004820152601d60248201527f65786365656465642073656c6c206c696d697420666f7220746f6461790000006044820152606401610b6a565b33600090815260196020526040812080548c9290612f6590849061363c565b90915550612f839050565b3360009081526019602052604090208a90555b33600090815260196020526040902060018101829055600281018390556003018390556016549350612fb484612671565b5050505b505b42601155612fcd88888884888888612761565b98975050505050505050565b6000808415612feb5750600b54612fff565b8315612ffa5750600c54612fff565b50600d545b600061271061300e8386613786565b613018919061375e565b3060009081526005602052604081208054929350839290919061303c90849061363c565b90915550506040518181523090600160a060020a038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361308b8185613820565b979650505050505050565b600254600090600160a060020a038481169116148015906130c55750600254600160a060020a03838116911614155b80156130dc5750600254600160a060020a03163214155b80156131015750600160a060020a0382166000908152600a602052604090205460ff16155b80156131265750600160a060020a0383166000908152600a602052604090205460ff16155b801561313d5750600160a060020a03821661dead14155b80156131515750600160a060020a03821615155b80156131665750600160a060020a0383163014155b9392505050565b6000808061317f62015180850461318c565b9196909550909350915050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816131e9576131e9613745565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600060208083528351808285015260005b8181101561325557858101830151858201604001528201613239565b506000604082860101526040601f19601f8301168501019250505092915050565b600160a060020a0381168114610bb257600080fd5b6000806040838503121561329e57600080fd5b82356132a981613276565b946020939093013593505050565b6000602082840312156132c957600080fd5b813561316681613276565b6000806000606084860312156132e957600080fd5b505081359360208301359350604090920135919050565b60006020828403121561331257600080fd5b5035919050565b60e060020a634e487b7102600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561335b5761335b613319565b604052919050565b600067ffffffffffffffff82111561337d5761337d613319565b5060209081020190565b600082601f83011261339857600080fd5b813560206133ad6133a883613363565b613332565b828152918102840181019181810190868411156133c957600080fd5b8286015b848110156133e457803583529183019183016133cd565b509695505050505050565b6000806040838503121561340257600080fd5b823567ffffffffffffffff8082111561341a57600080fd5b818501915085601f83011261342e57600080fd5b8135602061343e6133a883613363565b8281529181028401810191818101908984111561345a57600080fd5b948201945b8386101561348157853561347281613276565b8252948201949082019061345f565b9650508601359250508082111561349757600080fd5b506134a485828601613387565b9150509250929050565b6000806000606084860312156134c357600080fd5b83356134ce81613276565b925060208401356134de81613276565b929592945050506040919091013590565b6000806040838503121561350257600080fd5b50508035926020909101359150565b8035801515811461352157600080fd5b919050565b6000806040838503121561353957600080fd5b823561354481613276565b915061355260208401613511565b90509250929050565b60006020828403121561356d57600080fd5b61316682613511565b6000806040838503121561358957600080fd5b823561359481613276565b915060208301356135a481613276565b809150509250929050565b6002810460018216806135c357607f821691505b6020821081036135e65760e060020a634e487b7102600052602260045260246000fd5b50919050565b60208082526018908201527f43616c6c6572206d75737420626520746865206f776e65720000000000000000604082015260600190565b60e060020a634e487b7102600052601160045260246000fd5b80820180821115610b3757610b37613623565b600181815b8085111561368c57816000190482111561367057613670613623565b8085161561367d57918102915b60029094049390800290613654565b509250929050565b6000826136a357506001610b37565b816136b057506000610b37565b81600181146136c657600281146136d0576136ed565b6001915050610b37565b60ff8411156136e1576136e1613623565b8360020a915050610b37565b5060208310610133831016604e8410600b8410161715613710575081810a610b37565b61371a838361364f565b806000190482111561372e5761372e613623565b029392505050565b600061316660ff841683613694565b60e060020a634e487b7102600052601260045260246000fd5b60008261376d5761376d613745565b500490565b60008261378157613781613745565b500690565b8082028115828204841417610b3757610b37613623565b6000602082840312156137af57600080fd5b815161316681613276565b6000806000606084860312156137cf57600080fd5b8351925060208401519150604084015190509250925092565b60e060020a634e487b7102600052603260045260246000fd5b600060ff821660ff810361381757613817613623565b60010192915050565b81810381811115610b3757610b37613623565b6020808252603c908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f206164647265737300000000606082015260800190565b6020808252600f908201527f496e76616c69642061646472657373000000000000000000000000000000000060408201526060019056fea2646970667358221220861e2d67d83f19dfcf0c1387249924254bcefe76b086b966dacdd9464517ea1e64736f6c63430008130033000000000000000000000000b7c0f23542a87e7e5a3978249f7ec5c3ef431cb6
Deployed Bytecode
0x6080604052600436106103735760003560e060020a900480634fbee193116101ca578063b69dc15d116100fb578063e4fcfd1811610099578063ee5d9c2d11610073578063ee5d9c2d14610a25578063f4e0d9ac14610a3a578063fc942c6414610a5a578063fdb78c0e14610a7a57600080fd5b8063e4fcfd18146109cf578063e9dae5ed146109e5578063eafb5a3c14610a0557600080fd5b8063cbf4b23b116100d5578063cbf4b23b1461093f578063d9ceeafc14610955578063dd62ed3e14610974578063e2b2d17c146109ba57600080fd5b8063b69dc15d1461089c578063c9b017d3146108fe578063cab5ebea1461091f57600080fd5b8063893d20e811610168578063a22d483211610142578063a22d48321461085c578063a9059cbb1461087c578063b1b08f71146105b0578063b3d514fb146105b057600080fd5b8063893d20e8146108145780638a63bd9b1461083257806395d89b411461084757600080fd5b80636f51c387116101a45780636f51c387146107b457806370a08231146107ca578063715018a6146107ea578063777c6891146107ff57600080fd5b80634fbee19314610722578063590ffdce1461075b5780635cce86cd1461077b57600080fd5b806323b872dd116102a457806336fddb0411610242578063452ed4f11161021c578063452ed4f1146106a85780634ada218b146106c85780634cf088d9146106e25780634fb2e45d1461070257600080fd5b806336fddb041461064857806337b5af40146106685780633f3cf56c1461068857600080fd5b80632b605d0e1161027e5780632b605d0e146105c65780632cee7602146105e6578063313ce56714610606578063361f81b01461062857600080fd5b806323b872dd1461057057806326003957146105905780632b28fc7a146105b057600080fd5b80630f3d9c9f1161031157806316b176a6116102eb57806316b176a6146104fb57806318160ddd1461051b5780631857476f146105305780631cc43f071461055057600080fd5b80630f3d9c9f146104a85780630fa604e4146104bf57806316279055146104d457600080fd5b8063069d955f1161034d578063069d955f146103f657806306fdde03146104305780630758d92414610452578063095ea7b31461047857600080fd5b806303fd2a451461037f5780630445b667146103b2578063045c75d3146103d657600080fd5b3661037a57005b600080fd5b34801561038b57600080fd5b5061039561dead81565b604051600160a060020a0390911681526020015b60405180910390f35b3480156103be57600080fd5b506103c860165481565b6040519081526020016103a9565b3480156103e257600080fd5b5060105461039590600160a060020a031681565b34801561040257600080fd5b50600b54600c54600d5461041592919083565b604080519384526020840192909252908201526060016103a9565b34801561043c57600080fd5b50610445610a94565b6040516103a99190613228565b34801561045e57600080fd5b5060175461039590620100009004600160a060020a031681565b34801561048457600080fd5b5061049861049336600461328b565b610b26565b60405190151581526020016103a9565b3480156104b457600080fd5b506104bd610b3d565b005b3480156104cb57600080fd5b506103c8610bb6565b3480156104e057600080fd5b506104986104ef3660046132b7565b3b63ffffffff16151590565b34801561050757600080fd5b506104bd6105163660046132d4565b610bdc565b34801561052757600080fd5b506103c8610d71565b34801561053c57600080fd5b506104bd61054b366004613300565b610d89565b34801561055c57600080fd5b506104bd61056b3660046133ef565b61122b565b34801561057c57600080fd5b5061049861058b3660046134ae565b6113cc565b34801561059c57600080fd5b506104bd6105ab3660046134ef565b611444565b3480156105bc57600080fd5b506103c86109c481565b3480156105d257600080fd5b506104bd6105e1366004613300565b611531565b3480156105f257600080fd5b506104bd61060136600461328b565b6115dd565b34801561061257600080fd5b50601c5460405160ff90911681526020016103a9565b34801561063457600080fd5b506104bd610643366004613300565b6116bc565b34801561065457600080fd5b506104bd610663366004613526565b6116ee565b34801561067457600080fd5b506104bd6106833660046132b7565b611746565b34801561069457600080fd5b506104bd6106a33660046134ef565b611795565b3480156106b457600080fd5b5060185461039590600160a060020a031681565b3480156106d457600080fd5b506017546104989060ff1681565b3480156106ee57600080fd5b50600e5461039590600160a060020a031681565b34801561070e57600080fd5b506104bd61071d3660046132b7565b6118b7565b34801561072e57600080fd5b5061049861073d3660046132b7565b600160a060020a031660009081526008602052604090205460ff1690565b34801561076757600080fd5b506104bd610776366004613526565b6119e8565b34801561078757600080fd5b506104986107963660046132b7565b600160a060020a031660009081526009602052604090205460ff1690565b3480156107c057600080fd5b506103c860045481565b3480156107d657600080fd5b506103c86107e53660046132b7565b611a40565b3480156107f657600080fd5b506104bd611a5b565b34801561080b57600080fd5b506103c8611ade565b34801561082057600080fd5b50600254600160a060020a0316610395565b34801561083e57600080fd5b50610498611aff565b34801561085357600080fd5b50610445611b55565b34801561086857600080fd5b506104bd6108773660046132b7565b611b64565b34801561088857600080fd5b5061049861089736600461328b565b611bc5565b3480156108a857600080fd5b506108de6108b73660046132b7565b60196020526000908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016103a9565b34801561090a57600080fd5b506018546104989060a060020a900460ff1681565b34801561092b57600080fd5b506104bd61093a36600461355b565b611bdc565b34801561094b57600080fd5b506103c8600f5481565b34801561096157600080fd5b5060175461049890610100900460ff1681565b34801561098057600080fd5b506103c861098f366004613576565b600160a060020a03918216600090815260076020908152604080832093909416825291909152205490565b3480156109c657600080fd5b506104bd611c51565b3480156109db57600080fd5b506103c860155481565b3480156109f157600080fd5b506104bd610a003660046132d4565b611eaa565b348015610a1157600080fd5b506104bd610a203660046132b7565b611f95565b348015610a3157600080fd5b506104bd612319565b348015610a4657600080fd5b506104bd610a553660046132b7565b612380565b348015610a6657600080fd5b506104bd610a75366004613526565b61244c565b348015610a8657600080fd5b506014546104989060ff1681565b6060601a8054610aa3906135af565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf906135af565b8015610b1c5780601f10610af157610100808354040283529160200191610b1c565b820191906000526020600020905b815481529060010190602001808311610aff57829003601f168201915b5050505050905090565b6000610b3333848461255e565b5060015b92915050565b600254600160a060020a03163314610b735760405160e560020a62461bcd028152600401610b6a906135ec565b60405180910390fd5b42601554601154610b84919061363c565b1015610bb4576000610b9530611a40565b90506016548110610bb25750601654610bad81612671565b426011555b505b565b601c54600090610bca9060ff16600a613736565b601354610bd7919061375e565b905090565b600254600160a060020a03163314610c095760405160e560020a62461bcd028152600401610b6a906135ec565b60008311610c825760405160e560020a62461bcd02815260206004820152602160248201527f5468726573686f6c642068617320746f20626520686967686572207468616e2060448201527f30000000000000000000000000000000000000000000000000000000000000006064820152608401610b6a565b610c8d600a83613772565b158015610c9a5750600082115b610d0f5760405160e560020a62461bcd02815260206004820152603c60248201527f7468726573686f6c6444697669736f722068617320746f20626520686967686560448201527f72207468616e203020616e6420646976697369626c65206279203130000000006064820152608401610b6a565b8183600154610d1e9190613786565b610d28919061375e565b6016819055601582905560408051918252602082018390527fa9c2e33ddea0675d960a3cc03d364783d03ffc4cad71b5fd3b6b32be3b97185791015b60405180910390a1505050565b6000600154600003610d8257600080fd5b5060015490565b600254600160a060020a03163314610db65760405160e560020a62461bcd028152600401610b6a906135ec565b60185460a060020a900460ff1615610e135760405160e560020a62461bcd02815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610b6a565b3031610e645760405160e560020a62461bcd02815260206004820152601760248201527f436f6e7472616374206d7573742068617665204554482e0000000000000000006044820152606401610b6a565b610e7681670de0b6b3a7640000613786565b610e7f33611a40565b1015610ed05760405160e560020a62461bcd02815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e732e00006044820152606401610b6a565b601760029054906101000a9004600160a060020a0316600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a919061379d565b600160a060020a031663c9c65396601760029054906101000a9004600160a060020a0316600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd2919061379d565b60405160e060020a63ffffffff8416028152600160a060020a0390911660048201523060248201526044016020604051808303816000875af115801561101c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611040919061379d565b60188054600160a060020a031916600160a060020a0392909216918217905561106a90600161244c565b601854604051600160a060020a0390911681527fa5473389c26e5a30fadd1c7deabb92185a98ef2c760dff48daa55d5208345eb69060200160405180910390a1601854600160a060020a039081166000908152600660205260409020805460ff191660011790556002546017546110ef9291821691620100009091041660001961255e565b60175461110f903090620100009004600160a060020a031660001961255e565b6018805474ff0000000000000000000000000000000000000000191660a060020a179055601c546111449060ff16600a613736565b61114e9082613786565b905061116233308360008060006001612761565b50601754620100009004600160a060020a031663f305d7193080319061118781611a40565b60025460405163ffffffff861660e060020a028152600160a060020a039384166004820152602481019290925260006044830181905260648301529190911660848201524260a482015260c40160606040518083038185885af11580156111f2573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061121791906137ba565b5050506112233361283a565b610bb261292e565b600254600160a060020a031633146112585760405160e560020a62461bcd028152600401610b6a906135ec565b80518251146112ac5760405160e560020a62461bcd02815260206004820152601360248201527f4163636f756e747320213d20416d6f756e7473000000000000000000000000006044820152606401610b6a565b60005b82518160ff1610156113c757601c546112cc9060ff16600a613736565b828260ff16815181106112e1576112e16137e8565b60200260200101516112f39190613786565b6112fc33611a40565b10156113735760405160e560020a62461bcd02815260206004820152602d60248201527f4163636f756e742068617665206c6f77657220746f6b656e622062616c616e6360448201527f65207468616e206e6565646564000000000000000000000000000000000000006064820152608401610b6a565b6113b5838260ff168151811061138b5761138b6137e8565b6020026020010151838360ff16815181106113a8576113a86137e8565b60200260200101516115dd565b806113bf81613801565b9150506112af565b505050565b600160a060020a03831660009081526007602090815260408083203384529091528120546000191461143157600160a060020a03841660009081526007602090815260408083203384529091528120805484929061142b908490613820565b90915550505b61143c848484612a0e565b949350505050565b600254600160a060020a031633146114715760405160e560020a62461bcd028152600401610b6a906135ec565b6103e8600154611481919061375e565b81836001546114909190613786565b61149a919061375e565b10156115115760405160e560020a62461bcd02815260206004820152603460248201527f4d61782057616c6c657420616d6f756e74206d7573742062652061626f76652060448201527f302e3125206f6620746f74616c20737570706c790000000000000000000000006064820152608401610b6a565b80826001546115209190613786565b61152a919061375e565b6013555050565b600254600160a060020a0316331461155e5760405160e560020a62461bcd028152600401610b6a906135ec565b60648111156115d85760405160e560020a62461bcd02815260206004820152603360248201527f50657263656e7461676520746f74616c206d757374206265206c65737320746860448201527f616e206f7220657175616c7320746f20313030000000000000000000000000006064820152608401610b6a565b600f55565b600254600160a060020a0316331461160a5760405160e560020a62461bcd028152600401610b6a906135ec565b60185460a060020a900460ff161561168d5760405160e560020a62461bcd02815260206004820152602660248201527f4c697175696469747920706f6f6c206d757374206e6f7420626520696e69746960448201527f616c697a656400000000000000000000000000000000000000000000000000006064820152608401610b6a565b601c5461169e9060ff16600a613736565b6116a89082613786565b90506113c733838360008060006001612761565b600254600160a060020a031633146116e95760405160e560020a62461bcd028152600401610b6a906135ec565b600455565b600254600160a060020a0316331461171b5760405160e560020a62461bcd028152600401610b6a906135ec565b600160a060020a03919091166000908152600960205260409020805460ff1916911515919091179055565b600254600160a060020a031633146117735760405160e560020a62461bcd028152600401610b6a906135ec565b60108054600160a060020a031916600160a060020a0392909216919091179055565b600254600160a060020a031633146117c25760405160e560020a62461bcd028152600401610b6a906135ec565b6103e86001546117d2919061375e565b81836001546117e19190613786565b6117eb919061375e565b10156118625760405160e560020a62461bcd02815260206004820152603960248201527f4d6178205472616e73616374696f6e20616d6f756e74206d757374206265206160448201527f626f766520302e3125206f6620746f74616c20737570706c79000000000000006064820152608401610b6a565b80826001546118719190613786565b61187b919061375e565b60128190556040519081527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac9060200160405180910390a15050565b600254600160a060020a031633146118e45760405160e560020a62461bcd028152600401610b6a906135ec565b600160a060020a03811661190d5760405160e560020a62461bcd028152600401610b6a90613833565b61deac19600160a060020a0382160161193b5760405160e560020a62461bcd028152600401610b6a90613833565b60025461195290600160a060020a031660006119e8565b61195d8160016119e8565b60025460009061197590600160a060020a0316611a40565b111561199c5760025461199a90600160a060020a03168261199582611a40565b612a0e565b505b60028054600160a060020a031916600160a060020a03831690811790915560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600254600160a060020a03163314611a155760405160e560020a62461bcd028152600401610b6a906135ec565b600160a060020a03919091166000908152600860205260409020805460ff1916911515919091179055565b600160a060020a031660009081526005602052604090205490565b600254600160a060020a03163314611a885760405160e560020a62461bcd028152600401610b6a906135ec565b600254611a9f90600160a060020a031660006119e8565b60028054600160a060020a031916905560405160009081907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b601c54600090611af29060ff16600a613736565b601254610bd7919061375e565b600254600090600160a060020a03163314611b2f5760405160e560020a62461bcd028152600401610b6a906135ec565b601754611b4f903090620100009004600160a060020a031660001961255e565b50600190565b6060601b8054610aa3906135af565b600254600160a060020a03163314611b915760405160e560020a62461bcd028152600401610b6a906135ec565b600160a060020a038116611bba5760405160e560020a62461bcd028152600401610b6a90613890565b610bb281600161244c565b6000611bd2338484612a0e565b5060019392505050565b600254600160a060020a03163314611c095760405160e560020a62461bcd028152600401610b6a906135ec565b6014805460ff19168215159081179091556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a150565b600254600160a060020a03163314611c7e5760405160e560020a62461bcd028152600401610b6a906135ec565b60185460a060020a900460ff1615611cdb5760405160e560020a62461bcd02815260206004820152601360248201527f4c5020616c726561647920696e697469746564000000000000000000000000006044820152606401610b6a565b601760029054906101000a9004600160a060020a0316600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d55919061379d565b600160a060020a031663e6a4390530601760029054906101000a9004600160a060020a0316600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dde919061379d565b60405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381865afa158015611e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b919061379d565b60188054600160a060020a031916600160a060020a03929092169182179055611e7590600161244c565b6018805474ff0000000000000000000000000000000000000000191660a060020a179055611ea23361283a565b610bb461292e565b600254600160a060020a03163314611ed75760405160e560020a62461bcd028152600401610b6a906135ec565b6109c48311158015611eeb57506109c48211155b8015611ef957506109c48111155b611f485760405160e560020a62461bcd02815260206004820152601560248201527f43616e6e6f7420657863656564206d6178696d756d00000000000000000000006044820152606401610b6a565b600b839055600c829055600d81905560408051848152602081018490529081018290527fad292e707e8a094bdd1cff9ec5263d8e4e538d8e6e457c032a2dbf7174ebec4b90606001610d64565b600254600160a060020a03163314611fc25760405160e560020a62461bcd028152600401610b6a906135ec565b600160a060020a038116611feb5760405160e560020a62461bcd028152600401610b6a90613890565b6000819050600081600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa158015612033573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612057919061379d565b600160a060020a031663e6a439053084600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156120a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cb919061379d565b60405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381865afa158015612114573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612138919061379d565b9050600160a060020a0381166122b55781600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa158015612189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ad919061379d565b600160a060020a031663c9c653963084600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156121fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612221919061379d565b60405160e060020a63ffffffff8516028152600160a060020a039283166004820152911660248201526044016020604051808303816000875af115801561226c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612290919061379d565b60188054600160a060020a031916600160a060020a03929092169190911790556122d1565b60188054600160a060020a031916600160a060020a0383161790555b6017805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a03858116820292909217928390556113c79230929190041660001961255e565b600254600160a060020a031633146123465760405160e560020a62461bcd028152600401610b6a906135ec565b600254604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610bb2573d6000803e3d6000fd5b600254600160a060020a031633146123ad5760405160e560020a62461bcd028152600401610b6a906135ec565b803b63ffffffff1661242a5760405160e560020a62461bcd02815260206004820152602260248201527f5374616b696e672061646472657373206d757374206265206120636f6e74726160448201527f63740000000000000000000000000000000000000000000000000000000000006064820152608401610b6a565b600e8054600160a060020a031916600160a060020a0392909216919091179055565b600254600160a060020a031633146124795760405160e560020a62461bcd028152600401610b6a906135ec565b600160a060020a0382166124a25760405160e560020a62461bcd028152600401610b6a90613890565b806124c95750600160a060020a03166000908152600660205260409020805460ff19169055565b60035415612533576203f480600354426124e39190613820565b116125335760405160e560020a62461bcd02815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610b6a565b600160a060020a0382166000908152600660205260409020805460ff19166001179055426003555050565b600160a060020a0383166125b75760405160e560020a62461bcd02815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b6a565b600160a060020a0382166126105760405160e560020a62461bcd02815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b6a565b600160a060020a0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000805460ff19166001178155600f5460649061268e9084613786565b612698919061375e565b905060006126a68284613820565b6002549091506126c1903090600160a060020a031684612a0e565b50600e546126da903090600160a060020a031683612a0e565b50600e546040517fd6b3113500000000000000000000000000000000000000000000000000000000815260048101839052600160a060020a039091169063d6b3113590602401600060405180830381600087803b15801561273a57600080fd5b505af115801561274e573d6000803e3d6000fd5b50506000805460ff191690555050505050565b600160a060020a03871660009081526005602052604081208054879190839061278b908490613820565b90915550600090508561279e57866127aa565b6127aa8986868a612fd9565b600160a060020a0389166000908152600560205260408120805492935083929091906127d790849061363c565b9250508190555087600160a060020a031689600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161282391815260200190565b60405180910390a350600198975050505050505050565b601754610100900460ff16156128bb5760405160e560020a62461bcd02815260206004820152602260248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401610b6a565b600160a060020a0381166000908152600a6020908152604091829020805460ff1990811660019081179092556017805461ff001916610100179055601480549091168217905591519182527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579101611c46565b60175460ff16156129845760405160e560020a62461bcd02815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b6a565b601754610100900460ff166129de5760405160e560020a62461bcd02815260206004820152601760248201527f4c6971756964697479206d7573742062652061646465640000000000000000006044820152606401610b6a565b6017805460ff19166001908117909155805462989680916129ff9190613786565b612a09919061375e565b601655565b6000600160a060020a038416612a8f5760405160e560020a62461bcd02815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b6a565b600160a060020a038316612b0e5760405160e560020a62461bcd02815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b6a565b60008211612b875760405160e560020a62461bcd02815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b6a565b600160a060020a0384166000908152600660205260408120548190819060ff1615612bb55760019250612be3565b600160a060020a03861660009081526006602052604090205460ff1615612bdf5760019150612be3565b5060015b612bed8787613096565b15612dec578280612bfb5750815b15612d175760175460ff16612c555760405160e560020a62461bcd02815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b6a565b600160a060020a03871660009081526009602052604090205460ff16158015612c975750600160a060020a03861660009081526009602052604090205460ff16155b15612d1757601254851115612d175760405160e560020a62461bcd02815260206004820152603060248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f72616e73616374696f6e416d6f756e74000000000000000000000000000000006064820152608401610b6a565b601754600160a060020a03878116620100009092041614801590612d39575081155b15612dec57600160a060020a03861660009081526009602052604090205460ff16612dec5760135485612d6b88611a40565b612d75919061363c565b1115612dec5760405160e560020a62461bcd02815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610b6a565b600160a060020a03871660009081526008602052604090205460019060ff1680612e2e5750600160a060020a03871660009081526008602052604090205460ff165b15612e37575060005b8215612fba5760005460ff16158015612e52575060145460ff165b15612fba576000612e6230611a40565b90506016548110612fb8576000806000612e7b4261316d565b33600090815260196020526040902060010154929550909350915081148015612eb557503360009081526019602052604090206002015482145b8015612ed257503360009081526019602052604090206003015483145b15612f705760045433600090815260196020526040902054612ef5908c9061363c565b1115612f465760405160e560020a62461bcd02815260206004820152601d60248201527f65786365656465642073656c6c206c696d697420666f7220746f6461790000006044820152606401610b6a565b33600090815260196020526040812080548c9290612f6590849061363c565b90915550612f839050565b3360009081526019602052604090208a90555b33600090815260196020526040902060018101829055600281018390556003018390556016549350612fb484612671565b5050505b505b42601155612fcd88888884888888612761565b98975050505050505050565b6000808415612feb5750600b54612fff565b8315612ffa5750600c54612fff565b50600d545b600061271061300e8386613786565b613018919061375e565b3060009081526005602052604081208054929350839290919061303c90849061363c565b90915550506040518181523090600160a060020a038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361308b8185613820565b979650505050505050565b600254600090600160a060020a038481169116148015906130c55750600254600160a060020a03838116911614155b80156130dc5750600254600160a060020a03163214155b80156131015750600160a060020a0382166000908152600a602052604090205460ff16155b80156131265750600160a060020a0383166000908152600a602052604090205460ff16155b801561313d5750600160a060020a03821661dead14155b80156131515750600160a060020a03821615155b80156131665750600160a060020a0383163014155b9392505050565b6000808061317f62015180850461318c565b9196909550909350915050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816131e9576131e9613745565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600060208083528351808285015260005b8181101561325557858101830151858201604001528201613239565b506000604082860101526040601f19601f8301168501019250505092915050565b600160a060020a0381168114610bb257600080fd5b6000806040838503121561329e57600080fd5b82356132a981613276565b946020939093013593505050565b6000602082840312156132c957600080fd5b813561316681613276565b6000806000606084860312156132e957600080fd5b505081359360208301359350604090920135919050565b60006020828403121561331257600080fd5b5035919050565b60e060020a634e487b7102600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561335b5761335b613319565b604052919050565b600067ffffffffffffffff82111561337d5761337d613319565b5060209081020190565b600082601f83011261339857600080fd5b813560206133ad6133a883613363565b613332565b828152918102840181019181810190868411156133c957600080fd5b8286015b848110156133e457803583529183019183016133cd565b509695505050505050565b6000806040838503121561340257600080fd5b823567ffffffffffffffff8082111561341a57600080fd5b818501915085601f83011261342e57600080fd5b8135602061343e6133a883613363565b8281529181028401810191818101908984111561345a57600080fd5b948201945b8386101561348157853561347281613276565b8252948201949082019061345f565b9650508601359250508082111561349757600080fd5b506134a485828601613387565b9150509250929050565b6000806000606084860312156134c357600080fd5b83356134ce81613276565b925060208401356134de81613276565b929592945050506040919091013590565b6000806040838503121561350257600080fd5b50508035926020909101359150565b8035801515811461352157600080fd5b919050565b6000806040838503121561353957600080fd5b823561354481613276565b915061355260208401613511565b90509250929050565b60006020828403121561356d57600080fd5b61316682613511565b6000806040838503121561358957600080fd5b823561359481613276565b915060208301356135a481613276565b809150509250929050565b6002810460018216806135c357607f821691505b6020821081036135e65760e060020a634e487b7102600052602260045260246000fd5b50919050565b60208082526018908201527f43616c6c6572206d75737420626520746865206f776e65720000000000000000604082015260600190565b60e060020a634e487b7102600052601160045260246000fd5b80820180821115610b3757610b37613623565b600181815b8085111561368c57816000190482111561367057613670613623565b8085161561367d57918102915b60029094049390800290613654565b509250929050565b6000826136a357506001610b37565b816136b057506000610b37565b81600181146136c657600281146136d0576136ed565b6001915050610b37565b60ff8411156136e1576136e1613623565b8360020a915050610b37565b5060208310610133831016604e8410600b8410161715613710575081810a610b37565b61371a838361364f565b806000190482111561372e5761372e613623565b029392505050565b600061316660ff841683613694565b60e060020a634e487b7102600052601260045260246000fd5b60008261376d5761376d613745565b500490565b60008261378157613781613745565b500690565b8082028115828204841417610b3757610b37613623565b6000602082840312156137af57600080fd5b815161316681613276565b6000806000606084860312156137cf57600080fd5b8351925060208401519150604084015190509250925092565b60e060020a634e487b7102600052603260045260246000fd5b600060ff821660ff810361381757613817613623565b60010192915050565b81810381811115610b3757610b37613623565b6020808252603c908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f206164647265737300000000606082015260800190565b6020808252600f908201527f496e76616c69642061646472657373000000000000000000000000000000000060408201526060019056fea2646970667358221220861e2d67d83f19dfcf0c1387249924254bcefe76b086b966dacdd9464517ea1e64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b7c0f23542a87e7e5a3978249f7ec5c3ef431cb6
-----Decoded View---------------
Arg [0] : _stakingAddress (address): 0xB7c0F23542A87e7E5A3978249F7ec5C3eF431CB6
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b7c0f23542a87e7e5a3978249f7ec5c3ef431cb6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)