ETH Price: $2,441.62 (+1.30%)
Gas: 7.27 Gwei

Token

Ceiling Cat Coin (CEILCAT)
 

Overview

Max Total Supply

100,000,000 CEILCAT

Holders

31

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
873,990.559100007 CEILCAT

Value
$0.00
0xd4fe28a4521ff39b59ddc9813f42bdac145eb25a
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:
CeilingCatCoin

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-06-20
*/

/*
https://ceilingcatcoin.club
https://t.me/ceilingcatcoinportal
https://twitter.com/CeilingCat_Coin
*/


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

interface IUniswapV2Router {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

contract Ownable {
    address private _owner;

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

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

contract CeilingCatCoin is IERC20, Ownable {
    string private constant _name = "Ceiling Cat Coin";
    string private constant _symbol = "CEILCAT";
    uint8 private constant _decimals = 9;
    uint256 private constant _totalSupply = 100_000_000 * 10**_decimals;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _blocked;

    mapping (address => uint256) private _lastTradeBlock;
    mapping (address => bool) private isContractExempt;
    uint256 private tradeCooldown = 1;
    
    uint256 public constant maxWalletAmount = 2_000_000 * 10**_decimals;
    uint256 private constant contractSwapLimit = 2_000_000 * 10**_decimals;
    uint256 private constant contractSwapMax = 2_000_000 * 10**_decimals;

    struct TradingFees{
        uint256 buyTax;
        uint256 sellTax;
    }  

    TradingFees public tradingFees = TradingFees(0,0);
    uint256 public constant sniperTax = 0;

    IUniswapV2Router private constant uniswapRouter = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address private immutable ETH = uniswapRouter.WETH();
    address private immutable uniswapPair;

    address payable private immutable deployerAddress = payable(msg.sender);
    address payable private constant Treasury = payable(0xa0da4eee25FA567844174C536c2A1516ceC677d2);

    bool private tradingOpen = false;
    bool private swapping = false;
    bool private antiMEV = true;
    uint256 private startingBlock;
    uint private preLaunch;

    modifier swapLock {
        swapping = true;
        _;
        swapping = false;
    }

    modifier tradingLock(address sender) {
        require(tradingOpen || sender == deployerAddress || sender == Treasury);
        _;
    }

    constructor () {
        uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair(address(this), ETH);
        isContractExempt[address(this)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    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 pure returns (uint256) {
        return _totalSupply;
    }

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

    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        require(_allowances[sender][msg.sender] >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
        _transfer(sender, recipient, 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 _transfer(address from, address to, uint256 amount) tradingLock(from) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Token: transfer amount must be greater than zero");

        _balances[from] -= amount;

        if (from != address(this) && from != Treasury && to != Treasury && to != deployerAddress) {
            
            if(antiMEV && !isContractExempt[from] && !isContractExempt[to]){
                address human = ensureOneHuman(from, to);
                ensureMaxTxFrequency(human);
                _lastTradeBlock[human] = block.number;
            }

            if (from == uniswapPair && to != address(uniswapRouter)) {
                require(balanceOf(to) + amount <= maxWalletAmount, "Token: transfer implies violation of max wallet");
            }

           uint256 contractTokenBalance = balanceOf(address(this));
           if (shouldSwapback(from, contractTokenBalance)) 
               swapback(contractTokenBalance);                            

           uint256 taxedTokens = takeFee(from, amount);
           if(taxedTokens > 0){
                amount -= taxedTokens;
                _balances[address(this)] += taxedTokens;
                emit Transfer(from, address(this), taxedTokens);
            }
        }

        _balances[to] += amount;
        emit Transfer(from, to, amount);
    }

    function swapback(uint256 tokenAmount) private swapLock {
        tokenAmount = getSwapAmount(tokenAmount);
        if(allowance(address(this), address(uniswapRouter)) < tokenAmount) {
            _approve(address(this), address(uniswapRouter), _totalSupply);
        }
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = ETH;
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            Treasury.transfer(contractETHBalance);
        }
    }

    function shouldSwapback(address from, uint256 tokenAmount) private view returns (bool shouldSwap) {
        shouldSwap = !swapping && from != uniswapPair && tokenAmount > contractSwapLimit && 1 + startingBlock <= block.number;
    }

    function getSwapAmount(uint256 tokenAmount) private pure returns (uint256 swapAmount) {
        swapAmount = tokenAmount > contractSwapMax ? contractSwapMax : contractSwapLimit;
    }

    function takeFee(address from, uint256 amount) private view returns (uint256 feeAmount) {
         if(_blocked[from] || block.number <= startingBlock)
                feeAmount = amount * sniperTax / 100;
        else
            feeAmount = amount * (startingBlock == 0 ? 25 : (from == uniswapPair ? tradingFees.buyTax : tradingFees.sellTax)) / 100;
    }

    function isContract(address account) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function ensureOneHuman(address _to, address _from) private view returns (address) {
        require(!isContract(_to) || !isContract(_from));
        if (isContract(_to)) return _from;
        else return _to;
    }

    function ensureMaxTxFrequency(address addr) view private {
        bool isAllowed = _lastTradeBlock[addr] == 0 ||
            ((_lastTradeBlock[addr] + tradeCooldown) < (block.number + 1));
        require(isAllowed, "Max tx frequency exceeded!");
    }

    function toggleAntiMEV(bool toggle) external {
        require(msg.sender == deployerAddress);
        antiMEV = toggle;
    }

    function setTradeCooldown(uint256 newTradeCooldown) external {
        require(msg.sender == deployerAddress);
        require(newTradeCooldown > 0 && newTradeCooldown < 4, "Token: only trade cooldown values in range (0,4) permissible");
        tradeCooldown = newTradeCooldown;
    }

    function manualSwapback(uint256 percent) external {
        require(msg.sender == deployerAddress);
        require(0 < percent && percent <= 100, "Token: only percent values in range (0,100] permissible");
        uint256 tokensToSwap = percent * balanceOf(address(this)) / 100;
        swapback(tokensToSwap);
    }

    function setFees(uint256 newBuyTax, uint256 newSellTax) external {
        require(msg.sender == deployerAddress);
        require(newBuyTax <= tradingFees.buyTax, "Token: only fee reduction permitted");
        require(newSellTax <= tradingFees.sellTax, "Token: only fee reduction permitted");
        tradingFees.buyTax = newBuyTax;
        tradingFees.sellTax = newSellTax;
    }

    function setContractExempt(address account, bool value) external onlyOwner {
        require(account != address(this));
        isContractExempt[account] = value;
    }

    function setBots(address[] calldata bots, bool shouldBlock) external onlyOwner {
        for (uint i = 0; i < bots.length; i++) {
            require(bots[i] != uniswapPair && 
                    bots[i] != address(uniswapRouter) &&
                    bots[i] != address(this));
            _blocked[bots[i]] = shouldBlock;
        }
    }

    function initialize() external onlyOwner {
        require(preLaunch++<2);
    }

    function modifyParameters(bool[] calldata param, uint256 nrBlocks) external onlyOwner {
        assert(preLaunch<2&&preLaunch+1>=2); 
        preLaunch++;param;
        startingBlock += nrBlocks;
    }

    function openTrading() external onlyOwner {
        require(preLaunch == 2 && !tradingOpen, "Token: trading already open");
        startingBlock += block.number;
        tradingOpen = true;
    }
}

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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool[]","name":"param","type":"bool[]"},{"internalType":"uint256","name":"nrBlocks","type":"uint256"}],"name":"modifyParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setContractExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyTax","type":"uint256"},{"internalType":"uint256","name":"newSellTax","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTradeCooldown","type":"uint256"}],"name":"setTradeCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniperTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"toggle","type":"bool"}],"name":"toggleAntiMEV","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingFees","outputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","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"},{"stateMutability":"payable","type":"receive"}]

