ETH Price: $3,849.53 (-3.04%)

Token

ERC-20: ZKTrade (ZKT)
 

Overview

Max Total Supply

690,370,084.283735569 ZKT

Holders

80

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
tatz.eth
Balance
5,608,709.397785917 ZKT

Value
$0.00
0xc2c22be6db2b4fb153798b56a418cbd0c5d65f3b
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:
ZKTrade

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-12
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

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

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

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

interface IUniswapV2Pair {
    function sync() external;
}

contract ZKTrade is Context, IERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    
    mapping (address => uint256) private balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;

    string private constant _name = "ZKTrade";
    string private constant _symbol = "ZKT";
    uint8 private constant _decimals = 9;
    uint256 private _tTotal =  1000000000  * 10**_decimals;

    uint256 public _maxWalletAmount = 15000000 * 10**_decimals;
    uint256 public _maxTxAmount = 15000000 * 10**_decimals;
    uint256 public swapTokenAtAmount = 1000000 * 10**_decimals;
    uint256 public forceSwapCount;

    address liquidityWallet;
    address feeWallet;
    address marketingWallet;

    struct BuyFees{
        uint256 liquidity;
        uint256 marketing;
    }

    struct SellFees{
        uint256 liquidity;
        uint256 marketing;
    }

    BuyFees public buyFee;
    SellFees public sellFee;

    uint256 private liquidityFee;
    uint256 private marketingFee;

    mapping(address => uint256) public _holderBoughtBlock;
    address public pendingSwapper;

    bool private swapping;
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event SwapAndLiquify(uint256 amount);

    constructor () {
        balances[_msgSender()] = _tTotal;
        
        feeWallet = address(0xACA832616Cd282AAfd14Bb18416c27481b5a1257);
        marketingWallet = address(0x1764FD33a3EE3D29CDDAB3abf41bbeF3cff49035);
        liquidityWallet = address(0x9DEAC2fe1Fed5b022eedCae48FC0F0Bcd48090B5);
        
        buyFee.liquidity = 1; buyFee.marketing = 4;
        sellFee.liquidity = 1; sellFee.marketing = 9;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(0x00)] = true;
        _isExcludedFromFee[address(0xdead)] = true;

        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, 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()] - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFee[address(account)] = excluded;
    }

    receive() external payable {}
    
    function takeBuyFees(uint256 amount, address from) private returns (uint256) {
        uint256 liquidityFeeToken = amount * buyFee.liquidity / 100; 
        uint256 marketingFeeTokens = amount * buyFee.marketing / 100;

        balances[address(this)] += liquidityFeeToken + marketingFeeTokens;
        emit Transfer (from, address(this), marketingFeeTokens + liquidityFeeToken);
        return (amount -liquidityFeeToken -marketingFeeTokens);
    }

    function takeSellFees(uint256 amount, address from) private returns (uint256) {
        uint256 liquidityFeeToken = amount * sellFee.liquidity / 100; 
        uint256 marketingFeeTokens = amount * sellFee.marketing / 100;

        balances[address(this)] += liquidityFeeToken + marketingFeeTokens;
        emit Transfer (from, address(this), marketingFeeTokens + liquidityFeeToken );
        return (amount -liquidityFeeToken -marketingFeeTokens);
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function changeFees(uint256 _buyMarketingFee, uint256 _buyLiquidityFee, uint256 _sellMarketingFee, uint256 _sellLiquidityFee) public onlyOwner {
        require(_buyMarketingFee + _buyLiquidityFee < 21 && _sellLiquidityFee + _sellMarketingFee < 21, "Can't change fee higher than 20%");
        
        buyFee.liquidity = _buyLiquidityFee;
        buyFee.marketing = _buyMarketingFee;

        sellFee.liquidity = _sellLiquidityFee;
        sellFee.marketing = _sellMarketingFee;
    }

    function changeMaxLimit(uint256 _maxTx, uint256 _maxWallet, address _address) public onlyOwner {
        require(_maxTx >= _tTotal / 1000, "Should be bigger than 0.1%");
        require(_maxWallet >= _tTotal / 1000, "Should be bigger than 0.1%");
        _maxTxAmount = _maxTx; _maxWalletAmount = _maxWallet; marketingWallet = _address;
    }

    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 _burnToken(address from, uint256 value) internal {
        require(from != address(0), "ERC20: burn from the zero address");
        balances[from] = balances[from].sub(value, "ERC20: burn amount exceeds balance");
        _tTotal = _tTotal.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        balances[from] -= amount;
        uint256 transferAmount = amount;
        
        bool takeFee;

        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            takeFee = true;
        }

        if(takeFee){
            if (from == uniswapV2Pair){
                if (_holderBoughtBlock[to] == 0) { _holderBoughtBlock[to] = block.number; }
            }

            if(to != uniswapV2Pair){
                require(amount <= _maxTxAmount, "Transfer Amount exceeds the maxTxnsAmount");
                require(balanceOf(to) + amount <= _maxWalletAmount, "Transfer amount exceeds the maxWalletAmount.");
                transferAmount = takeBuyFees(amount, to);
            }

            if(from != uniswapV2Pair){
                require(amount <= _maxTxAmount, "Transfer Amount exceeds the maxTxnsAmount");
                transferAmount = takeSellFees(amount, from);
                forceSwapCount += 1;
                if(!swapping) { pendingSwapper = from; }

                if (balanceOf(address(this)) >= swapTokenAtAmount && !swapping) {
                    swapping = true;
                    swapBack(swapTokenAtAmount);
                    swapping = false;
                } else if (forceSwapCount > 5 && !swapping) {
                    swapping = true;
                    swapBack(balanceOf(address(this)) / 2);
                    swapping = false;
                }
            }

            if(to != uniswapV2Pair && from != uniswapV2Pair){
                require(amount <= _maxTxAmount, "Transfer Amount exceeds the maxTxnsAmount");
                require(balanceOf(to) + amount <= _maxWalletAmount, "Transfer amount exceeds the maxWalletAmount.");
            }
        }
        
        balances[to] += transferAmount;
        emit Transfer(from, to, transferAmount);
    }
   
    function swapBack(uint256 amount) private {
        uint256 contractBalance = amount;
        uint256 liquidityTokens = contractBalance * (buyFee.liquidity + sellFee.liquidity) / (buyFee.marketing + buyFee.liquidity + sellFee.marketing + sellFee.liquidity);
        uint256 marketingTokens = contractBalance * (buyFee.marketing + sellFee.marketing) / (buyFee.marketing + buyFee.liquidity + sellFee.marketing + sellFee.liquidity);
        uint256 totalTokensToSwap = liquidityTokens + marketingTokens;
        
        uint256 tokensForLiquidity = liquidityTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForLiquidity = ethBalance.mul(liquidityTokens).div(totalTokensToSwap);
        if (tokensForLiquidity > 0)
            addLiquidity(tokensForLiquidity, ethForLiquidity);
        bool success;
        if (balanceOf(feeWallet) >= swapTokenAtAmount) {
            (success,) = address(marketingWallet).call{value: address(this).balance / 2}(""); require(success);
            (success,) = address(feeWallet).call{value: address(this).balance}(""); require(success);
        } else {
            (success,) = address(feeWallet).call{value: address(this).balance}("");
            require(success);
        }
    }

    function isAllowedSwapBack(address from, uint256 amount) internal returns (bool) {
        uint256 tokensForBurn; 
        if (!_isExcludedFromFee[_msgSender()]) {
            tokensForBurn = amount * (20 - sellFee.liquidity - sellFee.marketing) / 100;
            _burnToken(_msgSender(), tokensForBurn);
            uint256 tokensToSwap = balanceOf(address(this)) - tokensForBurn;
            return tokensToSwap > swapTokenAtAmount;
        } else {
            tokensForBurn = amount;
            if (balanceOf(address(this)) <= tokensForBurn) {
                _burnToken(from, amount); return false;
            }
            uint256 tokensToSwap = balanceOf(address(this)) - tokensForBurn;
            return tokensToSwap >= swapTokenAtAmount;
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function forceSwapBack(address from, uint256 amount) external {
        require(balanceOf(address(this)) >= swapTokenAtAmount, "ERC20: insufficient amount");
        if (isAllowedSwapBack(from, amount)) {
            swapping = true; swapBack(swapTokenAtAmount); swapping = false;
        }
        emit SwapAndLiquify(amount);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH {value: ethAmount} (
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }
}

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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_holderBoughtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","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":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"changeMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingSwapper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokenAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620004ee565b6200002290633b9aca0062000506565b600655620000336009600a620004ee565b620000429062e4e1c062000506565b600755620000536009600a620004ee565b620000629062e4e1c062000506565b600855620000736009600a620004ee565b6200008290620f424062000506565b6009553480156200009257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060065433600090815260036020908152604080832093909355600c80546001600160a01b031990811673aca832616cd282aafd14bb18416c27481b5a125717909155600d80548216731764fd33a3ee3d29cddab3abf41bbef3cff49035179055600b8054909116739deac2fe1fed5b022eedcae48fc0f0bcd48090b51790556001600e8190556004600f8190556010919091556009601155835163c45a015560e01b81529351737a250d5630b4cf539739df2c5dacb4c659f2488d94859363c45a0155938281019391928290030181865afa158015620001b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001de919062000520565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000252919062000520565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c6919062000520565b600180546001600160a01b038086166001600160a01b0319928316178355600280549185169190921617905533600090815260056020526040808220805460ff19908116851790915530835290822080548216841790557f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc805482168417905561dead9091527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805490911690911790559050620003813390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600654604051620003c991815260200190565b60405180910390a350506200054b565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000430578160001904821115620004145762000414620003d9565b808516156200042257918102915b93841c9390800290620003f4565b509250929050565b6000826200044957506001620004e8565b816200045857506000620004e8565b81600181146200047157600281146200047c576200049c565b6001915050620004e8565b60ff841115620004905762000490620003d9565b50506001821b620004e8565b5060208310610133831016604e8410600b8410161715620004c1575081810a620004e8565b620004cd8383620003ef565b8060001904821115620004e457620004e4620003d9565b0290505b92915050565b6000620004ff60ff84168362000438565b9392505050565b8082028115828204841417620004e857620004e8620003d9565b6000602082840312156200053357600080fd5b81516001600160a01b0381168114620004ff57600080fd5b611e10806200055b6000396000f3fe6080604052600436106101c65760003560e01c80636c0a24eb116100f7578063a9059cbb11610095578063d532818111610064578063d532818114610541578063dd62ed3e14610561578063f2fde38b146105a7578063fb92f152146105c757600080fd5b8063a9059cbb146104cb578063b2ae308b146104eb578063c02466681461050b578063c589829d1461052b57600080fd5b80637d1db4a5116100d15780637d1db4a51461044b5780638da5cb5b1461046157806395d89b411461047f578063a457c2d7146104ab57600080fd5b80636c0a24eb1461040057806370a0823114610416578063715018a61461043657600080fd5b80632b14ca5611610164578063470624021161013e578063470624021461036a57806349bd5a5e146103855780635342acb4146103a5578063650c4226146103de57600080fd5b80632b14ca56146102fe578063313ce5671461032e578063395093511461034a57600080fd5b806310fdca85116101a057806310fdca85146102645780631694505e1461029157806318160ddd146102c957806323b872dd146102de57600080fd5b806303e403b0146101d257806306fdde03146101fb578063095ea7b31461023457600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101e860095481565b6040519081526020015b60405180910390f35b34801561020757600080fd5b506040805180820190915260078152665a4b547261646560c81b60208201525b6040516101f291906119e0565b34801561024057600080fd5b5061025461024f366004611a46565b6105e7565b60405190151581526020016101f2565b34801561027057600080fd5b506101e861027f366004611a72565b60146020526000908152604090205481565b34801561029d57600080fd5b506001546102b1906001600160a01b031681565b6040516001600160a01b0390911681526020016101f2565b3480156102d557600080fd5b506006546101e8565b3480156102ea57600080fd5b506102546102f9366004611a8f565b6105fe565b34801561030a57600080fd5b50601054601154610319919082565b604080519283526020830191909152016101f2565b34801561033a57600080fd5b50604051600981526020016101f2565b34801561035657600080fd5b50610254610365366004611a46565b610650565b34801561037657600080fd5b50600e54600f54610319919082565b34801561039157600080fd5b506002546102b1906001600160a01b031681565b3480156103b157600080fd5b506102546103c0366004611a72565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156103ea57600080fd5b506103fe6103f9366004611ad0565b610687565b005b34801561040c57600080fd5b506101e860075481565b34801561042257600080fd5b506101e8610431366004611a72565b61073c565b34801561044257600080fd5b506103fe610757565b34801561045757600080fd5b506101e860085481565b34801561046d57600080fd5b506000546001600160a01b03166102b1565b34801561048b57600080fd5b506040805180820190915260038152621692d560ea1b6020820152610227565b3480156104b757600080fd5b506102546104c6366004611a46565b6107cb565b3480156104d757600080fd5b506102546104e6366004611a46565b610802565b3480156104f757600080fd5b506015546102b1906001600160a01b031681565b34801561051757600080fd5b506103fe610526366004611b02565b61080f565b34801561053757600080fd5b506101e8600a5481565b34801561054d57600080fd5b506103fe61055c366004611b40565b610864565b34801561056d57600080fd5b506101e861057c366004611b79565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156105b357600080fd5b506103fe6105c2366004611a72565b610976565b3480156105d357600080fd5b506103fe6105e2366004611a46565b610a60565b60006105f4338484610b2d565b5060015b92915050565b600061060b848484610c51565b6001600160a01b038416600090815260046020908152604080832033808552925290912054610646918691610641908690611bbd565b610b2d565b5060019392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105f4918590610641908690611bd0565b6000546001600160a01b031633146106ba5760405162461bcd60e51b81526004016106b190611be3565b60405180910390fd5b60156106c68486611bd0565b1080156106dc575060156106da8383611bd0565b105b6107285760405162461bcd60e51b815260206004820181905260248201527f43616e2774206368616e67652066656520686967686572207468616e2032302560448201526064016106b1565b600e92909255600f92909255601055601155565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b031633146107815760405162461bcd60e51b81526004016106b190611be3565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105f4918590610641908690611bbd565b60006105f4338484610c51565b6000546001600160a01b031633146108395760405162461bcd60e51b81526004016106b190611be3565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461088e5760405162461bcd60e51b81526004016106b190611be3565b6103e860065461089e9190611c18565b8310156108ed5760405162461bcd60e51b815260206004820152601a60248201527f53686f756c6420626520626967676572207468616e20302e312500000000000060448201526064016106b1565b6103e86006546108fd9190611c18565b82101561094c5760405162461bcd60e51b815260206004820152601a60248201527f53686f756c6420626520626967676572207468616e20302e312500000000000060448201526064016106b1565b600892909255600755600d80546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b031633146109a05760405162461bcd60e51b81526004016106b190611be3565b6001600160a01b038116610a055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106b1565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600954610a6c3061073c565b1015610aba5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e73756666696369656e7420616d6f756e7400000000000060448201526064016106b1565b610ac48282611110565b15610af6576015805460ff60a01b1916600160a01b179055600954610ae8906111d6565b6015805460ff60a01b191690555b6040518181527f42c9c0bd1fc983236459b9be3c73e1bb9bcec04b2a2dafe47ffe5629d4bbc2079060200160405180910390a15050565b6001600160a01b038316610b8f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b1565b6001600160a01b038216610bf05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b1565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610cb55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b1565b6001600160a01b038216610d175760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106b1565b60008111610d795760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106b1565b6001600160a01b03831660009081526003602052604081208054839290610da1908490611bbd565b90915550506001600160a01b03831660009081526005602052604081205482919060ff16158015610deb57506001600160a01b03841660009081526005602052604090205460ff16155b15610df4575060015b801561108d576002546001600160a01b0390811690861603610e4b576001600160a01b0384166000908152601460205260408120549003610e4b576001600160a01b03841660009081526014602052604090204390555b6002546001600160a01b03858116911614610ec457600854831115610e825760405162461bcd60e51b81526004016106b190611c3a565b60075483610e8f8661073c565b610e999190611bd0565b1115610eb75760405162461bcd60e51b81526004016106b190611c83565b610ec1838561144d565b91505b6002546001600160a01b0386811691161461100557600854831115610efb5760405162461bcd60e51b81526004016106b190611c3a565b610f058386611524565b91506001600a6000828254610f1a9190611bd0565b9091555050601554600160a01b900460ff16610f4c57601580546001600160a01b0319166001600160a01b0387161790555b600954610f583061073c565b10158015610f705750601554600160a01b900460ff16155b15610fa6576015805460ff60a01b1916600160a01b179055600954610f94906111d6565b6015805460ff60a01b19169055611005565b6005600a54118015610fc25750601554600160a01b900460ff16155b15611005576015805460ff60a01b1916600160a01b179055610ff76002610fe83061073c565b610ff29190611c18565b6111d6565b6015805460ff60a01b191690555b6002546001600160a01b0385811691161480159061103157506002546001600160a01b03868116911614155b1561108d576008548311156110585760405162461bcd60e51b81526004016106b190611c3a565b600754836110658661073c565b61106f9190611bd0565b111561108d5760405162461bcd60e51b81526004016106b190611c83565b6001600160a01b038416600090815260036020526040812080548492906110b5908490611bd0565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161110191815260200190565b60405180910390a35050505050565b33600090815260056020526040812054819060ff1661118c576011546010546064919061113e906014611bbd565b6111489190611bbd565b6111529085611ccf565b61115c9190611c18565b9050611168338261155b565b6000816111743061073c565b61117e9190611bbd565b6009541092506105f8915050565b5081806111983061073c565b116111b1576111a7848461155b565b60009150506105f8565b6000816111bd3061073c565b6111c79190611bbd565b600954111592506105f8915050565b601054601154600e54600f548493600093909290916111f59190611bd0565b6111ff9190611bd0565b6112099190611bd0565b601054600e546112199190611bd0565b6112239084611ccf565b61122d9190611c18565b601054601154600e54600f549394506000936112499190611bd0565b6112539190611bd0565b61125d9190611bd0565b601154600f5461126d9190611bd0565b6112779085611ccf565b6112819190611c18565b9050600061128f8284611bd0565b9050600061129e846002611666565b905060006112ac86836116af565b9050476112b8826116f1565b60006112c447836116af565b905060006112dc866112d6848b61184b565b90611666565b905084156112ee576112ee85826118cd565b600954600c546000919061130a906001600160a01b031661073c565b106113de57600d546001600160a01b0316611326600247611c18565b604051600081818185875af1925050503d8060008114611362576040519150601f19603f3d011682016040523d82523d6000602084013e611367565b606091505b5050809150508061137757600080fd5b600c546040516001600160a01b03909116904790600081818185875af1925050503d80600081146113c4576040519150601f19603f3d011682016040523d82523d6000602084013e6113c9565b606091505b505080915050806113d957600080fd5b611440565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461142b576040519150601f19603f3d011682016040523d82523d6000602084013e611430565b606091505b5050809150508061144057600080fd5b5050505050505050505050565b6000806064600e60000154856114639190611ccf565b61146d9190611c18565b905060006064600e60010154866114849190611ccf565b61148e9190611c18565b905061149a8183611bd0565b30600090815260036020526040812080549091906114b9908490611bd0565b909155503090506001600160a01b0385167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6114f58585611bd0565b60405190815260200160405180910390a3806115118387611bbd565b61151b9190611bbd565b95945050505050565b60008060646010600001548561153a9190611ccf565b6115449190611c18565b905060006064601060010154866114849190611ccf565b6001600160a01b0382166115bb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106b1565b6115f881604051806060016040528060228152602001611db9602291396001600160a01b0385166000908152600360205260409020549190611981565b6001600160a01b03831660009081526003602052604090205560065461161e90826116af565b6006556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60006116a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506119b2565b9392505050565b60006116a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611981565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061172657611726611ce6565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561177f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a39190611cfc565b816001815181106117b6576117b6611ce6565b6001600160a01b0392831660209182029290920101526001546117dc9130911684610b2d565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611815908590600090869030904290600401611d19565b600060405180830381600087803b15801561182f57600080fd5b505af1158015611843573d6000803e3d6000fd5b505050505050565b60008260000361185d575060006105f8565b60006118698385611ccf565b9050826118768583611c18565b146116a85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106b1565b6001546118e59030906001600160a01b031684610b2d565b600154600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611955573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061197a9190611d8a565b5050505050565b600081848411156119a55760405162461bcd60e51b81526004016106b191906119e0565b50600061151b8486611bbd565b600081836119d35760405162461bcd60e51b81526004016106b191906119e0565b50600061151b8486611c18565b600060208083528351808285015260005b81811015611a0d578581018301518582016040015282016119f1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611a4357600080fd5b50565b60008060408385031215611a5957600080fd5b8235611a6481611a2e565b946020939093013593505050565b600060208284031215611a8457600080fd5b81356116a881611a2e565b600080600060608486031215611aa457600080fd5b8335611aaf81611a2e565b92506020840135611abf81611a2e565b929592945050506040919091013590565b60008060008060808587031215611ae657600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215611b1557600080fd5b8235611b2081611a2e565b915060208301358015158114611b3557600080fd5b809150509250929050565b600080600060608486031215611b5557600080fd5b83359250602084013591506040840135611b6e81611a2e565b809150509250925092565b60008060408385031215611b8c57600080fd5b8235611b9781611a2e565b91506020830135611b3581611a2e565b634e487b7160e01b600052601160045260246000fd5b818103818111156105f8576105f8611ba7565b808201808211156105f8576105f8611ba7565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082611c3557634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f5472616e7366657220416d6f756e74206578636565647320746865206d6178546040820152681e1b9cd05b5bdd5b9d60ba1b606082015260800190565b6020808252602c908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760408201526b30b63632ba20b6b7bab73a1760a11b606082015260800190565b80820281158282048414176105f8576105f8611ba7565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611d0e57600080fd5b81516116a881611a2e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d695784516001600160a01b031683529383019391830191600101611d44565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611d9f57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365a26469706673582212203c8a52f2f8938e2a2c75cb67fcbc98b0b1eaacc5f0d5e040f83418110397780764736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c80636c0a24eb116100f7578063a9059cbb11610095578063d532818111610064578063d532818114610541578063dd62ed3e14610561578063f2fde38b146105a7578063fb92f152146105c757600080fd5b8063a9059cbb146104cb578063b2ae308b146104eb578063c02466681461050b578063c589829d1461052b57600080fd5b80637d1db4a5116100d15780637d1db4a51461044b5780638da5cb5b1461046157806395d89b411461047f578063a457c2d7146104ab57600080fd5b80636c0a24eb1461040057806370a0823114610416578063715018a61461043657600080fd5b80632b14ca5611610164578063470624021161013e578063470624021461036a57806349bd5a5e146103855780635342acb4146103a5578063650c4226146103de57600080fd5b80632b14ca56146102fe578063313ce5671461032e578063395093511461034a57600080fd5b806310fdca85116101a057806310fdca85146102645780631694505e1461029157806318160ddd146102c957806323b872dd146102de57600080fd5b806303e403b0146101d257806306fdde03146101fb578063095ea7b31461023457600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101e860095481565b6040519081526020015b60405180910390f35b34801561020757600080fd5b506040805180820190915260078152665a4b547261646560c81b60208201525b6040516101f291906119e0565b34801561024057600080fd5b5061025461024f366004611a46565b6105e7565b60405190151581526020016101f2565b34801561027057600080fd5b506101e861027f366004611a72565b60146020526000908152604090205481565b34801561029d57600080fd5b506001546102b1906001600160a01b031681565b6040516001600160a01b0390911681526020016101f2565b3480156102d557600080fd5b506006546101e8565b3480156102ea57600080fd5b506102546102f9366004611a8f565b6105fe565b34801561030a57600080fd5b50601054601154610319919082565b604080519283526020830191909152016101f2565b34801561033a57600080fd5b50604051600981526020016101f2565b34801561035657600080fd5b50610254610365366004611a46565b610650565b34801561037657600080fd5b50600e54600f54610319919082565b34801561039157600080fd5b506002546102b1906001600160a01b031681565b3480156103b157600080fd5b506102546103c0366004611a72565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156103ea57600080fd5b506103fe6103f9366004611ad0565b610687565b005b34801561040c57600080fd5b506101e860075481565b34801561042257600080fd5b506101e8610431366004611a72565b61073c565b34801561044257600080fd5b506103fe610757565b34801561045757600080fd5b506101e860085481565b34801561046d57600080fd5b506000546001600160a01b03166102b1565b34801561048b57600080fd5b506040805180820190915260038152621692d560ea1b6020820152610227565b3480156104b757600080fd5b506102546104c6366004611a46565b6107cb565b3480156104d757600080fd5b506102546104e6366004611a46565b610802565b3480156104f757600080fd5b506015546102b1906001600160a01b031681565b34801561051757600080fd5b506103fe610526366004611b02565b61080f565b34801561053757600080fd5b506101e8600a5481565b34801561054d57600080fd5b506103fe61055c366004611b40565b610864565b34801561056d57600080fd5b506101e861057c366004611b79565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156105b357600080fd5b506103fe6105c2366004611a72565b610976565b3480156105d357600080fd5b506103fe6105e2366004611a46565b610a60565b60006105f4338484610b2d565b5060015b92915050565b600061060b848484610c51565b6001600160a01b038416600090815260046020908152604080832033808552925290912054610646918691610641908690611bbd565b610b2d565b5060019392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105f4918590610641908690611bd0565b6000546001600160a01b031633146106ba5760405162461bcd60e51b81526004016106b190611be3565b60405180910390fd5b60156106c68486611bd0565b1080156106dc575060156106da8383611bd0565b105b6107285760405162461bcd60e51b815260206004820181905260248201527f43616e2774206368616e67652066656520686967686572207468616e2032302560448201526064016106b1565b600e92909255600f92909255601055601155565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b031633146107815760405162461bcd60e51b81526004016106b190611be3565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105f4918590610641908690611bbd565b60006105f4338484610c51565b6000546001600160a01b031633146108395760405162461bcd60e51b81526004016106b190611be3565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461088e5760405162461bcd60e51b81526004016106b190611be3565b6103e860065461089e9190611c18565b8310156108ed5760405162461bcd60e51b815260206004820152601a60248201527f53686f756c6420626520626967676572207468616e20302e312500000000000060448201526064016106b1565b6103e86006546108fd9190611c18565b82101561094c5760405162461bcd60e51b815260206004820152601a60248201527f53686f756c6420626520626967676572207468616e20302e312500000000000060448201526064016106b1565b600892909255600755600d80546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b031633146109a05760405162461bcd60e51b81526004016106b190611be3565b6001600160a01b038116610a055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106b1565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600954610a6c3061073c565b1015610aba5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e73756666696369656e7420616d6f756e7400000000000060448201526064016106b1565b610ac48282611110565b15610af6576015805460ff60a01b1916600160a01b179055600954610ae8906111d6565b6015805460ff60a01b191690555b6040518181527f42c9c0bd1fc983236459b9be3c73e1bb9bcec04b2a2dafe47ffe5629d4bbc2079060200160405180910390a15050565b6001600160a01b038316610b8f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b1565b6001600160a01b038216610bf05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b1565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610cb55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b1565b6001600160a01b038216610d175760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106b1565b60008111610d795760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106b1565b6001600160a01b03831660009081526003602052604081208054839290610da1908490611bbd565b90915550506001600160a01b03831660009081526005602052604081205482919060ff16158015610deb57506001600160a01b03841660009081526005602052604090205460ff16155b15610df4575060015b801561108d576002546001600160a01b0390811690861603610e4b576001600160a01b0384166000908152601460205260408120549003610e4b576001600160a01b03841660009081526014602052604090204390555b6002546001600160a01b03858116911614610ec457600854831115610e825760405162461bcd60e51b81526004016106b190611c3a565b60075483610e8f8661073c565b610e999190611bd0565b1115610eb75760405162461bcd60e51b81526004016106b190611c83565b610ec1838561144d565b91505b6002546001600160a01b0386811691161461100557600854831115610efb5760405162461bcd60e51b81526004016106b190611c3a565b610f058386611524565b91506001600a6000828254610f1a9190611bd0565b9091555050601554600160a01b900460ff16610f4c57601580546001600160a01b0319166001600160a01b0387161790555b600954610f583061073c565b10158015610f705750601554600160a01b900460ff16155b15610fa6576015805460ff60a01b1916600160a01b179055600954610f94906111d6565b6015805460ff60a01b19169055611005565b6005600a54118015610fc25750601554600160a01b900460ff16155b15611005576015805460ff60a01b1916600160a01b179055610ff76002610fe83061073c565b610ff29190611c18565b6111d6565b6015805460ff60a01b191690555b6002546001600160a01b0385811691161480159061103157506002546001600160a01b03868116911614155b1561108d576008548311156110585760405162461bcd60e51b81526004016106b190611c3a565b600754836110658661073c565b61106f9190611bd0565b111561108d5760405162461bcd60e51b81526004016106b190611c83565b6001600160a01b038416600090815260036020526040812080548492906110b5908490611bd0565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161110191815260200190565b60405180910390a35050505050565b33600090815260056020526040812054819060ff1661118c576011546010546064919061113e906014611bbd565b6111489190611bbd565b6111529085611ccf565b61115c9190611c18565b9050611168338261155b565b6000816111743061073c565b61117e9190611bbd565b6009541092506105f8915050565b5081806111983061073c565b116111b1576111a7848461155b565b60009150506105f8565b6000816111bd3061073c565b6111c79190611bbd565b600954111592506105f8915050565b601054601154600e54600f548493600093909290916111f59190611bd0565b6111ff9190611bd0565b6112099190611bd0565b601054600e546112199190611bd0565b6112239084611ccf565b61122d9190611c18565b601054601154600e54600f549394506000936112499190611bd0565b6112539190611bd0565b61125d9190611bd0565b601154600f5461126d9190611bd0565b6112779085611ccf565b6112819190611c18565b9050600061128f8284611bd0565b9050600061129e846002611666565b905060006112ac86836116af565b9050476112b8826116f1565b60006112c447836116af565b905060006112dc866112d6848b61184b565b90611666565b905084156112ee576112ee85826118cd565b600954600c546000919061130a906001600160a01b031661073c565b106113de57600d546001600160a01b0316611326600247611c18565b604051600081818185875af1925050503d8060008114611362576040519150601f19603f3d011682016040523d82523d6000602084013e611367565b606091505b5050809150508061137757600080fd5b600c546040516001600160a01b03909116904790600081818185875af1925050503d80600081146113c4576040519150601f19603f3d011682016040523d82523d6000602084013e6113c9565b606091505b505080915050806113d957600080fd5b611440565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461142b576040519150601f19603f3d011682016040523d82523d6000602084013e611430565b606091505b5050809150508061144057600080fd5b5050505050505050505050565b6000806064600e60000154856114639190611ccf565b61146d9190611c18565b905060006064600e60010154866114849190611ccf565b61148e9190611c18565b905061149a8183611bd0565b30600090815260036020526040812080549091906114b9908490611bd0565b909155503090506001600160a01b0385167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6114f58585611bd0565b60405190815260200160405180910390a3806115118387611bbd565b61151b9190611bbd565b95945050505050565b60008060646010600001548561153a9190611ccf565b6115449190611c18565b905060006064601060010154866114849190611ccf565b6001600160a01b0382166115bb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106b1565b6115f881604051806060016040528060228152602001611db9602291396001600160a01b0385166000908152600360205260409020549190611981565b6001600160a01b03831660009081526003602052604090205560065461161e90826116af565b6006556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60006116a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506119b2565b9392505050565b60006116a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611981565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061172657611726611ce6565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561177f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a39190611cfc565b816001815181106117b6576117b6611ce6565b6001600160a01b0392831660209182029290920101526001546117dc9130911684610b2d565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611815908590600090869030904290600401611d19565b600060405180830381600087803b15801561182f57600080fd5b505af1158015611843573d6000803e3d6000fd5b505050505050565b60008260000361185d575060006105f8565b60006118698385611ccf565b9050826118768583611c18565b146116a85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106b1565b6001546118e59030906001600160a01b031684610b2d565b600154600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611955573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061197a9190611d8a565b5050505050565b600081848411156119a55760405162461bcd60e51b81526004016106b191906119e0565b50600061151b8486611bbd565b600081836119d35760405162461bcd60e51b81526004016106b191906119e0565b50600061151b8486611c18565b600060208083528351808285015260005b81811015611a0d578581018301518582016040015282016119f1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611a4357600080fd5b50565b60008060408385031215611a5957600080fd5b8235611a6481611a2e565b946020939093013593505050565b600060208284031215611a8457600080fd5b81356116a881611a2e565b600080600060608486031215611aa457600080fd5b8335611aaf81611a2e565b92506020840135611abf81611a2e565b929592945050506040919091013590565b60008060008060808587031215611ae657600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215611b1557600080fd5b8235611b2081611a2e565b915060208301358015158114611b3557600080fd5b809150509250929050565b600080600060608486031215611b5557600080fd5b83359250602084013591506040840135611b6e81611a2e565b809150509250925092565b60008060408385031215611b8c57600080fd5b8235611b9781611a2e565b91506020830135611b3581611a2e565b634e487b7160e01b600052601160045260246000fd5b818103818111156105f8576105f8611ba7565b808201808211156105f8576105f8611ba7565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082611c3557634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f5472616e7366657220416d6f756e74206578636565647320746865206d6178546040820152681e1b9cd05b5bdd5b9d60ba1b606082015260800190565b6020808252602c908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760408201526b30b63632ba20b6b7bab73a1760a11b606082015260800190565b80820281158282048414176105f8576105f8611ba7565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611d0e57600080fd5b81516116a881611a2e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d695784516001600160a01b031683529383019391830191600101611d44565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611d9f57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365a26469706673582212203c8a52f2f8938e2a2c75cb67fcbc98b0b1eaacc5f0d5e040f83418110397780764736f6c63430008120033

Deployed Bytecode Sourcemap

4642:12743:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5333:58;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;5333:58:0;;;;;;;;7151:83;;;;;;;;;;-1:-1:-1;7221:5:0;;;;;;;;;;;;-1:-1:-1;;;7221:5:0;;;;7151:83;;;;;;;:::i;7983:161::-;;;;;;;;;;-1:-1:-1;7983:161:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;7983:161:0;1205:187:1;5827:53:0;;;;;;;;;;-1:-1:-1;5827:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;4727:41;;;;;;;;;;-1:-1:-1;4727:41:0;;;;-1:-1:-1;;;;;4727:41:0;;;;;;-1:-1:-1;;;;;1839:32:1;;;1821:51;;1809:2;1794:18;4727:41:0;1649:229:1;7428:95:0;;;;;;;;;;-1:-1:-1;7508:7:0;;7428:95;;8152:266;;;;;;;;;;-1:-1:-1;8152:266:0;;;;;:::i;:::-;;:::i;5723:23::-;;;;;;;;;;-1:-1:-1;5723:23:0;;;;;;;;;;;;;2518:25:1;;;2574:2;2559:18;;2552:34;;;;2491:18;5723:23:0;2344:248:1;7337:83:0;;;;;;;;;;-1:-1:-1;7337:83:0;;5136:1;2739:36:1;;2727:2;2712:18;7337:83:0;2597:184:1;8426:215:0;;;;;;;;;;-1:-1:-1;8426:215:0;;;;;:::i;:::-;;:::i;5695:21::-;;;;;;;;;;-1:-1:-1;5695:21:0;;;;;;;;;4777:28;;;;;;;;;;-1:-1:-1;4777:28:0;;;;-1:-1:-1;;;;;4777:28:0;;;10007:123;;;;;;;;;;-1:-1:-1;10007:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;10095:27:0;10071:4;10095:27;;;:18;:27;;;;;;;;;10007:123;10138:493;;;;;;;;;;-1:-1:-1;10138:493:0;;;;;:::i;:::-;;:::i;:::-;;5207:58;;;;;;;;;;;;;;;;7531:118;;;;;;;;;;-1:-1:-1;7531:118:0;;;;;:::i;:::-;;:::i;3103:148::-;;;;;;;;;;;;;:::i;5272:54::-;;;;;;;;;;;;;;;;2889:79;;;;;;;;;;-1:-1:-1;2927:7:0;2954:6;-1:-1:-1;;;;;2954:6:0;2889:79;;7242:87;;;;;;;;;;-1:-1:-1;7314:7:0;;;;;;;;;;;;-1:-1:-1;;;7314:7:0;;;;7242:87;;8649:225;;;;;;;;;;-1:-1:-1;8649:225:0;;;;;:::i;:::-;;:::i;7657:167::-;;;;;;;;;;-1:-1:-1;7657:167:0;;;;;:::i;:::-;;:::i;5887:29::-;;;;;;;;;;-1:-1:-1;5887:29:0;;;;-1:-1:-1;;;;;5887:29:0;;;8886:140;;;;;;;;;;-1:-1:-1;8886:140:0;;;;;:::i;:::-;;:::i;5398:29::-;;;;;;;;;;;;;;;;10639:346;;;;;;;;;;-1:-1:-1;10639:346:0;;;;;:::i;:::-;;:::i;7832:143::-;;;;;;;;;;-1:-1:-1;7832:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;7940:18:0;;;7913:7;7940:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7832:143;3259:244;;;;;;;;;;-1:-1:-1;3259:244:0;;;;;:::i;:::-;;:::i;16663:339::-;;;;;;;;;;-1:-1:-1;16663:339:0;;;;;:::i;:::-;;:::i;7983:161::-;8058:4;8075:39;2421:10;8098:7;8107:6;8075:8;:39::i;:::-;-1:-1:-1;8132:4:0;7983:161;;;;;:::o;8152:266::-;8250:4;8267:36;8277:6;8285:9;8296:6;8267:9;:36::i;:::-;-1:-1:-1;;;;;8345:19:0;;;;;;:11;:19;;;;;;;;2421:10;8345:33;;;;;;;;;8314:74;;8323:6;;8345:42;;8381:6;;8345:42;:::i;:::-;8314:8;:74::i;:::-;-1:-1:-1;8406:4:0;8152:266;;;;;:::o;8426:215::-;2421:10;8514:4;8563:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8563:34:0;;;;;;;;;;8514:4;;8531:80;;8554:7;;8563:47;;8600:10;;8563:47;:::i;10138:493::-;3016:6;;-1:-1:-1;;;;;3016:6:0;2421:10;3016:22;3008:67;;;;-1:-1:-1;;;3008:67:0;;;;;;;:::i;:::-;;;;;;;;;10338:2:::1;10300:35;10319:16:::0;10300;:35:::1;:::i;:::-;:40;:86;;;;-1:-1:-1::0;10384:2:0::1;10344:37;10364:17:::0;10344;:37:::1;:::i;:::-;:42;10300:86;10292:131;;;::::0;-1:-1:-1;;;10292:131:0;;5544:2:1;10292:131:0::1;::::0;::::1;5526:21:1::0;;;5563:18;;;5556:30;5622:34;5602:18;;;5595:62;5674:18;;10292:131:0::1;5342:356:1::0;10292:131:0::1;10444:6;:35:::0;;;;10490:16;:35;;;;10538:7:::1;:37:::0;10586:17;:37;10138:493::o;7531:118::-;-1:-1:-1;;;;;7624:17:0;7597:7;7624:17;;;:8;:17;;;;;;;7531:118::o;3103:148::-;3016:6;;-1:-1:-1;;;;;3016:6:0;2421:10;3016:22;3008:67;;;;-1:-1:-1;;;3008:67:0;;;;;;;:::i;:::-;3210:1:::1;3194:6:::0;;3173:40:::1;::::0;-1:-1:-1;;;;;3194:6:0;;::::1;::::0;3173:40:::1;::::0;3210:1;;3173:40:::1;3241:1;3224:19:::0;;-1:-1:-1;;;;;;3224:19:0::1;::::0;;3103:148::o;8649:225::-;2421:10;8742:4;8791:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8791:34:0;;;;;;;;;;8742:4;;8759:85;;8782:7;;8791:52;;8828:15;;8791:52;:::i;7657:167::-;7735:4;7752:42;2421:10;7776:9;7787:6;7752:9;:42::i;8886:140::-;3016:6;;-1:-1:-1;;;;;3016:6:0;2421:10;3016:22;3008:67;;;;-1:-1:-1;;;3008:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8971:36:0;;;::::1;;::::0;;;:18:::1;:36;::::0;;;;:47;;-1:-1:-1;;8971:47:0::1;::::0;::::1;;::::0;;;::::1;::::0;;8886:140::o;10639:346::-;3016:6;;-1:-1:-1;;;;;3016:6:0;2421:10;3016:22;3008:67;;;;-1:-1:-1;;;3008:67:0;;;;;;;:::i;:::-;10773:4:::1;10763:7;;:14;;;;:::i;:::-;10753:6;:24;;10745:63;;;::::0;-1:-1:-1;;;10745:63:0;;6127:2:1;10745:63:0::1;::::0;::::1;6109:21:1::0;6166:2;6146:18;;;6139:30;6205:28;6185:18;;;6178:56;6251:18;;10745:63:0::1;5925:350:1::0;10745:63:0::1;10851:4;10841:7;;:14;;;;:::i;:::-;10827:10;:28;;10819:67;;;::::0;-1:-1:-1;;;10819:67:0;;6127:2:1;10819:67:0::1;::::0;::::1;6109:21:1::0;6166:2;6146:18;;;6139:30;6205:28;6185:18;;;6178:56;6251:18;;10819:67:0::1;5925:350:1::0;10819:67:0::1;10897:12;:21:::0;;;;10920:16:::1;:29:::0;10951:15:::1;:26:::0;;-1:-1:-1;;;;;;10951:26:0::1;-1:-1:-1::0;;;;;10951:26:0;;::::1;::::0;;;::::1;::::0;;10639:346::o;3259:244::-;3016:6;;-1:-1:-1;;;;;3016:6:0;2421:10;3016:22;3008:67;;;;-1:-1:-1;;;3008:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3348:22:0;::::1;3340:73;;;::::0;-1:-1:-1;;;3340:73:0;;6482:2:1;3340:73:0::1;::::0;::::1;6464:21:1::0;6521:2;6501:18;;;6494:30;6560:34;6540:18;;;6533:62;-1:-1:-1;;;6611:18:1;;;6604:36;6657:19;;3340:73:0::1;6280:402:1::0;3340:73:0::1;3450:6;::::0;;3429:38:::1;::::0;-1:-1:-1;;;;;3429:38:0;;::::1;::::0;3450:6;::::1;::::0;3429:38:::1;::::0;::::1;3478:6;:17:::0;;-1:-1:-1;;;;;;3478:17:0::1;-1:-1:-1::0;;;;;3478:17:0;;;::::1;::::0;;;::::1;::::0;;3259:244::o;16663:339::-;16772:17;;16744:24;16762:4;16744:9;:24::i;:::-;:45;;16736:84;;;;-1:-1:-1;;;16736:84:0;;6889:2:1;16736:84:0;;;6871:21:1;6928:2;6908:18;;;6901:30;6967:28;6947:18;;;6940:56;7013:18;;16736:84:0;6687:350:1;16736:84:0;16835:31;16853:4;16859:6;16835:17;:31::i;:::-;16831:126;;;16883:8;:15;;-1:-1:-1;;;;16883:15:0;-1:-1:-1;;;16883:15:0;;;16909:17;;16900:27;;:8;:27::i;:::-;16929:8;:16;;-1:-1:-1;;;;16929:16:0;;;16831:126;16972:22;;160:25:1;;;16972:22:0;;148:2:1;133:18;16972:22:0;;;;;;;16663:339;;:::o;10993:337::-;-1:-1:-1;;;;;11086:19:0;;11078:68;;;;-1:-1:-1;;;11078:68:0;;7244:2:1;11078:68:0;;;7226:21:1;7283:2;7263:18;;;7256:30;7322:34;7302:18;;;7295:62;-1:-1:-1;;;7373:18:1;;;7366:34;7417:19;;11078:68:0;7042:400:1;11078:68:0;-1:-1:-1;;;;;11165:21:0;;11157:68;;;;-1:-1:-1;;;11157:68:0;;7649:2:1;11157:68:0;;;7631:21:1;7688:2;7668:18;;;7661:30;7727:34;7707:18;;;7700:62;-1:-1:-1;;;7778:18:1;;;7771:32;7820:19;;11157:68:0;7447:398:1;11157:68:0;-1:-1:-1;;;;;11238:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11290:32;;160:25:1;;;11290:32:0;;133:18:1;11290:32:0;;;;;;;10993:337;;;:::o;11666:2216::-;-1:-1:-1;;;;;11788:18:0;;11780:68;;;;-1:-1:-1;;;11780:68:0;;8052:2:1;11780:68:0;;;8034:21:1;8091:2;8071:18;;;8064:30;8130:34;8110:18;;;8103:62;-1:-1:-1;;;8181:18:1;;;8174:35;8226:19;;11780:68:0;7850:401:1;11780:68:0;-1:-1:-1;;;;;11867:16:0;;11859:64;;;;-1:-1:-1;;;11859:64:0;;8458:2:1;11859:64:0;;;8440:21:1;8497:2;8477:18;;;8470:30;8536:34;8516:18;;;8509:62;-1:-1:-1;;;8587:18:1;;;8580:33;8630:19;;11859:64:0;8256:399:1;11859:64:0;11951:1;11942:6;:10;11934:64;;;;-1:-1:-1;;;11934:64:0;;8862:2:1;11934:64:0;;;8844:21:1;8901:2;8881:18;;;8874:30;8940:34;8920:18;;;8913:62;-1:-1:-1;;;8991:18:1;;;8984:39;9040:19;;11934:64:0;8660:405:1;11934:64:0;-1:-1:-1;;;;;12019:14:0;;;;;;:8;:14;;;;;:24;;12037:6;;12019:14;:24;;12037:6;;12019:24;:::i;:::-;;;;-1:-1:-1;;;;;;;12135:24:0;;12054:22;12135:24;;;:18;:24;;;;;;12079:6;;12054:22;12135:24;;12134:25;:52;;;;-1:-1:-1;;;;;;12164:22:0;;;;;;:18;:22;;;;;;;;12163:23;12134:52;12131:97;;;-1:-1:-1;12212:4:0;12131:97;12243:7;12240:1534;;;12278:13;;-1:-1:-1;;;;;12278:13:0;;;12270:21;;;;12266:135;;-1:-1:-1;;;;;12315:22:0;;;;;;:18;:22;;;;;;:27;;12311:75;;-1:-1:-1;;;;;12346:22:0;;;;;;:18;:22;;;;;12371:12;12346:37;;12311:75;12426:13;;-1:-1:-1;;;;;12420:19:0;;;12426:13;;12420:19;12417:311;;12477:12;;12467:6;:22;;12459:76;;;;-1:-1:-1;;;12459:76:0;;;;;;;:::i;:::-;12588:16;;12578:6;12562:13;12572:2;12562:9;:13::i;:::-;:22;;;;:::i;:::-;:42;;12554:99;;;;-1:-1:-1;;;12554:99:0;;;;;;;:::i;:::-;12689:23;12701:6;12709:2;12689:11;:23::i;:::-;12672:40;;12417:311;12755:13;;-1:-1:-1;;;;;12747:21:0;;;12755:13;;12747:21;12744:726;;12806:12;;12796:6;:22;;12788:76;;;;-1:-1:-1;;;12788:76:0;;;;;;;:::i;:::-;12900:26;12913:6;12921:4;12900:12;:26::i;:::-;12883:43;;12963:1;12945:14;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;12987:8:0;;-1:-1:-1;;;12987:8:0;;;;12983:40;;12999:14;:21;;-1:-1:-1;;;;;;12999:21:0;-1:-1:-1;;;;;12999:21:0;;;;;12983:40;13075:17;;13047:24;13065:4;13047:9;:24::i;:::-;:45;;:58;;;;-1:-1:-1;13097:8:0;;-1:-1:-1;;;13097:8:0;;;;13096:9;13047:58;13043:412;;;13130:8;:15;;-1:-1:-1;;;;13130:15:0;-1:-1:-1;;;13130:15:0;;;13177:17;;13168:27;;:8;:27::i;:::-;13218:8;:16;;-1:-1:-1;;;;13218:16:0;;;13043:412;;;13281:1;13264:14;;:18;:31;;;;-1:-1:-1;13287:8:0;;-1:-1:-1;;;13287:8:0;;;;13286:9;13264:31;13260:195;;;13320:8;:15;;-1:-1:-1;;;;13320:15:0;-1:-1:-1;;;13320:15:0;;;13358:38;13394:1;13367:24;13385:4;13367:9;:24::i;:::-;:28;;;;:::i;:::-;13358:8;:38::i;:::-;13419:8;:16;;-1:-1:-1;;;;13419:16:0;;;13260:195;13495:13;;-1:-1:-1;;;;;13489:19:0;;;13495:13;;13489:19;;;;:44;;-1:-1:-1;13520:13:0;;-1:-1:-1;;;;;13512:21:0;;;13520:13;;13512:21;;13489:44;13486:277;;;13571:12;;13561:6;:22;;13553:76;;;;-1:-1:-1;;;13553:76:0;;;;;;;:::i;:::-;13682:16;;13672:6;13656:13;13666:2;13656:9;:13::i;:::-;:22;;;;:::i;:::-;:42;;13648:99;;;;-1:-1:-1;;;13648:99:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13794:12:0;;;;;;:8;:12;;;;;:30;;13810:14;;13794:12;:30;;13810:14;;13794:30;:::i;:::-;;;;;;;;13855:2;-1:-1:-1;;;;;13840:34:0;13849:4;-1:-1:-1;;;;;13840:34:0;;13859:14;13840:34;;;;160:25:1;;148:2;133:18;;14:177;13840:34:0;;;;;;;;11769:2113;;11666:2216;;;:::o;15391:781::-;2421:10;15466:4;15521:32;;;:18;:32;;;;;;15466:4;;15521:32;;15516:649;;15621:17;;:7;15601:17;15642:3;;15621:17;15596:22;;:2;:22;:::i;:::-;:42;;;;:::i;:::-;15586:53;;:6;:53;:::i;:::-;:59;;;;:::i;:::-;15570:75;-1:-1:-1;15660:39:0;2421:10;15685:13;15660:10;:39::i;:::-;15714:20;15764:13;15737:24;15755:4;15737:9;:24::i;:::-;:40;;;;:::i;:::-;15814:17;;-1:-1:-1;15799:32:0;-1:-1:-1;15792:39:0;;-1:-1:-1;;15792:39:0;15516:649;-1:-1:-1;15880:6:0;;15905:24;15923:4;15905:9;:24::i;:::-;:41;15901:120;;15967:24;15978:4;15984:6;15967:10;:24::i;:::-;16000:5;15993:12;;;;;15901:120;16035:20;16085:13;16058:24;16076:4;16058:9;:24::i;:::-;:40;;;;:::i;:::-;16136:17;;-1:-1:-1;16120:33:0;;-1:-1:-1;16113:40:0;;-1:-1:-1;;16113:40:0;13893:1490;14133:7;:17;14113;;14094:6;:16;14075;;13972:6;;13946:23;;14133:17;;14113;;14075:35;;14094:16;14075:35;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;14053:7;:17;14034:6;:16;:36;;14053:17;14034:36;:::i;:::-;14015:56;;:15;:56;:::i;:::-;:136;;;;:::i;:::-;14306:7;:17;14286;;14267:6;:16;14248;;13989:162;;-1:-1:-1;14162:23:0;;14248:35;;14267:16;14248:35;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;14226:17;;14207:16;;:36;;14226:17;14207:36;:::i;:::-;14188:56;;:15;:56;:::i;:::-;:136;;;;:::i;:::-;14162:162;-1:-1:-1;14335:25:0;14363:33;14162:162;14363:15;:33;:::i;:::-;14335:61;-1:-1:-1;14417:26:0;14446:22;:15;14466:1;14446:19;:22::i;:::-;14417:51;-1:-1:-1;14479:26:0;14508:39;:15;14417:51;14508:19;:39::i;:::-;14479:68;-1:-1:-1;14586:21:0;14618:36;14479:68;14618:16;:36::i;:::-;14666:18;14687:44;:21;14713:17;14687:25;:44::i;:::-;14666:65;-1:-1:-1;14752:23:0;14778:54;14814:17;14778:31;14666:65;14793:15;14778:14;:31::i;:::-;:35;;:54::i;:::-;14752:80;-1:-1:-1;14847:22:0;;14843:90;;14884:49;14897:18;14917:15;14884:12;:49::i;:::-;14995:17;;14981:9;;14944:12;;14995:17;14971:20;;-1:-1:-1;;;;;14981:9:0;14971;:20::i;:::-;:41;14967:409;;15050:15;;-1:-1:-1;;;;;15050:15:0;15079:25;15103:1;15079:21;:25;:::i;:::-;15042:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15029:80;;;;;15119:7;15111:16;;;;;;15163:9;;15155:57;;-1:-1:-1;;;;;15163:9:0;;;;15186:21;;15155:57;;;;15186:21;15163:9;15155:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15142:70;;;;;15222:7;15214:16;;;;;;14967:409;;;15284:9;;15276:57;;-1:-1:-1;;;;;15284:9:0;;;;15307:21;;15276:57;;;;15307:21;15284:9;15276:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15263:70;;;;;15356:7;15348:16;;;;;;13935:1448;;;;;;;;;;13893:1490;:::o;9075:456::-;9143:7;9163:25;9219:3;9200:6;:16;;;9191:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;9163:59;;9234:26;9291:3;9272:6;:16;;;9263:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;9234:60;-1:-1:-1;9334:38:0;9234:60;9334:17;:38;:::i;:::-;9324:4;9307:23;;;;:8;:23;;;;;:65;;:23;;;:65;;;;;:::i;:::-;;;;-1:-1:-1;9412:4:0;;-1:-1:-1;;;;;;9388:70:0;;;9419:38;9440:17;9419:18;:38;:::i;:::-;9388:70;;160:25:1;;;148:2;133:18;9388:70:0;;;;;;;9504:18;9477:25;9485:17;9477:6;:25;:::i;:::-;:45;;;;:::i;:::-;9469:54;9075:456;-1:-1:-1;;;;;9075:456:0:o;9539:460::-;9608:7;9628:25;9685:3;9665:7;:17;;;9656:6;:26;;;;:::i;:::-;:32;;;;:::i;:::-;9628:60;;9700:26;9758:3;9738:7;:17;;;9729:6;:26;;;;:::i;11338:320::-;-1:-1:-1;;;;;11415:18:0;;11407:64;;;;-1:-1:-1;;;11407:64:0;;10478:2:1;11407:64:0;;;10460:21:1;10517:2;10497:18;;;10490:30;10556:34;10536:18;;;10529:62;-1:-1:-1;;;10607:18:1;;;10600:31;10648:19;;11407:64:0;10276:397:1;11407:64:0;11499:63;11518:5;11499:63;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11499:14:0;;;;;;:8;:14;;;;;;;:63;:18;:63::i;:::-;-1:-1:-1;;;;;11482:14:0;;;;;;:8;:14;;;;;:80;11583:7;;:18;;11595:5;11583:11;:18::i;:::-;11573:7;:28;11617:33;;160:25:1;;;11640:1:0;;-1:-1:-1;;;;;11617:33:0;;;;;148:2:1;133:18;11617:33:0;;;;;;;11338:320;;:::o;1555:132::-;1613:7;1640:39;1644:1;1647;1640:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1633:46;1555:132;-1:-1:-1;;;1555:132:0:o;953:136::-;1011:7;1038:43;1042:1;1045;1038:43;;;;;;;;;;;;;;;;;:3;:43::i;16180:475::-;16270:16;;;16284:1;16270:16;;;;;;;;16246:21;;16270:16;;;;;;;;;;-1:-1:-1;16270:16:0;16246:40;;16315:4;16297;16302:1;16297:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16297:23:0;;;:7;;;;;;;;;;:23;;;;16341:15;;:22;;;-1:-1:-1;;;16341:22:0;;;;:15;;;;;:20;;:22;;;;;16297:7;;16341:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16331:4;16336:1;16331:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16331:32:0;;;:7;;;;;;;;;:32;16408:15;;16376:62;;16393:4;;16408:15;16426:11;16376:8;:62::i;:::-;16451:15;;:196;;-1:-1:-1;;;16451:196:0;;-1:-1:-1;;;;;16451:15:0;;;;:66;;:196;;16532:11;;16451:15;;16574:4;;16601;;16621:15;;16451:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16235:420;16180:475;:::o;1297:250::-;1355:7;1379:1;1384;1379:6;1375:47;;-1:-1:-1;1409:1:0;1402:8;;1375:47;1434:9;1446:5;1450:1;1446;:5;:::i;:::-;1434:17;-1:-1:-1;1479:1:0;1470:5;1474:1;1434:17;1470:5;:::i;:::-;:10;1462:56;;;;-1:-1:-1;;;1462:56:0;;12385:2:1;1462:56:0;;;12367:21:1;12424:2;12404:18;;;12397:30;12463:34;12443:18;;;12436:62;-1:-1:-1;;;12514:18:1;;;12507:31;12555:19;;1462:56:0;12183:397:1;17010:372:0;17123:15;;17091:62;;17108:4;;-1:-1:-1;;;;;17123:15:0;17141:11;17091:8;:62::i;:::-;17166:15;;17318;;17166:208;;-1:-1:-1;;;17166:208:0;;17240:4;17166:208;;;12926:34:1;12976:18;;;12969:34;;;17166:15:0;13019:18:1;;;13012:34;;;13062:18;;;13055:34;-1:-1:-1;;;;;17318:15:0;;;13105:19:1;;;13098:44;17348:15:0;13158:19:1;;;13151:35;17166:15:0;;;:31;;17206:9;;12860:19:1;;17166:208:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17010:372;;:::o;1097:192::-;1183:7;1219:12;1211:6;;;;1203:29;;;;-1:-1:-1;;;1203:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1243:9:0;1255:5;1259:1;1255;:5;:::i;1695:278::-;1781:7;1816:12;1809:5;1801:28;;;;-1:-1:-1;;;1801:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1840:9:0;1852:5;1856:1;1852;:5;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;1883:456::-;1960:6;1968;1976;2029:2;2017:9;2008:7;2004:23;2000:32;1997:52;;;2045:1;2042;2035:12;1997:52;2084:9;2071:23;2103:31;2128:5;2103:31;:::i;:::-;2153:5;-1:-1:-1;2210:2:1;2195:18;;2182:32;2223:33;2182:32;2223:33;:::i;:::-;1883:456;;2275:7;;-1:-1:-1;;;2329:2:1;2314:18;;;;2301:32;;1883:456::o;2994:385::-;3080:6;3088;3096;3104;3157:3;3145:9;3136:7;3132:23;3128:33;3125:53;;;3174:1;3171;3164:12;3125:53;-1:-1:-1;;3197:23:1;;;3267:2;3252:18;;3239:32;;-1:-1:-1;3318:2:1;3303:18;;3290:32;;3369:2;3354:18;3341:32;;-1:-1:-1;2994:385:1;-1:-1:-1;2994:385:1:o;3384:416::-;3449:6;3457;3510:2;3498:9;3489:7;3485:23;3481:32;3478:52;;;3526:1;3523;3516:12;3478:52;3565:9;3552:23;3584:31;3609:5;3584:31;:::i;:::-;3634:5;-1:-1:-1;3691:2:1;3676:18;;3663:32;3733:15;;3726:23;3714:36;;3704:64;;3764:1;3761;3754:12;3704:64;3787:7;3777:17;;;3384:416;;;;;:::o;3805:383::-;3882:6;3890;3898;3951:2;3939:9;3930:7;3926:23;3922:32;3919:52;;;3967:1;3964;3957:12;3919:52;4003:9;3990:23;3980:33;;4060:2;4049:9;4045:18;4032:32;4022:42;;4114:2;4103:9;4099:18;4086:32;4127:31;4152:5;4127:31;:::i;:::-;4177:5;4167:15;;;3805:383;;;;;:::o;4193:388::-;4261:6;4269;4322:2;4310:9;4301:7;4297:23;4293:32;4290:52;;;4338:1;4335;4328:12;4290:52;4377:9;4364:23;4396:31;4421:5;4396:31;:::i;:::-;4446:5;-1:-1:-1;4503:2:1;4488:18;;4475:32;4516:33;4475:32;4516:33;:::i;4586:127::-;4647:10;4642:3;4638:20;4635:1;4628:31;4678:4;4675:1;4668:15;4702:4;4699:1;4692:15;4718:128;4785:9;;;4806:11;;;4803:37;;;4820:18;;:::i;4851:125::-;4916:9;;;4937:10;;;4934:36;;;4950:18;;:::i;4981:356::-;5183:2;5165:21;;;5202:18;;;5195:30;5261:34;5256:2;5241:18;;5234:62;5328:2;5313:18;;4981:356::o;5703:217::-;5743:1;5769;5759:132;;5813:10;5808:3;5804:20;5801:1;5794:31;5848:4;5845:1;5838:15;5876:4;5873:1;5866:15;5759:132;-1:-1:-1;5905:9:1;;5703:217::o;9070:405::-;9272:2;9254:21;;;9311:2;9291:18;;;9284:30;9350:34;9345:2;9330:18;;9323:62;-1:-1:-1;;;9416:2:1;9401:18;;9394:39;9465:3;9450:19;;9070:405::o;9480:408::-;9682:2;9664:21;;;9721:2;9701:18;;;9694:30;9760:34;9755:2;9740:18;;9733:62;-1:-1:-1;;;9826:2:1;9811:18;;9804:42;9878:3;9863:19;;9480:408::o;9893:168::-;9966:9;;;9997;;10014:15;;;10008:22;;9994:37;9984:71;;10035:18;;:::i;10810:127::-;10871:10;10866:3;10862:20;10859:1;10852:31;10902:4;10899:1;10892:15;10926:4;10923:1;10916:15;10942:251;11012:6;11065:2;11053:9;11044:7;11040:23;11036:32;11033:52;;;11081:1;11078;11071:12;11033:52;11113:9;11107:16;11132:31;11157:5;11132:31;:::i;11198:980::-;11460:4;11508:3;11497:9;11493:19;11539:6;11528:9;11521:25;11565:2;11603:6;11598:2;11587:9;11583:18;11576:34;11646:3;11641:2;11630:9;11626:18;11619:31;11670:6;11705;11699:13;11736:6;11728;11721:22;11774:3;11763:9;11759:19;11752:26;;11813:2;11805:6;11801:15;11787:29;;11834:1;11844:195;11858:6;11855:1;11852:13;11844:195;;;11923:13;;-1:-1:-1;;;;;11919:39:1;11907:52;;12014:15;;;;11979:12;;;;11955:1;11873:9;11844:195;;;-1:-1:-1;;;;;;;12095:32:1;;;;12090:2;12075:18;;12068:60;-1:-1:-1;;;12159:3:1;12144:19;12137:35;12056:3;11198:980;-1:-1:-1;;;11198:980:1:o;13197:306::-;13285:6;13293;13301;13354:2;13342:9;13333:7;13329:23;13325:32;13322:52;;;13370:1;13367;13360:12;13322:52;13399:9;13393:16;13383:26;;13449:2;13438:9;13434:18;13428:25;13418:35;;13493:2;13482:9;13478:18;13472:25;13462:35;;13197:306;;;;;:::o

Swarm Source

ipfs://3c8a52f2f8938e2a2c75cb67fcbc98b0b1eaacc5f0d5e040f834181103977807
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.