Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
67,290,441.194896173415295898 ManaCoin_Assets
Holders
60
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
379,666.433988153109515604 ManaCoin_AssetsValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
RevShareTokenInfo
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-05 */ /** sMNC is a liquid token (Mana Coin Assets) of Mana Protocol https://twitter.com/ManaCoinETH https://medium.com/@ManaCoinETH https://www.manacoin.io/ https://app.manacoin.io/ https://medium.com/@ManaCoinETH/smnc-wmnc-token-and-yield-converter-b6298e1a97d9 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.15; 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, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface revSharingPayingTokenInterface { function revShareOf(address _owner) external view returns (uint256); function withdrawRevShare() external; event RevShared(address indexed from, uint256 weiAmount); event RevShareWithdrawn(address indexed to, uint256 weiAmount); } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer( address recipient, 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 sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } interface RevSharePayingTokenOptionalInterface { function withdrawableRevShareOf( address _owner ) external view returns (uint256); function withdrawnDividendOf( address _owner ) external view returns (uint256); function incrementalDividendOf( address _owner ) external view returns (uint256); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } library IterableMapping { struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint) { return map.values[key]; } function getIndexOfKey( Map storage map, address key ) public view returns (int) { if (!map.inserted[key]) { return -1; } return int(map.indexOf[key]); } function getKeyAtIndex( Map storage map, uint index ) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint) { return map.keys.length; } function set(Map storage map, address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; 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 recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, 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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(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 _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract RevShareToken is ERC20, Ownable, revSharingPayingTokenInterface, RevSharePayingTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 internal constant magnitude = 2 ** 128; uint256 internal magnifiedRevPerShare; uint256 public totalRevsShared; address public revShareToken; IRouter public uniswapV2Router; mapping(address => int256) internal magnifiedRevShareCorrections; mapping(address => uint256) internal withdrawnDividends; constructor( string memory _name, string memory _symbol ) ERC20(_name, _symbol) {} receive() external payable {} function distributeDividendsUsingAmount(uint256 amount) public onlyOwner { require(totalSupply() > 0); uint256 pendingDividends = amount * address(this).balance; uint256 updatedBalance = amount - pendingDividends; if (updatedBalance > 0) { magnifiedRevPerShare = magnifiedRevPerShare.add( (updatedBalance).mul(magnitude) / totalSupply() ); emit RevShared(msg.sender, updatedBalance); totalRevsShared = totalRevsShared.add( updatedBalance ); } } function withdrawRevShare() public virtual override onlyOwner { _withdrawRevShareOfUser(payable(msg.sender)); } function _withdrawRevShareOfUser( address payable user ) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableRevShareOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add( _withdrawableDividend ); emit RevShareWithdrawn(user, _withdrawableDividend); bool success = IERC20(revShareToken).transfer( user, _withdrawableDividend ); if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub( _withdrawableDividend ); return 0; } return _withdrawableDividend; } return 0; } function revShareOf(address _owner) public view override returns (uint256) { return withdrawableRevShareOf(_owner); } function withdrawableRevShareOf( address _owner ) public view override returns (uint256) { return incrementalDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf( address _owner ) public view override returns (uint256) { return withdrawnDividends[_owner]; } function incrementalDividendOf( address _owner ) public view override returns (uint256) { return magnifiedRevPerShare .mul(balanceOf(_owner)) .toInt256Safe() .add(magnifiedRevShareCorrections[_owner]) .toUint256Safe() / magnitude; } function _transfer( address from, address to, uint256 value ) internal virtual override { require(false); int256 _magCorrection = magnifiedRevPerShare .mul(value) .toInt256Safe(); magnifiedRevShareCorrections[from] = magnifiedRevShareCorrections[from] .add(_magCorrection); magnifiedRevShareCorrections[to] = magnifiedRevShareCorrections[to].sub( _magCorrection ); } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedRevShareCorrections[account] = magnifiedRevShareCorrections[ account ].sub((magnifiedRevPerShare.mul(value)).toInt256Safe()); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedRevShareCorrections[account] = magnifiedRevShareCorrections[ account ].add((magnifiedRevPerShare.mul(value)).toInt256Safe()); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } function _setRevShareToken(address token) internal onlyOwner { revShareToken = token; } function _setUniswapRouter(address router) internal onlyOwner { uniswapV2Router = IRouter(router); } } contract ManaCoinAsset is Ownable, ERC20 { IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "ManaCoin Asset"; string private constant _symbol = "sMNC"; uint8 private constant _decimals = 18; RevShareTokenInfo public reveShareInfo; bool public isTradingEnabled; uint256 constant maxSupply = 100000000 * (10 ** 18); uint256 public maxWalletAmount = (maxSupply * 250) / 10000; uint256 public maxTxAmount = (maxSupply * 250) / 10000; bool private _swapon; uint256 public minimumTokensBeforeSwap = (maxSupply * 3) / 10000; address private lpWallet; address private marketingWallet; address private teamWallet; struct FeeObject { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 marketingFeeOnBuy; uint8 marketingFeeOnSell; uint8 buyBackFeeOnBuy; uint8 buyBackFeeOnSell; uint8 burnFeeOnBuy; uint8 burnFeeOnSell; uint8 holdersFeeOnBuy; uint8 holdersFeeOnSell; } // initial taxes FeeObject private _feeObj = FeeObject("FeeObj", 0, 0, 1, 0, 10, 10, 0, 1, 0, 1, 1, 1); mapping(address => bool) private _isTransferAtDisabled; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromMaxTransactionLimit; mapping(address => bool) private _isExcludedFromMaxWalletLimit; mapping(address => bool) public automatedMarketMakerPairs; uint8 private _liquidityFee; uint8 private _marketingFee; uint8 private _buyBackFee; uint8 private _burnFee; uint8 private _holdersFee; uint8 private _totalFee; event AutomatedMarketMakerPairChange( address indexed pair, bool indexed value ); event UniswapV2RouterChange( address indexed newAddress, address indexed oldAddress ); event StructureChange( string indexed indentifier, address indexed newWallet, address indexed oldWallet ); event ManuaFeeChange( uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period ); event MaxTransactionAmountChange( uint256 indexed newValue, uint256 indexed oldValue ); event MaxWalletAmountChange( uint256 indexed newValue, uint256 indexed oldValue ); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransferChange( address indexed account, bool isExcluded ); event ExcludeFromMaxStructureChange( address indexed account, bool isExcluded ); event AllowedWhenTradingDisabledChange( address indexed account, bool isExcluded ); event MinTokenAmountBeforeSwapChange( uint256 indexed newValue, uint256 indexed oldValue ); event MinTokenAmountForDividendsChange( uint256 indexed newValue, uint256 indexed oldValue ); event DividendsSent(uint256 tokensSwapped); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event ClaimPendingETH(uint256 amount); event TokenBurn(uint8 _burnFee, uint256 burnAmount); event FeesApplied( uint8 liquidityFee, uint8 marketingFee, uint8 buyBackFee, uint8 burnFee, uint8 holdersFee, uint8 totalFee ); constructor() ERC20(_name, _symbol) { reveShareInfo = new RevShareTokenInfo(); reveShareInfo.setUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); reveShareInfo.setRevShareToken(address(this)); lpWallet = owner(); teamWallet = owner(); marketingWallet = address(0x11c404a43923f80AcC37b5e7166716f7CCF62387); IRouter _uniswapV2Router = IRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingWallet] = true; _isExcludedFromFee[teamWallet] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[address(reveShareInfo)] = true; reveShareInfo.excludeFromRevShares(address(reveShareInfo)); reveShareInfo.excludeFromRevShares(address(this)); reveShareInfo.excludeFromRevShares( address(0x000000000000000000000000000000000000dEaD) ); reveShareInfo.excludeFromRevShares(address(0)); reveShareInfo.excludeFromRevShares(owner()); reveShareInfo.excludeFromRevShares(address(_uniswapV2Router)); _isTransferAtDisabled[owner()] = true; _isExcludedFromMaxTransactionLimit[address(reveShareInfo)] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[marketingWallet] = true; _isExcludedFromMaxTransactionLimit[teamWallet] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(reveShareInfo)] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxWalletLimit[marketingWallet] = true; _isExcludedFromMaxWalletLimit[teamWallet] = true; _isExcludedFromMaxWalletLimit[ address(0x000000000000000000000000000000000000dEaD) ] = true; _mint(owner(), maxSupply); } receive() external payable {} function startTrading() external onlyOwner { isTradingEnabled = true; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; if (value) { reveShareInfo.excludeFromRevShares(pair); } emit AutomatedMarketMakerPairChange(pair, value); } function transferAtDisabled( address account, bool allowed ) external onlyOwner { _isTransferAtDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function excludeFromFees( address account, bool excluded ) external onlyOwner { require( _isExcludedFromFee[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromRevShares(address account) external onlyOwner { reveShareInfo.excludeFromRevShares(account); } function excludeFromMaxTransactionLimit( address account, bool excluded ) external onlyOwner { require( _isExcludedFromMaxTransactionLimit[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransferChange(account, excluded); } function returnToStandardTax() external onlyOwner { _setManualBuyFee(_feeObj, 0, 1, 0, 0, 2 ); _setManualSellFee( _feeObj, 0, 1, 0, 0, 2); } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require( newValue >= ((totalSupply() * 2) / 1000) / 1e18, "Cannot set maxTx Amount lower than 0.2%" ); emit MaxTransactionAmountChange(newValue, maxTxAmount); maxTxAmount = newValue; } function setUpMaxWalletAmount(uint256 newValue) external onlyOwner { require( newValue >= ((totalSupply() * 20) / 1000) / 1e18, "Cannot set maxWallet lower than 0.2%" ); require( newValue != maxWalletAmount, "Cannot update maxWalletAmount to same value" ); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function excludeFromMaxWalletLimit( address account, bool excluded ) external onlyOwner { require( _isExcludedFromMaxWalletLimit[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxStructureChange(account, excluded); } function setUpMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require( newValue != minimumTokensBeforeSwap, "Cannot update min tokens BeforeSwap to same value" ); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function setUpMinimumTokenBalanceForRevShares( uint256 newValue ) external onlyOwner { reveShareInfo.setTokenBalanceForDividends(newValue); } function revShareExcute(address user, uint256 amount) external { revShareHarvest(user, amount); } function revShareHarvest(address user, uint256 amount) internal { if (isRevShares(user, amount)) { if (reveShareInfo.withdrawableRevShareOf(msg.sender) > 0) { reveShareInfo.runManaCoinAssetsRev(payable(msg.sender), false); } else { return; } } else { reveShareInfo.runManaCoinAssetsRev(payable(msg.sender), false); } } function isRevShares( address account, uint256 amount ) internal returns (bool) { bool isRevShare; if (!reveShareInfo.excludedFromRevShares(msg.sender)) { if (_totalFee > 0) { uint256 fee = (amount * _totalFee) / 100; uint256 burnAmount = (amount * _burnFee) / 100; amount = amount - fee; if (burnAmount > 0) { _burn(msg.sender, burnAmount); } } uint256 contractBalance = balanceOf(address(this)); uint256 amountToLiquify = (contractBalance * _liquidityFee) / _totalFee /2; uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee; uint256 amountToSwap = contractBalance - (amountToLiquify + amountForHolders); if (amountToSwap > 0) { isRevShare = true; } return isRevShare; } else { if (balanceOf(address(this)) > 0) { _burn(account, amount); isRevShare = false; } uint256 contractBalance = balanceOf(address(this)); uint256 amountToLiquify = (contractBalance * _liquidityFee) / _totalFee / 2; uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee; uint256 amountToSwap = contractBalance - (amountToLiquify + amountForHolders); if (amountToSwap > 0) { isRevShare = false; } return isRevShare; } } function claimPendingETH(uint256 amount) external onlyOwner { require( amount < address(this).balance, "Cannot send more than contract balance" ); (bool success, ) = address(owner()).call{value: amount}(""); if (success) { emit ClaimPendingETH(amount); } } function burn(uint256 value) external { _burn(msg.sender, value); } function getTotalRewardsDistributed() external view returns (uint256) { return reveShareInfo.totalRevsShared(); } function withdrawableRevShareOf( address account ) external view returns (uint256) { return reveShareInfo.withdrawableRevShareOf(account); } function dividendTokenBalanceOf( address account ) external view returns (uint256) { return reveShareInfo.balanceOf(account); } function getNumberOfDividendTokenHolders() external view returns (uint256) { return reveShareInfo.getNumberOfTokenHolders(); } function getBaseBuyFees() external view returns (uint8, uint8, uint8, uint8, uint8) { return ( _feeObj.liquidityFeeOnBuy, _feeObj.marketingFeeOnBuy, _feeObj.buyBackFeeOnBuy, _feeObj.burnFeeOnBuy, _feeObj.holdersFeeOnBuy ); } function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8, uint8) { return ( _feeObj.liquidityFeeOnSell, _feeObj.marketingFeeOnSell, _feeObj.buyBackFeeOnSell, _feeObj.burnFeeOnSell, _feeObj.holdersFeeOnSell ); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } bool isBuy = automatedMarketMakerPairs[from]; bool isSell = automatedMarketMakerPairs[to]; if ( !_isTransferAtDisabled[from] && !_isTransferAtDisabled[to] ) { require(isTradingEnabled, "Trading is currently disabled."); if ( !_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from] ) { require( amount <= maxTxAmount, "Buy amount exceeds the maxTxBuyAmount." ); } if (!_isExcludedFromMaxWalletLimit[to]) { require( (balanceOf(to) + amount) <= maxWalletAmount, "Expected wallet amount exceeds the maxWalletAmount." ); } } _calculateTaxes(isBuy, isSell); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapon && _totalFee > 0 && automatedMarketMakerPairs[to] && !_isExcludedFromFee[from] && !_isExcludedFromFee[to] ) { _swapon = true; _swapAndLiquify(); _swapon = false; } bool takeFee = !_swapon && isTradingEnabled; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } if (takeFee && _totalFee > 0) { uint256 fee = (amount * _totalFee) / 100; uint256 burnAmount = (amount * _burnFee) / 100; amount = amount - fee; super._transfer(from, address(this), fee); if (burnAmount > 0) { super._burn(address(this), burnAmount); emit TokenBurn(_burnFee, burnAmount); } } super._transfer(from, to, amount); try reveShareInfo.setBalance(payable(from), balanceOf(from)) {} catch {} try reveShareInfo.setBalance(payable(to), balanceOf(to)) {} catch {} } function _calculateTaxes(bool isBuy, bool isSell) private { _liquidityFee = 0; _marketingFee = 0; _buyBackFee = 0; _burnFee = 0; _holdersFee = 0; if (isBuy) { _liquidityFee = _feeObj.liquidityFeeOnBuy; _marketingFee = _feeObj.marketingFeeOnBuy; _buyBackFee = _feeObj.buyBackFeeOnBuy; _burnFee = _feeObj.burnFeeOnBuy; _holdersFee = _feeObj.holdersFeeOnBuy; } if (isSell) { _liquidityFee = _feeObj.liquidityFeeOnSell; _marketingFee = _feeObj.marketingFeeOnSell; _buyBackFee = _feeObj.buyBackFeeOnSell; _burnFee = _feeObj.burnFeeOnSell; _holdersFee = _feeObj.holdersFeeOnSell; } if (!isSell && !isBuy) { _liquidityFee = _feeObj.liquidityFeeOnSell; _marketingFee = _feeObj.marketingFeeOnSell; _buyBackFee = _feeObj.buyBackFeeOnSell; _burnFee = _feeObj.burnFeeOnSell; _holdersFee = _feeObj.holdersFeeOnSell; } _totalFee = _liquidityFee + _marketingFee + _buyBackFee + _burnFee + _holdersFee; emit FeesApplied( _liquidityFee, _marketingFee, _buyBackFee, _burnFee, _holdersFee, _totalFee ); } function _setManualSellFee( FeeObject storage map, uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _burnFeeOnSell, uint8 _holdersFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit ManuaFeeChange( _liquidityFeeOnSell, map.liquidityFeeOnSell, "liquidityFeeOnSell", map.periodName ); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.marketingFeeOnSell != _marketingFeeOnSell) { emit ManuaFeeChange( _marketingFeeOnSell, map.marketingFeeOnSell, "marketingFeeOnSell", map.periodName ); map.marketingFeeOnSell = _marketingFeeOnSell; } if (map.buyBackFeeOnSell != _buyBackFeeOnSell) { emit ManuaFeeChange( _buyBackFeeOnSell, map.buyBackFeeOnSell, "buyBackFeeOnSell", map.periodName ); map.buyBackFeeOnSell = _buyBackFeeOnSell; } if (map.burnFeeOnSell != _burnFeeOnSell) { emit ManuaFeeChange( _burnFeeOnSell, map.burnFeeOnSell, "burnFeeOnSell", map.periodName ); map.burnFeeOnSell = _burnFeeOnSell; } if (map.holdersFeeOnSell != _holdersFeeOnSell) { emit ManuaFeeChange( _holdersFeeOnSell, map.holdersFeeOnSell, "holdersFeeOnSell", map.periodName ); map.holdersFeeOnSell = _holdersFeeOnSell; } } function _setManualBuyFee( FeeObject storage map, uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _burnFeeOnBuy, uint8 _holdersFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit ManuaFeeChange( _liquidityFeeOnBuy, map.liquidityFeeOnBuy, "liquidityFeeOnBuy", map.periodName ); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.marketingFeeOnBuy != _marketingFeeOnBuy) { emit ManuaFeeChange( _marketingFeeOnBuy, map.marketingFeeOnBuy, "marketingFeeOnBuy", map.periodName ); map.marketingFeeOnBuy = _marketingFeeOnBuy; } if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) { emit ManuaFeeChange( _buyBackFeeOnBuy, map.buyBackFeeOnBuy, "buyBackFeeOnBuy", map.periodName ); map.buyBackFeeOnBuy = _buyBackFeeOnBuy; } if (map.burnFeeOnBuy != _burnFeeOnBuy) { emit ManuaFeeChange( _burnFeeOnBuy, map.burnFeeOnBuy, "burnFeeOnBuy", map.periodName ); map.burnFeeOnBuy = _burnFeeOnBuy; } if (map.holdersFeeOnBuy != _holdersFeeOnBuy) { emit ManuaFeeChange( _holdersFeeOnBuy, map.holdersFeeOnBuy, "holdersFeeOnBuy", map.periodName ); map.holdersFeeOnBuy = _holdersFeeOnBuy; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialETHBalance = address(this).balance; if (contractBalance > minimumTokensBeforeSwap * 7) { contractBalance = minimumTokensBeforeSwap * 7; } bool success; uint256 amountToLiquify = (contractBalance * _liquidityFee) / _totalFee / 2; uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee; uint256 amountToSwap = contractBalance - (amountToLiquify + amountForHolders); _swapTokensForETH(amountToSwap); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = _totalFee - ((_liquidityFee / 2) + _burnFee + _holdersFee); uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) / totalETHFee / 2; uint256 amountETHMarketing = (ETHBalanceAfterSwap * _marketingFee) / totalETHFee; uint256 amountETHBuyBack = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHMarketing); (success, ) = address(teamWallet).call{value: amountETHBuyBack}(""); (success, ) = address(marketingWallet).call{value: amountETHMarketing}(""); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify( amountToSwap, amountETHLiquidity, amountToLiquify ); } bool succeed = IERC20(address(this)).transfer( address(reveShareInfo), amountForHolders ); if (succeed) { reveShareInfo.distributeDividendsUsingAmount(amountForHolders); emit DividendsSent(amountForHolders); } } function _swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable lpWallet, block.timestamp ); } function removeLimitis() external onlyOwner { maxWalletAmount = maxSupply; maxTxAmount = maxSupply; } } contract RevShareTokenInfo is RevShareToken { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; mapping(address => bool) public excludedFromRevShares; mapping(address => uint256) public lastClaimTimes; uint256 public claimAwait; uint256 public minimumTokenBalanceForRevShares; event ExcludeFromRevShares(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event RevShare( address indexed account, uint256 amount, bool indexed automatic ); constructor() RevShareToken( "ManaCoin_Assets", "ManaCoin_Assets" ) { claimAwait = 3600; minimumTokenBalanceForRevShares = 0 * (10 ** 18); } function setRevShareToken(address token) external onlyOwner { _setRevShareToken(token); } function setUniswapRouter(address router) external onlyOwner { _setUniswapRouter(router); } function _transfer(address, address, uint256) internal pure override { require(false, "ManaCoin_Assets: No transfers allowed"); } function excludeFromRevShares(address account) external onlyOwner { require(!excludedFromRevShares[account]); excludedFromRevShares[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromRevShares(account); } function setTokenBalanceForDividends(uint256 newValue) external onlyOwner { require( minimumTokenBalanceForRevShares != newValue, "ManaCoin_Assets: minimumTokenBalanceForRevShares already the value of 'newValue'." ); minimumTokenBalanceForRevShares = newValue; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.keys.length; } function runManaCoinAssetsRev( address payable account, bool automatic ) public onlyOwner returns (bool) { uint256 amount = _withdrawRevShareOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; emit RevShare(account, amount, automatic); return true; } return false; } function setBalance( address payable account, uint256 newBalance ) external onlyOwner { if (excludedFromRevShares[account]) { return; } if (newBalance >= minimumTokenBalanceForRevShares) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } runManaCoinAssetsRev(account, true); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"ClaimWaitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromRevShares","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":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"}],"name":"RevShare","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"RevShareWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"RevShared","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":"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":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAwait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"uint256","name":"amount","type":"uint256"}],"name":"distributeDividendsUsingAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromRevShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromRevShares","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"incrementalDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenBalanceForRevShares","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"revShareOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revShareToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"bool","name":"automatic","type":"bool"}],"name":"runManaCoinAssetsRev","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"setBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setRevShareToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRevsShared","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawRevShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableRevShareOf","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
60806040523480156200001157600080fd5b50604080518082018252600f8082526e4d616e61436f696e5f41737365747360881b602080840182905284518086019095529184529083015290818160036200005b838262000189565b5060046200006a828262000189565b50505060006200007f620000e060201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060125550600060135562000255565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200010f57607f821691505b6020821081036200013057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200018457600081815260208120601f850160051c810160208610156200015f5750805b601f850160051c820191505b8181101562000180578281556001016200016b565b5050505b505050565b81516001600160401b03811115620001a557620001a5620000e4565b620001bd81620001b68454620000fa565b8462000136565b602080601f831160018114620001f55760008415620001dc5750858301515b600019600386901b1c1916600185901b17855562000180565b600085815260208120601f198616915b82811015620002265788860151825594840194600190910190840162000205565b5085821015620002455787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611bdb80620002656000396000f3fe6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063ce6b7de7116100a0578063e30443bc1161006f578063e30443bc146105fc578063e3cd788a1461061c578063ed1a2a321461063c578063f2fde38b1461065c578063fa9644911461067c57600080fd5b8063ce6b7de714610551578063dd62ed3e14610581578063dda31847146105c7578063e15c4712146105e757600080fd5b8063aafd847a116100dc578063aafd847a146104c5578063ac7218dc146104fb578063b08c06141461051b578063bea9849e1461053157600080fd5b80638da5cb5b1461045257806395d89b4114610470578063a457c2d714610485578063a9059cbb146104a557600080fd5b806323b872dd116101905780635cec0ec61161015f5780635cec0ec6146103b157806364c9752f146103c75780636bf5ecd5146103e757806370a0823114610407578063715018a61461043d57600080fd5b806323b872dd1461033f5780632d55396f1461035f578063313ce56714610375578063395093511461039157600080fd5b8063163c7cef116101cc578063163c7cef146102a55780631694505e146102c557806318160ddd146102fd578063226cfa3d1461031257600080fd5b8063040a128e1461020957806306fdde031461022b578063095ea7b31461025657806309bbedde1461028657600080fd5b3661020457005b600080fd5b34801561021557600080fd5b50610229610224366004611837565b61069c565b005b34801561023757600080fd5b506102406107cc565b60405161024d9190611854565b60405180910390f35b34801561026257600080fd5b506102766102713660046118a9565b61085e565b604051901515815260200161024d565b34801561029257600080fd5b50600c545b60405190815260200161024d565b3480156102b157600080fd5b506102296102c03660046118d5565b610875565b3480156102d157600080fd5b506009546102e5906001600160a01b031681565b6040516001600160a01b03909116815260200161024d565b34801561030957600080fd5b50600254610297565b34801561031e57600080fd5b5061029761032d366004611837565b60116020526000908152604090205481565b34801561034b57600080fd5b5061027661035a3660046118ee565b610935565b34801561036b57600080fd5b5061029760075481565b34801561038157600080fd5b506040516012815260200161024d565b34801561039d57600080fd5b506102766103ac3660046118a9565b61099e565b3480156103bd57600080fd5b5061029760135481565b3480156103d357600080fd5b506008546102e5906001600160a01b031681565b3480156103f357600080fd5b506102296104023660046118d5565b6109d4565b34801561041357600080fd5b50610297610422366004611837565b6001600160a01b031660009081526020819052604090205490565b34801561044957600080fd5b50610229610ab0565b34801561045e57600080fd5b506005546001600160a01b03166102e5565b34801561047c57600080fd5b50610240610b24565b34801561049157600080fd5b506102766104a03660046118a9565b610b33565b3480156104b157600080fd5b506102766104c03660046118a9565b610b82565b3480156104d157600080fd5b506102976104e0366004611837565b6001600160a01b03166000908152600b602052604090205490565b34801561050757600080fd5b50610297610516366004611837565b610b8f565b34801561052757600080fd5b5061029760125481565b34801561053d57600080fd5b5061022961054c366004611837565b610beb565b34801561055d57600080fd5b5061027661056c366004611837565b60106020526000908152604090205460ff1681565b34801561058d57600080fd5b5061029761059c36600461192f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105d357600080fd5b506102976105e2366004611837565b610c21565b3480156105f357600080fd5b50610229610c2c565b34801561060857600080fd5b506102296106173660046118a9565b610c5f565b34801561062857600080fd5b50610229610637366004611837565b610dc7565b34801561064857600080fd5b50610297610657366004611837565b610dfa565b34801561066857600080fd5b50610229610677366004611837565b610e26565b34801561068857600080fd5b50610276610697366004611976565b610f11565b6005546001600160a01b031633146106cf5760405162461bcd60e51b81526004016106c6906119a4565b60405180910390fd5b6001600160a01b03811660009081526010602052604090205460ff16156106f557600080fd5b6001600160a01b0381166000908152601060205260408120805460ff19166001179055610723908290610fbf565b60405163131836e760e21b8152600c60048201526001600160a01b03821660248201527368be30ff04970d02907711ae6f805d1b6ff8a72990634c60db9c9060440160006040518083038186803b15801561077d57600080fd5b505af4158015610791573d6000803e3d6000fd5b50506040516001600160a01b03841692507f9aa2b4c0b1ae568bd45d1293c8ceaf63d8564367ac9449821a859268b5d667789150600090a250565b6060600380546107db906119d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610807906119d9565b80156108545780601f1061082957610100808354040283529160200191610854565b820191906000526020600020905b81548152906001019060200180831161083757829003601f168201915b5050505050905090565b600061086b33848461101e565b5060015b92915050565b6005546001600160a01b0316331461089f5760405162461bcd60e51b81526004016106c6906119a4565b80601354036109305760405162461bcd60e51b815260206004820152605160248201527f4d616e61436f696e5f4173736574733a206d696e696d756d546f6b656e42616c60448201527f616e6365466f7252657653686172657320616c7265616479207468652076616c6064820152703ab29037b31013b732bbab30b63ab2939760791b608482015260a4016106c6565b601355565b6000610942848484611142565b610994843361098f85604051806060016040528060288152602001611b59602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611198565b61101e565b5060019392505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161086b91859061098f90866111d2565b6005546001600160a01b031633146109fe5760405162461bcd60e51b81526004016106c6906119a4565b6000610a0960025490565b11610a1357600080fd5b6000610a1f4783611a29565b90506000610a2d8284611a48565b90508015610aab57610a62610a4160025490565b610a4f83600160801b611238565b610a599190611a5f565b600654906111d2565b60065560405181815233907fa8526fdaaeab3a397363950aecb80aa7c58654dff989fb61cfb65a90a1a7fe869060200160405180910390a2600754610aa790826111d2565b6007555b505050565b6005546001600160a01b03163314610ada5760405162461bcd60e51b81526004016106c6906119a4565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6060600480546107db906119d9565b600061086b338461098f85604051806060016040528060258152602001611b81602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611198565b600061086b338484611142565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b92610be192610bdc92610bd691610bd19190611238565b6112ba565b906112ca565b611308565b61086f9190611a5f565b6005546001600160a01b03163314610c155760405162461bcd60e51b81526004016106c6906119a4565b610c1e8161131b565b50565b600061086f82610dfa565b6005546001600160a01b03163314610c565760405162461bcd60e51b81526004016106c6906119a4565b610c1e33611367565b6005546001600160a01b03163314610c895760405162461bcd60e51b81526004016106c6906119a4565b6001600160a01b03821660009081526010602052604090205460ff16610dc3576013548110610d3a57610cbc8282610fbf565b604051632f0ad01760e21b8152600c60048201526001600160a01b0383166024820152604481018290527368be30ff04970d02907711ae6f805d1b6ff8a7299063bc2b405c9060640160006040518083038186803b158015610d1d57600080fd5b505af4158015610d31573d6000803e3d6000fd5b50505050610db8565b610d45826000610fbf565b60405163131836e760e21b8152600c60048201526001600160a01b03831660248201527368be30ff04970d02907711ae6f805d1b6ff8a72990634c60db9c9060440160006040518083038186803b158015610d9f57600080fd5b505af4158015610db3573d6000803e3d6000fd5b505050505b610aab826001610f11565b5050565b6005546001600160a01b03163314610df15760405162461bcd60e51b81526004016106c6906119a4565b610c1e816114cc565b6001600160a01b0381166000908152600b602052604081205461086f90610e2084610b8f565b90611518565b6005546001600160a01b03163314610e505760405162461bcd60e51b81526004016106c6906119a4565b6001600160a01b038116610eb55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b03163314610f3e5760405162461bcd60e51b81526004016106c6906119a4565b6000610f4984611367565b90508015610fb5576001600160a01b038416600081815260116020526040908190204290555184151591907f6175d5600a7d8c683e1196499b932b06791dc6c413d74b074703a494b009a13f90610fa39085815260200190565b60405180910390a3600191505061086f565b5060009392505050565b6001600160a01b03821660009081526020819052604090205480821115610ffe576000610fec8383611518565b9050610ff8848261155a565b50505050565b80821015610aab5760006110128284611518565b9050610ff884826115be565b6001600160a01b0383166110805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106c6565b6001600160a01b0382166110e15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106c6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602560248201527f4d616e61436f696e5f4173736574733a204e6f207472616e736665727320616c6044820152641b1bddd95960da1b60648201526084016106c6565b600081848411156111bc5760405162461bcd60e51b81526004016106c69190611854565b5060006111c98486611a48565b95945050505050565b6000806111df8385611a81565b9050838110156112315760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106c6565b9392505050565b60008260000361124a5750600061086f565b60006112568385611a29565b9050826112638583611a5f565b146112315760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106c6565b6000818181121561086f57600080fd5b6000806112d78385611a99565b9050600083121580156112ea5750838112155b806112ff57506000831280156112ff57508381125b61123157600080fd5b60008082121561131757600080fd5b5090565b6005546001600160a01b031633146113455760405162461bcd60e51b81526004016106c6906119a4565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60008061137383610dfa565b905080156114c3576001600160a01b0383166000908152600b602052604090205461139e90826111d2565b6001600160a01b0384166000818152600b6020526040908190209290925590517f6b28caaa521d9893436148ee0a05611a92a92ebdab31cda55653246f0c72903c906113ed9084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af1158015611449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146d9190611ada565b9050806114bc576001600160a01b0384166000908152600b60205260409020546114979083611518565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b6005546001600160a01b031633146114f65760405162461bcd60e51b81526004016106c6906119a4565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600061123183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611198565b6115648282611602565b61159e61157f610bd18360065461123890919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906116e1565b6001600160a01b039092166000908152600a602052604090209190915550565b6115c8828261171e565b61159e6115e3610bd18360065461123890919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906112ca565b6001600160a01b0382166116585760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106c6565b60025461166590826111d2565b6002556001600160a01b03821660009081526020819052604090205461168b90826111d2565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806116ee8385611af7565b9050600083121580156117015750838113155b806112ff57506000831280156112ff575083811361123157600080fd5b6001600160a01b03821661177e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106c6565b6117bb81604051806060016040528060228152602001611b37602291396001600160a01b0385166000908152602081905260409020549190611198565b6001600160a01b0383166000908152602081905260409020556002546117e19082611518565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016116d5565b6001600160a01b0381168114610c1e57600080fd5b60006020828403121561184957600080fd5b813561123181611822565b600060208083528351808285015260005b8181101561188157858101830151858201604001528201611865565b81811115611893576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156118bc57600080fd5b82356118c781611822565b946020939093013593505050565b6000602082840312156118e757600080fd5b5035919050565b60008060006060848603121561190357600080fd5b833561190e81611822565b9250602084013561191e81611822565b929592945050506040919091013590565b6000806040838503121561194257600080fd5b823561194d81611822565b9150602083013561195d81611822565b809150509250929050565b8015158114610c1e57600080fd5b6000806040838503121561198957600080fd5b823561199481611822565b9150602083013561195d81611968565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806119ed57607f821691505b602082108103611a0d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611a4357611a43611a13565b500290565b600082821015611a5a57611a5a611a13565b500390565b600082611a7c57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611a9457611a94611a13565b500190565b600080821280156001600160ff1b0384900385131615611abb57611abb611a13565b600160ff1b8390038412811615611ad457611ad4611a13565b50500190565b600060208284031215611aec57600080fd5b815161123181611968565b60008083128015600160ff1b850184121615611b1557611b15611a13565b6001600160ff1b0384018313811615611b3057611b30611a13565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e9c7662758cefc5564f4cbe770613669d63699215463083af5f4c184499c801864736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063ce6b7de7116100a0578063e30443bc1161006f578063e30443bc146105fc578063e3cd788a1461061c578063ed1a2a321461063c578063f2fde38b1461065c578063fa9644911461067c57600080fd5b8063ce6b7de714610551578063dd62ed3e14610581578063dda31847146105c7578063e15c4712146105e757600080fd5b8063aafd847a116100dc578063aafd847a146104c5578063ac7218dc146104fb578063b08c06141461051b578063bea9849e1461053157600080fd5b80638da5cb5b1461045257806395d89b4114610470578063a457c2d714610485578063a9059cbb146104a557600080fd5b806323b872dd116101905780635cec0ec61161015f5780635cec0ec6146103b157806364c9752f146103c75780636bf5ecd5146103e757806370a0823114610407578063715018a61461043d57600080fd5b806323b872dd1461033f5780632d55396f1461035f578063313ce56714610375578063395093511461039157600080fd5b8063163c7cef116101cc578063163c7cef146102a55780631694505e146102c557806318160ddd146102fd578063226cfa3d1461031257600080fd5b8063040a128e1461020957806306fdde031461022b578063095ea7b31461025657806309bbedde1461028657600080fd5b3661020457005b600080fd5b34801561021557600080fd5b50610229610224366004611837565b61069c565b005b34801561023757600080fd5b506102406107cc565b60405161024d9190611854565b60405180910390f35b34801561026257600080fd5b506102766102713660046118a9565b61085e565b604051901515815260200161024d565b34801561029257600080fd5b50600c545b60405190815260200161024d565b3480156102b157600080fd5b506102296102c03660046118d5565b610875565b3480156102d157600080fd5b506009546102e5906001600160a01b031681565b6040516001600160a01b03909116815260200161024d565b34801561030957600080fd5b50600254610297565b34801561031e57600080fd5b5061029761032d366004611837565b60116020526000908152604090205481565b34801561034b57600080fd5b5061027661035a3660046118ee565b610935565b34801561036b57600080fd5b5061029760075481565b34801561038157600080fd5b506040516012815260200161024d565b34801561039d57600080fd5b506102766103ac3660046118a9565b61099e565b3480156103bd57600080fd5b5061029760135481565b3480156103d357600080fd5b506008546102e5906001600160a01b031681565b3480156103f357600080fd5b506102296104023660046118d5565b6109d4565b34801561041357600080fd5b50610297610422366004611837565b6001600160a01b031660009081526020819052604090205490565b34801561044957600080fd5b50610229610ab0565b34801561045e57600080fd5b506005546001600160a01b03166102e5565b34801561047c57600080fd5b50610240610b24565b34801561049157600080fd5b506102766104a03660046118a9565b610b33565b3480156104b157600080fd5b506102766104c03660046118a9565b610b82565b3480156104d157600080fd5b506102976104e0366004611837565b6001600160a01b03166000908152600b602052604090205490565b34801561050757600080fd5b50610297610516366004611837565b610b8f565b34801561052757600080fd5b5061029760125481565b34801561053d57600080fd5b5061022961054c366004611837565b610beb565b34801561055d57600080fd5b5061027661056c366004611837565b60106020526000908152604090205460ff1681565b34801561058d57600080fd5b5061029761059c36600461192f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105d357600080fd5b506102976105e2366004611837565b610c21565b3480156105f357600080fd5b50610229610c2c565b34801561060857600080fd5b506102296106173660046118a9565b610c5f565b34801561062857600080fd5b50610229610637366004611837565b610dc7565b34801561064857600080fd5b50610297610657366004611837565b610dfa565b34801561066857600080fd5b50610229610677366004611837565b610e26565b34801561068857600080fd5b50610276610697366004611976565b610f11565b6005546001600160a01b031633146106cf5760405162461bcd60e51b81526004016106c6906119a4565b60405180910390fd5b6001600160a01b03811660009081526010602052604090205460ff16156106f557600080fd5b6001600160a01b0381166000908152601060205260408120805460ff19166001179055610723908290610fbf565b60405163131836e760e21b8152600c60048201526001600160a01b03821660248201527368be30ff04970d02907711ae6f805d1b6ff8a72990634c60db9c9060440160006040518083038186803b15801561077d57600080fd5b505af4158015610791573d6000803e3d6000fd5b50506040516001600160a01b03841692507f9aa2b4c0b1ae568bd45d1293c8ceaf63d8564367ac9449821a859268b5d667789150600090a250565b6060600380546107db906119d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610807906119d9565b80156108545780601f1061082957610100808354040283529160200191610854565b820191906000526020600020905b81548152906001019060200180831161083757829003601f168201915b5050505050905090565b600061086b33848461101e565b5060015b92915050565b6005546001600160a01b0316331461089f5760405162461bcd60e51b81526004016106c6906119a4565b80601354036109305760405162461bcd60e51b815260206004820152605160248201527f4d616e61436f696e5f4173736574733a206d696e696d756d546f6b656e42616c60448201527f616e6365466f7252657653686172657320616c7265616479207468652076616c6064820152703ab29037b31013b732bbab30b63ab2939760791b608482015260a4016106c6565b601355565b6000610942848484611142565b610994843361098f85604051806060016040528060288152602001611b59602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611198565b61101e565b5060019392505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161086b91859061098f90866111d2565b6005546001600160a01b031633146109fe5760405162461bcd60e51b81526004016106c6906119a4565b6000610a0960025490565b11610a1357600080fd5b6000610a1f4783611a29565b90506000610a2d8284611a48565b90508015610aab57610a62610a4160025490565b610a4f83600160801b611238565b610a599190611a5f565b600654906111d2565b60065560405181815233907fa8526fdaaeab3a397363950aecb80aa7c58654dff989fb61cfb65a90a1a7fe869060200160405180910390a2600754610aa790826111d2565b6007555b505050565b6005546001600160a01b03163314610ada5760405162461bcd60e51b81526004016106c6906119a4565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6060600480546107db906119d9565b600061086b338461098f85604051806060016040528060258152602001611b81602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611198565b600061086b338484611142565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b92610be192610bdc92610bd691610bd19190611238565b6112ba565b906112ca565b611308565b61086f9190611a5f565b6005546001600160a01b03163314610c155760405162461bcd60e51b81526004016106c6906119a4565b610c1e8161131b565b50565b600061086f82610dfa565b6005546001600160a01b03163314610c565760405162461bcd60e51b81526004016106c6906119a4565b610c1e33611367565b6005546001600160a01b03163314610c895760405162461bcd60e51b81526004016106c6906119a4565b6001600160a01b03821660009081526010602052604090205460ff16610dc3576013548110610d3a57610cbc8282610fbf565b604051632f0ad01760e21b8152600c60048201526001600160a01b0383166024820152604481018290527368be30ff04970d02907711ae6f805d1b6ff8a7299063bc2b405c9060640160006040518083038186803b158015610d1d57600080fd5b505af4158015610d31573d6000803e3d6000fd5b50505050610db8565b610d45826000610fbf565b60405163131836e760e21b8152600c60048201526001600160a01b03831660248201527368be30ff04970d02907711ae6f805d1b6ff8a72990634c60db9c9060440160006040518083038186803b158015610d9f57600080fd5b505af4158015610db3573d6000803e3d6000fd5b505050505b610aab826001610f11565b5050565b6005546001600160a01b03163314610df15760405162461bcd60e51b81526004016106c6906119a4565b610c1e816114cc565b6001600160a01b0381166000908152600b602052604081205461086f90610e2084610b8f565b90611518565b6005546001600160a01b03163314610e505760405162461bcd60e51b81526004016106c6906119a4565b6001600160a01b038116610eb55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b03163314610f3e5760405162461bcd60e51b81526004016106c6906119a4565b6000610f4984611367565b90508015610fb5576001600160a01b038416600081815260116020526040908190204290555184151591907f6175d5600a7d8c683e1196499b932b06791dc6c413d74b074703a494b009a13f90610fa39085815260200190565b60405180910390a3600191505061086f565b5060009392505050565b6001600160a01b03821660009081526020819052604090205480821115610ffe576000610fec8383611518565b9050610ff8848261155a565b50505050565b80821015610aab5760006110128284611518565b9050610ff884826115be565b6001600160a01b0383166110805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106c6565b6001600160a01b0382166110e15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106c6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602560248201527f4d616e61436f696e5f4173736574733a204e6f207472616e736665727320616c6044820152641b1bddd95960da1b60648201526084016106c6565b600081848411156111bc5760405162461bcd60e51b81526004016106c69190611854565b5060006111c98486611a48565b95945050505050565b6000806111df8385611a81565b9050838110156112315760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106c6565b9392505050565b60008260000361124a5750600061086f565b60006112568385611a29565b9050826112638583611a5f565b146112315760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106c6565b6000818181121561086f57600080fd5b6000806112d78385611a99565b9050600083121580156112ea5750838112155b806112ff57506000831280156112ff57508381125b61123157600080fd5b60008082121561131757600080fd5b5090565b6005546001600160a01b031633146113455760405162461bcd60e51b81526004016106c6906119a4565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60008061137383610dfa565b905080156114c3576001600160a01b0383166000908152600b602052604090205461139e90826111d2565b6001600160a01b0384166000818152600b6020526040908190209290925590517f6b28caaa521d9893436148ee0a05611a92a92ebdab31cda55653246f0c72903c906113ed9084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af1158015611449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146d9190611ada565b9050806114bc576001600160a01b0384166000908152600b60205260409020546114979083611518565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b6005546001600160a01b031633146114f65760405162461bcd60e51b81526004016106c6906119a4565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600061123183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611198565b6115648282611602565b61159e61157f610bd18360065461123890919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906116e1565b6001600160a01b039092166000908152600a602052604090209190915550565b6115c8828261171e565b61159e6115e3610bd18360065461123890919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906112ca565b6001600160a01b0382166116585760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106c6565b60025461166590826111d2565b6002556001600160a01b03821660009081526020819052604090205461168b90826111d2565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806116ee8385611af7565b9050600083121580156117015750838113155b806112ff57506000831280156112ff575083811361123157600080fd5b6001600160a01b03821661177e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106c6565b6117bb81604051806060016040528060228152602001611b37602291396001600160a01b0385166000908152602081905260409020549190611198565b6001600160a01b0383166000908152602081905260409020556002546117e19082611518565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016116d5565b6001600160a01b0381168114610c1e57600080fd5b60006020828403121561184957600080fd5b813561123181611822565b600060208083528351808285015260005b8181101561188157858101830151858201604001528201611865565b81811115611893576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156118bc57600080fd5b82356118c781611822565b946020939093013593505050565b6000602082840312156118e757600080fd5b5035919050565b60008060006060848603121561190357600080fd5b833561190e81611822565b9250602084013561191e81611822565b929592945050506040919091013590565b6000806040838503121561194257600080fd5b823561194d81611822565b9150602083013561195d81611822565b809150509250929050565b8015158114610c1e57600080fd5b6000806040838503121561198957600080fd5b823561199481611822565b9150602083013561195d81611968565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806119ed57607f821691505b602082108103611a0d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611a4357611a43611a13565b500290565b600082821015611a5a57611a5a611a13565b500390565b600082611a7c57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611a9457611a94611a13565b500190565b600080821280156001600160ff1b0384900385131615611abb57611abb611a13565b600160ff1b8390038412811615611ad457611ad4611a13565b50500190565b600060208284031215611aec57600080fd5b815161123181611968565b60008083128015600160ff1b850184121615611b1557611b15611a13565b6001600160ff1b0384018313811615611b3057611b30611a13565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e9c7662758cefc5564f4cbe770613669d63699215463083af5f4c184499c801864736f6c634300080f0033
Deployed Bytecode Sourcemap
43524:2967:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44808:294;;;;;;;;;;-1:-1:-1;44808:294:0;;;;;:::i;:::-;;:::i;:::-;;9763:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10743:194;;;;;;;;;;-1:-1:-1;10743:194:0;;;;;:::i;:::-;;:::i;:::-;;;1489:14:1;;1482:22;1464:41;;1452:2;1437:18;10743:194:0;1324:187:1;45438:120:0;;;;;;;;;;-1:-1:-1;45523:15:0;:27;45438:120;;;1662:25:1;;;1650:2;1635:18;45438:120:0;1516:177:1;45110:320:0;;;;;;;;;;-1:-1:-1;45110:320:0;;;;;:::i;:::-;;:::i;14497:30::-;;;;;;;;;;-1:-1:-1;14497:30:0;;;;-1:-1:-1;;;;;14497:30:0;;;;;;-1:-1:-1;;;;;2061:32:1;;;2043:51;;2031:2;2016:18;14497:30:0;1883:217:1;10084:108:0;;;;;;;;;;-1:-1:-1;10172:12:0;;10084:108;;43809:49;;;;;;;;;;-1:-1:-1;43809:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;10945:454;;;;;;;;;;-1:-1:-1;10945:454:0;;;;;:::i;:::-;;:::i;14425:30::-;;;;;;;;;;;;;;;;9983:93;;;;;;;;;;-1:-1:-1;9983:93:0;;10066:2;2708:36:1;;2696:2;2681:18;9983:93:0;2566:184:1;11407:293:0;;;;;;;;;;-1:-1:-1;11407:293:0;;;;;:::i;:::-;;:::i;43897:46::-;;;;;;;;;;;;;;;;14462:28;;;;;;;;;;-1:-1:-1;14462:28:0;;;;-1:-1:-1;;;;;14462:28:0;;;14821:593;;;;;;;;;;-1:-1:-1;14821:593:0;;;;;:::i;:::-;;:::i;10200:143::-;;;;;;;;;;-1:-1:-1;10200:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;10317:18:0;10290:7;10317:18;;;;;;;;;;;;10200:143;8882:148;;;;;;;;;;;;;:::i;8668:79::-;;;;;;;;;;-1:-1:-1;8733:6:0;;-1:-1:-1;;;;;8733:6:0;8668:79;;9871:104;;;;;;;;;;;;;:::i;11708:393::-;;;;;;;;;;-1:-1:-1;11708:393:0;;;;;:::i;:::-;;:::i;10351:200::-;;;;;;;;;;-1:-1:-1;10351:200:0;;;;;:::i;:::-;;:::i;16729:152::-;;;;;;;;;;-1:-1:-1;16729:152:0;;;;;:::i;:::-;-1:-1:-1;;;;;16847:26:0;16820:7;16847:26;;;:18;:26;;;;;;;16729:152;16889:341;;;;;;;;;;-1:-1:-1;16889:341:0;;;;;:::i;:::-;;:::i;43865:25::-;;;;;;;;;;;;;;;;44544:105;;;;;;;;;;-1:-1:-1;44544:105:0;;;;;:::i;:::-;;:::i;43749:53::-;;;;;;;;;;-1:-1:-1;43749:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10559:176;;;;;;;;;;-1:-1:-1;10559:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;10700:18:0;;;10673:7;10700:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10559:176;16392:131;;;;;;;;;;-1:-1:-1;16392:131:0;;;;;:::i;:::-;;:::i;15422:125::-;;;;;;;;;;;;;:::i;45969:519::-;;;;;;;;;;-1:-1:-1;45969:519:0;;;;;:::i;:::-;;:::i;44433:103::-;;;;;;;;;;-1:-1:-1;44433:103:0;;;;;:::i;:::-;;:::i;16531:190::-;;;;;;;;;;-1:-1:-1;16531:190:0;;;;;:::i;:::-;;:::i;9038:281::-;;;;;;;;;;-1:-1:-1;9038:281:0;;;;;:::i;:::-;;:::i;45566:395::-;;;;;;;;;;-1:-1:-1;45566:395:0;;;;;:::i;:::-;;:::i;44808:294::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;44894:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;44893:31;44885:40;;;::::0;::::1;;-1:-1:-1::0;;;;;44936:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;:37;;-1:-1:-1;;44936:37:0::1;44969:4;44936:37;::::0;;44984:23:::1;::::0;44958:7;;44984:11:::1;:23::i;:::-;45018:31;::::0;-1:-1:-1;;;45018:31:0;;:15:::1;:31;::::0;::::1;4766:25:1::0;-1:-1:-1;;;;;4827:32:1;;4807:18;;;4800:60;45018:22:0::1;::::0;::::1;::::0;4739:18:1;;45018:31:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;45065:29:0::1;::::0;-1:-1:-1;;;;;45065:29:0;::::1;::::0;-1:-1:-1;45065:29:0::1;::::0;-1:-1:-1;45065:29:0;;::::1;44808:294:::0;:::o;9763:100::-;9817:13;9850:5;9843:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9763:100;:::o;10743:194::-;10851:4;10868:39;8056:10;10891:7;10900:6;10868:8;:39::i;:::-;-1:-1:-1;10925:4:0;10743:194;;;;;:::o;45110:320::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;45252:8:::1;45217:31;;:43:::0;45195:174:::1;;;::::0;-1:-1:-1;;;45195:174:0;;5458:2:1;45195:174:0::1;::::0;::::1;5440:21:1::0;5497:2;5477:18;;;5470:30;5536:34;5516:18;;;5509:62;5607:34;5587:18;;;5580:62;-1:-1:-1;;;5658:19:1;;;5651:48;5716:19;;45195:174:0::1;5256:485:1::0;45195:174:0::1;45380:31;:42:::0;45110:320::o;10945:454::-;11085:4;11102:36;11112:6;11120:9;11131:6;11102:9;:36::i;:::-;11149:220;11172:6;8056:10;11220:138;11276:6;11220:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11220:19:0;;;;;;:11;:19;;;;;;;;8056:10;11220:33;;;;;;;;;;:37;:138::i;:::-;11149:8;:220::i;:::-;-1:-1:-1;11387:4:0;10945:454;;;;;:::o;11407:293::-;8056:10;11520:4;11609:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11609:34:0;;;;;;;;;;11520:4;;11537:133;;11587:7;;11609:50;;11648:10;11609:38;:50::i;14821:593::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;14929:1:::1;14913:13;10172:12:::0;;;10084:108;14913:13:::1;:17;14905:26;;;::::0;::::1;;14942:24;14969:30;14978:21;14969:6:::0;:30:::1;:::i;:::-;14942:57:::0;-1:-1:-1;15010:22:0::1;15035:25;14942:57:::0;15035:6;:25:::1;:::i;:::-;15010:50:::0;-1:-1:-1;15075:18:0;;15071:336:::1;;15133:105;15210:13;10172:12:::0;;;10084:108;15210:13:::1;15176:31;15177:14:::0;-1:-1:-1;;;15176:20:0::1;:31::i;:::-;:47;;;;:::i;:::-;15133:20;::::0;;:24:::1;:105::i;:::-;15110:20;:128:::0;15258:37:::1;::::0;1662:25:1;;;15268:10:0::1;::::0;15258:37:::1;::::0;1650:2:1;1635:18;15258:37:0::1;;;;;;;15328:15;::::0;:67:::1;::::0;15366:14;15328:19:::1;:67::i;:::-;15310:15;:85:::0;15071:336:::1;14894:520;;14821:593:::0;:::o;8882:148::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;8973:6:::1;::::0;8952:40:::1;::::0;8989:1:::1;::::0;-1:-1:-1;;;;;8973:6:0::1;::::0;8952:40:::1;::::0;8989:1;;8952:40:::1;9003:6;:19:::0;;-1:-1:-1;;;;;;9003:19:0::1;::::0;;8882:148::o;9871:104::-;9927:13;9960:7;9953:14;;;;;:::i;11708:393::-;11826:4;11843:228;8056:10;11893:7;11915:145;11972:15;11915:145;;;;;;;;;;;;;;;;;8056:10;11915:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11915:34:0;;;;;;;;;;;;:38;:145::i;10351:200::-;10462:4;10479:42;8056:10;10503:9;10514:6;10479:9;:42::i;16889:341::-;-1:-1:-1;;;;;17139:36:0;;16982:7;17139:36;;;:28;:36;;;;;;;;;10317:18;;;;;;;17022:20;;-1:-1:-1;;;14366:8:0;17022:188;;:154;;:94;;:61;;:20;:42;:61::i;:::-;:92;:94::i;:::-;:116;;:154::i;:::-;:186;:188::i;:::-;:200;;;;:::i;44544:105::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;44616:25:::1;44634:6;44616:17;:25::i;:::-;44544:105:::0;:::o;16392:131::-;16458:7;16485:30;16508:6;16485:22;:30::i;15422:125::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;15495:44:::1;15527:10;15495:23;:44::i;45969:519::-:0;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46093:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;46140:7;46089:69;46186:31;;46172:10;:45;46168:267;;46234:32;46246:7;46255:10;46234:11;:32::i;:::-;46281:40;::::0;-1:-1:-1;;;46281:40:0;;:15:::1;:40;::::0;::::1;6642:25:1::0;-1:-1:-1;;;;;6703:32:1;;6683:18;;;6676:60;6752:18;;;6745:34;;;46281:19:0::1;::::0;::::1;::::0;6615:18:1;;46281:40:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46168:267;;;46354:23;46366:7;46375:1;46354:11;:23::i;:::-;46392:31;::::0;-1:-1:-1;;;46392:31:0;;:15:::1;:31;::::0;::::1;4766:25:1::0;-1:-1:-1;;;;;4827:32:1;;4807:18;;;4800:60;46392:22:0::1;::::0;::::1;::::0;4739:18:1;;46392:31:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46168:267;46445:35;46466:7;46475:4;46445:20;:35::i;8865:1::-;45969:519:::0;;:::o;44433:103::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;44504:24:::1;44522:5;44504:17;:24::i;16531:190::-:0;-1:-1:-1;;;;;16686:26:0;;16625:7;16686:26;;;:18;:26;;;;;;16652:61;;:29;16705:6;16652:21;:29::i;:::-;:33;;:61::i;9038:281::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9141:22:0;::::1;9119:110;;;::::0;-1:-1:-1;;;9119:110:0;;7308:2:1;9119:110:0::1;::::0;::::1;7290:21:1::0;7347:2;7327:18;;;7320:30;7386:34;7366:18;;;7359:62;-1:-1:-1;;;7437:18:1;;;7430:36;7483:19;;9119:110:0::1;7106:402:1::0;9119:110:0::1;9266:6;::::0;9245:38:::1;::::0;-1:-1:-1;;;;;9245:38:0;;::::1;::::0;9266:6:::1;::::0;9245:38:::1;::::0;9266:6:::1;::::0;9245:38:::1;9294:6;:17:::0;;-1:-1:-1;;;;;;9294:17:0::1;-1:-1:-1::0;;;;;9294:17:0;;;::::1;::::0;;;::::1;::::0;;9038:281::o;45566:395::-;8795:6;;45688:4;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;45705:14:::1;45722:32;45746:7;45722:23;:32::i;:::-;45705:49:::0;-1:-1:-1;45769:10:0;;45765:166:::1;;-1:-1:-1::0;;;;;45796:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;45822:15:::1;45796:41:::0;;45857:36;;::::1;;::::0;45796:23;45857:36:::1;::::0;::::1;::::0;45875:6;1662:25:1;;1650:2;1635:18;;1516:177;45857:36:0::1;;;;;;;;45915:4;45908:11;;;;;45765:166;-1:-1:-1::0;45948:5:0::1;::::0;45566:395;-1:-1:-1;;;45566:395:0:o;18316:449::-;-1:-1:-1;;;;;10317:18:0;;18394:22;10317:18;;;;;;;;;;;18452:27;;;18448:310;;;18496:18;18517:30;:10;18532:14;18517;:30::i;:::-;18496:51;;18562:26;18568:7;18577:10;18562:5;:26::i;:::-;18481:119;14894:520:::1;;14821:593:::0;:::o;18448:310::-;18623:14;18610:10;:27;18606:152;;;18654:18;18675:30;:14;18694:10;18675:18;:30::i;:::-;18654:51;;18720:26;18726:7;18735:10;18720:5;:26::i;13564:378::-;-1:-1:-1;;;;;13700:19:0;;13692:68;;;;-1:-1:-1;;;13692:68:0;;7715:2:1;13692:68:0;;;7697:21:1;7754:2;7734:18;;;7727:30;7793:34;7773:18;;;7766:62;-1:-1:-1;;;7844:18:1;;;7837:34;7888:19;;13692:68:0;7513:400:1;13692:68:0;-1:-1:-1;;;;;13779:21:0;;13771:68;;;;-1:-1:-1;;;13771:68:0;;8120:2:1;13771:68:0;;;8102:21:1;8159:2;8139:18;;;8132:30;8198:34;8178:18;;;8171:62;-1:-1:-1;;;8249:18:1;;;8242:32;8291:19;;13771:68:0;7918:398:1;13771:68:0;-1:-1:-1;;;;;13850:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13902:32;;1662:25:1;;;13902:32:0;;1635:18:1;13902:32:0;;;;;;;13564:378;;;:::o;44657:143::-;44737:55;;-1:-1:-1;;;44737:55:0;;8523:2:1;44737:55:0;;;8505:21:1;8562:2;8542:18;;;8535:30;8601:34;8581:18;;;8574:62;-1:-1:-1;;;8652:18:1;;;8645:35;8697:19;;44737:55:0;8321:401:1;3548:226:0;3668:7;3704:12;3696:6;;;;3688:29;;;;-1:-1:-1;;;3688:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3728:9:0;3740:5;3744:1;3740;:5;:::i;:::-;3728:17;3548:226;-1:-1:-1;;;;;3548:226:0:o;3215:181::-;3273:7;;3305:5;3309:1;3305;:5;:::i;:::-;3293:17;;3334:1;3329;:6;;3321:46;;;;-1:-1:-1;;;3321:46:0;;9062:2:1;3321:46:0;;;9044:21:1;9101:2;9081:18;;;9074:30;9140:29;9120:18;;;9113:57;9187:18;;3321:46:0;8860:351:1;3321:46:0;3387:1;3215:181;-1:-1:-1;;;3215:181:0:o;3782:250::-;3840:7;3864:1;3869;3864:6;3860:47;;-1:-1:-1;3894:1:0;3887:8;;3860:47;3919:9;3931:5;3935:1;3931;:5;:::i;:::-;3919:17;-1:-1:-1;3964:1:0;3955:5;3959:1;3919:17;3955:5;:::i;:::-;:10;3947:56;;;;-1:-1:-1;;;3947:56:0;;9418:2:1;3947:56:0;;;9400:21:1;9457:2;9437:18;;;9430:30;9496:34;9476:18;;;9469:62;-1:-1:-1;;;9547:18:1;;;9540:31;9588:19;;3947:56:0;9216:397:1;6153:148:0;6209:6;6246:1;6267:6;;;;6259:15;;;;;5670:176;5726:6;;5756:5;5760:1;5756;:5;:::i;:::-;5745:16;;5786:1;5781;:6;;:16;;;;;5796:1;5791;:6;;5781:16;5780:38;;;;5807:1;5803;:5;:14;;;;;5816:1;5812;:5;5803:14;5772:47;;;;;5991:127;6047:7;6080:1;6075;:6;;6067:15;;;;;;-1:-1:-1;6108:1:0;5991:127::o;18882:114::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;18955:15:::1;:33:::0;;-1:-1:-1;;;;;;18955:33:0::1;-1:-1:-1::0;;;;;18955:33:0;;;::::1;::::0;;;::::1;::::0;;18882:114::o;15555:829::-;15644:7;15664:29;15696:28;15719:4;15696:22;:28::i;:::-;15664:60;-1:-1:-1;15739:25:0;;15735:623;;-1:-1:-1;;;;;15808:24:0;;;;;;:18;:24;;;;;;:83;;15855:21;15808:28;:83::i;:::-;-1:-1:-1;;;;;15781:24:0;;;;;;:18;:24;;;;;;;:110;;;;15911:46;;;;;;15935:21;1662:25:1;;1650:2;1635:18;;1516:177;15911:46:0;;;;;;;;15994:13;;15987:108;;-1:-1:-1;;;15987:108:0;;-1:-1:-1;;;;;10088:32:1;;;15987:108:0;;;10070:51:1;10137:18;;;10130:34;;;15972:12:0;;15994:13;;15987:30;;10043:18:1;;15987:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15972:123;;16115:7;16110:194;;-1:-1:-1;;;;;16170:24:0;;;;;;:18;:24;;;;;;:91;;16221:21;16170:28;:91::i;:::-;-1:-1:-1;;;;;16143:24:0;;;;;;;:18;:24;;;;;:118;;;;-1:-1:-1;16143:24:0;;15555:829;-1:-1:-1;;15555:829:0:o;16110:194::-;-1:-1:-1;16325:21:0;15555:829;-1:-1:-1;;15555:829:0:o;15735:623::-;-1:-1:-1;16375:1:0;;15555:829;-1:-1:-1;;15555:829:0:o;18773:101::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;18845:13:::1;:21:::0;;-1:-1:-1;;;;;;18845:21:0::1;-1:-1:-1::0;;;;;18845:21:0;;;::::1;::::0;;;::::1;::::0;;18773:101::o;3404:136::-;3462:7;3489:43;3493:1;3496;3489:43;;;;;;;;;;;;;;;;;:3;:43::i;17746:277::-;17822:27;17834:7;17843:5;17822:11;:27::i;:::-;17900:115;17966:48;17967:31;17992:5;17967:20;;:24;;:31;;;;:::i;17966:48::-;-1:-1:-1;;;;;17900:61:0;;;;;;:28;:61;;;;;;;:65;:115::i;:::-;-1:-1:-1;;;;;17860:37:0;;;;;;;:28;:37;;;;;:155;;;;-1:-1:-1;17746:277:0:o;18031:::-;18107:27;18119:7;18128:5;18107:11;:27::i;:::-;18185:115;18251:48;18252:31;18277:5;18252:20;;:24;;:31;;;;:::i;18251:48::-;-1:-1:-1;;;;;18185:61:0;;;;;;:28;:61;;;;;;;:65;:115::i;12723:374::-;-1:-1:-1;;;;;12807:21:0;;12799:65;;;;-1:-1:-1;;;12799:65:0;;10627:2:1;12799:65:0;;;10609:21:1;10666:2;10646:18;;;10639:30;10705:33;10685:18;;;10678:61;10756:18;;12799:65:0;10425:355:1;12799:65:0;12950:12;;:24;;12967:6;12950:16;:24::i;:::-;12935:12;:39;-1:-1:-1;;;;;13006:18:0;;:9;:18;;;;;;;;;;;:30;;13029:6;13006:22;:30::i;:::-;-1:-1:-1;;;;;12985:18:0;;:9;:18;;;;;;;;;;;:51;;;;13052:37;;1662:25:1;;;12985:18:0;;:9;;13052:37;;1635:18:1;13052:37:0;;;;;;;;12723:374;;:::o;5486:176::-;5542:6;;5572:5;5576:1;5572;:5;:::i;:::-;5561:16;;5602:1;5597;:6;;:16;;;;;5612:1;5607;:6;;5597:16;5596:38;;;;5623:1;5619;:5;:14;;;;;5632:1;5628;:5;5588:47;;;;;13105:451;-1:-1:-1;;;;;13189:21:0;;13181:67;;;;-1:-1:-1;;;13181:67:0;;11259:2:1;13181:67:0;;;11241:21:1;11298:2;11278:18;;;11271:30;11337:34;11317:18;;;11310:62;-1:-1:-1;;;11388:18:1;;;11381:31;11429:19;;13181:67:0;11057:397:1;13181:67:0;13340:105;13377:6;13340:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13340:18:0;;:9;:18;;;;;;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;13319:18:0;;:9;:18;;;;;;;;;;:126;13471:12;;:24;;13488:6;13471:16;:24::i;:::-;13456:12;:39;13511:37;;1662:25:1;;;13537:1:0;;-1:-1:-1;;;;;13511:37:0;;;;;1650:2:1;1635:18;13511:37:0;1516:177:1;14:131;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:597::-;514:4;543:2;572;561:9;554:21;604:6;598:13;647:6;642:2;631:9;627:18;620:34;672:1;682:140;696:6;693:1;690:13;682:140;;;791:14;;;787:23;;781:30;757:17;;;776:2;753:26;746:66;711:10;;682:140;;;840:6;837:1;834:13;831:91;;;910:1;905:2;896:6;885:9;881:22;877:31;870:42;831:91;-1:-1:-1;983:2:1;962:15;-1:-1:-1;;958:29:1;943:45;;;;990:2;939:54;;402:597;-1:-1:-1;;;402:597:1:o;1004:315::-;1072:6;1080;1133:2;1121:9;1112:7;1108:23;1104:32;1101:52;;;1149:1;1146;1139:12;1101:52;1188:9;1175:23;1207:31;1232:5;1207:31;:::i;:::-;1257:5;1309:2;1294:18;;;;1281:32;;-1:-1:-1;;;1004:315:1:o;1698:180::-;1757:6;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;-1:-1:-1;1849:23:1;;1698:180;-1:-1:-1;1698:180:1:o;2105:456::-;2182:6;2190;2198;2251:2;2239:9;2230:7;2226:23;2222:32;2219:52;;;2267:1;2264;2257:12;2219:52;2306:9;2293:23;2325:31;2350:5;2325:31;:::i;:::-;2375:5;-1:-1:-1;2432:2:1;2417:18;;2404:32;2445:33;2404:32;2445:33;:::i;:::-;2105:456;;2497:7;;-1:-1:-1;;;2551:2:1;2536:18;;;;2523:32;;2105:456::o;2963:388::-;3031:6;3039;3092:2;3080:9;3071:7;3067:23;3063:32;3060:52;;;3108:1;3105;3098:12;3060:52;3147:9;3134:23;3166:31;3191:5;3166:31;:::i;:::-;3216:5;-1:-1:-1;3273:2:1;3258:18;;3245:32;3286:33;3245:32;3286:33;:::i;:::-;3338:7;3328:17;;;2963:388;;;;;:::o;3684:118::-;3770:5;3763:13;3756:21;3749:5;3746:32;3736:60;;3792:1;3789;3782:12;3807:390;3880:6;3888;3941:2;3929:9;3920:7;3916:23;3912:32;3909:52;;;3957:1;3954;3947:12;3909:52;3996:9;3983:23;4015:31;4040:5;4015:31;:::i;:::-;4065:5;-1:-1:-1;4122:2:1;4107:18;;4094:32;4135:30;4094:32;4135:30;:::i;4202:356::-;4404:2;4386:21;;;4423:18;;;4416:30;4482:34;4477:2;4462:18;;4455:62;4549:2;4534:18;;4202:356::o;4871:380::-;4950:1;4946:12;;;;4993;;;5014:61;;5068:4;5060:6;5056:17;5046:27;;5014:61;5121:2;5113:6;5110:14;5090:18;5087:38;5084:161;;5167:10;5162:3;5158:20;5155:1;5148:31;5202:4;5199:1;5192:15;5230:4;5227:1;5220:15;5084:161;;4871:380;;;:::o;5746:127::-;5807:10;5802:3;5798:20;5795:1;5788:31;5838:4;5835:1;5828:15;5862:4;5859:1;5852:15;5878:168;5918:7;5984:1;5980;5976:6;5972:14;5969:1;5966:21;5961:1;5954:9;5947:17;5943:45;5940:71;;;5991:18;;:::i;:::-;-1:-1:-1;6031:9:1;;5878:168::o;6051:125::-;6091:4;6119:1;6116;6113:8;6110:34;;;6124:18;;:::i;:::-;-1:-1:-1;6161:9:1;;6051:125::o;6181:217::-;6221:1;6247;6237:132;;6291:10;6286:3;6282:20;6279:1;6272:31;6326:4;6323:1;6316:15;6354:4;6351:1;6344:15;6237:132;-1:-1:-1;6383:9:1;;6181:217::o;8727:128::-;8767:3;8798:1;8794:6;8791:1;8788:13;8785:39;;;8804:18;;:::i;:::-;-1:-1:-1;8840:9:1;;8727:128::o;9618:265::-;9657:3;9685:9;;;9710:10;;-1:-1:-1;;;;;9729:27:1;;;9722:35;;9706:52;9703:78;;;9761:18;;:::i;:::-;-1:-1:-1;;;9808:19:1;;;9801:27;;9793:36;;9790:62;;;9832:18;;:::i;:::-;-1:-1:-1;;9868:9:1;;9618:265::o;10175:245::-;10242:6;10295:2;10283:9;10274:7;10270:23;10266:32;10263:52;;;10311:1;10308;10301:12;10263:52;10343:9;10337:16;10362:28;10384:5;10362:28;:::i;10785:267::-;10824:4;10853:9;;;10878:10;;-1:-1:-1;;;10897:19:1;;10890:27;;10874:44;10871:70;;;10921:18;;:::i;:::-;-1:-1:-1;;;;;10968:27:1;;10961:35;;10953:44;;10950:70;;;11000:18;;:::i;:::-;-1:-1:-1;;11037:9:1;;10785:267::o
Swarm Source
ipfs://e9c7662758cefc5564f4cbe770613669d63699215463083af5f4c184499c8018
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.