600160065561012060408190525f60e081905261010081905260078190556008556315ab88c960e31b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063ad5c46489061012490602090600481865afa15801562000063573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200008991906200028f565b6001600160a01b03166080523360c0526009805462ffffff191662010000179055348015620000b6575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000148573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200016e91906200028f565b6080516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303815f875af1158015620001bd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e391906200028f565b6001600160a01b031660a052305f908152600560205260409020805460ff19166001179055620002166009600a620003cd565b62000226906305f5e100620003dd565b335f81815260016020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002686009600a620003cd565b62000278906305f5e100620003dd565b60405190815260200160405180910390a3620003f7565b5f60208284031215620002a0575f80fd5b81516001600160a01b0381168114620002b7575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200031257815f1904821115620002f657620002f6620002be565b808516156200030457918102915b93841c9390800290620002d7565b509250929050565b5f826200032a57506001620003c7565b816200033857505f620003c7565b81600181146200035157600281146200035c576200037c565b6001915050620003c7565b60ff841115620003705762000370620002be565b50506001821b620003c7565b5060208310610133831016604e8410600b8410161715620003a1575081810a620003c7565b620003ad8383620002d2565b805f1904821115620003c357620003c3620002be565b0290505b92915050565b5f620002b760ff8416836200031a565b8082028115828204841417620003c757620003c7620002be565b60805160a05160c051611be16200045a5f395f8181610499015281816104e90152818161066701528181610b2901528181610d3c0152610f6101525f818161086c015281816110260152818161152901526115f901525f6113380152611be15ff3fe60806040526004361061013f575f3560e01c80638129fc1c116100b3578063aa4bde281161006d578063aa4bde28146103bb578063c9567bf9146103cf578063dd62ed3e146103e3578063f1f5cd9114610427578063f318bbfe1461043a578063f8d982b214610459575f80fd5b80638129fc1c146102f55780638da5cb5b1461030957806395d89b411461032f5780639686d3221461035e5780639c0db5f31461037d578063a9059cbb1461039c575f80fd5b806323b872dd1161010457806323b872dd146102255780633049b58014610244578063313ce5671461026357806370a082311461027e578063715018a6146102b257806374378132146102c6575f80fd5b806306fdde031461014a578063095ea7b31461019457806309fb5639146101c35780630b78f9c0146101e457806318160ddd14610203575f80fd5b3661014657005b5f80fd5b348015610155575f80fd5b5060408051808201909152601081526f21b2b4b634b7339021b0ba1021b7b4b760811b60208201525b60405161018b91906116ae565b60405180910390f35b34801561019f575f80fd5b506101b36101ae366004611714565b610478565b604051901515815260200161018b565b3480156101ce575f80fd5b506101e26101dd36600461174b565b61048e565b005b3480156101ef575f80fd5b506101e26101fe366004611764565b6104de565b34801561020e575f80fd5b5061021761056a565b60405190815260200161018b565b348015610230575f80fd5b506101b361023f366004611784565b61058a565b34801561024f575f80fd5b506101e261025e3660046117bd565b61065c565b34801561026e575f80fd5b506040516009815260200161018b565b348015610289575f80fd5b506102176102983660046117d4565b6001600160a01b03165f9081526001602052604090205490565b3480156102bd575f80fd5b506101e2610716565b3480156102d1575f80fd5b506007546008546102e0919082565b6040805192835260208301919091520161018b565b348015610300575f80fd5b506101e2610787565b348015610314575f80fd5b505f546040516001600160a01b03909116815260200161018b565b34801561033a575f80fd5b5060408051808201909152600781526610d1525310d05560ca1b602082015261017e565b348015610369575f80fd5b506101e26103783660046117ed565b6107d0565b348015610388575f80fd5b506101e2610397366004611866565b610837565b3480156103a7575f80fd5b506101b36103b6366004611714565b6109c2565b3480156103c6575f80fd5b506102176109ce565b3480156103da575f80fd5b506101e26109ea565b3480156103ee575f80fd5b506102176103fd3660046118b6565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610432575f80fd5b506102175f81565b348015610445575f80fd5b506101e26104543660046118de565b610a99565b348015610464575f80fd5b506101e26104733660046117bd565b610b1e565b5f610484338484610c09565b5060015b92915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104c2575f80fd5b60098054911515620100000262ff000019909216919091179055565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610512575f80fd5b60075482111561053d5760405162461bcd60e51b815260040161053490611926565b60405180910390fd5b60085481111561055f5760405162461bcd60e51b815260040161053490611926565b600791909155600855565b5f6105776009600a611a5d565b610585906305f5e100611a6b565b905090565b6001600160a01b0383165f90815260026020908152604080832033845290915281205482111561060d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610534565b6001600160a01b0384165f90815260026020908152604080832033808552925290912054610647918691610642908690611a82565b610c09565b610652848484610d2c565b5060019392505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610690575f80fd5b5f8111801561069f5750600481105b6107115760405162461bcd60e51b815260206004820152603c60248201527f546f6b656e3a206f6e6c7920747261646520636f6f6c646f776e2076616c756560448201527f7320696e2072616e67652028302c3429207065726d69737369626c65000000006064820152608401610534565b600655565b5f546001600160a01b0316331461073f5760405162461bcd60e51b815260040161053490611a95565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146107b05760405162461bcd60e51b815260040161053490611a95565b600b80546002915f6107c183611aca565b91905055106107ce575f80fd5b565b5f546001600160a01b031633146107f95760405162461bcd60e51b815260040161053490611a95565b306001600160a01b0383160361080d575f80fd5b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146108605760405162461bcd60e51b815260040161053490611a95565b5f5b828110156109bc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168484838181106108a6576108a6611ae2565b90506020020160208101906108bb91906117d4565b6001600160a01b0316141580156109155750737a250d5630b4cf539739df2c5dacb4c659f2488d8484838181106108f4576108f4611ae2565b905060200201602081019061090991906117d4565b6001600160a01b031614155b801561095057503084848381811061092f5761092f611ae2565b905060200201602081019061094491906117d4565b6001600160a01b031614155b610958575f80fd5b8160035f86868581811061096e5761096e611ae2565b905060200201602081019061098391906117d4565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055806109b481611aca565b915050610862565b50505050565b5f610484338484610d2c565b6109da6009600a611a5d565b6109e790621e8480611a6b565b81565b5f546001600160a01b03163314610a135760405162461bcd60e51b815260040161053490611a95565b600b546002148015610a28575060095460ff16155b610a745760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e3a2074726164696e6720616c7265616479206f70656e00000000006044820152606401610534565b43600a5f828254610a859190611af6565b90915550506009805460ff19166001179055565b5f546001600160a01b03163314610ac25760405162461bcd60e51b815260040161053490611a95565b6002600b54108015610ae357506002600b546001610ae09190611af6565b10155b610aef57610aef611b09565b600b8054905f610afe83611aca565b919050555080600a5f828254610b149190611af6565b9091555050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b52575f80fd5b805f108015610b62575060648111155b610bd45760405162461bcd60e51b815260206004820152603760248201527f546f6b656e3a206f6e6c792070657263656e742076616c75657320696e20726160448201527f6e67652028302c3130305d207065726d69737369626c650000000000000000006064820152608401610534565b305f90815260016020526040812054606490610bf09084611a6b565b610bfa9190611b1d565b9050610c0581611260565b5050565b6001600160a01b038316610c6b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610534565b6001600160a01b038216610ccc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610534565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600954839060ff1680610d7057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316145b80610d9757506001600160a01b03811673a0da4eee25fa567844174c536c2a1516cec677d2145b610d9f575f80fd5b6001600160a01b038416610e035760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610534565b6001600160a01b038316610e655760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610534565b5f8211610ecd5760405162461bcd60e51b815260206004820152603060248201527f546f6b656e3a207472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b6064820152608401610534565b6001600160a01b0384165f9081526001602052604081208054849290610ef4908490611a82565b90915550506001600160a01b0384163014801590610f2f57506001600160a01b03841673a0da4eee25fa567844174c536c2a1516cec677d214155b8015610f5857506001600160a01b03831673a0da4eee25fa567844174c536c2a1516cec677d214155b8015610f9657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b156111df5760095462010000900460ff168015610fcb57506001600160a01b0384165f9081526005602052604090205460ff16155b8015610fef57506001600160a01b0383165f9081526005602052604090205460ff16155b15611024575f610fff8585611447565b905061100a81611472565b6001600160a01b03165f9081526004602052604090204390555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614801561108257506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b1561112f576110936009600a611a5d565b6110a090621e8480611a6b565b826110bf856001600160a01b03165f9081526001602052604090205490565b6110c99190611af6565b111561112f5760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e3a207472616e7366657220696d706c6965732076696f6c6174696f60448201526e1b881bd9881b585e081dd85b1b195d608a1b6064820152608401610534565b305f908152600160205260409020546111488582611512565b156111565761115681611260565b5f61116186856115a2565b905080156111dc576111738185611a82565b305f90815260016020526040812080549296508392909190611196908490611af6565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505b6001600160a01b0383165f9081526001602052604081208054849290611206908490611af6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161125291815260200190565b60405180910390a350505050565b6009805461ff00191661010017905561127881611657565b305f908152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d84529091529020549091508111156112e3576112e330737a250d5630b4cf539739df2c5dacb4c659f2488d6112d56009600a611a5d565b610642906305f5e100611a6b565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061131657611316611ae2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061136a5761136a611ae2565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac947906113c19085905f90869030904290600401611b3c565b5f604051808303815f87803b1580156113d8575f80fd5b505af11580156113ea573d5f803e3d5ffd5b5047925050811590506114375760405173a0da4eee25fa567844174c536c2a1516cec677d29082156108fc029083905f818181858888f19350505050158015611435573d5f803e3d5ffd5b505b50506009805461ff001916905550565b5f823b15806114555750813b155b61145d575f80fd5b823b1561146b575080610488565b5081610488565b6001600160a01b0381165f9081526004602052604081205415806114c3575061149c436001611af6565b6006546001600160a01b0384165f908152600460205260409020546114c19190611af6565b105b905080610c055760405162461bcd60e51b815260206004820152601a60248201527f4d6178207478206672657175656e6379206578636565646564210000000000006044820152606401610534565b6009545f90610100900460ff1615801561155e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b801561158157506115716009600a611a5d565b61157e90621e8480611a6b565b82115b801561159b575043600a5460016115989190611af6565b11155b9392505050565b6001600160a01b0382165f9081526003602052604081205460ff16806115ca5750600a544311155b156115ec5760646115db5f84611a6b565b6115e59190611b1d565b9050610488565b6064600a545f14611640577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161461163857600854611643565b600754611643565b60195b61164d9084611a6b565b61159b9190611b1d565b5f6116646009600a611a5d565b61167190621e8480611a6b565b8211611695576116836009600a611a5d565b61169090621e8480611a6b565b610488565b6116a16009600a611a5d565b61048890621e8480611a6b565b5f6020808352835180828501525f5b818110156116d9578581018301518582016040015282016116bd565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461170f575f80fd5b919050565b5f8060408385031215611725575f80fd5b61172e836116f9565b946020939093013593505050565b8035801515811461170f575f80fd5b5f6020828403121561175b575f80fd5b61159b8261173c565b5f8060408385031215611775575f80fd5b50508035926020909101359150565b5f805f60608486031215611796575f80fd5b61179f846116f9565b92506117ad602085016116f9565b9150604084013590509250925092565b5f602082840312156117cd575f80fd5b5035919050565b5f602082840312156117e4575f80fd5b61159b826116f9565b5f80604083850312156117fe575f80fd5b611807836116f9565b91506118156020840161173c565b90509250929050565b5f8083601f84011261182e575f80fd5b50813567ffffffffffffffff811115611845575f80fd5b6020830191508360208260051b850101111561185f575f80fd5b9250929050565b5f805f60408486031215611878575f80fd5b833567ffffffffffffffff81111561188e575f80fd5b61189a8682870161181e565b90945092506118ad90506020850161173c565b90509250925092565b5f80604083850312156118c7575f80fd5b6118d0836116f9565b9150611815602084016116f9565b5f805f604084860312156118f0575f80fd5b833567ffffffffffffffff811115611906575f80fd5b6119128682870161181e565b909790965060209590950135949350505050565b60208082526023908201527f546f6b656e3a206f6e6c792066656520726564756374696f6e207065726d69746040820152621d195960ea1b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156119b757815f190482111561199d5761199d611969565b808516156119aa57918102915b93841c9390800290611982565b509250929050565b5f826119cd57506001610488565b816119d957505f610488565b81600181146119ef57600281146119f957611a15565b6001915050610488565b60ff841115611a0a57611a0a611969565b50506001821b610488565b5060208310610133831016604e8410600b8410161715611a38575081810a610488565b611a42838361197d565b805f1904821115611a5557611a55611969565b029392505050565b5f61159b60ff8416836119bf565b808202811582820484141761048857610488611969565b8181038181111561048857610488611969565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60018201611adb57611adb611969565b5060010190565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561048857610488611969565b634e487b7160e01b5f52600160045260245ffd5b5f82611b3757634e487b7160e01b5f52601260045260245ffd5b500490565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611b8a5784516001600160a01b031683529383019391830191600101611b65565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122047f2d50d108a03f7dae312c8f9e8c4d1805f314cbeb414ccc2ae8e6e9e36b94c64736f6c63430008140033

