ETH Price: $3,263.78 (-1.41%)
Gas: 12 Gwei

Token

Ecosy (Ecosy)
 

Overview

Max Total Supply

100,000,000,000,000 Ecosy

Holders

18

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.526054804 Ecosy

Value
$0.00
0x0a9e0a65200d6b9428630c517c2629b4844c98b5
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Ecosy

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-17
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

abstract contract Context {

    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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);
}

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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        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 Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    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 waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0xdead));
        _owner = address(0xdead);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Ecosy is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "Ecosy";
    string private _symbol = "Ecosy";
    uint8 private _decimals = 9;

    uint public launchedBlock;
    uint public killblock = 3;
    bool public isLaunch = false;
    address payable public marketingWalletAddress = payable(0xFE53680e88b353F2ddbbFF6f580fB04BCF03D317); 
    address payable public teamWalletAddress = payable(0xFE53680e88b353F2ddbbFF6f580fB04BCF03D317); 
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isMarketPair;
    mapping (address => bool) private _isbclisted;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 1;
    uint256 public _buyTeamFee = 0;
    
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 1;
    uint256 public _sellTeamFee = 0;
    
    uint256 public _sellReserveFee = 0;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 100;
    uint256 public _teamShare = 0;

    uint256 public _totalTaxIfBuying = 1;
    uint256 public _totalTaxIfSelling = 1;
    uint256 public _totalDistributionShares = 2;

    uint256 private _totalSupply = 100000000000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 100000000000 * 5 **_decimals; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;

        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    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 minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 Launch() public onlyOwner {
        isLaunch = true;
        launchedBlock = block.number;
    }

    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _teamShare = newTeamShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function setTeamWalletAddress(address newAddress) external onlyOwner() {
        teamWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function addBot(address recipient) internal {
        if (!_isbclisted[recipient]) _isbclisted[recipient] = true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(!_isbclisted[recipient] && !_isbclisted[sender], "bclisted address");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if (!isExcludedFromFee[sender] && !isExcludedFromFee[recipient] && _sellReserveFee > 0) {
                uint _sellReserveFeeAmount = amount.div(100).mul(_sellReserveFee);
                amount = amount.sub(_sellReserveFeeAmount);
            }     
                            
            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
            uint256 finalAmount;
            if (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) {
                finalAmount = amount;
            } else {
                require(isLaunch, "Swap not open");
                if(sender == uniswapPair) {
                    if (block.number <= launchedBlock + killblock) {                  
                        addBot(recipient);
                    }
                }
                finalAmount = takeFee(sender, recipient, amount);
            }

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
            
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

        if(amountBNBMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountBNBMarketing);

        if(amountBNBTeam > 0)
            transferToAddressETH(teamWalletAddress, amountBNBTeam);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

Contract Security Audit

Contract ABI

[{"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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":[],"name":"Launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReserveFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","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":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"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":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"killblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","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":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newTeamShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setTeamWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600560a09081526445636f737960d81b60c052600390620000269082620005bd565b5060408051808201909152600581526445636f737960d81b6020820152600490620000529082620005bd565b506005805460ff1916600990811790915560036007556008805474fe53680e88b353f2ddbbff6f580fb04bcf03d317006001600160a81b031990911617905580546001600160a01b03191673fe53680e88b353f2ddbbff6f580fb04bcf03d31717815561dead6080525f600f8190556001601081905560118290556012829055601381905560148290556015829055601682905560646017556018919091556019819055601a556002601b556200010b90600a62000792565b6200011d90655af3107a4000620007a9565b601c5560058054620001359160ff9091169062000792565b620001469064174876e800620007a9565b601d55601f805461ffff60a81b1916600160a81b17905534801562000169575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002259190620007c3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000271573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002979190620007c3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002e2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003089190620007c3565b601f80546001600160a01b039283166001600160a01b031991821617909155601e80549284169290911682179055601c54305f908152600b6020908152604080832094835293905291822055600190600c906200036c5f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff19958616179055308152600c909252902080549091166001179055601154601054600f54620003cd9291620003c69190620004af565b90620004af565b601955601454601354601254620003eb9291620003c69190620004af565b601a55601854601754601654620004099291620003c69190620004af565b601b55601f546001600160a01b03165f908152600d60205260408120805460ff19166001179055601c5490600a906200043f3390565b6001600160a01b0316815260208101919091526040015f2055336001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c54604051620004a091815260200190565b60405180910390a35062000801565b5f80620004bd8385620007eb565b905083811015620005145760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200054657607f821691505b6020821081036200056557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620005b8575f81815260208120601f850160051c81016020861015620005935750805b601f850160051c820191505b81811015620005b4578281556001016200059f565b5050505b505050565b81516001600160401b03811115620005d957620005d96200051d565b620005f181620005ea845462000531565b846200056b565b602080601f83116001811462000627575f84156200060f5750858301515b5f19600386901b1c1916600185901b178555620005b4565b5f85815260208120601f198616915b82811015620006575788860151825594840194600190910190840162000636565b50858210156200067557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620006d957815f1904821115620006bd57620006bd62000685565b80851615620006cb57918102915b93841c93908002906200069e565b509250929050565b5f82620006f15750600162000517565b81620006ff57505f62000517565b8160018114620007185760028114620007235762000743565b600191505062000517565b60ff84111562000737576200073762000685565b50506001821b62000517565b5060208310610133831016604e8410600b841016171562000768575081810a62000517565b62000774838362000699565b805f19048211156200078a576200078a62000685565b029392505050565b5f620007a260ff841683620006e1565b9392505050565b808202811582820484141762000517576200051762000685565b5f60208284031215620007d4575f80fd5b81516001600160a01b038116811462000514575f80fd5b8082018082111562000517576200051762000685565b6080516123ba620008215f395f818161046b0152611f2701526123ba5ff3fe6080604052600436106102f6575f3560e01c806388790a6811610189578063c49b9a80116100d8578063da00097d11610092578063ef422a181161006d578063ef422a18146108c3578063f0cd1dac146108e2578063f2fde38b146108f7578063f5d588f514610916575f80fd5b8063da00097d1461084a578063dc44b6a01461086a578063dd62ed3e1461087f575f80fd5b8063c49b9a80146107a9578063c5d24189146107c8578063c816841b146107dd578063c8607952146107fc578063cab0347114610811578063d158272d14610826575f80fd5b8063a08e671f11610143578063a83f53a71161011e578063a83f53a714610741578063a9059cbb14610756578063c2d4640e14610775578063c469b6dd14610794575f80fd5b8063a08e671f146106ee578063a457c2d714610703578063a5d69d1f14610722575f80fd5b806388790a681461066c5780638da5cb5b14610681578063914eb66a1461069d57806391b05ca3146106b157806395d89b41146106c6578063a073d37f146106da575f80fd5b8063395093511161024557806355724fc2116101ff57806361a23c69116101da57806361a23c69146105ef57806370a082311461060457806382eefb4314610638578063844d591c1461064d575f80fd5b806355724fc2146105a657806357a5802f146105bb5780635881f3ef146105d0575f80fd5b806339509351146104cd5780633b97084a146104ec5780633ecad2711461050b5780634a74bb02146105395780634cb80fd5146105595780635342acb414610578575f80fd5b8063170e45f1116102b057806323b872dd1161028b57806323b872dd1461043b57806327c8f8351461045a5780632c4b23341461048d578063313ce567146104ac575f80fd5b8063170e45f1146103e557806318160ddd146104085780631870517a1461041c575f80fd5b806302ac81681461030157806306fdde03146103175780630873321414610341578063095ea7b3146103605780631245e3471461038f5780631694505e146103c6575f80fd5b366102fd57005b5f80fd5b34801561030c575f80fd5b5061031561092f565b005b348015610322575f80fd5b5061032b610974565b6040516103389190611faa565b60405180910390f35b34801561034c575f80fd5b5061031561035b366004611ff5565b610a04565b34801561036b575f80fd5b5061037f61037a366004612032565b610a58565b6040519015158152602001610338565b34801561039a575f80fd5b506009546103ae906001600160a01b031681565b6040516001600160a01b039091168152602001610338565b3480156103d1575f80fd5b50601e546103ae906001600160a01b031681565b3480156103f0575f80fd5b506103fa60075481565b604051908152602001610338565b348015610413575f80fd5b50601c546103fa565b348015610427575f80fd5b50610315610436366004611ff5565b610a6e565b348015610446575f80fd5b5061037f61045536600461205c565b610abc565b348015610465575f80fd5b506103ae7f000000000000000000000000000000000000000000000000000000000000000081565b348015610498575f80fd5b506103156104a736600461209a565b610b25565b3480156104b7575f80fd5b5060055460405160ff9091168152602001610338565b3480156104d8575f80fd5b5061037f6104e7366004612032565b610b70565b3480156104f7575f80fd5b506103156105063660046120b5565b610ba5565b348015610516575f80fd5b5061037f61052536600461209a565b600d6020525f908152604090205460ff1681565b348015610544575f80fd5b50601f5461037f90600160a81b900460ff1681565b348015610564575f80fd5b5061031561057336600461209a565b610bd3565b348015610583575f80fd5b5061037f61059236600461209a565b600c6020525f908152604090205460ff1681565b3480156105b1575f80fd5b506103fa60155481565b3480156105c6575f80fd5b506103fa60165481565b3480156105db575f80fd5b506103ae6105ea36600461209a565b610c24565b3480156105fa575f80fd5b506103fa60175481565b34801561060f575f80fd5b506103fa61061e36600461209a565b6001600160a01b03165f908152600a602052604090205490565b348015610643575f80fd5b506103fa601a5481565b348015610658575f80fd5b506103156106673660046120e0565b610f2e565b348015610677575f80fd5b506103fa60125481565b34801561068c575f80fd5b505f546001600160a01b03166103ae565b3480156106a8575f80fd5b50610315610f81565b3480156106bc575f80fd5b506103fa60065481565b3480156106d1575f80fd5b5061032b610ff8565b3480156106e5575f80fd5b50601d546103fa565b3480156106f9575f80fd5b506103fa601b5481565b34801561070e575f80fd5b5061037f61071d366004612032565b611007565b34801561072d575f80fd5b5061031561073c366004612113565b611054565b34801561074c575f80fd5b506103fa60185481565b348015610761575f80fd5b5061037f610770366004612032565b61109b565b348015610780575f80fd5b5061031561078f366004611ff5565b6110a7565b34801561079f575f80fd5b506103fa60115481565b3480156107b4575f80fd5b506103156107c3366004612113565b6110f5565b3480156107d3575f80fd5b506103fa60105481565b3480156107e8575f80fd5b50601f546103ae906001600160a01b031681565b348015610807575f80fd5b506103fa60135481565b34801561081c575f80fd5b506103fa60145481565b348015610831575f80fd5b506008546103ae9061010090046001600160a01b031681565b348015610855575f80fd5b50601f5461037f90600160b01b900460ff1681565b348015610875575f80fd5b506103fa600f5481565b34801561088a575f80fd5b506103fa61089936600461212c565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205490565b3480156108ce575f80fd5b506103156108dd3660046120e0565b611176565b3480156108ed575f80fd5b506103fa60195481565b348015610902575f80fd5b5061031561091136600461209a565b6111c9565b348015610921575f80fd5b5060085461037f9060ff1681565b5f546001600160a01b031633146109615760405162461bcd60e51b815260040161095890612163565b60405180910390fd5b6008805460ff1916600117905543600655565b60606003805461098390612198565b80601f01602080910402602001604051908101604052809291908181526020018280546109af90612198565b80156109fa5780601f106109d1576101008083540402835291602001916109fa565b820191905f5260205f20905b8154815290600101906020018083116109dd57829003601f168201915b5050505050905090565b5f546001600160a01b03163314610a2d5760405162461bcd60e51b815260040161095890612163565b601283905560138290556014819055610a5081610a4a85856112b0565b906112b0565b601a55505050565b5f610a6433848461130e565b5060015b92915050565b5f546001600160a01b03163314610a975760405162461bcd60e51b815260040161095890612163565b600f83905560108290556011819055610ab481610a4a85856112b0565b601955505050565b5f610ac8848484611431565b50610b1a8433610b1585604051806060016040528060288152602001612338602891396001600160a01b038a165f908152600b602090815260408083203384529091529020549190611859565b61130e565b5060015b9392505050565b5f546001600160a01b03163314610b4e5760405162461bcd60e51b815260040161095890612163565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b335f818152600b602090815260408083206001600160a01b03871684529091528120549091610a64918590610b1590866112b0565b5f546001600160a01b03163314610bce5760405162461bcd60e51b815260040161095890612163565b601d55565b5f546001600160a01b03163314610bfc5760405162461bcd60e51b815260040161095890612163565b600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b5f80546001600160a01b03163314610c4e5760405162461bcd60e51b815260040161095890612163565b5f829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb291906121d0565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2191906121d0565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610d6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8e91906121d0565b91506001600160a01b038216610ede57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dfe91906121d0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6d91906121d0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610eb7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610edb91906121d0565b91505b601f80546001600160a01b038085166001600160a01b03199283168117909355601e80549490911693909116929092179091555f908152600d60205260409020805460ff19166001179055919050565b5f546001600160a01b03163314610f575760405162461bcd60e51b815260040161095890612163565b6001600160a01b03919091165f908152600d60205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610faa5760405162461bcd60e51b815260040161095890612163565b5f805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b03191661dead179055565b60606004805461098390612198565b5f610a643384610b158560405180606001604052806025815260200161236060259139335f908152600b602090815260408083206001600160a01b038d1684529091529020549190611859565b5f546001600160a01b0316331461107d5760405162461bcd60e51b815260040161095890612163565b601f8054911515600160b01b0260ff60b01b19909216919091179055565b5f610b1a338484611431565b5f546001600160a01b031633146110d05760405162461bcd60e51b815260040161095890612163565b6016839055601782905560188190556110ed81610a4a85856112b0565b601b55505050565b5f546001600160a01b0316331461111e5760405162461bcd60e51b815260040161095890612163565b601f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061116b90831515815260200190565b60405180910390a150565b5f546001600160a01b0316331461119f5760405162461bcd60e51b815260040161095890612163565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146111f25760405162461bcd60e51b815260040161095890612163565b6001600160a01b0381166112575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610958565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f806112bc83856121ff565b905083811015610b1e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610958565b6001600160a01b0383166113705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610958565b6001600160a01b0382166113d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610958565b6001600160a01b038381165f818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b0384166114965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610958565b6001600160a01b0383166114f85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610958565b6001600160a01b0383165f908152600e602052604090205460ff1615801561153857506001600160a01b0384165f908152600e602052604090205460ff16155b6115775760405162461bcd60e51b815260206004820152601060248201526f62636c6973746564206164647265737360801b6044820152606401610958565b601f54600160a01b900460ff161561159b57611594848484611891565b9050610b1e565b6001600160a01b0384165f908152600c602052604090205460ff161580156115db57506001600160a01b0383165f908152600c602052604090205460ff16155b80156115e857505f601554115b15611617576015545f9061160790611601856064611974565b906119b5565b90506116138382611a33565b9250505b305f908152600a6020526040902054601d54811080159081906116445750601f54600160a01b900460ff16155b801561166857506001600160a01b0386165f908152600d602052604090205460ff16155b801561167d5750601f54600160a81b900460ff165b156116a357601f54600160b01b900460ff161561169a57601d5491505b6116a382611a74565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389165f908152600a90915291909120546116f4918690611859565b6001600160a01b0387165f908152600a6020908152604080832093909355600c90529081205460ff168061173f57506001600160a01b0386165f908152600c602052604090205460ff165b1561174b5750836117d0565b60085460ff1661178d5760405162461bcd60e51b815260206004820152600d60248201526c29bbb0b8103737ba1037b832b760991b6044820152606401610958565b601f546001600160a01b03908116908816036117c2576007546006546117b391906121ff565b43116117c2576117c286611ba7565b6117cd878787611bec565b90505b6001600160a01b0386165f908152600a60205260409020546117f290826112b0565b6001600160a01b038088165f818152600a602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906118459085815260200190565b60405180910390a360019350505050610b1e565b5f818484111561187c5760405162461bcd60e51b81526004016109589190611faa565b505f6118888486612212565b95945050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600a909152918220546118e1918490611859565b6001600160a01b038086165f908152600a6020526040808220939093559085168152205461190f90836112b0565b6001600160a01b038085165f818152600a602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119629086815260200190565b60405180910390a35060019392505050565b5f610b1e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611cee565b5f825f036119c457505f610a68565b5f6119cf8385612225565b9050826119dc858361223c565b14610b1e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610958565b5f610b1e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611859565b601f805460ff60a01b1916600160a01b179055601b546016545f91611aa991600291611aa391829087906119b5565b90611974565b90505f611ab68383611a33565b9050611ac181611d1a565b60165447905f90611ae090611ad7906002611974565b601b5490611a33565b90505f611b016002611aa384611aa3601654886119b590919063ffffffff16565b90505f611b1d83611aa3601854876119b590919063ffffffff16565b90505f611b3482611b2e8786611a33565b90611a33565b90508015611b5757600854611b579061010090046001600160a01b031682611ea3565b8115611b7357600954611b73906001600160a01b031683611ea3565b5f83118015611b8157505f87115b15611b9057611b908784611edb565b5050601f805460ff60a01b19169055505050505050565b6001600160a01b0381165f908152600e602052604090205460ff16611be9576001600160a01b0381165f908152600e60205260409020805460ff191660011790555b50565b6001600160a01b0383165f908152600d6020526040812054819060ff1615611c2f57611c286064611aa3601954866119b590919063ffffffff16565b9050611c6c565b6001600160a01b0384165f908152600d602052604090205460ff1615611c6c57611c696064611aa3601a54866119b590919063ffffffff16565b90505b8015611ce457305f908152600a6020526040902054611c8b90826112b0565b305f818152600a6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cdb9085815260200190565b60405180910390a35b6118888382611a33565b5f8183611d0e5760405162461bcd60e51b81526004016109589190611faa565b505f611888848661223c565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611d4d57611d4d61225b565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611da4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc891906121d0565b81600181518110611ddb57611ddb61225b565b6001600160a01b039283166020918202929092010152601e54611e01913091168461130e565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e399085905f908690309042906004016122b1565b5f604051808303815f87803b158015611e50575f80fd5b505af1158015611e62573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051611e979291906122ec565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015611ed6573d5f803e3d5ffd5b505050565b601e54611ef39030906001600160a01b03168461130e565b601e5460405163f305d71960e01b8152306004820152602481018490525f6044820181905260648201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af1158015611f7e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611fa3919061230c565b5050505050565b5f6020808352835180828501525f5b81811015611fd557858101830151858201604001528201611fb9565b505f604082860101526040601f19601f8301168501019250505092915050565b5f805f60608486031215612007575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114611be9575f80fd5b5f8060408385031215612043575f80fd5b823561204e8161201e565b946020939093013593505050565b5f805f6060848603121561206e575f80fd5b83356120798161201e565b925060208401356120898161201e565b929592945050506040919091013590565b5f602082840312156120aa575f80fd5b8135610b1e8161201e565b5f602082840312156120c5575f80fd5b5035919050565b803580151581146120db575f80fd5b919050565b5f80604083850312156120f1575f80fd5b82356120fc8161201e565b915061210a602084016120cc565b90509250929050565b5f60208284031215612123575f80fd5b610b1e826120cc565b5f806040838503121561213d575f80fd5b82356121488161201e565b915060208301356121588161201e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806121ac57607f821691505b6020821081036121ca57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156121e0575f80fd5b8151610b1e8161201e565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a6857610a686121eb565b81810381811115610a6857610a686121eb565b8082028115828204841417610a6857610a686121eb565b5f8261225657634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b838110156122a65781516001600160a01b031687529582019590820190600101612281565b509495945050505050565b85815284602082015260a060408201525f6122cf60a083018661226f565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f612304604083018461226f565b949350505050565b5f805f6060848603121561231e575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205d2130e64d5cfa589cac723d4705d618ca9d530ceac52bace3cf1f1694c509fa64736f6c63430008140033

Deployed Bytecode

0x6080604052600436106102f6575f3560e01c806388790a6811610189578063c49b9a80116100d8578063da00097d11610092578063ef422a181161006d578063ef422a18146108c3578063f0cd1dac146108e2578063f2fde38b146108f7578063f5d588f514610916575f80fd5b8063da00097d1461084a578063dc44b6a01461086a578063dd62ed3e1461087f575f80fd5b8063c49b9a80146107a9578063c5d24189146107c8578063c816841b146107dd578063c8607952146107fc578063cab0347114610811578063d158272d14610826575f80fd5b8063a08e671f11610143578063a83f53a71161011e578063a83f53a714610741578063a9059cbb14610756578063c2d4640e14610775578063c469b6dd14610794575f80fd5b8063a08e671f146106ee578063a457c2d714610703578063a5d69d1f14610722575f80fd5b806388790a681461066c5780638da5cb5b14610681578063914eb66a1461069d57806391b05ca3146106b157806395d89b41146106c6578063a073d37f146106da575f80fd5b8063395093511161024557806355724fc2116101ff57806361a23c69116101da57806361a23c69146105ef57806370a082311461060457806382eefb4314610638578063844d591c1461064d575f80fd5b806355724fc2146105a657806357a5802f146105bb5780635881f3ef146105d0575f80fd5b806339509351146104cd5780633b97084a146104ec5780633ecad2711461050b5780634a74bb02146105395780634cb80fd5146105595780635342acb414610578575f80fd5b8063170e45f1116102b057806323b872dd1161028b57806323b872dd1461043b57806327c8f8351461045a5780632c4b23341461048d578063313ce567146104ac575f80fd5b8063170e45f1146103e557806318160ddd146104085780631870517a1461041c575f80fd5b806302ac81681461030157806306fdde03146103175780630873321414610341578063095ea7b3146103605780631245e3471461038f5780631694505e146103c6575f80fd5b366102fd57005b5f80fd5b34801561030c575f80fd5b5061031561092f565b005b348015610322575f80fd5b5061032b610974565b6040516103389190611faa565b60405180910390f35b34801561034c575f80fd5b5061031561035b366004611ff5565b610a04565b34801561036b575f80fd5b5061037f61037a366004612032565b610a58565b6040519015158152602001610338565b34801561039a575f80fd5b506009546103ae906001600160a01b031681565b6040516001600160a01b039091168152602001610338565b3480156103d1575f80fd5b50601e546103ae906001600160a01b031681565b3480156103f0575f80fd5b506103fa60075481565b604051908152602001610338565b348015610413575f80fd5b50601c546103fa565b348015610427575f80fd5b50610315610436366004611ff5565b610a6e565b348015610446575f80fd5b5061037f61045536600461205c565b610abc565b348015610465575f80fd5b506103ae7f000000000000000000000000000000000000000000000000000000000000dead81565b348015610498575f80fd5b506103156104a736600461209a565b610b25565b3480156104b7575f80fd5b5060055460405160ff9091168152602001610338565b3480156104d8575f80fd5b5061037f6104e7366004612032565b610b70565b3480156104f7575f80fd5b506103156105063660046120b5565b610ba5565b348015610516575f80fd5b5061037f61052536600461209a565b600d6020525f908152604090205460ff1681565b348015610544575f80fd5b50601f5461037f90600160a81b900460ff1681565b348015610564575f80fd5b5061031561057336600461209a565b610bd3565b348015610583575f80fd5b5061037f61059236600461209a565b600c6020525f908152604090205460ff1681565b3480156105b1575f80fd5b506103fa60155481565b3480156105c6575f80fd5b506103fa60165481565b3480156105db575f80fd5b506103ae6105ea36600461209a565b610c24565b3480156105fa575f80fd5b506103fa60175481565b34801561060f575f80fd5b506103fa61061e36600461209a565b6001600160a01b03165f908152600a602052604090205490565b348015610643575f80fd5b506103fa601a5481565b348015610658575f80fd5b506103156106673660046120e0565b610f2e565b348015610677575f80fd5b506103fa60125481565b34801561068c575f80fd5b505f546001600160a01b03166103ae565b3480156106a8575f80fd5b50610315610f81565b3480156106bc575f80fd5b506103fa60065481565b3480156106d1575f80fd5b5061032b610ff8565b3480156106e5575f80fd5b50601d546103fa565b3480156106f9575f80fd5b506103fa601b5481565b34801561070e575f80fd5b5061037f61071d366004612032565b611007565b34801561072d575f80fd5b5061031561073c366004612113565b611054565b34801561074c575f80fd5b506103fa60185481565b348015610761575f80fd5b5061037f610770366004612032565b61109b565b348015610780575f80fd5b5061031561078f366004611ff5565b6110a7565b34801561079f575f80fd5b506103fa60115481565b3480156107b4575f80fd5b506103156107c3366004612113565b6110f5565b3480156107d3575f80fd5b506103fa60105481565b3480156107e8575f80fd5b50601f546103ae906001600160a01b031681565b348015610807575f80fd5b506103fa60135481565b34801561081c575f80fd5b506103fa60145481565b348015610831575f80fd5b506008546103ae9061010090046001600160a01b031681565b348015610855575f80fd5b50601f5461037f90600160b01b900460ff1681565b348015610875575f80fd5b506103fa600f5481565b34801561088a575f80fd5b506103fa61089936600461212c565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205490565b3480156108ce575f80fd5b506103156108dd3660046120e0565b611176565b3480156108ed575f80fd5b506103fa60195481565b348015610902575f80fd5b5061031561091136600461209a565b6111c9565b348015610921575f80fd5b5060085461037f9060ff1681565b5f546001600160a01b031633146109615760405162461bcd60e51b815260040161095890612163565b60405180910390fd5b6008805460ff1916600117905543600655565b60606003805461098390612198565b80601f01602080910402602001604051908101604052809291908181526020018280546109af90612198565b80156109fa5780601f106109d1576101008083540402835291602001916109fa565b820191905f5260205f20905b8154815290600101906020018083116109dd57829003601f168201915b5050505050905090565b5f546001600160a01b03163314610a2d5760405162461bcd60e51b815260040161095890612163565b601283905560138290556014819055610a5081610a4a85856112b0565b906112b0565b601a55505050565b5f610a6433848461130e565b5060015b92915050565b5f546001600160a01b03163314610a975760405162461bcd60e51b815260040161095890612163565b600f83905560108290556011819055610ab481610a4a85856112b0565b601955505050565b5f610ac8848484611431565b50610b1a8433610b1585604051806060016040528060288152602001612338602891396001600160a01b038a165f908152600b602090815260408083203384529091529020549190611859565b61130e565b5060015b9392505050565b5f546001600160a01b03163314610b4e5760405162461bcd60e51b815260040161095890612163565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b335f818152600b602090815260408083206001600160a01b03871684529091528120549091610a64918590610b1590866112b0565b5f546001600160a01b03163314610bce5760405162461bcd60e51b815260040161095890612163565b601d55565b5f546001600160a01b03163314610bfc5760405162461bcd60e51b815260040161095890612163565b600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b5f80546001600160a01b03163314610c4e5760405162461bcd60e51b815260040161095890612163565b5f829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb291906121d0565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2191906121d0565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610d6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8e91906121d0565b91506001600160a01b038216610ede57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dfe91906121d0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6d91906121d0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610eb7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610edb91906121d0565b91505b601f80546001600160a01b038085166001600160a01b03199283168117909355601e80549490911693909116929092179091555f908152600d60205260409020805460ff19166001179055919050565b5f546001600160a01b03163314610f575760405162461bcd60e51b815260040161095890612163565b6001600160a01b03919091165f908152600d60205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610faa5760405162461bcd60e51b815260040161095890612163565b5f805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b03191661dead179055565b60606004805461098390612198565b5f610a643384610b158560405180606001604052806025815260200161236060259139335f908152600b602090815260408083206001600160a01b038d1684529091529020549190611859565b5f546001600160a01b0316331461107d5760405162461bcd60e51b815260040161095890612163565b601f8054911515600160b01b0260ff60b01b19909216919091179055565b5f610b1a338484611431565b5f546001600160a01b031633146110d05760405162461bcd60e51b815260040161095890612163565b6016839055601782905560188190556110ed81610a4a85856112b0565b601b55505050565b5f546001600160a01b0316331461111e5760405162461bcd60e51b815260040161095890612163565b601f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061116b90831515815260200190565b60405180910390a150565b5f546001600160a01b0316331461119f5760405162461bcd60e51b815260040161095890612163565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146111f25760405162461bcd60e51b815260040161095890612163565b6001600160a01b0381166112575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610958565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f806112bc83856121ff565b905083811015610b1e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610958565b6001600160a01b0383166113705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610958565b6001600160a01b0382166113d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610958565b6001600160a01b038381165f818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b0384166114965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610958565b6001600160a01b0383166114f85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610958565b6001600160a01b0383165f908152600e602052604090205460ff1615801561153857506001600160a01b0384165f908152600e602052604090205460ff16155b6115775760405162461bcd60e51b815260206004820152601060248201526f62636c6973746564206164647265737360801b6044820152606401610958565b601f54600160a01b900460ff161561159b57611594848484611891565b9050610b1e565b6001600160a01b0384165f908152600c602052604090205460ff161580156115db57506001600160a01b0383165f908152600c602052604090205460ff16155b80156115e857505f601554115b15611617576015545f9061160790611601856064611974565b906119b5565b90506116138382611a33565b9250505b305f908152600a6020526040902054601d54811080159081906116445750601f54600160a01b900460ff16155b801561166857506001600160a01b0386165f908152600d602052604090205460ff16155b801561167d5750601f54600160a81b900460ff165b156116a357601f54600160b01b900460ff161561169a57601d5491505b6116a382611a74565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389165f908152600a90915291909120546116f4918690611859565b6001600160a01b0387165f908152600a6020908152604080832093909355600c90529081205460ff168061173f57506001600160a01b0386165f908152600c602052604090205460ff165b1561174b5750836117d0565b60085460ff1661178d5760405162461bcd60e51b815260206004820152600d60248201526c29bbb0b8103737ba1037b832b760991b6044820152606401610958565b601f546001600160a01b03908116908816036117c2576007546006546117b391906121ff565b43116117c2576117c286611ba7565b6117cd878787611bec565b90505b6001600160a01b0386165f908152600a60205260409020546117f290826112b0565b6001600160a01b038088165f818152600a602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906118459085815260200190565b60405180910390a360019350505050610b1e565b5f818484111561187c5760405162461bcd60e51b81526004016109589190611faa565b505f6118888486612212565b95945050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600a909152918220546118e1918490611859565b6001600160a01b038086165f908152600a6020526040808220939093559085168152205461190f90836112b0565b6001600160a01b038085165f818152600a602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119629086815260200190565b60405180910390a35060019392505050565b5f610b1e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611cee565b5f825f036119c457505f610a68565b5f6119cf8385612225565b9050826119dc858361223c565b14610b1e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610958565b5f610b1e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611859565b601f805460ff60a01b1916600160a01b179055601b546016545f91611aa991600291611aa391829087906119b5565b90611974565b90505f611ab68383611a33565b9050611ac181611d1a565b60165447905f90611ae090611ad7906002611974565b601b5490611a33565b90505f611b016002611aa384611aa3601654886119b590919063ffffffff16565b90505f611b1d83611aa3601854876119b590919063ffffffff16565b90505f611b3482611b2e8786611a33565b90611a33565b90508015611b5757600854611b579061010090046001600160a01b031682611ea3565b8115611b7357600954611b73906001600160a01b031683611ea3565b5f83118015611b8157505f87115b15611b9057611b908784611edb565b5050601f805460ff60a01b19169055505050505050565b6001600160a01b0381165f908152600e602052604090205460ff16611be9576001600160a01b0381165f908152600e60205260409020805460ff191660011790555b50565b6001600160a01b0383165f908152600d6020526040812054819060ff1615611c2f57611c286064611aa3601954866119b590919063ffffffff16565b9050611c6c565b6001600160a01b0384165f908152600d602052604090205460ff1615611c6c57611c696064611aa3601a54866119b590919063ffffffff16565b90505b8015611ce457305f908152600a6020526040902054611c8b90826112b0565b305f818152600a6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cdb9085815260200190565b60405180910390a35b6118888382611a33565b5f8183611d0e5760405162461bcd60e51b81526004016109589190611faa565b505f611888848661223c565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611d4d57611d4d61225b565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611da4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc891906121d0565b81600181518110611ddb57611ddb61225b565b6001600160a01b039283166020918202929092010152601e54611e01913091168461130e565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e399085905f908690309042906004016122b1565b5f604051808303815f87803b158015611e50575f80fd5b505af1158015611e62573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051611e979291906122ec565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015611ed6573d5f803e3d5ffd5b505050565b601e54611ef39030906001600160a01b03168461130e565b601e5460405163f305d71960e01b8152306004820152602481018490525f6044820181905260648201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af1158015611f7e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611fa3919061230c565b5050505050565b5f6020808352835180828501525f5b81811015611fd557858101830151858201604001528201611fb9565b505f604082860101526040601f19601f8301168501019250505092915050565b5f805f60608486031215612007575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114611be9575f80fd5b5f8060408385031215612043575f80fd5b823561204e8161201e565b946020939093013593505050565b5f805f6060848603121561206e575f80fd5b83356120798161201e565b925060208401356120898161201e565b929592945050506040919091013590565b5f602082840312156120aa575f80fd5b8135610b1e8161201e565b5f602082840312156120c5575f80fd5b5035919050565b803580151581146120db575f80fd5b919050565b5f80604083850312156120f1575f80fd5b82356120fc8161201e565b915061210a602084016120cc565b90509250929050565b5f60208284031215612123575f80fd5b610b1e826120cc565b5f806040838503121561213d575f80fd5b82356121488161201e565b915060208301356121588161201e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806121ac57607f821691505b6020821081036121ca57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156121e0575f80fd5b8151610b1e8161201e565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a6857610a686121eb565b81810381811115610a6857610a686121eb565b8082028115828204841417610a6857610a686121eb565b5f8261225657634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b838110156122a65781516001600160a01b031687529582019590820190600101612281565b509495945050505050565b85815284602082015260a060408201525f6122cf60a083018661226f565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f612304604083018461226f565b949350505050565b5f805f6060848603121561231e575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205d2130e64d5cfa589cac723d4705d618ca9d530ceac52bace3cf1f1694c509fa64736f6c63430008140033

Deployed Bytecode Sourcemap

14265:14258:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19392:108;;;;;;;;;;;;;:::i;:::-;;17584:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20129:341;;;;;;;;;;-1:-1:-1;20129:341:0;;;;;:::i;:::-;;:::i;18878:161::-;;;;;;;;;;-1:-1:-1;18878:161:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;18878:161:0;1344:187:1;14710:94:0;;;;;;;;;;-1:-1:-1;14710:94:0;;;;-1:-1:-1;;;;;14710:94:0;;;;;;-1:-1:-1;;;;;1716:32:1;;;1698:51;;1686:2;1671:18;14710:94:0;1536:219:1;15906:41:0;;;;;;;;;;-1:-1:-1;15906:41:0;;;;-1:-1:-1;;;;;15906:41:0;;;14536:25;;;;;;;;;;;;;;;;;;;2141::1;;;2129:2;2114:18;14536:25:0;1995:177:1;17861:100:0;;;;;;;;;;-1:-1:-1;17941:12:0;;17861:100;;19788:333;;;;;;;;;;-1:-1:-1;19788:333:0;;;;;:::i;:::-;;:::i;22739:313::-;;;;;;;;;;-1:-1:-1;22739:313:0;;;;;:::i;:::-;;:::i;14812:81::-;;;;;;;;;;;;;;;21127:129;;;;;;;;;;-1:-1:-1;21127:129:0;;;;;:::i;:::-;;:::i;17770:83::-;;;;;;;;;;-1:-1:-1;17836:9:0;;17770:83;;17836:9;;;;3240:36:1;;3228:2;3213:18;17770:83:0;3098:184:1;18247:218:0;;;;;;;;;;-1:-1:-1;18247:218:0;;;;;:::i;:::-;;:::i;20848:124::-;;;;;;;;;;-1:-1:-1;20848:124:0;;;;;:::i;:::-;;:::i;15090:45::-;;;;;;;;;;-1:-1:-1;15090:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16021:40;;;;;;;;;;-1:-1:-1;16021:40:0;;;;-1:-1:-1;;;16021:40:0;;;;;;20980:139;;;;;;;;;;-1:-1:-1;20980:139:0;;;;;:::i;:::-;;:::i;15033:50::-;;;;;;;;;;-1:-1:-1;15033:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15453:34;;;;;;;;;;;;;;;;15496;;;;;;;;;;;;;;;;21714:748;;;;;;;;;;-1:-1:-1;21714:748:0;;;;;:::i;:::-;;:::i;15537:36::-;;;;;;;;;;;;;;;;17969:119;;;;;;;;;;-1:-1:-1;17969:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;18062:18:0;18035:7;18062:18;;;:9;:18;;;;;;;17969:119;15661:37;;;;;;;;;;;;;;;;19508:129;;;;;;;;;;-1:-1:-1;19508:129:0;;;;;:::i;:::-;;:::i;15323:36::-;;;;;;;;;;;;;;;;5794:79;;;;;;;;;;-1:-1:-1;5832:7:0;5859:6;-1:-1:-1;;;;;5859:6:0;5794:79;;6019:155;;;;;;;;;;;;;:::i;14504:25::-;;;;;;;;;;;;;;;;17675:87;;;;;;;;;;;;;:::i;18750:120::-;;;;;;;;;;-1:-1:-1;18839:23:0;;18750:120;;15705:43;;;;;;;;;;;;;;;;18473:269;;;;;;;;;;-1:-1:-1;18473:269:0;;;;;:::i;:::-;;:::i;21443:125::-;;;;;;;;;;-1:-1:-1;21443:125:0;;;;;:::i;:::-;;:::i;15580:29::-;;;;;;;;;;;;;;;;22564:167;;;;;;;;;;-1:-1:-1;22564:167:0;;;;;:::i;:::-;;:::i;20482:358::-;;;;;;;;;;-1:-1:-1;20482:358:0;;;;;:::i;:::-;;:::i;15280:30::-;;;;;;;;;;;;;;;;21264:171;;;;;;;;;;-1:-1:-1;21264:171:0;;;;;:::i;:::-;;:::i;15238:35::-;;;;;;;;;;;;;;;;15954:26;;;;;;;;;;-1:-1:-1;15954:26:0;;;;-1:-1:-1;;;;;15954:26:0;;;15366:36;;;;;;;;;;;;;;;;15409:31;;;;;;;;;;;;;;;;14603:99;;;;;;;;;;-1:-1:-1;14603:99:0;;;;;;;-1:-1:-1;;;;;14603:99:0;;;16068:45;;;;;;;;;;-1:-1:-1;16068:45:0;;;;-1:-1:-1;;;16068:45:0;;;;;;15196:35;;;;;;;;;;;;;;;;18096:143;;;;;;;;;;-1:-1:-1;18096:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18204:18:0;;;18177:7;18204:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18096:143;19645:135;;;;;;;;;;-1:-1:-1;19645:135:0;;;;;:::i;:::-;;:::i;15618:36::-;;;;;;;;;;;;;;;;6182:244;;;;;;;;;;-1:-1:-1;6182:244:0;;;;;:::i;:::-;;:::i;14568:28::-;;;;;;;;;;-1:-1:-1;14568:28:0;;;;;;;;19392:108;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;;;;;;;;;19438:8:::1;:15:::0;;-1:-1:-1;;19438:15:0::1;19449:4;19438:15;::::0;;19480:12:::1;19464:13;:28:::0;19392:108::o;17584:83::-;17621:13;17654:5;17647:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17584:83;:::o;20129:341::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;20253:17:::1;:35:::0;;;20299:17:::1;:35:::0;;;20345:12:::1;:25:::0;;;20404:58:::1;20360:10:::0;20404:40:::1;20273:15:::0;20319;20404:21:::1;:40::i;:::-;:44:::0;::::1;:58::i;:::-;20383:18;:79:::0;-1:-1:-1;;;20129:341:0:o;18878:161::-;18953:4;18970:39;192:10;18993:7;19002:6;18970:8;:39::i;:::-;-1:-1:-1;19027:4:0;18878:161;;;;;:::o;19788:333::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;19911:16:::1;:34:::0;;;19956:16:::1;:34:::0;;;20001:11:::1;:24:::0;;;20058:55:::1;20015:10:::0;20058:38:::1;19930:15:::0;19975;20058:20:::1;:38::i;:55::-;20038:17;:75:::0;-1:-1:-1;;;19788:333:0:o;22739:313::-;22837:4;22854:36;22864:6;22872:9;22883:6;22854:9;:36::i;:::-;-1:-1:-1;22901:121:0;22910:6;192:10;22932:89;22970:6;22932:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22932:19:0;;;;;;:11;:19;;;;;;;;192:10;22932:33;;;;;;;;;;:37;:89::i;:::-;22901:8;:121::i;:::-;-1:-1:-1;23040:4:0;22739:313;;;;;;:::o;21127:129::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;21209:17:::1;:39:::0;;-1:-1:-1;;;;;;21209:39:0::1;-1:-1:-1::0;;;;;21209:39:0;;;::::1;::::0;;;::::1;::::0;;21127:129::o;18247:218::-;192:10;18335:4;18384:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18384:34:0;;;;;;;;;;18335:4;;18352:83;;18375:7;;18384:50;;18423:10;18384:38;:50::i;20848:124::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;20930:23:::1;:34:::0;20848:124::o;20980:139::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;21067:22:::1;:44:::0;;-1:-1:-1;;;;;21067:44:0;;::::1;;;-1:-1:-1::0;;;;;;21067:44:0;;::::1;::::0;;;::::1;::::0;;20980:139::o;21714:748::-;21794:22;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;21831:35:::1;21888:16;21831:74;;21954:16;-1:-1:-1::0;;;;;21954:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21936:53:0::1;;21998:4;22005:16;-1:-1:-1::0;;;;;22005:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21936:93;::::0;-1:-1:-1;;;;;;21936:93:0::1;::::0;;;;;;-1:-1:-1;;;;;5767:15:1;;;21936:93:0::1;::::0;::::1;5749:34:1::0;5819:15;;5799:18;;;5792:43;5684:18;;21936:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21919:110:::0;-1:-1:-1;;;;;;22045:28:0;::::1;22042:225;;22159:16;-1:-1:-1::0;;;;;22159:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22141:74:0::1;;22224:4;22231:16;-1:-1:-1::0;;;;;22231:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22141:114;::::0;-1:-1:-1;;;;;;22141:114:0::1;::::0;;;;;;-1:-1:-1;;;;;5767:15:1;;;22141:114:0::1;::::0;::::1;5749:34:1::0;5819:15;;5799:18;;;5792:43;5684:18;;22141:114:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22124:131;;22042:225;22279:11;:28:::0;;-1:-1:-1;;;;;22279:28:0;;::::1;-1:-1:-1::0;;;;;;22279:28:0;;::::1;::::0;::::1;::::0;;;22341:15:::1;:34:::0;;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;22279:11:::1;22413:34:::0;;;:12:::1;:34;::::0;;;;:41;;-1:-1:-1;;22413:41:0::1;22279:28:::0;22413:41:::1;::::0;;22293:14;21714:748;-1:-1:-1;21714:748:0:o;19508:129::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19597:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;19597:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19508:129::o;6019:155::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;6107:6:::1;::::0;;6086:45:::1;::::0;6123:6:::1;::::0;-1:-1:-1;;;;;6107:6:0;;::::1;::::0;6086:45:::1;::::0;::::1;6142:6;:24:::0;;-1:-1:-1;;;;;;6142:24:0::1;6159:6;6142:24;::::0;;6019:155::o;17675:87::-;17714:13;17747:7;17740:14;;;;;:::i;18473:269::-;18566:4;18583:129;192:10;18606:7;18615:96;18654:15;18615:96;;;;;;;;;;;;;;;;;192:10;18615:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18615:34:0;;;;;;;;;;;;:38;:96::i;21443:125::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;21524:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;21524:36:0::1;-1:-1:-1::0;;;;21524:36:0;;::::1;::::0;;;::::1;::::0;;21443:125::o;22564:167::-;22642:4;22659:42;192:10;22683:9;22694:6;22659:9;:42::i;20482:358::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;20623:15:::1;:35:::0;;;20669:15:::1;:35:::0;;;20715:10:::1;:25:::0;;;20780:52:::1;20728:12:::0;20780:36:::1;20641:17:::0;20687;20780:19:::1;:36::i;:52::-;20753:24;:79:::0;-1:-1:-1;;;20482:358:0:o;21264:171::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;21341:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;21341:32:0::1;-1:-1:-1::0;;;;21341:32:0;;::::1;;::::0;;21389:38:::1;::::0;::::1;::::0;::::1;::::0;21365:8;1509:14:1;1502:22;1484:41;;1472:2;1457:18;;1344:187;21389:38:0::1;;;;;;;;21264:171:::0;:::o;19645:135::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19735:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;19735:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19645:135::o;6182:244::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6271:22:0;::::1;6263:73;;;::::0;-1:-1:-1;;;6263:73:0;;6048:2:1;6263:73:0::1;::::0;::::1;6030:21:1::0;6087:2;6067:18;;;6060:30;6126:34;6106:18;;;6099:62;-1:-1:-1;;;6177:18:1;;;6170:36;6223:19;;6263:73:0::1;5846:402:1::0;6263:73:0::1;6373:6;::::0;;6352:38:::1;::::0;-1:-1:-1;;;;;6352:38:0;;::::1;::::0;6373:6;::::1;::::0;6352:38:::1;::::0;::::1;6401:6;:17:::0;;-1:-1:-1;;;;;;6401:17:0::1;-1:-1:-1::0;;;;;6401:17:0;;;::::1;::::0;;;::::1;::::0;;6182:244::o;1164:181::-;1222:7;;1254:5;1258:1;1254;:5;:::i;:::-;1242:17;;1283:1;1278;:6;;1270:46;;;;-1:-1:-1;;;1270:46:0;;6717:2:1;1270:46:0;;;6699:21:1;6756:2;6736:18;;;6729:30;6795:29;6775:18;;;6768:57;6842:18;;1270:46:0;6515:351:1;19047:337:0;-1:-1:-1;;;;;19140:19:0;;19132:68;;;;-1:-1:-1;;;19132:68:0;;7073:2:1;19132:68:0;;;7055:21:1;7112:2;7092:18;;;7085:30;7151:34;7131:18;;;7124:62;-1:-1:-1;;;7202:18:1;;;7195:34;7246:19;;19132:68:0;6871:400:1;19132:68:0;-1:-1:-1;;;;;19219:21:0;;19211:68;;;;-1:-1:-1;;;19211:68:0;;7478:2:1;19211:68:0;;;7460:21:1;7517:2;7497:18;;;7490:30;7556:34;7536:18;;;7529:62;-1:-1:-1;;;7607:18:1;;;7600:32;7649:19;;19211:68:0;7276:398:1;19211:68:0;-1:-1:-1;;;;;19292:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19344:32;;2141:25:1;;;19344:32:0;;2114:18:1;19344:32:0;;;;;;;19047:337;;;:::o;23189:2098::-;23276:4;-1:-1:-1;;;;;23303:20:0;;23295:70;;;;-1:-1:-1;;;23295:70:0;;7881:2:1;23295:70:0;;;7863:21:1;7920:2;7900:18;;;7893:30;7959:34;7939:18;;;7932:62;-1:-1:-1;;;8010:18:1;;;8003:35;8055:19;;23295:70:0;7679:401:1;23295:70:0;-1:-1:-1;;;;;23384:23:0;;23376:71;;;;-1:-1:-1;;;23376:71:0;;8287:2:1;23376:71:0;;;8269:21:1;8326:2;8306:18;;;8299:30;8365:34;8345:18;;;8338:62;-1:-1:-1;;;8416:18:1;;;8409:33;8459:19;;23376:71:0;8085:399:1;23376:71:0;-1:-1:-1;;;;;23467:22:0;;;;;;:11;:22;;;;;;;;23466:23;:47;;;;-1:-1:-1;;;;;;23494:19:0;;;;;;:11;:19;;;;;;;;23493:20;23466:47;23458:76;;;;-1:-1:-1;;;23458:76:0;;8691:2:1;23458:76:0;;;8673:21:1;8730:2;8710:18;;;8703:30;-1:-1:-1;;;8749:18:1;;;8742:46;8805:18;;23458:76:0;8489:340:1;23458:76:0;23550:16;;-1:-1:-1;;;23550:16:0;;;;23547:1733;;;23600:41;23615:6;23623:9;23634:6;23600:14;:41::i;:::-;23593:48;;;;23547:1733;-1:-1:-1;;;;;23698:25:0;;;;;;:17;:25;;;;;;;;23697:26;:59;;;;-1:-1:-1;;;;;;23728:28:0;;;;;;:17;:28;;;;;;;;23727:29;23697:59;:82;;;;;23778:1;23760:15;;:19;23697:82;23693:249;;;23849:15;;23800:26;;23829:36;;:15;:6;23840:3;23829:10;:15::i;:::-;:19;;:36::i;:::-;23800:65;-1:-1:-1;23893:33:0;:6;23800:65;23893:10;:33::i;:::-;23884:42;;23781:161;23693:249;24040:4;23991:28;18062:18;;;:9;:18;;;;;;24116:23;;24092:47;;;;;;;24172:44;;-1:-1:-1;24200:16:0;;-1:-1:-1;;;24200:16:0;;;;24199:17;24172:44;:69;;;;-1:-1:-1;;;;;;24221:20:0;;;;;;:12;:20;;;;;;;;24220:21;24172:69;:94;;;;-1:-1:-1;24245:21:0;;-1:-1:-1;;;24245:21:0;;;;24172:94;24168:305;;;24304:25;;-1:-1:-1;;;24304:25:0;;;;24301:97;;;24375:23;;24352:46;;24301:97;24417:36;24432:20;24417:14;:36::i;:::-;24509:53;;;;;;;;;;;-1:-1:-1;;;24509:53:0;;;;;;;;-1:-1:-1;;;;;24509:17:0;;-1:-1:-1;24509:17:0;;;:9;:17;;;;;;;;:53;;24531:6;;24509:21;:53::i;:::-;-1:-1:-1;;;;;24489:17:0;;;;;;:9;:17;;;;;;;;:73;;;;24615:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;24644:28:0;;;;;;:17;:28;;;;;;;;24615:57;24611:479;;;-1:-1:-1;24707:6:0;24611:479;;;24762:8;;;;24754:34;;;;-1:-1:-1;;;24754:34:0;;9036:2:1;24754:34:0;;;9018:21:1;9075:2;9055:18;;;9048:30;-1:-1:-1;;;9094:18:1;;;9087:43;9147:18;;24754:34:0;8834:337:1;24754:34:0;24820:11;;-1:-1:-1;;;;;24820:11:0;;;24810:21;;;;24807:201;;24892:9;;24876:13;;:25;;;;:::i;:::-;24860:12;:41;24856:133;;24948:17;24955:9;24948:6;:17::i;:::-;25040:34;25048:6;25056:9;25067:6;25040:7;:34::i;:::-;25026:48;;24611:479;-1:-1:-1;;;;;25129:20:0;;;;;;:9;:20;;;;;;:37;;25154:11;25129:24;:37::i;:::-;-1:-1:-1;;;;;25106:20:0;;;;;;;:9;:20;;;;;;;:60;;;;25188:40;;;;;;;;;;25216:11;2141:25:1;;2129:2;2114:18;;1995:177;25188:40:0;;;;;;;;25250:4;25243:11;;;;;;;1497:192;1583:7;1619:12;1611:6;;;;1603:29;;;;-1:-1:-1;;;1603:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1643:9:0;1655:5;1659:1;1655;:5;:::i;:::-;1643:17;1497:192;-1:-1:-1;;;;;1497:192:0:o;25295:330::-;25425:53;;;;;;;;;;;-1:-1:-1;;;25425:53:0;;;;;;;;-1:-1:-1;;;;;25425:17:0;;25388:4;25425:17;;;:9;:17;;;;;;;:53;;25447:6;;25425:21;:53::i;:::-;-1:-1:-1;;;;;25405:17:0;;;;;;;:9;:17;;;;;;:73;;;;25512:20;;;;;;;:32;;25537:6;25512:24;:32::i;:::-;-1:-1:-1;;;;;25489:20:0;;;;;;;:9;:20;;;;;;;:55;;;;25560:35;;;;;;;;;;25588:6;2141:25:1;;2129:2;2114:18;;1995:177;25560:35:0;;;;;;;;-1:-1:-1;25613:4:0;25295:330;;;;;:::o;1955:132::-;2013:7;2040:39;2044:1;2047;2040:39;;;;;;;;;;;;;;;;;:3;:39::i;1697:250::-;1755:7;1779:1;1784;1779:6;1775:47;;-1:-1:-1;1809:1:0;1802:8;;1775:47;1834:9;1846:5;1850:1;1846;:5;:::i;:::-;1834:17;-1:-1:-1;1879:1:0;1870:5;1874:1;1834:17;1870:5;:::i;:::-;:10;1862:56;;;;-1:-1:-1;;;1862:56:0;;9906:2:1;1862:56:0;;;9888:21:1;9945:2;9925:18;;;9918:30;9984:34;9964:18;;;9957:62;-1:-1:-1;;;10035:18:1;;;10028:31;10076:19;;1862:56:0;9704:397:1;1353:136:0;1411:7;1438:43;1442:1;1445;1438:43;;;;;;;;;;;;;;;;;:3;:43::i;25633:1048::-;16536:16;:23;;-1:-1:-1;;;;16536:23:0;-1:-1:-1;;;16536:23:0;;;25770:24:::1;::::0;25749:15:::1;::::0;16536:23;;25737:65:::1;::::0;25800:1:::1;::::0;25737:58:::1;::::0;;;:7;;:11:::1;:28::i;:::-;:32:::0;::::1;:58::i;:65::-;25715:87:::0;-1:-1:-1;25813:21:0::1;25837:24;:7:::0;25715:87;25837:11:::1;:24::i;:::-;25813:48;;25874:31;25891:13;25874:16;:31::i;:::-;26026:15;::::0;25941:21:::1;::::0;25916:22:::1;::::0;25997:52:::1;::::0;26026:22:::1;::::0;26046:1:::1;26026:19;:22::i;:::-;25997:24;::::0;;:28:::1;:52::i;:::-;25975:74;;26070:26;26099:59;26156:1;26099:52;26139:11;26099:35;26118:15;;26099:14;:18;;:35;;;;:::i;:59::-;26070:88;;26169:21;26193:47;26228:11;26193:30;26212:10;;26193:14;:18;;:30;;;;:::i;:47::-;26169:71:::0;-1:-1:-1;26251:26:0::1;26280:57;26169:71:::0;26280:38:::1;:14:::0;26299:18;26280::::1;:38::i;:::-;:42:::0;::::1;:57::i;:::-;26251:86:::0;-1:-1:-1;26353:22:0;;26350:104:::1;;26411:22;::::0;26390:64:::1;::::0;26411:22:::1;::::0;::::1;-1:-1:-1::0;;;;;26411:22:0::1;26435:18:::0;26390:20:::1;:64::i;:::-;26470:17:::0;;26467:89:::1;;26523:17;::::0;26502:54:::1;::::0;-1:-1:-1;;;;;26523:17:0::1;26542:13:::0;26502:20:::1;:54::i;:::-;26593:1;26572:18;:22;:41;;;;;26612:1;26598:11;:15;26572:41;26569:104;;;26628:45;26641:11;26654:18;26628:12;:45::i;:::-;-1:-1:-1::0;;16582:16:0;:24;;-1:-1:-1;;;;16582:24:0;;;-1:-1:-1;;;;;;25633:1048:0:o;23060:121::-;-1:-1:-1;;;;;23120:22:0;;;;;;:11;:22;;;;;;;;23115:58;;-1:-1:-1;;;;;23144:22:0;;;;;;:11;:22;;;;;:29;;-1:-1:-1;;23144:29:0;23169:4;23144:29;;;23115:58;23060:121;:::o;27892:622::-;-1:-1:-1;;;;;28053:20:0;;27978:7;28053:20;;;:12;:20;;;;;;27978:7;;28053:20;;28050:223;;;28102:38;28136:3;28102:29;28113:17;;28102:6;:10;;:29;;;;:::i;:38::-;28090:50;;28050:223;;;-1:-1:-1;;;;;28170:23:0;;;;;;:12;:23;;;;;;;;28167:106;;;28222:39;28257:3;28222:30;28233:18;;28222:6;:10;;:30;;;;:::i;:39::-;28210:51;;28167:106;28296:13;;28293:173;;28371:4;28353:24;;;;:9;:24;;;;;;:39;;28382:9;28353:28;:39::i;:::-;28344:4;28326:24;;;;:9;:24;;;;;;;:66;;;;28412:42;;-1:-1:-1;;;;;28412:42:0;;;;;;;28444:9;2141:25:1;;2129:2;2114:18;;1995:177;28412:42:0;;;;;;;;28293:173;28485:21;:6;28496:9;28485:10;:21::i;2095:278::-;2181:7;2216:12;2209:5;2201:28;;;;-1:-1:-1;;;2201:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2240:9:0;2252:5;2256:1;2252;:5;:::i;26693:666::-;26843:16;;;26857:1;26843:16;;;;;;;;26819:21;;26843:16;;;;;;;;;;-1:-1:-1;26843:16:0;26819:40;;26888:4;26870;26875:1;26870:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26870:23:0;;;:7;;;;;;;;;;:23;;;;26914:15;;:22;;;-1:-1:-1;;;26914:22:0;;;;:15;;;;;:20;;:22;;;;;26870:7;;26914:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26904:4;26909:1;26904:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26904:32:0;;;:7;;;;;;;;;:32;26981:15;;26949:62;;26966:4;;26981:15;26999:11;26949:8;:62::i;:::-;27050:15;;:240;;-1:-1:-1;;;27050:240:0;;-1:-1:-1;;;;;27050:15:0;;;;:66;;:240;;27131:11;;27050:15;;27201:4;;27228;;27264:15;;27050:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27316:35;27333:11;27346:4;27316:35;;;;;;;:::i;:::-;;;;;;;;26748:611;26693:666;:::o;21576:126::-;21668:26;;-1:-1:-1;;;;;21668:18:0;;;:26;;;;;21687:6;;21668:26;;;;21687:6;21668:18;:26;;;;;;;;;;;;;;;;;;;;;21576:126;;:::o;27367:517::-;27547:15;;27515:62;;27532:4;;-1:-1:-1;;;;;27547:15:0;27565:11;27515:8;:62::i;:::-;27620:15;;:256;;-1:-1:-1;;;27620:256:0;;27692:4;27620:256;;;12101:34:1;12151:18;;;12144:34;;;-1:-1:-1;12194:18:1;;;12187:34;;;12237:18;;;12230:34;-1:-1:-1;;;;;27824:11:0;12301:15:1;;12280:19;;;12273:44;27850:15:0;12333:19:1;;;12326:35;27620:15:0;;;;:31;;27659:9;;12035:19:1;;27620:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27367:517;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:316::-;644:6;652;660;713:2;701:9;692:7;688:23;684:32;681:52;;;729:1;726;719:12;681:52;-1:-1:-1;;752:23:1;;;822:2;807:18;;794:32;;-1:-1:-1;873:2:1;858:18;;;845:32;;567:316;-1:-1:-1;567:316:1:o;888:131::-;-1:-1:-1;;;;;963:31:1;;953:42;;943:70;;1009:1;1006;999:12;1024:315;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;2177:456::-;2254:6;2262;2270;2323:2;2311:9;2302:7;2298:23;2294:32;2291:52;;;2339:1;2336;2329:12;2291:52;2378:9;2365:23;2397:31;2422:5;2397:31;:::i;:::-;2447:5;-1:-1:-1;2504:2:1;2489:18;;2476:32;2517:33;2476:32;2517:33;:::i;:::-;2177:456;;2569:7;;-1:-1:-1;;;2623:2:1;2608:18;;;;2595:32;;2177:456::o;2846:247::-;2905:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:52;;;2974:1;2971;2964:12;2926:52;3013:9;3000:23;3032:31;3057:5;3032:31;:::i;3287:180::-;3346:6;3399:2;3387:9;3378:7;3374:23;3370:32;3367:52;;;3415:1;3412;3405:12;3367:52;-1:-1:-1;3438:23:1;;3287:180;-1:-1:-1;3287:180:1:o;3472:160::-;3537:20;;3593:13;;3586:21;3576:32;;3566:60;;3622:1;3619;3612:12;3566:60;3472:160;;;:::o;3637:315::-;3702:6;3710;3763:2;3751:9;3742:7;3738:23;3734:32;3731:52;;;3779:1;3776;3769:12;3731:52;3818:9;3805:23;3837:31;3862:5;3837:31;:::i;:::-;3887:5;-1:-1:-1;3911:35:1;3942:2;3927:18;;3911:35;:::i;:::-;3901:45;;3637:315;;;;;:::o;3957:180::-;4013:6;4066:2;4054:9;4045:7;4041:23;4037:32;4034:52;;;4082:1;4079;4072:12;4034:52;4105:26;4121:9;4105:26;:::i;4142:388::-;4210:6;4218;4271:2;4259:9;4250:7;4246:23;4242:32;4239:52;;;4287:1;4284;4277:12;4239:52;4326:9;4313:23;4345:31;4370:5;4345:31;:::i;:::-;4395:5;-1:-1:-1;4452:2:1;4437:18;;4424:32;4465:33;4424:32;4465:33;:::i;:::-;4517:7;4507:17;;;4142:388;;;;;:::o;4535:356::-;4737:2;4719:21;;;4756:18;;;4749:30;4815:34;4810:2;4795:18;;4788:62;4882:2;4867:18;;4535:356::o;4896:380::-;4975:1;4971:12;;;;5018;;;5039:61;;5093:4;5085:6;5081:17;5071:27;;5039:61;5146:2;5138:6;5135:14;5115:18;5112:38;5109:161;;5192:10;5187:3;5183:20;5180:1;5173:31;5227:4;5224:1;5217:15;5255:4;5252:1;5245:15;5109:161;;4896:380;;;:::o;5281:251::-;5351:6;5404:2;5392:9;5383:7;5379:23;5375:32;5372:52;;;5420:1;5417;5410:12;5372:52;5452:9;5446:16;5471:31;5496:5;5471:31;:::i;6253:127::-;6314:10;6309:3;6305:20;6302:1;6295:31;6345:4;6342:1;6335:15;6369:4;6366:1;6359:15;6385:125;6450:9;;;6471:10;;;6468:36;;;6484:18;;:::i;9176:128::-;9243:9;;;9264:11;;;9261:37;;;9278:18;;:::i;9309:168::-;9382:9;;;9413;;9430:15;;;9424:22;;9410:37;9400:71;;9451:18;;:::i;9482:217::-;9522:1;9548;9538:132;;9592:10;9587:3;9583:20;9580:1;9573:31;9627:4;9624:1;9617:15;9655:4;9652:1;9645:15;9538:132;-1:-1:-1;9684:9:1;;9482:217::o;10238:127::-;10299:10;10294:3;10290:20;10287:1;10280:31;10330:4;10327:1;10320:15;10354:4;10351:1;10344:15;10370:461;10423:3;10461:5;10455:12;10488:6;10483:3;10476:19;10514:4;10543:2;10538:3;10534:12;10527:19;;10580:2;10573:5;10569:14;10601:1;10611:195;10625:6;10622:1;10619:13;10611:195;;;10690:13;;-1:-1:-1;;;;;10686:39:1;10674:52;;10746:12;;;;10781:15;;;;10722:1;10640:9;10611:195;;;-1:-1:-1;10822:3:1;;10370:461;-1:-1:-1;;;;;10370:461:1:o;10836:582::-;11135:6;11124:9;11117:25;11178:6;11173:2;11162:9;11158:18;11151:34;11221:3;11216:2;11205:9;11201:18;11194:31;11098:4;11242:57;11294:3;11283:9;11279:19;11271:6;11242:57;:::i;:::-;-1:-1:-1;;;;;11335:32:1;;;;11330:2;11315:18;;11308:60;-1:-1:-1;11399:3:1;11384:19;11377:35;11234:65;10836:582;-1:-1:-1;;;10836:582:1:o;11423:332::-;11630:6;11619:9;11612:25;11673:2;11668;11657:9;11653:18;11646:30;11593:4;11693:56;11745:2;11734:9;11730:18;11722:6;11693:56;:::i;:::-;11685:64;11423:332;-1:-1:-1;;;;11423:332:1:o;12372:306::-;12460:6;12468;12476;12529:2;12517:9;12508:7;12504:23;12500:32;12497:52;;;12545:1;12542;12535:12;12497:52;12574:9;12568:16;12558:26;;12624:2;12613:9;12609:18;12603:25;12593:35;;12668:2;12657:9;12653:18;12647:25;12637:35;;12372:306;;;;;:::o

Swarm Source

ipfs://5d2130e64d5cfa589cac723d4705d618ca9d530ceac52bace3cf1f1694c509fa
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.