ERC-20
Overview
Max Total Supply
100,000,000,000 LunaT
Holders
397
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
7,741,507.751866258 LunaTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Lunatics
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; // by three they come // by three they go // and in between in fiery row // burn the white-robed ranks of woe // o/ interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address from, address to, uint256 amount ) external returns (bool); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IFactory{ function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IRouter { 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 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; } contract RewardsTracker is Ownable { mapping(address => uint256) public userShares; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; mapping(address => bool) public excludedFromDividends; mapping(address => uint256) public lastClaimTime; mapping(address => uint256) public elegibleUsersIndex; mapping(address => bool ) public isElegible; address[] elegibleUsers; IRouter public rewardRouter; address public rewardToken; uint256 constant internal magnitude = 2**128; uint256 internal magnifiedDividendPerShare; uint256 public totalDividends; uint256 public totalDividendsWithdrawn; uint256 public totalShares; uint256 public minBalanceForRewards; uint256 public claimDelay; uint256 public currentIndex; event ExcludeFromDividends(address indexed account, bool value); event Claim(address indexed account, uint256 amount); event DividendWithdrawn(address indexed to, uint256 weiAmount); constructor(address _router, address _rewardToken) { rewardRouter = IRouter(_router); rewardToken = _rewardToken; } function excludeFromDividends(address account, bool value) external onlyOwner { require(excludedFromDividends[account] != value); excludedFromDividends[account] = value; if(value == true){ _setBalance(account, 0); } else{ _setBalance(account, userShares[account]); } emit ExcludeFromDividends(account, value); } function _setRewardToken(address newToken) internal{ rewardToken = newToken; } function getAccount(address account) public view returns (uint256 withdrawableUserDividends, uint256 totalUserDividends, uint256 lastUserClaimTime, uint256 withdrawnUserDividends) { withdrawableUserDividends = withdrawableDividendOf(account); totalUserDividends = accumulativeDividendOf(account); lastUserClaimTime = lastClaimTime[account]; withdrawnUserDividends = withdrawnDividends[account]; } function setBalance(address account, uint256 newBalance) internal { if(excludedFromDividends[account]) { return; } _setBalance(account, newBalance); } function _setMinBalanceForRewards(uint256 newMinBalance) internal { minBalanceForRewards = newMinBalance; } function autoDistribute(uint256 gasAvailable) public { uint256 size = elegibleUsers.length; if(size == 0) return; uint256 gasSpent = 0; uint256 gasLeft = gasleft(); uint256 lastIndex = currentIndex; uint256 iterations = 0; while(gasSpent < gasAvailable && iterations < size){ if(lastIndex >= size){ lastIndex = 0; } address account = elegibleUsers[lastIndex]; if(lastClaimTime[account] + claimDelay < block.timestamp){ _processAccount(account); } lastIndex++; iterations++; gasSpent += gasLeft - gasleft(); gasLeft = gasleft(); } currentIndex = lastIndex; } function _processAccount(address account) internal returns(bool){ uint256 amount = _withdrawDividendOfUser(account); if(amount > 0) { lastClaimTime[account] = block.timestamp; emit Claim(account, amount); return true; } return false; } /* function distributeDividends() external payable { if (msg.value > 0) { _distributeDividends(msg.value); } } no need for erc20 tokens */ function _distributeDividends(uint256 amount) internal { require(totalShares > 0,"there are no shares"); magnifiedDividendPerShare = magnifiedDividendPerShare + (amount * magnitude / totalShares); totalDividends= totalDividends + amount; } function _withdrawDividendOfUser(address user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] += _withdrawableDividend; totalDividendsWithdrawn += _withdrawableDividend; emit DividendWithdrawn(user, _withdrawableDividend); (bool success) = swapEthForCustomToken(user, _withdrawableDividend); if(!success) { (bool secondSuccess,) = payable(user).call{value: _withdrawableDividend, gas: 3000}(""); if(!secondSuccess) { withdrawnDividends[user] -= _withdrawableDividend; totalDividendsWithdrawn -= _withdrawableDividend; return 0; } } return _withdrawableDividend; } return 0; } function swapEthForCustomToken(address user, uint256 amt) internal returns (bool) { address[] memory path = new address[](2); path[0] = rewardRouter.WETH(); path[1] = rewardToken; try rewardRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amt}(0, path, user, block.timestamp) { return true; } catch { return false; } } function dividendOf(address _owner) public view returns(uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view returns(uint256) { return accumulativeDividendOf(_owner) - withdrawnDividends[_owner]; } function withdrawnDividendOf(address _owner) public view returns(uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view returns(uint256) { return uint256(int256(magnifiedDividendPerShare * userShares[_owner]) + magnifiedDividendCorrections[_owner]) / magnitude; } function addShares(address account, uint256 value) internal { userShares[account] += value; totalShares += value; magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] - int256(magnifiedDividendPerShare * value); } function removeShares(address account, uint256 value) internal { userShares[account] -= value; totalShares -= value; magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] + int256(magnifiedDividendPerShare * value); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = userShares[account]; if(currentBalance > 0) { _processAccount(account); } if(newBalance < minBalanceForRewards && isElegible[account]){ isElegible[account] = false; elegibleUsers[elegibleUsersIndex[account]] = elegibleUsers[elegibleUsers.length - 1]; elegibleUsersIndex[elegibleUsers[elegibleUsers.length - 1]] = elegibleUsersIndex[account]; elegibleUsers.pop(); removeShares(account, currentBalance); } else{ if(userShares[account] == 0){ isElegible[account] = true; elegibleUsersIndex[account] = elegibleUsers.length; elegibleUsers.push(account); } if(newBalance > currentBalance) { uint256 mintAmount = newBalance - currentBalance; addShares(account, mintAmount); } else if(newBalance < currentBalance) { uint256 burnAmount = currentBalance - newBalance; removeShares(account, burnAmount); } } } } library Address { function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, 'Address: insufficient balance'); (bool success, ) = recipient.call{value: amount}(''); require(success, 'Address: unable to send value, recipient may have reverted'); } } contract Lunatics is ERC20, Ownable, RewardsTracker { using Address for address payable; //custom IRouter public router; //address address public pair; //bool bool public swapAndLiquifyEnabled = true; bool public limitSells = true; bool public limitBuys = true; bool public feeStatus = true; bool public buyFeeStatus = true; bool public sellFeeStatus = true; bool public blockMultiBuys = true; bool public marketActive; bool private isInternalTransaction; //uint uint public gasLimit = 300_000; uint public minimumTokensBeforeSwap; uint public tokensToSwap; uint public intervalSecondsForSwap = 30; uint public minimumWeiForTokenomics = 1 * 10**17; // 0.1 ETH uint public maxBuyTxAmount; uint public maxSellTxAmount; uint private startTimeForSwap; uint private marketActiveAt; //struct struct userData { uint lastBuyTime; } struct Fees { uint64 rewards; uint64 marketing; uint64 buyback; } struct FeesAddress { address marketing; address buyback; } FeesAddress public feesAddress = FeesAddress( 0x2d00FB5E5890EBF1B270fa4009E19052305F8074, 0x8A52164f5612f0Cd075b8d5eA4a6b22d67335734 ); Fees public buyFees = Fees(3, 3, 2); Fees public sellFees = Fees(3, 3, 2); uint256 public totalBuyFee = 8; uint256 public totalSellFee = 8; //mapping mapping (address => bool) public premarketUser; mapping (address => bool) public excludedFromFees; mapping (address => userData) public userLastTradeData; mapping(address => bool) public isPair; event ContractSwap(uint256 date, uint256 amount); event PremarketUserChanged(bool status, address indexed user); event ExcludeFromFeesChanged(bool status, address indexed user); event MarketingFeeCollected(uint amount); event BuybackFeeCollected(uint amount); event FeesStatusChanged(bool feesActive, bool buy, bool sell); event SwapSystemChanged(bool status, uint256 intervalSecondsToWait, uint256 minimumToSwap, uint256 tokensToSwap); event MaxSellChanged(uint256 amount); event MaxBuyChanged(uint256 amount); event BlockMultiBuysChange(bool status); event LimitSellChanged(bool status); event LimitBuyChanged(bool status); event MarketStatusChanged(bool status, uint256 date); event TokenRemovedFromContract(address indexed tokenAddress, uint256 amount); event PairUpdated(address indexed pair); event RouterUpdated(address indexed router); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue); event SendDividends(uint256 tokensSwapped, uint256 amount); event ProcessedDividendTracker( uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor ); constructor(address _router, address _rewardToken) ERC20('Lunatics', 'LunaT') RewardsTracker(_router, _rewardToken) { router = IRouter(_router); pair = IFactory(router.factory()).createPair(address(this), router.WETH()); uint _totalSupply = 100_000_000_000 * (10**9); maxSellTxAmount = _totalSupply / 100; // 1% supply maxBuyTxAmount = _totalSupply / 100; // 1% supply minimumTokensBeforeSwap = _totalSupply / 10000; //0.01% supply tokensToSwap = _totalSupply / 10000; //0.01% supply minBalanceForRewards = 500_000 * 10 ** 9; // 500k claimDelay = 60*60; // 1 hour // exclude from receiving dividends excludedFromDividends[address(this)] = true; excludedFromDividends[owner()] = true; excludedFromDividends[address(0xdead)] = true; excludedFromDividends[address(_router)] = true; excludedFromDividends[address(pair)] = true; // exclude from paying fees or having max transaction amount excludedFromFees[owner()] = true; excludedFromFees[address(this)] = true; excludedFromFees[feesAddress.marketing] = true; excludedFromFees[feesAddress.buyback] = true; premarketUser[owner()] = true; isPair[pair] = true; // _mint is an internal function in ERC20.sol that is only called here, // and CANNOT be called ever again _mint(owner(), _totalSupply); } receive() external payable {} function decimals() public pure override returns(uint8) { return 9; } /// @notice Manual claim the dividends function claim() external { super._processAccount(payable(msg.sender)); } // to take leftover(tokens) from contract function transferToken(address _token, address _to, uint _value) external onlyOwner returns(bool _sent){ if(_value == 0) { _value = IERC20(_token).balanceOf(address(this)); } _sent = IERC20(_token).transfer(_to, _value); emit TokenRemovedFromContract(_token, _value); } function transferETH() external onlyOwner { uint256 ETHbalance = address(this).balance; payable(owner()).sendValue(ETHbalance); } //switch functions function switchMarketActive(bool _state) external onlyOwner { //once marketActive is set to true, cannot be set back to false require(marketActive == false, "Cannot stop trade once is open"); marketActive = _state; if(_state) { marketActiveAt = block.timestamp; } emit MarketStatusChanged(_state, block.timestamp); } function switchLimitSells(bool _state) external onlyOwner { limitSells = _state; emit LimitSellChanged(_state); } function updateRouter(address newRouter, bool _createPair) external onlyOwner { router = IRouter(newRouter); if(_createPair) { address _pair = IFactory(router.factory()) .createPair(address(this), router.WETH()); pair = _pair; emit PairUpdated(pair); } else { router = IRouter(newRouter); } emit RouterUpdated(newRouter); } function setBlockMultiBuys(bool _status) external onlyOwner { blockMultiBuys = _status; emit BlockMultiBuysChange(_status); } function switchLimitBuys(bool _state) external onlyOwner { limitBuys = _state; emit LimitBuyChanged(_state); } function setMaxSellTxAmount(uint _value) external onlyOwner { maxSellTxAmount = _value*10**decimals(); require(maxSellTxAmount >= totalSupply() / 1000,"maxSellTxAmount should be at least 0.1% of total supply."); emit MaxSellChanged(_value); } function setMaxBuyTxAmount(uint _value) external onlyOwner { maxBuyTxAmount = _value*10**decimals(); require(maxBuyTxAmount >= totalSupply() / 1000,"maxBuyTxAmount should be at least 0.1% of total supply."); emit MaxBuyChanged(maxBuyTxAmount); } function setFeeStatus(bool buy, bool sell, bool _state) external onlyOwner { feeStatus = _state; buyFeeStatus = buy; sellFeeStatus = sell; emit FeesStatusChanged(_state,buy,sell); } function setSwapAndLiquify(bool _state, uint _intervalSecondsForSwap, uint _minimumTokensBeforeSwap, uint _tokensToSwap) external onlyOwner { swapAndLiquifyEnabled = _state; intervalSecondsForSwap = _intervalSecondsForSwap; minimumTokensBeforeSwap = _minimumTokensBeforeSwap*10**decimals(); tokensToSwap = _tokensToSwap*10**decimals(); require(minimumTokensBeforeSwap > 1000000000, "More than one token required"); require(tokensToSwap > 1000000000, "More than one token required"); require(tokensToSwap <= minimumTokensBeforeSwap,"You cannot swap more then the minimum amount"); require(tokensToSwap <= totalSupply() / 1000,"token to swap limited to 0.1% supply"); emit SwapSystemChanged(_state,_intervalSecondsForSwap,_minimumTokensBeforeSwap,_tokensToSwap); } // mappings functions function setPremarketUser(address _target, bool _status) external onlyOwner { premarketUser[_target] = _status; emit PremarketUserChanged(_status,_target); } function KKMigration(address[] memory _address, uint256[] memory _amount) external onlyOwner { for(uint i=0; i< _amount.length; i++){ address adr = _address[i]; uint amnt = _amount[i] *10**decimals(); super._transfer(owner(), adr, amnt); } // events from ERC20 } function excludeFromFees(address account, bool excluded) public onlyOwner { excludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { excludedFromFees[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } function setRewardToken(address newToken) external onlyOwner { super._setRewardToken(newToken); } function setMarketingWallet(address newWallet) external onlyOwner { feesAddress.marketing = newWallet; } function setBuybackWallet(address newWallet) external onlyOwner { feesAddress.buyback = newWallet; } function setClaimDelay(uint256 amountInSeconds) external onlyOwner { claimDelay = amountInSeconds; } function setBuyTaxes( uint64 _rewards, uint64 _marketing, uint64 _buyback ) external onlyOwner { totalBuyFee = _rewards + _marketing + _buyback; require(totalBuyFee <= 15, "Total buy fees cannot be more than 15%"); buyFees = Fees(_rewards, _marketing, _buyback); } function setSellTaxes( uint64 _rewards, uint64 _marketing, uint64 _buyback ) external onlyOwner { totalSellFee = _rewards + _marketing + _buyback; require(totalSellFee <= 15, "Total sell fees cannot be more than 15%"); sellFees = Fees(_rewards, _marketing, _buyback); } function setGasLimit(uint256 newGasLimit) external onlyOwner { gasLimit = newGasLimit; } function setMinBalanceForRewards(uint256 minBalance) external onlyOwner { minBalanceForRewards = minBalance; } function setPair(address newPair, bool value) external onlyOwner { isPair[newPair] = value; if (value) { excludedFromDividends[newPair] = true; } } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); emit ContractSwap(block.timestamp, tokenAmount); } function swapTokens(uint256 contractTokenBalance) private { isInternalTransaction = true; swapTokensForEth(contractTokenBalance); isInternalTransaction = false; } //////////////////////// // Transfer Functions // //////////////////////// function _transfer(address from, address to, uint256 amount) internal override { uint trade_type = 0; // market status flag if(!marketActive) { require(premarketUser[from],"cannot trade before the market opening"); } // normal transaction if(!isInternalTransaction) { // tx limits //buy if(isPair[from]) { trade_type = 1; // limits if(!excludedFromFees[to]) { // tx limit if(limitBuys) { require(amount <= maxBuyTxAmount, "maxBuyTxAmount Limit Exceeded"); // multi-buy limit if(blockMultiBuys) { require(marketActiveAt + 7 < block.timestamp,"You cannot buy at launch."); require(userLastTradeData[tx.origin].lastBuyTime + 3 <= block.timestamp,"You cannot do multi-buy orders."); userLastTradeData[tx.origin].lastBuyTime = block.timestamp; } } } } //sell else if(isPair[to]) { trade_type = 2; bool overMinimumTokenBalance = balanceOf(address(this)) >= minimumTokensBeforeSwap; // marketing auto-eth // if the swap is enabled and there are tokens in pool if (swapAndLiquifyEnabled && balanceOf(pair) > 0 && overMinimumTokenBalance && startTimeForSwap + intervalSecondsForSwap <= block.timestamp) { // if contract has X tokens, not sold since Y time, sell Z tokens startTimeForSwap = block.timestamp; // sell to eth swapTokens(tokensToSwap); } // limits if(!excludedFromFees[from]) { // tx limit if(limitSells) { require(amount <= maxSellTxAmount, "maxSellTxAmount Limit Exceeded"); } } } // fees redistribution if(address(this).balance > minimumWeiForTokenomics) { //marketing uint256 caBalance = address(this).balance; uint256 marketingTokens = caBalance * sellFees.marketing / totalSellFee; (bool success,) = address(feesAddress.marketing).call{value: marketingTokens}(""); if(success) { emit MarketingFeeCollected(marketingTokens); } //buyback uint256 buybackTokens = caBalance * sellFees.buyback / totalSellFee; (bool success1,) = address(feesAddress.buyback).call{value: buybackTokens}(""); if(success1) { emit BuybackFeeCollected(buybackTokens); } //rewards uint256 dividends = caBalance * sellFees.rewards / totalSellFee; super._distributeDividends(dividends); super.autoDistribute(gasLimit); } // fees management if(feeStatus) { // buy if(trade_type == 1 && buyFeeStatus && !excludedFromFees[to]) { uint txFees = amount * totalBuyFee / 100; amount -= txFees; super._transfer(from, address(this), txFees); } //sell if(trade_type == 2 && sellFeeStatus && !excludedFromFees[from]) { uint txFees = amount * totalSellFee / 100; amount -= txFees; super._transfer(from, address(this), txFees); } // no wallet to wallet tax } } // transfer tokens super._transfer(from, to, amount); super.setBalance(from, balanceOf(from)); super.setBalance(to, balanceOf(to)); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"}],"stateMutability":"nonpayable","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":"bool","name":"status","type":"bool"}],"name":"BlockMultiBuysChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuybackFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"date","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ContractSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ExcludeFromFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"feesActive","type":"bool"},{"indexed":false,"internalType":"bool","name":"buy","type":"bool"},{"indexed":false,"internalType":"bool","name":"sell","type":"bool"}],"name":"FeesStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"LimitBuyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"LimitSellChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":false,"internalType":"uint256","name":"date","type":"uint256"}],"name":"MarketStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MarketingFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxBuyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxSellChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"}],"name":"PairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"PremarketUserChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"}],"name":"RouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":false,"internalType":"uint256","name":"intervalSecondsToWait","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minimumToSwap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensToSwap","type":"uint256"}],"name":"SwapSystemChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenRemovedFromContract","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"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"KKMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":[{"internalType":"uint256","name":"gasAvailable","type":"uint256"}],"name":"autoDistribute","outputs":[],"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":"blockMultiBuys","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint64","name":"rewards","type":"uint64"},{"internalType":"uint64","name":"marketing","type":"uint64"},{"internalType":"uint64","name":"buyback","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"elegibleUsersIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesAddress","outputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"buyback","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"uint256","name":"withdrawableUserDividends","type":"uint256"},{"internalType":"uint256","name":"totalUserDividends","type":"uint256"},{"internalType":"uint256","name":"lastUserClaimTime","type":"uint256"},{"internalType":"uint256","name":"withdrawnUserDividends","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"intervalSecondsForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isElegible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitBuys","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitSells","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBalanceForRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumWeiForTokenomics","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"premarketUser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRouter","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint64","name":"rewards","type":"uint64"},{"internalType":"uint64","name":"marketing","type":"uint64"},{"internalType":"uint64","name":"buyback","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setBlockMultiBuys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_rewards","type":"uint64"},{"internalType":"uint64","name":"_marketing","type":"uint64"},{"internalType":"uint64","name":"_buyback","type":"uint64"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInSeconds","type":"uint256"}],"name":"setClaimDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"bool","name":"sell","type":"bool"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"setFeeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newGasLimit","type":"uint256"}],"name":"setGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxBuyTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxSellTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minBalance","type":"uint256"}],"name":"setMinBalanceForRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setPremarketUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_rewards","type":"uint64"},{"internalType":"uint64","name":"_marketing","type":"uint64"},{"internalType":"uint64","name":"_buyback","type":"uint64"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"},{"internalType":"uint256","name":"_intervalSecondsForSwap","type":"uint256"},{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"},{"internalType":"uint256","name":"_tokensToSwap","type":"uint256"}],"name":"setSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"switchLimitBuys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"switchLimitSells","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"switchMarketActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"bool","name":"_createPair","type":"bool"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLastTradeData","outputs":[{"internalType":"uint256","name":"lastBuyTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6018805466ffffffffffffff60a01b1916660101010101010160a01b179055620493e0601955601e601c5567016345785d8a0000601d55732d00fb5e5890ebf1b270fa4009e19052305f80746080819052738a52164f5612f0cd075b8d5ea4a6b22d6733573460a0819052602280546001600160a01b0319908116909317905560238054909216179055600360c081905260e08190526002610100819052602480546001600160c01b0319908116700200000000000000030000000000000003908117909255610180604052610120849052610140939093526101609190915260258054909216179055600860268190556027553480156200010057600080fd5b50604051620049d8380380620049d88339810160408190526200012391620006b7565b8181604051806040016040528060088152602001674c756e617469637360c01b81525060405180604001604052806005815260200164131d5b985560da1b815250816003908162000175919062000793565b50600462000184828262000793565b505050620001a16200019b6200057960201b60201c565b6200057d565b600e80546001600160a01b03199081166001600160a01b0394851617909155600f80548216928416929092179091556017805490911691841691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024191906200085f565b6001600160a01b031663c9c6539630601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca91906200085f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e91906200085f565b601880546001600160a01b0319166001600160a01b039290921691909117905568056bc75e2d631000006200037560648262000884565b601f556200038560648262000884565b601e55620003966127108262000884565b601a55620003a76127108262000884565b601b556601c6bf52634000601455610e106015553060009081526009602081905260408220805460ff1916600190811790915591620003ee6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560099093527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580548516600190811790915587821684528284208054861682179055601854909116835290822080549093168117909255602990620004896005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260299093528183208054851660019081179091556022548216845282842080548616821790556023549091168352908220805490931681179092556028906200050b6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556018549091168152602b90925290208054909116600117905562000570620005696005546001600160a01b031690565b82620005cf565b505050620008cf565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200062a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200063e9190620008a7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b80516001600160a01b0381168114620006b257600080fd5b919050565b60008060408385031215620006cb57600080fd5b620006d6836200069a565b9150620006e6602084016200069a565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200071a57607f821691505b6020821081036200073b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200069557600081815260208120601f850160051c810160208610156200076a5750805b601f850160051c820191505b818110156200078b5782815560010162000776565b505050505050565b81516001600160401b03811115620007af57620007af620006ef565b620007c781620007c0845462000705565b8462000741565b602080601f831160018114620007ff5760008415620007e65750858301515b600019600386901b1c1916600185901b1785556200078b565b600085815260208120601f198616915b8281101562000830578886015182559484019460019091019084016200080f565b50858210156200084f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200087257600080fd5b6200087d826200069a565b9392505050565b600082620008a257634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008c957634e487b7160e01b600052601160045260246000fd5b92915050565b6140f980620008df6000396000f3fe6080604052600436106104ae5760003560e01c806391b89fba1161026b578063c492f0461161014f578063e4748b9e116100c1578063f5537ede11610085578063f5537ede14610f49578063f68016b714610f69578063f7c618c114610f7f578063f887ea4014610f9f578063f91af3db14610fbf578063fbcbc0f114610fdf57600080fd5b8063e4748b9e14610e82578063e5e31b1314610eb8578063e76ad1f114610ee8578063ee7d72b414610f09578063f2fde38b14610f2957600080fd5b8063dbe66ca011610113578063dbe66ca014610d70578063dd5f739814610da0578063dd62ed3e14610dc0578063de69b3aa14610de0578063e0f3ccf514610e0d578063e28d717b14610e6d57600080fd5b8063c492f04614610ce4578063d1927fde14610d04578063d2d2162914610d24578063d2d7ad8314610d44578063d851fd0d14610d5a57600080fd5b8063a87e5da4116101e8578063aafd847a116101ac578063aafd847a14610be4578063ac252bd314610c1a578063b77cf9c614610c4a578063b912c7d714610c77578063bda258e414610c97578063c024666814610cc457600080fd5b8063a87e5da414610b4d578063a8aa1b3114610b63578063a8b9d24014610b83578063a9059cbb14610ba3578063aaa3115114610bc357600080fd5b8063997664d71161022f578063997664d714610abb578063997836d414610ad15780639d9241ec14610b015780639e1e066114610b17578063a457c2d714610b2d57600080fd5b806391b89fba146109fe57806391dd75e714610a1e578063958f973514610a6557806395d89b4114610a8657806397afefeb14610a9b57600080fd5b80634a74bb02116103925780635d098b381161030f5780637582c4de116102d35780637582c4de1461093f57806376915cd41461095f57806386a22eff1461097f5780638aee81271461099f5780638da5cb5b146109bf5780638ef71b1c146109dd57600080fd5b80635d098b38146108935780636d052ede146108b357806370a08231146108d457806370cbe56c1461090a578063715018a61461092a57600080fd5b80635561e1f6116103565780635561e1f6146107f857806359b107b91461080e5780635a3bb989146108245780635b3c6e011461085c5780635c67ed9c1461087d57600080fd5b80634a74bb02146107525780634e71d92d146107735780634e7b827f146107885780634f97f4c1146107b857806354bb5070146107d857600080fd5b806323b872dd1161042b5780632e145236116103ef5780632e145236146106a057806330219d4f146106c0578063313ce567146106e057806339509351146106fc5780633a1920f71461071c5780633a98ef391461073c57600080fd5b806323b872dd1461061e57806326987b601461063e578063272ecbb31461065457806327ce01471461066a5780632b8939291461068a57600080fd5b806317c6d7481161047257806317c6d7481461059257806318160ddd146105b25780631a29c9d3146105c75780631c8ec299146105e85780631d0adc07146105fe57600080fd5b80630483f7a0146104ba57806306fdde03146104dc578063095ea7b314610507578063117e8df91461053757806314fa7dbb1461055757600080fd5b366104b557005b600080fd5b3480156104c657600080fd5b506104da6104d53660046138ba565b61101f565b005b3480156104e857600080fd5b506104f16110ff565b6040516104fe91906138f3565b60405180910390f35b34801561051357600080fd5b50610527610522366004613941565b611191565b60405190151581526020016104fe565b34801561054357600080fd5b506104da61055236600461396d565b6111ab565b34801561056357600080fd5b50610584610572366004613991565b600b6020526000908152604090205481565b6040519081526020016104fe565b34801561059e57600080fd5b506104da6105ad3660046139ae565b61120b565b3480156105be57600080fd5b50600254610584565b3480156105d357600080fd5b5060185461052790600160a81b900460ff1681565b3480156105f457600080fd5b5061058460155481565b34801561060a57600080fd5b506104da610619366004613991565b6112ea565b34801561062a57600080fd5b506105276106393660046139c7565b611314565b34801561064a57600080fd5b5061058460165481565b34801561066057600080fd5b50610584601c5481565b34801561067657600080fd5b50610584610685366004613991565b611338565b34801561069657600080fd5b50610584601b5481565b3480156106ac57600080fd5b506104da6106bb366004613a24565b611383565b3480156106cc57600080fd5b506104da6106db36600461396d565b611475565b3480156106ec57600080fd5b50604051600981526020016104fe565b34801561070857600080fd5b50610527610717366004613941565b611535565b34801561072857600080fd5b506104da6107373660046139ae565b611557565b34801561074857600080fd5b5061058460135481565b34801561075e57600080fd5b5060185461052790600160a01b900460ff1681565b34801561077f57600080fd5b506104da611564565b34801561079457600080fd5b506105276107a3366004613991565b60096020526000908152604090205460ff1681565b3480156107c457600080fd5b506104da6107d3366004613a67565b611570565b3480156107e457600080fd5b506104da6107f3366004613a24565b61179d565b34801561080457600080fd5b5061058460145481565b34801561081a57600080fd5b5061058460265481565b34801561083057600080fd5b50600e54610844906001600160a01b031681565b6040516001600160a01b0390911681526020016104fe565b34801561086857600080fd5b5060185461052790600160d01b900460ff1681565b34801561088957600080fd5b50610584601d5481565b34801561089f57600080fd5b506104da6108ae366004613991565b61188b565b3480156108bf57600080fd5b5060185461052790600160b01b900460ff1681565b3480156108e057600080fd5b506105846108ef366004613991565b6001600160a01b031660009081526020819052604090205490565b34801561091657600080fd5b506104da6109253660046139ae565b6118b5565b34801561093657600080fd5b506104da6118c2565b34801561094b57600080fd5b506104da61095a3660046138ba565b6118d6565b34801561096b57600080fd5b506104da61097a36600461396d565b611936565b34801561098b57600080fd5b506104da61099a3660046138ba565b61198b565b3480156109ab57600080fd5b506104da6109ba366004613991565b6119e8565b3480156109cb57600080fd5b506005546001600160a01b0316610844565b3480156109e957600080fd5b5060185461052790600160c81b900460ff1681565b348015610a0a57600080fd5b50610584610a19366004613991565b611a0e565b348015610a2a57600080fd5b50602254602354610a45916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016104fe565b348015610a7157600080fd5b5060185461052790600160b81b900460ff1681565b348015610a9257600080fd5b506104f1611a19565b348015610aa757600080fd5b506104da610ab636600461396d565b611a28565b348015610ac757600080fd5b5061058460115481565b348015610add57600080fd5b50610527610aec366004613991565b600c6020526000908152604090205460ff1681565b348015610b0d57600080fd5b5061058460275481565b348015610b2357600080fd5b5061058460125481565b348015610b3957600080fd5b50610527610b48366004613941565b611a7d565b348015610b5957600080fd5b50610584601e5481565b348015610b6f57600080fd5b50601854610844906001600160a01b031681565b348015610b8f57600080fd5b50610584610b9e366004613991565b611af8565b348015610baf57600080fd5b50610527610bbe366004613941565b611b24565b348015610bcf57600080fd5b5060185461052790600160d81b900460ff1681565b348015610bf057600080fd5b50610584610bff366004613991565b6001600160a01b031660009081526008602052604090205490565b348015610c2657600080fd5b50610527610c35366004613991565b60286020526000908152604090205460ff1681565b348015610c5657600080fd5b50610584610c65366004613991565b600a6020526000908152604090205481565b348015610c8357600080fd5b506104da610c92366004613aa2565b611b32565b348015610ca357600080fd5b50610584610cb2366004613991565b602a6020526000908152604090205481565b348015610cd057600080fd5b506104da610cdf3660046138ba565b611bcc565b348015610cf057600080fd5b506104da610cff366004613aed565b611c2c565b348015610d1057600080fd5b506104da610d1f3660046138ba565b611cd9565b348015610d3057600080fd5b506104da610d3f366004613c3b565b611f0c565b348015610d5057600080fd5b50610584601a5481565b348015610d6657600080fd5b50610584601f5481565b348015610d7c57600080fd5b50610527610d8b366004613991565b60296020526000908152604090205460ff1681565b348015610dac57600080fd5b506104da610dbb3660046139ae565b611faf565b348015610dcc57600080fd5b50610584610ddb366004613cfc565b612090565b348015610dec57600080fd5b50610584610dfb366004613991565b60066020526000908152604090205481565b348015610e1957600080fd5b50602554610e43906001600160401b0380821691600160401b8104821691600160801b9091041683565b604080516001600160401b03948516815292841660208401529216918101919091526060016104fe565b348015610e7957600080fd5b506104da6120bb565b348015610e8e57600080fd5b50602454610e43906001600160401b0380821691600160401b8104821691600160801b9091041683565b348015610ec457600080fd5b50610527610ed3366004613991565b602b6020526000908152604090205460ff1681565b348015610ef457600080fd5b5060185461052790600160c01b900460ff1681565b348015610f1557600080fd5b506104da610f243660046139ae565b6120e9565b348015610f3557600080fd5b506104da610f44366004613991565b6120f6565b348015610f5557600080fd5b50610527610f643660046139c7565b61216c565b348015610f7557600080fd5b5061058460195481565b348015610f8b57600080fd5b50600f54610844906001600160a01b031681565b348015610fab57600080fd5b50601754610844906001600160a01b031681565b348015610fcb57600080fd5b506104da610fda3660046139ae565b6122a8565b348015610feb57600080fd5b50610fff610ffa366004613991565b612386565b6040805194855260208501939093529183015260608201526080016104fe565b6110276123d1565b6001600160a01b03821660009081526009602052604090205481151560ff90911615150361105457600080fd5b6001600160a01b0382166000908152600960205260409020805460ff19168215159081179091556001036110925761108d82600061242b565b6110b6565b6001600160a01b0382166000908152600660205260409020546110b690839061242b565b816001600160a01b03167fa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be826040516110f3911515815260200190565b60405180910390a25050565b60606003805461110e90613d2a565b80601f016020809104026020016040519081016040528092919081815260200182805461113a90613d2a565b80156111875780601f1061115c57610100808354040283529160200191611187565b820191906000526020600020905b81548152906001019060200180831161116a57829003601f168201915b5050505050905090565b60003361119f818585612697565b60019150505b92915050565b6111b36123d1565b60188054821515600160b01b0260ff60b01b199091161790556040517f9ae6a7edd4280cfe61f56b1e9d3643b6457d952ffb600cf213f86b16b4d9f6ae9061120090831515815260200190565b60405180910390a150565b600d54600081900361121b575050565b6000805a60165490915060005b858410801561123657508481105b156112e05784821061124757600091505b6000600d838154811061125c5761125c613d64565b60009182526020808320909101546015546001600160a01b03909116808452600a909252604090922054909250429161129491613d90565b10156112a5576112a3816127bb565b505b826112af81613da3565b93505081806112bd90613da3565b9250505a6112cb9085613dbc565b6112d59086613d90565b94505a935050611228565b5060165550505050565b6112f26123d1565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b600033611322858285612836565b61132d8585856128aa565b506001949350505050565b6001600160a01b0381166000908152600760209081526040808320546006909252822054601054600160801b929161136f91613dcf565b6113799190613de6565b6111a59190613e06565b61138b6123d1565b806113968385613e28565b6113a09190613e28565b6001600160401b03166026819055600f10156114125760405162461bcd60e51b815260206004820152602660248201527f546f74616c2062757920666565732063616e6e6f74206265206d6f7265207468604482015265616e2031352560d01b60648201526084015b60405180910390fd5b604080516060810182526001600160401b0394851680825293851660208201819052929094169301839052602480546001600160801b031916909217600160401b9091021767ffffffffffffffff60801b1916600160801b909202919091179055565b61147d6123d1565b601854600160d81b900460ff16156114d75760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f742073746f70207472616465206f6e6365206973206f70656e00006044820152606401611409565b6018805482158015600160d81b0260ff60d81b19909216919091179091556114fe57426021555b6040805182151581524260208201527fb89f558b3a2238cd6e750c4d3e29359faf8999130df57275857b0f526c34a4209101611200565b60003361119f8185856115488383612090565b6115529190613d90565b612697565b61155f6123d1565b601555565b61156d336127bb565b50565b6115786123d1565b6018805460ff60a01b1916600160a01b86151502179055601c83905560096115a190600a613f1d565b6115ab9083613dcf565b601a556115ba6009600a613f1d565b6115c49082613dcf565b601b55601a54633b9aca001061161c5760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e206f6e6520746f6b656e207265717569726564000000006044820152606401611409565b633b9aca00601b54116116715760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e206f6e6520746f6b656e207265717569726564000000006044820152606401611409565b601a54601b5411156116da5760405162461bcd60e51b815260206004820152602c60248201527f596f752063616e6e6f742073776170206d6f7265207468656e20746865206d6960448201526b1b9a5b5d5b48185b5bdd5b9d60a21b6064820152608401611409565b6103e86116e660025490565b6116f09190613e06565b601b54111561174d5760405162461bcd60e51b8152602060048201526024808201527f746f6b656e20746f2073776170206c696d6974656420746f20302e312520737560448201526370706c7960e01b6064820152608401611409565b60408051851515815260208101859052908101839052606081018290527feb7b7fa1011347d85e81a933db02079465f028f76206a1036ff5bf0204dff4a19060800160405180910390a150505050565b6117a56123d1565b806117b08385613e28565b6117ba9190613e28565b6001600160401b03166027819055600f10156118285760405162461bcd60e51b815260206004820152602760248201527f546f74616c2073656c6c20666565732063616e6e6f74206265206d6f7265207460448201526668616e2031352560c81b6064820152608401611409565b604080516060810182526001600160401b0394851680825293851660208201819052929094169301839052602580546001600160801b031916909217600160401b9091021767ffffffffffffffff60801b1916600160801b909202919091179055565b6118936123d1565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6118bd6123d1565b601455565b6118ca6123d1565b6118d46000612f40565b565b6118de6123d1565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527fd6d6233f0b1134357edd66b38101a1aca28e48fe4a8443d62539b3094f4c829e91016110f3565b61193e6123d1565b60188054821515600160d01b0260ff60d01b199091161790556040517fa782f6c2e8e0fd8eb0754687f2c0364d0258995fa68fd81bccbce1db15a1772d9061120090831515815260200190565b6119936123d1565b6001600160a01b0382166000908152602b60205260409020805460ff191682158015919091179091556119e4576001600160a01b0382166000908152600960205260409020805460ff191660011790555b5050565b6119f06123d1565b600f80546001600160a01b0319166001600160a01b03831617905550565b60006111a582611af8565b60606004805461110e90613d2a565b611a306123d1565b60188054821515600160a81b0260ff60a81b199091161790556040517f56f9d75db21c343a56e797891efe112f3dae73300cf42611a7ac965224e714c09061120090831515815260200190565b60003381611a8b8286612090565b905083811015611aeb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611409565b61132d8286868403612697565b6001600160a01b038116600090815260086020526040812054611b1a83611338565b6111a59190613dbc565b60003361119f8185856128aa565b611b3a6123d1565b6018805461ffff60b81b1916600160b81b83151590810260ff60c01b191691909117600160c01b8615159081029190911760ff60c81b1916600160c81b861515908102919091179093556040805192835260208301919091528101919091527ff4621a74da7e40a7d3a6ddb78cf78bfb7bb572efda0287c5bc6a987d5c3c805b906060015b60405180910390a1505050565b611bd46123d1565b6001600160a01b038216600081815260296020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016110f3565b611c346123d1565b60005b82811015611ca5578160296000868685818110611c5657611c56613d64565b9050602002016020810190611c6b9190613991565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611c9d81613da3565b915050611c37565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611bbf93929190613f2c565b611ce16123d1565b601780546001600160a01b0319166001600160a01b0384161790558015611eb8576017546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa158015611d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d709190613f85565b6001600160a01b031663c9c6539630601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df69190613f85565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e679190613f85565b601880546001600160a01b0319166001600160a01b038316908117909155604051919250907f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f90600090a250611ed4565b601780546001600160a01b0319166001600160a01b0384161790555b6040516001600160a01b038316907f7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc8090600090a25050565b611f146123d1565b60005b8151811015611faa576000838281518110611f3457611f34613d64565b602002602001015190506000611f48600990565b611f5390600a613f1d565b848481518110611f6557611f65613d64565b6020026020010151611f779190613dcf565b9050611f95611f8e6005546001600160a01b031690565b8383612f92565b50508080611fa290613da3565b915050611f17565b505050565b611fb76123d1565b611fc36009600a613f1d565b611fcd9082613dcf565b601e556103e8611fdc60025490565b611fe69190613e06565b601e54101561205d5760405162461bcd60e51b815260206004820152603760248201527f6d61784275795478416d6f756e742073686f756c64206265206174206c65617360448201527f7420302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401611409565b7f1003faaf440f4e10b9ef552a11d026be63390c8c7eac09549c045f8d700ba534601e5460405161120091815260200190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6120c36123d1565b4761156d816120da6005546001600160a01b031690565b6001600160a01b031690613136565b6120f16123d1565b601955565b6120fe6123d1565b6001600160a01b0381166121635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611409565b61156d81612f40565b60006121766123d1565b816000036121e9576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156121c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e69190613fa2565b91505b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af1158015612238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225c9190613fbb565b9050836001600160a01b03167f25fc1612d5fabaa283e62605ffd52c2fde1105166c0b915e0eb003ec8a25cecb8360405161229991815260200190565b60405180910390a29392505050565b6122b06123d1565b6122bc6009600a613f1d565b6122c69082613dcf565b601f556103e86122d560025490565b6122df9190613e06565b601f5410156123565760405162461bcd60e51b815260206004820152603860248201527f6d617853656c6c5478416d6f756e742073686f756c64206265206174206c656160448201527f737420302e3125206f6620746f74616c20737570706c792e00000000000000006064820152608401611409565b6040518181527f64a1c4a9e77388ab0db1168c4d687322d7a0d4304986c8fcb6486cd76235277b90602001611200565b60008060008061239585611af8565b93506123a085611338565b6001600160a01b039095166000908152600a6020908152604080832054600890925290912054949690949350915050565b6005546001600160a01b031633146118d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611409565b6001600160a01b038216600090815260066020526040902054801561245557612453836127bb565b505b6014548210801561247e57506001600160a01b0383166000908152600c602052604090205460ff165b156125bf576001600160a01b0383166000908152600c60205260409020805460ff19169055600d80546124b390600190613dbc565b815481106124c3576124c3613d64565b60009182526020808320909101546001600160a01b038681168452600b909252604090922054600d8054929093169291811061250157612501613d64565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600b918290526040812054600d80549193929161254d90600190613dbc565b8154811061255d5761255d613d64565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600d80548061259357612593613fd8565b600082815260209020810160001990810180546001600160a01b0319169055019055611faa838261324f565b6001600160a01b0383166000908152600660205260408120549003612651576001600160a01b0383166000818152600c60209081526040808320805460ff19166001908117909155600d8054600b909452918420839055820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b03191690911790555b808211156126775760006126658284613dbc565b905061267184826132e6565b50505050565b80821015611faa57600061268b8383613dbc565b9050612671848261324f565b6001600160a01b0383166126f95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611409565b6001600160a01b03821661275a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611409565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806127c78361335d565b9050801561282d576001600160a01b0383166000818152600a602052604090819020429055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d49061281c9084815260200190565b60405180910390a250600192915050565b50600092915050565b60006128428484612090565b90506000198114612671578181101561289d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611409565b6126718484848403612697565b601854600090600160d81b900460ff16612935576001600160a01b03841660009081526028602052604090205460ff166129355760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74207472616465206265666f726520746865206d61726b6574206f60448201526570656e696e6760d01b6064820152608401611409565b601854600160e01b900460ff16612eea576001600160a01b0384166000908152602b602052604090205460ff1615612ae157506001600160a01b03821660009081526029602052604090205460019060ff16612adc57601854600160b01b900460ff1615612adc57601e548211156129ef5760405162461bcd60e51b815260206004820152601d60248201527f6d61784275795478416d6f756e74204c696d69742045786365656465640000006044820152606401611409565b601854600160d01b900460ff1615612adc57426021546007612a119190613d90565b10612a5e5760405162461bcd60e51b815260206004820152601960248201527f596f752063616e6e6f7420627579206174206c61756e63682e000000000000006044820152606401611409565b326000908152602a60205260409020544290612a7b906003613d90565b1115612ac95760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e6e6f7420646f206d756c74692d627579206f72646572732e006044820152606401611409565b326000908152602a602052604090204290555b612c0f565b6001600160a01b0383166000908152602b602052604090205460ff1615612c0f5750601a5430600090815260208190526040812054600292906018549111159150600160a01b900460ff168015612b5057506018546001600160a01b0316600090815260208190526040812054115b8015612b595750805b8015612b74575042601c54602054612b719190613d90565b11155b15612b895742602055601b54612b89906134c2565b6001600160a01b03851660009081526029602052604090205460ff16612c0d57601854600160a81b900460ff1615612c0d57601f54831115612c0d5760405162461bcd60e51b815260206004820152601e60248201527f6d617853656c6c5478416d6f756e74204c696d697420457863656564656400006044820152606401611409565b505b601d54471115612de4576027546025544791600091612c3e90600160401b90046001600160401b031684613dcf565b612c489190613e06565b6022546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612c9a576040519150601f19603f3d011682016040523d82523d6000602084013e612c9f565b606091505b505090508015612cdd576040518281527f14c3945b0e552cb130d2e123df9730f5b69c4872acd0fc354d63649227d61f129060200160405180910390a15b60275460255460009190612d0190600160801b90046001600160401b031686613dcf565b612d0b9190613e06565b6023546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612d5d576040519150601f19603f3d011682016040523d82523d6000602084013e612d62565b606091505b505090508015612da0576040518281527f68eea9cf91897d2a3422a0c5081e0f0763309530966ac08bad40fb12e1fdab7e9060200160405180910390a15b60275460255460009190612dbd906001600160401b031688613dcf565b612dc79190613e06565b9050612dd2816134ee565b612ddd60195461120b565b5050505050505b601854600160b81b900460ff1615612eea57806001148015612e0f5750601854600160c01b900460ff165b8015612e3457506001600160a01b03831660009081526029602052604090205460ff16155b15612e70576000606460265484612e4b9190613dcf565b612e559190613e06565b9050612e618184613dbc565b9250612e6e853083612f92565b505b806002148015612e895750601854600160c81b900460ff165b8015612eae57506001600160a01b03841660009081526029602052604090205460ff16155b15612eea576000606460275484612ec59190613dcf565b612ecf9190613e06565b9050612edb8184613dbc565b9250612ee8853083612f92565b505b612ef5848484612f92565b612f1d84612f18866001600160a01b031660009081526020819052604090205490565b613575565b61267183612f18856001600160a01b031660009081526020819052604090205490565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316612ff65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611409565b6001600160a01b0382166130585760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611409565b6001600160a01b038316600090815260208190526040902054818110156130d05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611409565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612671565b804710156131865760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611409565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146131d3576040519150601f19603f3d011682016040523d82523d6000602084013e6131d8565b606091505b5050905080611faa5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611409565b6001600160a01b03821660009081526006602052604081208054839290613277908490613dbc565b9250508190555080601360008282546132909190613dbc565b90915550506010546132a3908290613dcf565b6001600160a01b0383166000908152600760205260409020546132c69190613de6565b6001600160a01b0390921660009081526007602052604090209190915550565b6001600160a01b0382166000908152600660205260408120805483929061330e908490613d90565b9250508190555080601360008282546133279190613d90565b909155505060105461333a908290613dcf565b6001600160a01b0383166000908152600760205260409020546132c69190613fee565b60008061336983611af8565b9050801561282d576001600160a01b03831660009081526008602052604081208054839290613399908490613d90565b9250508190555080601260008282546133b29190613d90565b90915550506040518181526001600160a01b038416907fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9060200160405180910390a2600061340184836135a4565b9050806134bb576000846001600160a01b031683610bb890604051600060405180830381858888f193505050503d806000811461345a576040519150601f19603f3d011682016040523d82523d6000602084013e61345f565b606091505b50509050806134b9576001600160a01b03851660009081526008602052604081208054859290613490908490613dbc565b9250508190555082601260008282546134a99190613dbc565b9091555060009695505050505050565b505b5092915050565b6018805460ff60e01b1916600160e01b1790556134de81613703565b506018805460ff60e01b19169055565b6000601354116135365760405162461bcd60e51b8152602060048201526013602482015272746865726520617265206e6f2073686172657360681b6044820152606401611409565b601354613547600160801b83613dcf565b6135519190613e06565b60105461355e9190613d90565b60105560115461356f908290613d90565b60115550565b6001600160a01b03821660009081526009602052604090205460ff161561359a575050565b6119e4828261242b565b604080516002808252606082018352600092839291906020830190803683375050600e54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136369190613f85565b8160008151811061364957613649613d64565b6001600160a01b039283166020918202929092010152600f5482519116908290600190811061367a5761367a613d64565b6001600160a01b039283166020918202929092010152600e5460405163b6f9de9560e01b815291169063b6f9de959085906136c09060009086908a904290600401614052565b6000604051808303818588803b1580156136d957600080fd5b505af1935050505080156136eb575060015b6136f95760009150506111a5565b60019150506111a5565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061373857613738613d64565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b59190613f85565b816001815181106137c8576137c8613d64565b6001600160a01b0392831660209182029290920101526017546137ee9130911684612697565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac94790613827908590600090869030904290600401614087565b600060405180830381600087803b15801561384157600080fd5b505af1158015613855573d6000803e3d6000fd5b505060408051428152602081018690527f361864e2bc9fde13aef92787495191b73eaff680fa79aba1b346c416f186334a935001905060405180910390a15050565b6001600160a01b038116811461156d57600080fd5b801515811461156d57600080fd5b600080604083850312156138cd57600080fd5b82356138d881613897565b915060208301356138e8816138ac565b809150509250929050565b600060208083528351808285015260005b8181101561392057858101830151858201604001528201613904565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561395457600080fd5b823561395f81613897565b946020939093013593505050565b60006020828403121561397f57600080fd5b813561398a816138ac565b9392505050565b6000602082840312156139a357600080fd5b813561398a81613897565b6000602082840312156139c057600080fd5b5035919050565b6000806000606084860312156139dc57600080fd5b83356139e781613897565b925060208401356139f781613897565b929592945050506040919091013590565b80356001600160401b0381168114613a1f57600080fd5b919050565b600080600060608486031215613a3957600080fd5b613a4284613a08565b9250613a5060208501613a08565b9150613a5e60408501613a08565b90509250925092565b60008060008060808587031215613a7d57600080fd5b8435613a88816138ac565b966020860135965060408601359560600135945092505050565b600080600060608486031215613ab757600080fd5b8335613ac2816138ac565b92506020840135613ad2816138ac565b91506040840135613ae2816138ac565b809150509250925092565b600080600060408486031215613b0257600080fd5b83356001600160401b0380821115613b1957600080fd5b818601915086601f830112613b2d57600080fd5b813581811115613b3c57600080fd5b8760208260051b8501011115613b5157600080fd5b60209283019550935050840135613ae2816138ac565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613ba557613ba5613b67565b604052919050565b60006001600160401b03821115613bc657613bc6613b67565b5060051b60200190565b600082601f830112613be157600080fd5b81356020613bf6613bf183613bad565b613b7d565b82815260059290921b84018101918181019086841115613c1557600080fd5b8286015b84811015613c305780358352918301918301613c19565b509695505050505050565b60008060408385031215613c4e57600080fd5b82356001600160401b0380821115613c6557600080fd5b818501915085601f830112613c7957600080fd5b81356020613c89613bf183613bad565b82815260059290921b84018101918181019089841115613ca857600080fd5b948201945b83861015613ccf578535613cc081613897565b82529482019490820190613cad565b96505086013592505080821115613ce557600080fd5b50613cf285828601613bd0565b9150509250929050565b60008060408385031215613d0f57600080fd5b8235613d1a81613897565b915060208301356138e881613897565b600181811c90821680613d3e57607f821691505b602082108103613d5e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156111a5576111a5613d7a565b600060018201613db557613db5613d7a565b5060010190565b818103818111156111a5576111a5613d7a565b80820281158282048414176111a5576111a5613d7a565b80820182811260008312801582168215821617156134b9576134b9613d7a565b600082613e2357634e487b7160e01b600052601260045260246000fd5b500490565b6001600160401b038181168382160190808211156134bb576134bb613d7a565b600181815b80851115613e83578160001904821115613e6957613e69613d7a565b80851615613e7657918102915b93841c9390800290613e4d565b509250929050565b600082613e9a575060016111a5565b81613ea7575060006111a5565b81600181146136f95760028103613ed45760ff841115613ec957613ec9613d7a565b50506001821b6111a5565b5060208310610133831016604e8410600b8410161715613ef7575081810a6111a5565b613f018383613e48565b8060001904821115613f1557613f15613d7a565b029392505050565b600061398a60ff841683613e8b565b6040808252810183905260008460608301825b86811015613f6f578235613f5281613897565b6001600160a01b0316825260209283019290910190600101613f3f565b5080925050508215156020830152949350505050565b600060208284031215613f9757600080fd5b815161398a81613897565b600060208284031215613fb457600080fd5b5051919050565b600060208284031215613fcd57600080fd5b815161398a816138ac565b634e487b7160e01b600052603160045260246000fd5b81810360008312801583831316838312821617156134bb576134bb613d7a565b600081518084526020808501945080840160005b838110156140475781516001600160a01b031687529582019590820190600101614022565b509495945050505050565b84815260806020820152600061406b608083018661400e565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a0604082015260006140a660a083018661400e565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220fc5c2126526b37af8b3a746a52bb755a3b44d994d3e48936a61d2da34feefa3464736f6c634300081300330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Deployed Bytecode
0x6080604052600436106104ae5760003560e01c806391b89fba1161026b578063c492f0461161014f578063e4748b9e116100c1578063f5537ede11610085578063f5537ede14610f49578063f68016b714610f69578063f7c618c114610f7f578063f887ea4014610f9f578063f91af3db14610fbf578063fbcbc0f114610fdf57600080fd5b8063e4748b9e14610e82578063e5e31b1314610eb8578063e76ad1f114610ee8578063ee7d72b414610f09578063f2fde38b14610f2957600080fd5b8063dbe66ca011610113578063dbe66ca014610d70578063dd5f739814610da0578063dd62ed3e14610dc0578063de69b3aa14610de0578063e0f3ccf514610e0d578063e28d717b14610e6d57600080fd5b8063c492f04614610ce4578063d1927fde14610d04578063d2d2162914610d24578063d2d7ad8314610d44578063d851fd0d14610d5a57600080fd5b8063a87e5da4116101e8578063aafd847a116101ac578063aafd847a14610be4578063ac252bd314610c1a578063b77cf9c614610c4a578063b912c7d714610c77578063bda258e414610c97578063c024666814610cc457600080fd5b8063a87e5da414610b4d578063a8aa1b3114610b63578063a8b9d24014610b83578063a9059cbb14610ba3578063aaa3115114610bc357600080fd5b8063997664d71161022f578063997664d714610abb578063997836d414610ad15780639d9241ec14610b015780639e1e066114610b17578063a457c2d714610b2d57600080fd5b806391b89fba146109fe57806391dd75e714610a1e578063958f973514610a6557806395d89b4114610a8657806397afefeb14610a9b57600080fd5b80634a74bb02116103925780635d098b381161030f5780637582c4de116102d35780637582c4de1461093f57806376915cd41461095f57806386a22eff1461097f5780638aee81271461099f5780638da5cb5b146109bf5780638ef71b1c146109dd57600080fd5b80635d098b38146108935780636d052ede146108b357806370a08231146108d457806370cbe56c1461090a578063715018a61461092a57600080fd5b80635561e1f6116103565780635561e1f6146107f857806359b107b91461080e5780635a3bb989146108245780635b3c6e011461085c5780635c67ed9c1461087d57600080fd5b80634a74bb02146107525780634e71d92d146107735780634e7b827f146107885780634f97f4c1146107b857806354bb5070146107d857600080fd5b806323b872dd1161042b5780632e145236116103ef5780632e145236146106a057806330219d4f146106c0578063313ce567146106e057806339509351146106fc5780633a1920f71461071c5780633a98ef391461073c57600080fd5b806323b872dd1461061e57806326987b601461063e578063272ecbb31461065457806327ce01471461066a5780632b8939291461068a57600080fd5b806317c6d7481161047257806317c6d7481461059257806318160ddd146105b25780631a29c9d3146105c75780631c8ec299146105e85780631d0adc07146105fe57600080fd5b80630483f7a0146104ba57806306fdde03146104dc578063095ea7b314610507578063117e8df91461053757806314fa7dbb1461055757600080fd5b366104b557005b600080fd5b3480156104c657600080fd5b506104da6104d53660046138ba565b61101f565b005b3480156104e857600080fd5b506104f16110ff565b6040516104fe91906138f3565b60405180910390f35b34801561051357600080fd5b50610527610522366004613941565b611191565b60405190151581526020016104fe565b34801561054357600080fd5b506104da61055236600461396d565b6111ab565b34801561056357600080fd5b50610584610572366004613991565b600b6020526000908152604090205481565b6040519081526020016104fe565b34801561059e57600080fd5b506104da6105ad3660046139ae565b61120b565b3480156105be57600080fd5b50600254610584565b3480156105d357600080fd5b5060185461052790600160a81b900460ff1681565b3480156105f457600080fd5b5061058460155481565b34801561060a57600080fd5b506104da610619366004613991565b6112ea565b34801561062a57600080fd5b506105276106393660046139c7565b611314565b34801561064a57600080fd5b5061058460165481565b34801561066057600080fd5b50610584601c5481565b34801561067657600080fd5b50610584610685366004613991565b611338565b34801561069657600080fd5b50610584601b5481565b3480156106ac57600080fd5b506104da6106bb366004613a24565b611383565b3480156106cc57600080fd5b506104da6106db36600461396d565b611475565b3480156106ec57600080fd5b50604051600981526020016104fe565b34801561070857600080fd5b50610527610717366004613941565b611535565b34801561072857600080fd5b506104da6107373660046139ae565b611557565b34801561074857600080fd5b5061058460135481565b34801561075e57600080fd5b5060185461052790600160a01b900460ff1681565b34801561077f57600080fd5b506104da611564565b34801561079457600080fd5b506105276107a3366004613991565b60096020526000908152604090205460ff1681565b3480156107c457600080fd5b506104da6107d3366004613a67565b611570565b3480156107e457600080fd5b506104da6107f3366004613a24565b61179d565b34801561080457600080fd5b5061058460145481565b34801561081a57600080fd5b5061058460265481565b34801561083057600080fd5b50600e54610844906001600160a01b031681565b6040516001600160a01b0390911681526020016104fe565b34801561086857600080fd5b5060185461052790600160d01b900460ff1681565b34801561088957600080fd5b50610584601d5481565b34801561089f57600080fd5b506104da6108ae366004613991565b61188b565b3480156108bf57600080fd5b5060185461052790600160b01b900460ff1681565b3480156108e057600080fd5b506105846108ef366004613991565b6001600160a01b031660009081526020819052604090205490565b34801561091657600080fd5b506104da6109253660046139ae565b6118b5565b34801561093657600080fd5b506104da6118c2565b34801561094b57600080fd5b506104da61095a3660046138ba565b6118d6565b34801561096b57600080fd5b506104da61097a36600461396d565b611936565b34801561098b57600080fd5b506104da61099a3660046138ba565b61198b565b3480156109ab57600080fd5b506104da6109ba366004613991565b6119e8565b3480156109cb57600080fd5b506005546001600160a01b0316610844565b3480156109e957600080fd5b5060185461052790600160c81b900460ff1681565b348015610a0a57600080fd5b50610584610a19366004613991565b611a0e565b348015610a2a57600080fd5b50602254602354610a45916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016104fe565b348015610a7157600080fd5b5060185461052790600160b81b900460ff1681565b348015610a9257600080fd5b506104f1611a19565b348015610aa757600080fd5b506104da610ab636600461396d565b611a28565b348015610ac757600080fd5b5061058460115481565b348015610add57600080fd5b50610527610aec366004613991565b600c6020526000908152604090205460ff1681565b348015610b0d57600080fd5b5061058460275481565b348015610b2357600080fd5b5061058460125481565b348015610b3957600080fd5b50610527610b48366004613941565b611a7d565b348015610b5957600080fd5b50610584601e5481565b348015610b6f57600080fd5b50601854610844906001600160a01b031681565b348015610b8f57600080fd5b50610584610b9e366004613991565b611af8565b348015610baf57600080fd5b50610527610bbe366004613941565b611b24565b348015610bcf57600080fd5b5060185461052790600160d81b900460ff1681565b348015610bf057600080fd5b50610584610bff366004613991565b6001600160a01b031660009081526008602052604090205490565b348015610c2657600080fd5b50610527610c35366004613991565b60286020526000908152604090205460ff1681565b348015610c5657600080fd5b50610584610c65366004613991565b600a6020526000908152604090205481565b348015610c8357600080fd5b506104da610c92366004613aa2565b611b32565b348015610ca357600080fd5b50610584610cb2366004613991565b602a6020526000908152604090205481565b348015610cd057600080fd5b506104da610cdf3660046138ba565b611bcc565b348015610cf057600080fd5b506104da610cff366004613aed565b611c2c565b348015610d1057600080fd5b506104da610d1f3660046138ba565b611cd9565b348015610d3057600080fd5b506104da610d3f366004613c3b565b611f0c565b348015610d5057600080fd5b50610584601a5481565b348015610d6657600080fd5b50610584601f5481565b348015610d7c57600080fd5b50610527610d8b366004613991565b60296020526000908152604090205460ff1681565b348015610dac57600080fd5b506104da610dbb3660046139ae565b611faf565b348015610dcc57600080fd5b50610584610ddb366004613cfc565b612090565b348015610dec57600080fd5b50610584610dfb366004613991565b60066020526000908152604090205481565b348015610e1957600080fd5b50602554610e43906001600160401b0380821691600160401b8104821691600160801b9091041683565b604080516001600160401b03948516815292841660208401529216918101919091526060016104fe565b348015610e7957600080fd5b506104da6120bb565b348015610e8e57600080fd5b50602454610e43906001600160401b0380821691600160401b8104821691600160801b9091041683565b348015610ec457600080fd5b50610527610ed3366004613991565b602b6020526000908152604090205460ff1681565b348015610ef457600080fd5b5060185461052790600160c01b900460ff1681565b348015610f1557600080fd5b506104da610f243660046139ae565b6120e9565b348015610f3557600080fd5b506104da610f44366004613991565b6120f6565b348015610f5557600080fd5b50610527610f643660046139c7565b61216c565b348015610f7557600080fd5b5061058460195481565b348015610f8b57600080fd5b50600f54610844906001600160a01b031681565b348015610fab57600080fd5b50601754610844906001600160a01b031681565b348015610fcb57600080fd5b506104da610fda3660046139ae565b6122a8565b348015610feb57600080fd5b50610fff610ffa366004613991565b612386565b6040805194855260208501939093529183015260608201526080016104fe565b6110276123d1565b6001600160a01b03821660009081526009602052604090205481151560ff90911615150361105457600080fd5b6001600160a01b0382166000908152600960205260409020805460ff19168215159081179091556001036110925761108d82600061242b565b6110b6565b6001600160a01b0382166000908152600660205260409020546110b690839061242b565b816001600160a01b03167fa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be826040516110f3911515815260200190565b60405180910390a25050565b60606003805461110e90613d2a565b80601f016020809104026020016040519081016040528092919081815260200182805461113a90613d2a565b80156111875780601f1061115c57610100808354040283529160200191611187565b820191906000526020600020905b81548152906001019060200180831161116a57829003601f168201915b5050505050905090565b60003361119f818585612697565b60019150505b92915050565b6111b36123d1565b60188054821515600160b01b0260ff60b01b199091161790556040517f9ae6a7edd4280cfe61f56b1e9d3643b6457d952ffb600cf213f86b16b4d9f6ae9061120090831515815260200190565b60405180910390a150565b600d54600081900361121b575050565b6000805a60165490915060005b858410801561123657508481105b156112e05784821061124757600091505b6000600d838154811061125c5761125c613d64565b60009182526020808320909101546015546001600160a01b03909116808452600a909252604090922054909250429161129491613d90565b10156112a5576112a3816127bb565b505b826112af81613da3565b93505081806112bd90613da3565b9250505a6112cb9085613dbc565b6112d59086613d90565b94505a935050611228565b5060165550505050565b6112f26123d1565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b600033611322858285612836565b61132d8585856128aa565b506001949350505050565b6001600160a01b0381166000908152600760209081526040808320546006909252822054601054600160801b929161136f91613dcf565b6113799190613de6565b6111a59190613e06565b61138b6123d1565b806113968385613e28565b6113a09190613e28565b6001600160401b03166026819055600f10156114125760405162461bcd60e51b815260206004820152602660248201527f546f74616c2062757920666565732063616e6e6f74206265206d6f7265207468604482015265616e2031352560d01b60648201526084015b60405180910390fd5b604080516060810182526001600160401b0394851680825293851660208201819052929094169301839052602480546001600160801b031916909217600160401b9091021767ffffffffffffffff60801b1916600160801b909202919091179055565b61147d6123d1565b601854600160d81b900460ff16156114d75760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f742073746f70207472616465206f6e6365206973206f70656e00006044820152606401611409565b6018805482158015600160d81b0260ff60d81b19909216919091179091556114fe57426021555b6040805182151581524260208201527fb89f558b3a2238cd6e750c4d3e29359faf8999130df57275857b0f526c34a4209101611200565b60003361119f8185856115488383612090565b6115529190613d90565b612697565b61155f6123d1565b601555565b61156d336127bb565b50565b6115786123d1565b6018805460ff60a01b1916600160a01b86151502179055601c83905560096115a190600a613f1d565b6115ab9083613dcf565b601a556115ba6009600a613f1d565b6115c49082613dcf565b601b55601a54633b9aca001061161c5760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e206f6e6520746f6b656e207265717569726564000000006044820152606401611409565b633b9aca00601b54116116715760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e206f6e6520746f6b656e207265717569726564000000006044820152606401611409565b601a54601b5411156116da5760405162461bcd60e51b815260206004820152602c60248201527f596f752063616e6e6f742073776170206d6f7265207468656e20746865206d6960448201526b1b9a5b5d5b48185b5bdd5b9d60a21b6064820152608401611409565b6103e86116e660025490565b6116f09190613e06565b601b54111561174d5760405162461bcd60e51b8152602060048201526024808201527f746f6b656e20746f2073776170206c696d6974656420746f20302e312520737560448201526370706c7960e01b6064820152608401611409565b60408051851515815260208101859052908101839052606081018290527feb7b7fa1011347d85e81a933db02079465f028f76206a1036ff5bf0204dff4a19060800160405180910390a150505050565b6117a56123d1565b806117b08385613e28565b6117ba9190613e28565b6001600160401b03166027819055600f10156118285760405162461bcd60e51b815260206004820152602760248201527f546f74616c2073656c6c20666565732063616e6e6f74206265206d6f7265207460448201526668616e2031352560c81b6064820152608401611409565b604080516060810182526001600160401b0394851680825293851660208201819052929094169301839052602580546001600160801b031916909217600160401b9091021767ffffffffffffffff60801b1916600160801b909202919091179055565b6118936123d1565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6118bd6123d1565b601455565b6118ca6123d1565b6118d46000612f40565b565b6118de6123d1565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527fd6d6233f0b1134357edd66b38101a1aca28e48fe4a8443d62539b3094f4c829e91016110f3565b61193e6123d1565b60188054821515600160d01b0260ff60d01b199091161790556040517fa782f6c2e8e0fd8eb0754687f2c0364d0258995fa68fd81bccbce1db15a1772d9061120090831515815260200190565b6119936123d1565b6001600160a01b0382166000908152602b60205260409020805460ff191682158015919091179091556119e4576001600160a01b0382166000908152600960205260409020805460ff191660011790555b5050565b6119f06123d1565b600f80546001600160a01b0319166001600160a01b03831617905550565b60006111a582611af8565b60606004805461110e90613d2a565b611a306123d1565b60188054821515600160a81b0260ff60a81b199091161790556040517f56f9d75db21c343a56e797891efe112f3dae73300cf42611a7ac965224e714c09061120090831515815260200190565b60003381611a8b8286612090565b905083811015611aeb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611409565b61132d8286868403612697565b6001600160a01b038116600090815260086020526040812054611b1a83611338565b6111a59190613dbc565b60003361119f8185856128aa565b611b3a6123d1565b6018805461ffff60b81b1916600160b81b83151590810260ff60c01b191691909117600160c01b8615159081029190911760ff60c81b1916600160c81b861515908102919091179093556040805192835260208301919091528101919091527ff4621a74da7e40a7d3a6ddb78cf78bfb7bb572efda0287c5bc6a987d5c3c805b906060015b60405180910390a1505050565b611bd46123d1565b6001600160a01b038216600081815260296020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016110f3565b611c346123d1565b60005b82811015611ca5578160296000868685818110611c5657611c56613d64565b9050602002016020810190611c6b9190613991565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611c9d81613da3565b915050611c37565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611bbf93929190613f2c565b611ce16123d1565b601780546001600160a01b0319166001600160a01b0384161790558015611eb8576017546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa158015611d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d709190613f85565b6001600160a01b031663c9c6539630601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df69190613f85565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e679190613f85565b601880546001600160a01b0319166001600160a01b038316908117909155604051919250907f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f90600090a250611ed4565b601780546001600160a01b0319166001600160a01b0384161790555b6040516001600160a01b038316907f7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc8090600090a25050565b611f146123d1565b60005b8151811015611faa576000838281518110611f3457611f34613d64565b602002602001015190506000611f48600990565b611f5390600a613f1d565b848481518110611f6557611f65613d64565b6020026020010151611f779190613dcf565b9050611f95611f8e6005546001600160a01b031690565b8383612f92565b50508080611fa290613da3565b915050611f17565b505050565b611fb76123d1565b611fc36009600a613f1d565b611fcd9082613dcf565b601e556103e8611fdc60025490565b611fe69190613e06565b601e54101561205d5760405162461bcd60e51b815260206004820152603760248201527f6d61784275795478416d6f756e742073686f756c64206265206174206c65617360448201527f7420302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401611409565b7f1003faaf440f4e10b9ef552a11d026be63390c8c7eac09549c045f8d700ba534601e5460405161120091815260200190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6120c36123d1565b4761156d816120da6005546001600160a01b031690565b6001600160a01b031690613136565b6120f16123d1565b601955565b6120fe6123d1565b6001600160a01b0381166121635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611409565b61156d81612f40565b60006121766123d1565b816000036121e9576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156121c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e69190613fa2565b91505b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af1158015612238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225c9190613fbb565b9050836001600160a01b03167f25fc1612d5fabaa283e62605ffd52c2fde1105166c0b915e0eb003ec8a25cecb8360405161229991815260200190565b60405180910390a29392505050565b6122b06123d1565b6122bc6009600a613f1d565b6122c69082613dcf565b601f556103e86122d560025490565b6122df9190613e06565b601f5410156123565760405162461bcd60e51b815260206004820152603860248201527f6d617853656c6c5478416d6f756e742073686f756c64206265206174206c656160448201527f737420302e3125206f6620746f74616c20737570706c792e00000000000000006064820152608401611409565b6040518181527f64a1c4a9e77388ab0db1168c4d687322d7a0d4304986c8fcb6486cd76235277b90602001611200565b60008060008061239585611af8565b93506123a085611338565b6001600160a01b039095166000908152600a6020908152604080832054600890925290912054949690949350915050565b6005546001600160a01b031633146118d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611409565b6001600160a01b038216600090815260066020526040902054801561245557612453836127bb565b505b6014548210801561247e57506001600160a01b0383166000908152600c602052604090205460ff165b156125bf576001600160a01b0383166000908152600c60205260409020805460ff19169055600d80546124b390600190613dbc565b815481106124c3576124c3613d64565b60009182526020808320909101546001600160a01b038681168452600b909252604090922054600d8054929093169291811061250157612501613d64565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600b918290526040812054600d80549193929161254d90600190613dbc565b8154811061255d5761255d613d64565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600d80548061259357612593613fd8565b600082815260209020810160001990810180546001600160a01b0319169055019055611faa838261324f565b6001600160a01b0383166000908152600660205260408120549003612651576001600160a01b0383166000818152600c60209081526040808320805460ff19166001908117909155600d8054600b909452918420839055820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b03191690911790555b808211156126775760006126658284613dbc565b905061267184826132e6565b50505050565b80821015611faa57600061268b8383613dbc565b9050612671848261324f565b6001600160a01b0383166126f95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611409565b6001600160a01b03821661275a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611409565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806127c78361335d565b9050801561282d576001600160a01b0383166000818152600a602052604090819020429055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d49061281c9084815260200190565b60405180910390a250600192915050565b50600092915050565b60006128428484612090565b90506000198114612671578181101561289d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611409565b6126718484848403612697565b601854600090600160d81b900460ff16612935576001600160a01b03841660009081526028602052604090205460ff166129355760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74207472616465206265666f726520746865206d61726b6574206f60448201526570656e696e6760d01b6064820152608401611409565b601854600160e01b900460ff16612eea576001600160a01b0384166000908152602b602052604090205460ff1615612ae157506001600160a01b03821660009081526029602052604090205460019060ff16612adc57601854600160b01b900460ff1615612adc57601e548211156129ef5760405162461bcd60e51b815260206004820152601d60248201527f6d61784275795478416d6f756e74204c696d69742045786365656465640000006044820152606401611409565b601854600160d01b900460ff1615612adc57426021546007612a119190613d90565b10612a5e5760405162461bcd60e51b815260206004820152601960248201527f596f752063616e6e6f7420627579206174206c61756e63682e000000000000006044820152606401611409565b326000908152602a60205260409020544290612a7b906003613d90565b1115612ac95760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e6e6f7420646f206d756c74692d627579206f72646572732e006044820152606401611409565b326000908152602a602052604090204290555b612c0f565b6001600160a01b0383166000908152602b602052604090205460ff1615612c0f5750601a5430600090815260208190526040812054600292906018549111159150600160a01b900460ff168015612b5057506018546001600160a01b0316600090815260208190526040812054115b8015612b595750805b8015612b74575042601c54602054612b719190613d90565b11155b15612b895742602055601b54612b89906134c2565b6001600160a01b03851660009081526029602052604090205460ff16612c0d57601854600160a81b900460ff1615612c0d57601f54831115612c0d5760405162461bcd60e51b815260206004820152601e60248201527f6d617853656c6c5478416d6f756e74204c696d697420457863656564656400006044820152606401611409565b505b601d54471115612de4576027546025544791600091612c3e90600160401b90046001600160401b031684613dcf565b612c489190613e06565b6022546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612c9a576040519150601f19603f3d011682016040523d82523d6000602084013e612c9f565b606091505b505090508015612cdd576040518281527f14c3945b0e552cb130d2e123df9730f5b69c4872acd0fc354d63649227d61f129060200160405180910390a15b60275460255460009190612d0190600160801b90046001600160401b031686613dcf565b612d0b9190613e06565b6023546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612d5d576040519150601f19603f3d011682016040523d82523d6000602084013e612d62565b606091505b505090508015612da0576040518281527f68eea9cf91897d2a3422a0c5081e0f0763309530966ac08bad40fb12e1fdab7e9060200160405180910390a15b60275460255460009190612dbd906001600160401b031688613dcf565b612dc79190613e06565b9050612dd2816134ee565b612ddd60195461120b565b5050505050505b601854600160b81b900460ff1615612eea57806001148015612e0f5750601854600160c01b900460ff165b8015612e3457506001600160a01b03831660009081526029602052604090205460ff16155b15612e70576000606460265484612e4b9190613dcf565b612e559190613e06565b9050612e618184613dbc565b9250612e6e853083612f92565b505b806002148015612e895750601854600160c81b900460ff165b8015612eae57506001600160a01b03841660009081526029602052604090205460ff16155b15612eea576000606460275484612ec59190613dcf565b612ecf9190613e06565b9050612edb8184613dbc565b9250612ee8853083612f92565b505b612ef5848484612f92565b612f1d84612f18866001600160a01b031660009081526020819052604090205490565b613575565b61267183612f18856001600160a01b031660009081526020819052604090205490565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316612ff65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611409565b6001600160a01b0382166130585760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611409565b6001600160a01b038316600090815260208190526040902054818110156130d05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611409565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612671565b804710156131865760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611409565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146131d3576040519150601f19603f3d011682016040523d82523d6000602084013e6131d8565b606091505b5050905080611faa5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611409565b6001600160a01b03821660009081526006602052604081208054839290613277908490613dbc565b9250508190555080601360008282546132909190613dbc565b90915550506010546132a3908290613dcf565b6001600160a01b0383166000908152600760205260409020546132c69190613de6565b6001600160a01b0390921660009081526007602052604090209190915550565b6001600160a01b0382166000908152600660205260408120805483929061330e908490613d90565b9250508190555080601360008282546133279190613d90565b909155505060105461333a908290613dcf565b6001600160a01b0383166000908152600760205260409020546132c69190613fee565b60008061336983611af8565b9050801561282d576001600160a01b03831660009081526008602052604081208054839290613399908490613d90565b9250508190555080601260008282546133b29190613d90565b90915550506040518181526001600160a01b038416907fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9060200160405180910390a2600061340184836135a4565b9050806134bb576000846001600160a01b031683610bb890604051600060405180830381858888f193505050503d806000811461345a576040519150601f19603f3d011682016040523d82523d6000602084013e61345f565b606091505b50509050806134b9576001600160a01b03851660009081526008602052604081208054859290613490908490613dbc565b9250508190555082601260008282546134a99190613dbc565b9091555060009695505050505050565b505b5092915050565b6018805460ff60e01b1916600160e01b1790556134de81613703565b506018805460ff60e01b19169055565b6000601354116135365760405162461bcd60e51b8152602060048201526013602482015272746865726520617265206e6f2073686172657360681b6044820152606401611409565b601354613547600160801b83613dcf565b6135519190613e06565b60105461355e9190613d90565b60105560115461356f908290613d90565b60115550565b6001600160a01b03821660009081526009602052604090205460ff161561359a575050565b6119e4828261242b565b604080516002808252606082018352600092839291906020830190803683375050600e54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136369190613f85565b8160008151811061364957613649613d64565b6001600160a01b039283166020918202929092010152600f5482519116908290600190811061367a5761367a613d64565b6001600160a01b039283166020918202929092010152600e5460405163b6f9de9560e01b815291169063b6f9de959085906136c09060009086908a904290600401614052565b6000604051808303818588803b1580156136d957600080fd5b505af1935050505080156136eb575060015b6136f95760009150506111a5565b60019150506111a5565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061373857613738613d64565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b59190613f85565b816001815181106137c8576137c8613d64565b6001600160a01b0392831660209182029290920101526017546137ee9130911684612697565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac94790613827908590600090869030904290600401614087565b600060405180830381600087803b15801561384157600080fd5b505af1158015613855573d6000803e3d6000fd5b505060408051428152602081018690527f361864e2bc9fde13aef92787495191b73eaff680fa79aba1b346c416f186334a935001905060405180910390a15050565b6001600160a01b038116811461156d57600080fd5b801515811461156d57600080fd5b600080604083850312156138cd57600080fd5b82356138d881613897565b915060208301356138e8816138ac565b809150509250929050565b600060208083528351808285015260005b8181101561392057858101830151858201604001528201613904565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561395457600080fd5b823561395f81613897565b946020939093013593505050565b60006020828403121561397f57600080fd5b813561398a816138ac565b9392505050565b6000602082840312156139a357600080fd5b813561398a81613897565b6000602082840312156139c057600080fd5b5035919050565b6000806000606084860312156139dc57600080fd5b83356139e781613897565b925060208401356139f781613897565b929592945050506040919091013590565b80356001600160401b0381168114613a1f57600080fd5b919050565b600080600060608486031215613a3957600080fd5b613a4284613a08565b9250613a5060208501613a08565b9150613a5e60408501613a08565b90509250925092565b60008060008060808587031215613a7d57600080fd5b8435613a88816138ac565b966020860135965060408601359560600135945092505050565b600080600060608486031215613ab757600080fd5b8335613ac2816138ac565b92506020840135613ad2816138ac565b91506040840135613ae2816138ac565b809150509250925092565b600080600060408486031215613b0257600080fd5b83356001600160401b0380821115613b1957600080fd5b818601915086601f830112613b2d57600080fd5b813581811115613b3c57600080fd5b8760208260051b8501011115613b5157600080fd5b60209283019550935050840135613ae2816138ac565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613ba557613ba5613b67565b604052919050565b60006001600160401b03821115613bc657613bc6613b67565b5060051b60200190565b600082601f830112613be157600080fd5b81356020613bf6613bf183613bad565b613b7d565b82815260059290921b84018101918181019086841115613c1557600080fd5b8286015b84811015613c305780358352918301918301613c19565b509695505050505050565b60008060408385031215613c4e57600080fd5b82356001600160401b0380821115613c6557600080fd5b818501915085601f830112613c7957600080fd5b81356020613c89613bf183613bad565b82815260059290921b84018101918181019089841115613ca857600080fd5b948201945b83861015613ccf578535613cc081613897565b82529482019490820190613cad565b96505086013592505080821115613ce557600080fd5b50613cf285828601613bd0565b9150509250929050565b60008060408385031215613d0f57600080fd5b8235613d1a81613897565b915060208301356138e881613897565b600181811c90821680613d3e57607f821691505b602082108103613d5e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156111a5576111a5613d7a565b600060018201613db557613db5613d7a565b5060010190565b818103818111156111a5576111a5613d7a565b80820281158282048414176111a5576111a5613d7a565b80820182811260008312801582168215821617156134b9576134b9613d7a565b600082613e2357634e487b7160e01b600052601260045260246000fd5b500490565b6001600160401b038181168382160190808211156134bb576134bb613d7a565b600181815b80851115613e83578160001904821115613e6957613e69613d7a565b80851615613e7657918102915b93841c9390800290613e4d565b509250929050565b600082613e9a575060016111a5565b81613ea7575060006111a5565b81600181146136f95760028103613ed45760ff841115613ec957613ec9613d7a565b50506001821b6111a5565b5060208310610133831016604e8410600b8410161715613ef7575081810a6111a5565b613f018383613e48565b8060001904821115613f1557613f15613d7a565b029392505050565b600061398a60ff841683613e8b565b6040808252810183905260008460608301825b86811015613f6f578235613f5281613897565b6001600160a01b0316825260209283019290910190600101613f3f565b5080925050508215156020830152949350505050565b600060208284031215613f9757600080fd5b815161398a81613897565b600060208284031215613fb457600080fd5b5051919050565b600060208284031215613fcd57600080fd5b815161398a816138ac565b634e487b7160e01b600052603160045260246000fd5b81810360008312801583831316838312821617156134bb576134bb613d7a565b600081518084526020808501945080840160005b838110156140475781516001600160a01b031687529582019590820190600101614022565b509495945050505050565b84815260806020820152600061406b608083018661400e565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a0604082015260006140a660a083018661400e565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220fc5c2126526b37af8b3a746a52bb755a3b44d994d3e48936a61d2da34feefa3464736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _rewardToken (address): 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
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.