Deployed Bytecode

0x60806040526004361061013f575f3560e01c80638129fc1c116100b3578063aa4bde281161006d578063aa4bde28146103bb578063c9567bf9146103cf578063dd62ed3e146103e3578063f1f5cd9114610427578063f318bbfe1461043a578063f8d982b214610459575f80fd5b80638129fc1c146102f55780638da5cb5b1461030957806395d89b411461032f5780639686d3221461035e5780639c0db5f31461037d578063a9059cbb1461039c575f80fd5b806323b872dd1161010457806323b872dd146102255780633049b58014610244578063313ce5671461026357806370a082311461027e578063715018a6146102b257806374378132146102c6575f80fd5b806306fdde031461014a578063095ea7b31461019457806309fb5639146101c35780630b78f9c0146101e457806318160ddd14610203575f80fd5b3661014657005b5f80fd5b348015610155575f80fd5b5060408051808201909152601081526f21b2b4b634b7339021b0ba1021b7b4b760811b60208201525b60405161018b91906116ae565b60405180910390f35b34801561019f575f80fd5b506101b36101ae366004611714565b610478565b604051901515815260200161018b565b3480156101ce575f80fd5b506101e26101dd36600461174b565b61048e565b005b3480156101ef575f80fd5b506101e26101fe366004611764565b6104de565b34801561020e575f80fd5b5061021761056a565b60405190815260200161018b565b348015610230575f80fd5b506101b361023f366004611784565b61058a565b34801561024f575f80fd5b506101e261025e3660046117bd565b61065c565b34801561026e575f80fd5b506040516009815260200161018b565b348015610289575f80fd5b506102176102983660046117d4565b6001600160a01b03165f9081526001602052604090205490565b3480156102bd575f80fd5b506101e2610716565b3480156102d1575f80fd5b506007546008546102e0919082565b6040805192835260208301919091520161018b565b348015610300575f80fd5b506101e2610787565b348015610314575f80fd5b505f546040516001600160a01b03909116815260200161018b565b34801561033a575f80fd5b5060408051808201909152600781526610d1525310d05560ca1b602082015261017e565b348015610369575f80fd5b506101e26103783660046117ed565b6107d0565b348015610388575f80fd5b506101e2610397366004611866565b610837565b3480156103a7575f80fd5b506101b36103b6366004611714565b6109c2565b3480156103c6575f80fd5b506102176109ce565b3480156103da575f80fd5b506101e26109ea565b3480156103ee575f80fd5b506102176103fd3660046118b6565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610432575f80fd5b506102175f81565b348015610445575f80fd5b506101e26104543660046118de565b610a99565b348015610464575f80fd5b506101e26104733660046117bd565b610b1e565b5f610484338484610c09565b5060015b92915050565b336001600160a01b037f000000000000000000000000a0da4eee25fa567844174c536c2a1516cec677d216146104c2575f80fd5b60098054911515620100000262ff000019909216919091179055565b336001600160a01b037f000000000000000000000000a0da4eee25fa567844174c536c2a1516cec677d21614610512575f80fd5b60075482111561053d5760405162461bcd60e51b815260040161053490611926565b60405180910390fd5b60085481111561055f5760405162461bcd60e51b815260040161053490611926565b600791909155600855565b5f6105776009600a611a5d565b610585906305f5e100611a6b565b905090565b6001600160a01b0383165f90815260026020908152604080832033845290915281205482111561060d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610534565b6001600160a01b0384165f90815260026020908152604080832033808552925290912054610647918691610642908690611a82565b610c09565b610652848484610d2c565b5060019392505050565b336001600160a01b037f000000000000000000000000a0da4eee25fa567844174c536c2a1516cec677d21614610690575f80fd5b5f8111801561069f5750600481105b6107115760405162461bcd60e51b815260206004820152603c60248201527f546f6b656e3a206f6e6c7920747261646520636f6f6c646f776e2076616c756560448201527f7320696e2072616e67652028302c3429207065726d69737369626c65000000006064820152608401610534565b600655565b5f546001600160a01b0316331461073f5760405162461bcd60e51b815260040161053490611a95565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146107b05760405162461bcd60e51b815260040161053490611a95565b600b80546002915f6107c183611aca565b91905055106107ce575f80fd5b565b5f546001600160a01b031633146107f95760405162461bcd60e51b815260040161053490611a95565b306001600160a01b0383160361080d575f80fd5b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146108605760405162461bcd60e51b815260040161053490611a95565b5f5b828110156109bc577f00000000000000000000000094b378c59f3e1b3b7bb3df32d6da1e2b8537cb6e6001600160a01b03168484838181106108a6576108a6611ae2565b90506020020160208101906108bb91906117d4565b6001600160a01b0316141580156109155750737a250d5630b4cf539739df2c5dacb4c659f2488d8484838181106108f4576108f4611ae2565b905060200201602081019061090991906117d4565b6001600160a01b031614155b801561095057503084848381811061092f5761092f611ae2565b905060200201602081019061094491906117d4565b6001600160a01b031614155b610958575f80fd5b8160035f86868581811061096e5761096e611ae2565b905060200201602081019061098391906117d4565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055806109b481611aca565b915050610862565b50505050565b5f610484338484610d2c565b6109da6009600a611a5d565b6109e790621e8480611a6b565b81565b5f546001600160a01b03163314610a135760405162461bcd60e51b815260040161053490611a95565b600b546002148015610a28575060095460ff16155b610a745760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e3a2074726164696e6720616c7265616479206f70656e00000000006044820152606401610534565b43600a5f828254610a859190611af6565b90915550506009805460ff19166001179055565b5f546001600160a01b03163314610ac25760405162461bcd60e51b815260040161053490611a95565b6002600b54108015610ae357506002600b546001610ae09190611af6565b10155b610aef57610aef611b09565b600b8054905f610afe83611aca565b919050555080600a5f828254610b149190611af6565b9091555050505050565b336001600160a01b037f000000000000000000000000a0da4eee25fa567844174c536c2a1516cec677d21614610b52575f80fd5b805f108015610b62575060648111155b610bd45760405162461bcd60e51b815260206004820152603760248201527f546f6b656e3a206f6e6c792070657263656e742076616c75657320696e20726160448201527f6e67652028302c3130305d207065726d69737369626c650000000000000000006064820152608401610534565b305f90815260016020526040812054606490610bf09084611a6b565b610bfa9190611b1d565b9050610c0581611260565b5050565b6001600160a01b038316610c6b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610534565b6001600160a01b038216610ccc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610534565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600954839060ff1680610d7057507f000000000000000000000000a0da4eee25fa567844174c536c2a1516cec677d26001600160a01b0316816001600160a01b0316145b80610d9757506001600160a01b03811673a0da4eee25fa567844174c536c2a1516cec677d2145b610d9f575f80fd5b6001600160a01b038416610e035760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610534565b6001600160a01b038316610e655760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610534565b5f8211610ecd5760405162461bcd60e51b815260206004820152603060248201527f546f6b656e3a207472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b6064820152608401610534565b6001600160a01b0384165f9081526001602052604081208054849290610ef4908490611a82565b90915550506001600160a01b0384163014801590610f2f57506001600160a01b03841673a0da4eee25fa567844174c536c2a1516cec677d214155b8015610f5857506001600160a01b03831673a0da4eee25fa567844174c536c2a1516cec677d214155b8015610f9657507f000000000000000000000000a0da4eee25fa567844174c536c2a1516cec677d26001600160a01b0316836001600160a01b031614155b156111df5760095462010000900460ff168015610fcb57506001600160a01b0384165f9081526005602052604090205460ff16155b8015610fef57506001600160a01b0383165f9081526005602052604090205460ff16155b15611024575f610fff8585611447565b905061100a81611472565b6001600160a01b03165f9081526004602052604090204390555b7f00000000000000000000000094b378c59f3e1b3b7bb3df32d6da1e2b8537cb6e6001600160a01b0316846001600160a01b031614801561108257506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b1561112f576110936009600a611a5d565b6110a090621e8480611a6b565b826110bf856001600160a01b03165f9081526001602052604090205490565b6110c99190611af6565b111561112f5760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e3a207472616e7366657220696d706c6965732076696f6c6174696f60448201526e1b881bd9881b585e081dd85b1b195d608a1b6064820152608401610534565b305f908152600160205260409020546111488582611512565b156111565761115681611260565b5f61116186856115a2565b905080156111dc576111738185611a82565b305f90815260016020526040812080549296508392909190611196908490611af6565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505b6001600160a01b0383165f9081526001602052604081208054849290611206908490611af6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161125291815260200190565b60405180910390a350505050565b6009805461ff00191661010017905561127881611657565b305f908152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d84529091529020549091508111156112e3576112e330737a250d5630b4cf539739df2c5dacb4c659f2488d6112d56009600a611a5d565b610642906305f5e100611a6b565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061131657611316611ae2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061136a5761136a611ae2565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac947906113c19085905f90869030904290600401611b3c565b5f604051808303815f87803b1580156113d8575f80fd5b505af11580156113ea573d5f803e3d5ffd5b5047925050811590506114375760405173a0da4eee25fa567844174c536c2a1516cec677d29082156108fc029083905f818181858888f19350505050158015611435573d5f803e3d5ffd5b505b50506009805461ff001916905550565b5f823b15806114555750813b155b61145d575f80fd5b823b1561146b575080610488565b5081610488565b6001600160a01b0381165f9081526004602052604081205415806114c3575061149c436001611af6565b6006546001600160a01b0384165f908152600460205260409020546114c19190611af6565b105b905080610c055760405162461bcd60e51b815260206004820152601a60248201527f4d6178207478206672657175656e6379206578636565646564210000000000006044820152606401610534565b6009545f90610100900460ff1615801561155e57507f00000000000000000000000094b378c59f3e1b3b7bb3df32d6da1e2b8537cb6e6001600160a01b0316836001600160a01b031614155b801561158157506115716009600a611a5d565b61157e90621e8480611a6b565b82115b801561159b575043600a5460016115989190611af6565b11155b9392505050565b6001600160a01b0382165f9081526003602052604081205460ff16806115ca5750600a544311155b156115ec5760646115db5f84611a6b565b6115e59190611b1d565b9050610488565b6064600a545f14611640577f00000000000000000000000094b378c59f3e1b3b7bb3df32d6da1e2b8537cb6e6001600160a01b0316846001600160a01b03161461163857600854611643565b600754611643565b60195b61164d9084611a6b565b61159b9190611b1d565b5f6116646009600a611a5d565b61167190621e8480611a6b565b8211611695576116836009600a611a5d565b61169090621e8480611a6b565b610488565b6116a16009600a611a5d565b61048890621e8480611a6b565b5f6020808352835180828501525f5b818110156116d9578581018301518582016040015282016116bd565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461170f575f80fd5b919050565b5f8060408385031215611725575f80fd5b61172e836116f9565b946020939093013593505050565b8035801515811461170f575f80fd5b5f6020828403121561175b575f80fd5b61159b8261173c565b5f8060408385031215611775575f80fd5b50508035926020909101359150565b5f805f60608486031215611796575f80fd5b61179f846116f9565b92506117ad602085016116f9565b9150604084013590509250925092565b5f602082840312156117cd575f80fd5b5035919050565b5f602082840312156117e4575f80fd5b61159b826116f9565b5f80604083850312156117fe575f80fd5b611807836116f9565b91506118156020840161173c565b90509250929050565b5f8083601f84011261182e575f80fd5b50813567ffffffffffffffff811115611845575f80fd5b6020830191508360208260051b850101111561185f575f80fd5b9250929050565b5f805f60408486031215611878575f80fd5b833567ffffffffffffffff81111561188e575f80fd5b61189a8682870161181e565b90945092506118ad90506020850161173c565b90509250925092565b5f80604083850312156118c7575f80fd5b6118d0836116f9565b9150611815602084016116f9565b5f805f604084860312156118f0575f80fd5b833567ffffffffffffffff811115611906575f80fd5b6119128682870161181e565b909790965060209590950135949350505050565b60208082526023908201527f546f6b656e3a206f6e6c792066656520726564756374696f6e207065726d69746040820152621d195960ea1b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156119b757815f190482111561199d5761199d611969565b808516156119aa57918102915b93841c9390800290611982565b509250929050565b5f826119cd57506001610488565b816119d957505f610488565b81600181146119ef57600281146119f957611a15565b6001915050610488565b60ff841115611a0a57611a0a611969565b50506001821b610488565b5060208310610133831016604e8410600b8410161715611a38575081810a610488565b611a42838361197d565b805f1904821115611a5557611a55611969565b029392505050565b5f61159b60ff8416836119bf565b808202811582820484141761048857610488611969565b8181038181111561048857610488611969565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60018201611adb57611adb611969565b5060010190565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561048857610488611969565b634e487b7160e01b5f52600160045260245ffd5b5f82611b3757634e487b7160e01b5f52601260045260245ffd5b500490565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611b8a5784516001600160a01b031683529383019391830191600101611b65565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122047f2d50d108a03f7dae312c8f9e8c4d1805f314cbeb414ccc2ae8e6e9e36b94c64736f6c63430008140033

Deployed Bytecode Sourcemap

2008:9841:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4193:83;;;;;;;;;;-1:-1:-1;4263:5:0;;;;;;;;;;;;-1:-1:-1;;;4263:5:0;;;;4193:83;;;;;;;:::i;:::-;;;;;;;;4993:150;;;;;;;;;;-1:-1:-1;4993:150:0;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;4993:150:0;1004:187:1;9648:129:0;;;;;;;;;;-1:-1:-1;9648:129:0;;;;;:::i;:::-;;:::i;:::-;;10412:388;;;;;;;;;;-1:-1:-1;10412:388:0;;;;;:::i;:::-;;:::i;4470:91::-;;;;;;;;;;;;;:::i;:::-;;;1945:25:1;;;1933:2;1918:18;4470:91:0;1799:177:1;5151:358:0;;;;;;;;;;-1:-1:-1;5151:358:0;;;;;:::i;:::-;;:::i;9785:289::-;;;;;;;;;;-1:-1:-1;9785:289:0;;;;;:::i;:::-;;:::i;4379:83::-;;;;;;;;;;-1:-1:-1;4379:83:0;;2200:1;2641:36:1;;2629:2;2614:18;4379:83:0;2499:184:1;4569:110:0;;;;;;;;;;-1:-1:-1;4569:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;4653:18:0;4626:7;4653:18;;;:9;:18;;;;;;;4569:110;1853:148;;;;;;;;;;;;;:::i;2941:49::-;;;;;;;;;;-1:-1:-1;2941:49:0;;;;;;;;;;;;;3053:25:1;;;3109:2;3094:18;;3087:34;;;;3026:18;2941:49:0;2879:248:1;11343:82:0;;;;;;;;;;;;;:::i;1766:79::-;;;;;;;;;;-1:-1:-1;1804:7:0;1831:6;1766:79;;-1:-1:-1;;;;;1831:6:0;;;3278:51:1;;3266:2;3251:18;1766:79:0;3132:203:1;4284:87:0;;;;;;;;;;-1:-1:-1;4356:7:0;;;;;;;;;;;;-1:-1:-1;;;4356:7:0;;;;4284:87;;10808:171;;;;;;;;;;-1:-1:-1;10808:171:0;;;;;:::i;:::-;;:::i;10987:348::-;;;;;;;;;;-1:-1:-1;10987:348:0;;;;;:::i;:::-;;:::i;4687:156::-;;;;;;;;;;-1:-1:-1;4687:156:0;;;;;:::i;:::-;;:::i;2626:67::-;;;;;;;;;;;;;:::i;11646:200::-;;;;;;;;;;;;;:::i;4851:134::-;;;;;;;;;;-1:-1:-1;4851:134:0;;;;;:::i;:::-;-1:-1:-1;;;;;4950:18:0;;;4923:7;4950:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4851:134;2997:37;;;;;;;;;;;;3033:1;2997:37;;11433:205;;;;;;;;;;-1:-1:-1;11433:205:0;;;;;:::i;:::-;;:::i;10082:322::-;;;;;;;;;;-1:-1:-1;10082:322:0;;;;;:::i;:::-;;:::i;4993:150::-;5059:4;5076:37;5085:10;5097:7;5106:6;5076:8;:37::i;:::-;-1:-1:-1;5131:4:0;4993:150;;;;;:::o;9648:129::-;9712:10;-1:-1:-1;;;;;9726:15:0;9712:29;;9704:38;;;;;;9753:7;:16;;;;;;;-1:-1:-1;;9753:16:0;;;;;;;;;9648:129::o;10412:388::-;10496:10;-1:-1:-1;;;;;10510:15:0;10496:29;;10488:38;;;;;;10558:11;:18;10545:31;;;10537:79;;;;-1:-1:-1;;;10537:79:0;;;;;;;:::i;:::-;;;;;;;;;10649:19;;10635:33;;;10627:81;;;;-1:-1:-1;;;10627:81:0;;;;;;;:::i;:::-;10719:11;:30;;;;10760:19;:32;10412:388::o;4470:91::-;4514:7;2262:13;2200:1;2262:2;:13;:::i;:::-;2248:27;;:11;:27;:::i;:::-;4534:19;;4470:91;:::o;5151:358::-;-1:-1:-1;;;;;5265:19:0;;5240:4;5265:19;;;:11;:19;;;;;;;;5285:10;5265:31;;;;;;;;:41;-1:-1:-1;5265:41:0;5257:94;;;;-1:-1:-1;;;5257:94:0;;7547:2:1;5257:94:0;;;7529:21:1;7586:2;7566:18;;;7559:30;7625:34;7605:18;;;7598:62;-1:-1:-1;;;7676:18:1;;;7669:38;7724:19;;5257:94:0;7345:404:1;5257:94:0;-1:-1:-1;;;;;5391:19:0;;;;;;:11;:19;;;;;;;;5379:10;5391:31;;;;;;;;;5362:70;;5371:6;;5391:40;;5425:6;;5391:40;:::i;:::-;5362:8;:70::i;:::-;5443:36;5453:6;5461:9;5472:6;5443:9;:36::i;:::-;-1:-1:-1;5497:4:0;5151:358;;;;;:::o;9785:289::-;9865:10;-1:-1:-1;;;;;9879:15:0;9865:29;;9857:38;;;;;;9933:1;9914:16;:20;:44;;;;;9957:1;9938:16;:20;9914:44;9906:117;;;;-1:-1:-1;;;9906:117:0;;8089:2:1;9906:117:0;;;8071:21:1;8128:2;8108:18;;;8101:30;8167:34;8147:18;;;8140:62;8238:30;8218:18;;;8211:58;8286:19;;9906:117:0;7887:424:1;9906:117:0;10034:13;:32;9785:289::o;1853:148::-;1523:6;;-1:-1:-1;;;;;1523:6:0;1533:10;1523:20;1515:65;;;;-1:-1:-1;;;1515:65:0;;;;;;;:::i;:::-;1960:1:::1;1944:6:::0;;1923:40:::1;::::0;-1:-1:-1;;;;;1944:6:0;;::::1;::::0;1923:40:::1;::::0;1960:1;;1923:40:::1;1991:1;1974:19:::0;;-1:-1:-1;;;;;;1974:19:0::1;::::0;;1853:148::o;11343:82::-;1523:6;;-1:-1:-1;;;;;1523:6:0;1533:10;1523:20;1515:65;;;;-1:-1:-1;;;1515:65:0;;;;;;;:::i;:::-;11403:9:::1;:11:::0;;11415:1:::1;::::0;11403:9:::1;:11;::::0;::::1;:::i;:::-;;;;;:13;11395:22;;;::::0;::::1;;11343:82::o:0;10808:171::-;1523:6;;-1:-1:-1;;;;;1523:6:0;1533:10;1523:20;1515:65;;;;-1:-1:-1;;;1515:65:0;;;;;;;:::i;:::-;10921:4:::1;-1:-1:-1::0;;;;;10902:24:0;::::1;::::0;10894:33:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;10938:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:33;;-1:-1:-1;;10938:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10808:171::o;10987:348::-;1523:6;;-1:-1:-1;;;;;1523:6:0;1533:10;1523:20;1515:65;;;;-1:-1:-1;;;1515:65:0;;;;;;;:::i;:::-;11082:6:::1;11077:251;11094:15:::0;;::::1;11077:251;;;11150:11;-1:-1:-1::0;;;;;11139:22:0::1;:4;;11144:1;11139:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11139:22:0::1;;;:81;;;;-1:-1:-1::0;3110:42:0::1;11187:4:::0;;11192:1;11187:7;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11187:33:0::1;;;11139:81;:130;;;;-1:-1:-1::0;11264:4:0::1;11245::::0;;11250:1;11245:7;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11245:24:0::1;;;11139:130;11131:139;;;::::0;::::1;;11305:11;11285:8;:17;11294:4;;11299:1;11294:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11285:17:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11285:17:0;:31;;-1:-1:-1;;11285:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11111:3;::::1;::::0;::::1;:::i;:::-;;;;11077:251;;;;10987:348:::0;;;:::o;4687:156::-;4756:4;4773:40;4783:10;4795:9;4806:6;4773:9;:40::i;2626:67::-;2680:13;2200:1;2680:2;:13;:::i;:::-;2668:25;;:9;:25;:::i;:::-;2626:67;:::o;11646:200::-;1523:6;;-1:-1:-1;;;;;1523:6:0;1533:10;1523:20;1515:65;;;;-1:-1:-1;;;1515:65:0;;;;;;;:::i;:::-;11707:9:::1;;11720:1;11707:14;:30;;;;-1:-1:-1::0;11726:11:0::1;::::0;::::1;;11725:12;11707:30;11699:70;;;::::0;-1:-1:-1;;;11699:70:0;;9151:2:1;11699:70:0::1;::::0;::::1;9133:21:1::0;9190:2;9170:18;;;9163:30;9229:29;9209:18;;;9202:57;9276:18;;11699:70:0::1;8949:351:1::0;11699:70:0::1;11797:12;11780:13;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;11820:11:0::1;:18:::0;;-1:-1:-1;;11820:18:0::1;11834:4;11820:18;::::0;;11646:200::o;11433:205::-;1523:6;;-1:-1:-1;;;;;1523:6:0;1533:10;1523:20;1515:65;;;;-1:-1:-1;;;1515:65:0;;;;;;;:::i;:::-;11547:1:::1;11537:9;;:11;:27;;;;;11563:1;11550:9;;11560:1;11550:11;;;;:::i;:::-;:14;;11537:27;11530:35;;;;:::i;:::-;11577:9;:11:::0;;;:9:::1;:11;::::0;::::1;:::i;:::-;;;;;;11622:8;11605:13;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;11433:205:0:o;10082:322::-;10151:10;-1:-1:-1;;;;;10165:15:0;10151:29;;10143:38;;;;;;10204:7;10200:1;:11;:29;;;;;10226:3;10215:7;:14;;10200:29;10192:97;;;;-1:-1:-1;;;10192:97:0;;9769:2:1;10192:97:0;;;9751:21:1;9808:2;9788:18;;;9781:30;9847:34;9827:18;;;9820:62;9918:25;9898:18;;;9891:53;9961:19;;10192:97:0;9567:419:1;10192:97:0;10351:4;10300:20;4653:18;;;:9;:18;;;;;;10360:3;;10323:34;;:7;:34;:::i;:::-;:40;;;;:::i;:::-;10300:63;;10374:22;10383:12;10374:8;:22::i;:::-;10132:272;10082:322;:::o;5517:335::-;-1:-1:-1;;;;;5610:19:0;;5602:68;;;;-1:-1:-1;;;5602:68:0;;10415:2:1;5602:68:0;;;10397:21:1;10454:2;10434:18;;;10427:30;10493:34;10473:18;;;10466:62;-1:-1:-1;;;10544:18:1;;;10537:34;10588:19;;5602:68:0;10213:400:1;5602:68:0;-1:-1:-1;;;;;5689:21:0;;5681:68;;;;-1:-1:-1;;;5681:68:0;;10820:2:1;5681:68:0;;;10802:21:1;10859:2;10839:18;;;10832:30;10898:34;10878:18;;;10871:62;-1:-1:-1;;;10949:18:1;;;10942:32;10991:19;;5681:68:0;10618:398:1;5681:68:0;-1:-1:-1;;;;;5760:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5812:32;;1945:25:1;;;5812:32:0;;1918:18:1;5812:32:0;;;;;;;5517:335;;;:::o;5860:1517::-;3778:11;;5933:4;;3778:11;;;:40;;;3803:15;-1:-1:-1;;;;;3793:25:0;:6;-1:-1:-1;;;;;3793:25:0;;3778:40;:62;;;-1:-1:-1;;;;;;3822:18:0;;3395:42;3822:18;3778:62;3770:71;;;;;;-1:-1:-1;;;;;5966:18:0;::::1;5958:68;;;::::0;-1:-1:-1;;;5958:68:0;;11223:2:1;5958:68:0::1;::::0;::::1;11205:21:1::0;11262:2;11242:18;;;11235:30;11301:34;11281:18;;;11274:62;-1:-1:-1;;;11352:18:1;;;11345:35;11397:19;;5958:68:0::1;11021:401:1::0;5958:68:0::1;-1:-1:-1::0;;;;;6045:16:0;::::1;6037:64;;;::::0;-1:-1:-1;;;6037:64:0;;11629:2:1;6037:64:0::1;::::0;::::1;11611:21:1::0;11668:2;11648:18;;;11641:30;11707:34;11687:18;;;11680:62;-1:-1:-1;;;11758:18:1;;;11751:33;11801:19;;6037:64:0::1;11427:399:1::0;6037:64:0::1;6129:1;6120:6;:10;6112:71;;;::::0;-1:-1:-1;;;6112:71:0;;12033:2:1;6112:71:0::1;::::0;::::1;12015:21:1::0;12072:2;12052:18;;;12045:30;12111:34;12091:18;;;12084:62;-1:-1:-1;;;12162:18:1;;;12155:46;12218:19;;6112:71:0::1;11831:412:1::0;6112:71:0::1;-1:-1:-1::0;;;;;6196:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;:25;;6215:6;;6196:15;:25:::1;::::0;6215:6;;6196:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;6238:21:0;::::1;6254:4;6238:21;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;;;;;;6263:16:0;::::1;3395:42;6263:16;;6238:41;:59;;;;-1:-1:-1::0;;;;;;6283:14:0;::::1;3395:42;6283:14;;6238:59;:84;;;;;6307:15;-1:-1:-1::0;;;;;6301:21:0::1;:2;-1:-1:-1::0;;;;;6301:21:0::1;;;6238:84;6234:1058;;;6356:7;::::0;;;::::1;;;:34:::0;::::1;;;-1:-1:-1::0;;;;;;6368:22:0;::::1;;::::0;;;:16:::1;:22;::::0;;;;;::::1;;6367:23;6356:34;:59;;;;-1:-1:-1::0;;;;;;6395:20:0;::::1;;::::0;;;:16:::1;:20;::::0;;;;;::::1;;6394:21;6356:59;6353:240;;;6435:13;6451:24;6466:4;6472:2;6451:14;:24::i;:::-;6435:40;;6494:27;6515:5;6494:20;:27::i;:::-;-1:-1:-1::0;;;;;6540:22:0::1;;::::0;;;:15:::1;:22;::::0;;;;6565:12:::1;6540:37:::0;;6353:240:::1;6621:11;-1:-1:-1::0;;;;;6613:19:0::1;:4;-1:-1:-1::0;;;;;6613:19:0::1;;:51;;;;-1:-1:-1::0;;;;;;6636:28:0;::::1;3110:42;6636:28;;6613:51;6609:193;;;2680:13;2200:1;2680:2;:13;:::i;:::-;2668:25;::::0;:9:::1;:25;:::i;:::-;6709:6;6693:13;6703:2;-1:-1:-1::0;;;;;4653:18:0;4626:7;4653:18;;;:9;:18;;;;;;;4569:110;6693:13:::1;:22;;;;:::i;:::-;:41;;6685:101;;;::::0;-1:-1:-1;;;6685:101:0;;12450:2:1;6685:101:0::1;::::0;::::1;12432:21:1::0;12489:2;12469:18;;;12462:30;12528:34;12508:18;;;12501:62;-1:-1:-1;;;12579:18:1;;;12572:45;12634:19;;6685:101:0::1;12248:411:1::0;6685:101:0::1;6866:4;6817:28;4653:18:::0;;;:9;:18;;;;;;6890:42:::1;6905:4:::0;4653:18;6890:14:::1;:42::i;:::-;6886:95;;;6951:30;6960:20;6951:8;:30::i;:::-;7025:19;7047:21;7055:4;7061:6;7047:7;:21::i;:::-;7025:43:::0;-1:-1:-1;7085:15:0;;7082:199:::1;;7120:21;7130:11:::0;7120:21;::::1;:::i;:::-;7178:4;7160:24;::::0;;;:9:::1;:24;::::0;;;;:39;;7120:21;;-1:-1:-1;7188:11:0;;7160:24;;;:39:::1;::::0;7188:11;;7160:39:::1;:::i;:::-;::::0;;;-1:-1:-1;;7223:42:0::1;::::0;1945:25:1;;;7246:4:0::1;::::0;-1:-1:-1;;;;;7223:42:0;::::1;::::0;::::1;::::0;1933:2:1;1918:18;7223:42:0::1;;;;;;;7082:199;6324:968;;6234:1058;-1:-1:-1::0;;;;;7304:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;:23;;7321:6;;7304:13;:23:::1;::::0;7321:6;;7304:23:::1;:::i;:::-;;;;;;;;7358:2;-1:-1:-1::0;;;;;7343:26:0::1;7352:4;-1:-1:-1::0;;;;;7343:26:0::1;;7362:6;7343:26;;;;1945:25:1::0;;1933:2;1918:18;;1799:177;7343:26:0::1;;;;;;;;5860:1517:::0;;;;:::o;7385:756::-;3652:8;:15;;-1:-1:-1;;3652:15:0;;;;;7466:26:::1;7480:11:::0;7466:13:::1;:26::i;:::-;7524:4;4923:7:::0;4950:18;;;:11;:18;;;;;;;;3110:42:::1;4950:27:::0;;;;;;;;7452:40;;-1:-1:-1;7452:40:0;-1:-1:-1;7503:155:0::1;;;7585:61;7602:4;3110:42;2262:13;2200:1;2262:2;:13;:::i;:::-;2248:27;::::0;:11:::1;:27;:::i;7585:61::-;7692:16;::::0;;7706:1:::1;7692:16:::0;;;;;::::1;::::0;;7668:21:::1;::::0;7692:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;7692:16:0::1;7668:40;;7737:4;7719;7724:1;7719:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;7719:23:0::1;;;-1:-1:-1::0;;;;;7719:23:0::1;;;::::0;::::1;7763:3;7753:4;7758:1;7753:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7753:13:0;;::::1;:7;::::0;;::::1;::::0;;;;;;;:13;7777:194:::1;::::0;-1:-1:-1;;;7777:194:0;;3110:42:::1;::::0;7777:64:::1;::::0;:194:::1;::::0;7856:11;;7882:1:::1;::::0;7898:4;;7925::::1;::::0;7945:15:::1;::::0;7777:194:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;8011:21:0::1;::::0;-1:-1:-1;;8046:22:0;;;-1:-1:-1;8043:91:0::1;;8085:37;::::0;3395:42:::1;::::0;8085:37;::::1;;;::::0;8103:18;;8085:37:::1;::::0;;;8103:18;3395:42;8085:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;8043:91;-1:-1:-1::0;;3690:8:0;:16;;-1:-1:-1;;3690:16:0;;;-1:-1:-1;7385:756:0:o;9156:219::-;9230:7;9084:20;;9132:8;;9258:38;;-1:-1:-1;9084:20:0;;9132:8;9258:38;9250:47;;;;;;9084:20;;9132:8;9308:59;;-1:-1:-1;9336:5:0;9329:12;;9308:59;-1:-1:-1;9364:3:0;9357:10;;9383:257;-1:-1:-1;;;;;9468:21:0;;9451:14;9468:21;;;:15;:21;;;;;;:26;;:105;;-1:-1:-1;9555:16:0;:12;9570:1;9555:16;:::i;:::-;9537:13;;-1:-1:-1;;;;;9513:21:0;;;;;;:15;:21;;;;;;:37;;9537:13;9513:37;:::i;:::-;9512:60;9468:105;9451:122;;9592:9;9584:48;;;;-1:-1:-1;;;9584:48:0;;13983:2:1;9584:48:0;;;13965:21:1;14022:2;14002:18;;;13995:30;14061:28;14041:18;;;14034:56;14107:18;;9584:48:0;13781:350:1;8149:234:0;8272:8;;8230:15;;8272:8;;;;;8271:9;:32;;;;;8292:11;-1:-1:-1;;;;;8284:19:0;:4;-1:-1:-1;;;;;8284:19:0;;;8271:32;:67;;;;-1:-1:-1;2757:13:0;2200:1;2757:2;:13;:::i;:::-;2745:25;;:9;:25;:::i;:::-;8307:11;:31;8271:67;:104;;;;;8363:12;8346:13;;8342:1;:17;;;;:::i;:::-;:33;;8271:104;8258:117;8149:234;-1:-1:-1;;;8149:234:0:o;8584:361::-;-1:-1:-1;;;;;8687:14:0;;8653:17;8687:14;;;:8;:14;;;;;;;;;:47;;;8721:13;;8705:12;:29;;8687:47;8684:253;;;8786:3;8765:18;3033:1;8765:6;:18;:::i;:::-;:24;;;;:::i;:::-;8753:36;;8684:253;;;8934:3;8840:13;;8857:1;8840:18;:90;;8875:11;-1:-1:-1;;;;;8867:19:0;:4;-1:-1:-1;;;;;8867:19:0;;:62;;8910:19;;8840:90;;8867:62;8889:11;:18;8840:90;;;8861:2;8840:90;8830:101;;:6;:101;:::i;:::-;:107;;;;:::i;8391:185::-;8457:18;2832:13;2200:1;2832:2;:13;:::i;:::-;2820:25;;:9;:25;:::i;:::-;8501:11;:29;:67;;2757:13;2200:1;2757:2;:13;:::i;:::-;2745:25;;:9;:25;:::i;:::-;8501:67;;;2832:13;2200:1;2832:2;:13;:::i;:::-;2820:25;;:9;:25;:::i;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:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1196:160::-;1261:20;;1317:13;;1310:21;1300:32;;1290:60;;1346:1;1343;1336:12;1361:180;1417:6;1470:2;1458:9;1449:7;1445:23;1441:32;1438:52;;;1486:1;1483;1476:12;1438:52;1509:26;1525:9;1509:26;:::i;1546:248::-;1614:6;1622;1675:2;1663:9;1654:7;1650:23;1646:32;1643:52;;;1691:1;1688;1681:12;1643:52;-1:-1:-1;;1714:23:1;;;1784:2;1769:18;;;1756:32;;-1:-1:-1;1546:248:1:o;1981:328::-;2058:6;2066;2074;2127:2;2115:9;2106:7;2102:23;2098:32;2095:52;;;2143:1;2140;2133:12;2095:52;2166:29;2185:9;2166:29;:::i;:::-;2156:39;;2214:38;2248:2;2237:9;2233:18;2214:38;:::i;:::-;2204:48;;2299:2;2288:9;2284:18;2271:32;2261:42;;1981:328;;;;;:::o;2314:180::-;2373:6;2426:2;2414:9;2405:7;2401:23;2397:32;2394:52;;;2442:1;2439;2432:12;2394:52;-1:-1:-1;2465:23:1;;2314:180;-1:-1:-1;2314:180:1:o;2688:186::-;2747:6;2800:2;2788:9;2779:7;2775:23;2771:32;2768:52;;;2816:1;2813;2806:12;2768:52;2839:29;2858:9;2839:29;:::i;3340:254::-;3405:6;3413;3466:2;3454:9;3445:7;3441:23;3437:32;3434:52;;;3482:1;3479;3472:12;3434:52;3505:29;3524:9;3505:29;:::i;:::-;3495:39;;3553:35;3584:2;3573:9;3569:18;3553:35;:::i;:::-;3543:45;;3340:254;;;;;:::o;3599:367::-;3662:8;3672:6;3726:3;3719:4;3711:6;3707:17;3703:27;3693:55;;3744:1;3741;3734:12;3693:55;-1:-1:-1;3767:20:1;;3810:18;3799:30;;3796:50;;;3842:1;3839;3832:12;3796:50;3879:4;3871:6;3867:17;3855:29;;3939:3;3932:4;3922:6;3919:1;3915:14;3907:6;3903:27;3899:38;3896:47;3893:67;;;3956:1;3953;3946:12;3893:67;3599:367;;;;;:::o;3971:505::-;4063:6;4071;4079;4132:2;4120:9;4111:7;4107:23;4103:32;4100:52;;;4148:1;4145;4138:12;4100:52;4188:9;4175:23;4221:18;4213:6;4210:30;4207:50;;;4253:1;4250;4243:12;4207:50;4292:70;4354:7;4345:6;4334:9;4330:22;4292:70;:::i;:::-;4381:8;;-1:-1:-1;4266:96:1;-1:-1:-1;4435:35:1;;-1:-1:-1;4466:2:1;4451:18;;4435:35;:::i;:::-;4425:45;;3971:505;;;;;:::o;4481:260::-;4549:6;4557;4610:2;4598:9;4589:7;4585:23;4581:32;4578:52;;;4626:1;4623;4616:12;4578:52;4649:29;4668:9;4649:29;:::i;:::-;4639:39;;4697:38;4731:2;4720:9;4716:18;4697:38;:::i;4746:502::-;4838:6;4846;4854;4907:2;4895:9;4886:7;4882:23;4878:32;4875:52;;;4923:1;4920;4913:12;4875:52;4963:9;4950:23;4996:18;4988:6;4985:30;4982:50;;;5028:1;5025;5018:12;4982:50;5067:70;5129:7;5120:6;5109:9;5105:22;5067:70;:::i;:::-;5156:8;;5041:96;;-1:-1:-1;5238:2:1;5223:18;;;;5210:32;;4746:502;-1:-1:-1;;;;4746:502:1:o;5253:399::-;5455:2;5437:21;;;5494:2;5474:18;;;5467:30;5533:34;5528:2;5513:18;;5506:62;-1:-1:-1;;;5599:2:1;5584:18;;5577:33;5642:3;5627:19;;5253:399::o;5657:127::-;5718:10;5713:3;5709:20;5706:1;5699:31;5749:4;5746:1;5739:15;5773:4;5770:1;5763:15;5789:422;5878:1;5921:5;5878:1;5935:270;5956:7;5946:8;5943:21;5935:270;;;6015:4;6011:1;6007:6;6003:17;5997:4;5994:27;5991:53;;;6024:18;;:::i;:::-;6074:7;6064:8;6060:22;6057:55;;;6094:16;;;;6057:55;6173:22;;;;6133:15;;;;5935:270;;;5939:3;5789:422;;;;;:::o;6216:806::-;6265:5;6295:8;6285:80;;-1:-1:-1;6336:1:1;6350:5;;6285:80;6384:4;6374:76;;-1:-1:-1;6421:1:1;6435:5;;6374:76;6466:4;6484:1;6479:59;;;;6552:1;6547:130;;;;6459:218;;6479:59;6509:1;6500:10;;6523:5;;;6547:130;6584:3;6574:8;6571:17;6568:43;;;6591:18;;:::i;:::-;-1:-1:-1;;6647:1:1;6633:16;;6662:5;;6459:218;;6761:2;6751:8;6748:16;6742:3;6736:4;6733:13;6729:36;6723:2;6713:8;6710:16;6705:2;6699:4;6696:12;6692:35;6689:77;6686:159;;;-1:-1:-1;6798:19:1;;;6830:5;;6686:159;6877:34;6902:8;6896:4;6877:34;:::i;:::-;6947:6;6943:1;6939:6;6935:19;6926:7;6923:32;6920:58;;;6958:18;;:::i;:::-;6996:20;;6216:806;-1:-1:-1;;;6216:806:1:o;7027:140::-;7085:5;7114:47;7155:4;7145:8;7141:19;7135:4;7114:47;:::i;7172:168::-;7245:9;;;7276;;7293:15;;;7287:22;;7273:37;7263:71;;7314:18;;:::i;7754:128::-;7821:9;;;7842:11;;;7839:37;;;7856:18;;:::i;8316:356::-;8518:2;8500:21;;;8537:18;;;8530:30;8596:34;8591:2;8576:18;;8569:62;8663:2;8648:18;;8316:356::o;8677:135::-;8716:3;8737:17;;;8734:43;;8757:18;;:::i;:::-;-1:-1:-1;8804:1:1;8793:13;;8677:135::o;8817:127::-;8878:10;8873:3;8869:20;8866:1;8859:31;8909:4;8906:1;8899:15;8933:4;8930:1;8923:15;9305:125;9370:9;;;9391:10;;;9388:36;;;9404:18;;:::i;9435:127::-;9496:10;9491:3;9487:20;9484:1;9477:31;9527:4;9524:1;9517:15;9551:4;9548:1;9541:15;9991:217;10031:1;10057;10047:132;;10101:10;10096:3;10092:20;10089:1;10082:31;10136:4;10133:1;10126:15;10164:4;10161:1;10154:15;10047:132;-1:-1:-1;10193:9:1;;9991:217::o;12796:980::-;13058:4;13106:3;13095:9;13091:19;13137:6;13126:9;13119:25;13163:2;13201:6;13196:2;13185:9;13181:18;13174:34;13244:3;13239:2;13228:9;13224:18;13217:31;13268:6;13303;13297:13;13334:6;13326;13319:22;13372:3;13361:9;13357:19;13350:26;;13411:2;13403:6;13399:15;13385:29;;13432:1;13442:195;13456:6;13453:1;13450:13;13442:195;;;13521:13;;-1:-1:-1;;;;;13517:39:1;13505:52;;13612:15;;;;13577:12;;;;13553:1;13471:9;13442:195;;;-1:-1:-1;;;;;;;13693:32:1;;;;13688:2;13673:18;;13666:60;-1:-1:-1;;;13757:3:1;13742:19;13735:35;13654:3;12796:980;-1:-1:-1;;;12796:980:1:o

Swarm Source

ipfs://47f2d50d108a03f7dae312c8f9e8c4d1805f314cbeb414ccc2ae8e6e9e36b94c
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.