ETH Price: $3,484.22 (+7.30%)
Gas: 9 Gwei

Token

Trade AI (wTAI)
 

Overview

Max Total Supply

100,000,000 wTAI

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
42,582.599952453 wTAI

Value
$0.00
0x6ac2d8ed88998b18582c7766d71a2ece4d20cdbe
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:
TradeAi

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-25
*/

// SPDX-License-Identifier: Unlicensed
/**
    Website: https://tradeai.bot/
    Documentation: https://docs.tradeai.bot/
    Twitter: https://twitter.com/TradeAI_Tao
    Telegram: https://t.me/TradeAIonTao
    Dapp: https://app.tradeai.bot/
**/
pragma solidity 0.8.24;

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

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

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

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

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

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

}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

contract TradeAi is Context, IERC20, Ownable {
    using SafeMath for uint256;
    uint8 private constant _decimals = 9;
    string private constant _name = "Trade AI";
    string private constant _symbol = "wTAI";
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    IUniswapV2Router02 private uniswapV2Router;
    address public uniswapV2Pair;
    uint256 private constant MAX = ~uint256(0);
    uint256 public constant _tTotal = 100_000_000 * 10 ** _decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 30;
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 30;

    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;

    uint256 private _previousredisFee = _redisFee;
    uint256 private _previoustaxFee = _taxFee;

    address payable private _marketingAddress;

    bool private inSwap = false;
    bool private swapEnabled = true;

    uint256 public _maxWalletSize = _tTotal / 200; // 0.5% at launch
    uint256 public _swapTokensAtAmount = _tTotal / 4000;

    bool private tradingOpen = false;

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() {

        _rOwned[_msgSender()] = _rTotal;
        _marketingAddress = payable(msg.sender);
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);//
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingAddress] = true;
        _isExcludedFromFee[address(_uniswapV2Router)] = true;

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

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

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

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

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

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

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

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

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

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

    function tokenFromReflection(uint256 rAmount)
        private
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function removeAllFee() private {
        if (_redisFee == 0 && _taxFee == 0) return;

        _previousredisFee = _redisFee;
        _previoustaxFee = _taxFee;

        _redisFee = 0;
        _taxFee = 0;
    }

    function restoreAllFee() private {
        _redisFee = _previousredisFee;
        _taxFee = _previoustaxFee;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            require(tradingOpen, "TOKEN: This account cannot send tokens until trading is enabled");

            if(to != uniswapV2Pair) {
                require(balanceOf(to) + amount < _maxWalletSize, "TOKEN: Balance exceeds wallet size!");
            }

            if(to == uniswapV2Pair) {
                require(_maxWalletSize < _tTotal, "TOKEN: Balance exceeds wallet size!");
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;

            if (canSwap && !inSwap && from != uniswapV2Pair && swapEnabled && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        bool takeFee = true;

        //Transfer Tokens
        if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
            takeFee = false;
        } else {

            //Set Fee for Buys
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }

            //Set Fee for Sells
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }

        }

        _tokenTransfer(from, to, amount, takeFee);
    }

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

    function sendETHToFee(uint256 amount) private {
        _marketingAddress.transfer(amount);
    }

    function launch() public onlyOwner {
        tradingOpen = true;
    }

    function manualswap() external {
        require(_msgSender() == _marketingAddress);
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();
        _transferStandard(sender, recipient, amount);
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTeam(tTeam);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) =
            _getTValues(tAmount, _redisFee, _taxFee);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) =
            _getRValues(tAmount, tFee, tTeam, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    //Set minimum tokens required to swap.
    function updateMinSwapTokens(uint256 swapTokensAtAmount) public onlyOwner {
        _swapTokensAtAmount = swapTokensAtAmount;
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }

    function removeLimits() external onlyOwner {
        _taxFeeOnBuy = 4;
        _redisFeeOnBuy = 0;
        _taxFeeOnSell = 4;
        _redisFeeOnSell = 0;
    }

    function setMaxWalletSize(uint256 maxWalletSize) public onlyOwner {
        _maxWalletSize = maxWalletSize;
    }

    function setFees(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner {
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
        require(redisFeeOnBuy+taxFeeOnBuy <= 30 &&redisFeeOnSell+taxFeeOnSell <= 30, "Max 30%");
    }
}

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":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","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":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"updateMinSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620004a2565b62000022906305f5e100620004b9565b6200002f905f19620004e7565b6200003c905f19620004fd565b6008555f600a818155601e600b819055600c839055600d819055600e839055600f8190556010929092556011919091556012805461ffff60a01b1916600160a81b17905560c8906200009190600990620004a2565b620000a1906305f5e100620004b9565b620000ad919062000513565b601355610fa0620000c16009600a620004a2565b620000d1906305f5e100620004b9565b620000dd919062000513565b6014556015805460ff19169055348015620000f6575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600854335f8181526003602090815260409182902093909355601280546001600160a01b0319908116909317905560068054737a250d5630b4cf539739df2c5dacb4c659f2488d931683179055805163c45a015560e01b815290519192839263c45a01559260048082019392918290030181865afa158015620001bc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e2919062000529565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000254919062000529565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200029f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002c5919062000529565b600780546001600160a01b0319166001600160a01b039283161790555f80548216815260026020526040808220805460ff1990811660019081179092553084528284208054821683179055601254851684528284208054821683179055938516835291208054909216179055336001600160a01b03165f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200036b6009600a620004a2565b6200037b906305f5e100620004b9565b60405190815260200160405180910390a35062000551565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620003e757815f1904821115620003cb57620003cb62000393565b80851615620003d957918102915b93841c9390800290620003ac565b509250929050565b5f82620003ff575060016200049c565b816200040d57505f6200049c565b8160018114620004265760028114620004315762000451565b60019150506200049c565b60ff84111562000445576200044562000393565b50506001821b6200049c565b5060208310610133831016604e8410600b841016171562000476575081810a6200049c565b620004828383620003a7565b805f190482111562000498576200049862000393565b0290505b92915050565b5f620004b260ff841683620003ef565b9392505050565b80820281158282048414176200049c576200049c62000393565b634e487b7160e01b5f52601260045260245ffd5b5f82620004f857620004f8620004d3565b500690565b818103818111156200049c576200049c62000393565b5f82620005245762000524620004d3565b500490565b5f602082840312156200053a575f80fd5b81516001600160a01b0381168114620004b2575f80fd5b611831806200055f5f395ff3fe60806040526004361061013f575f3560e01c8063715018a6116100b3578063af465a271161006d578063af465a271461037a578063c3c8cd801461038e578063c492f046146103a2578063dd62ed3e146103c1578063ea1644d514610405578063f2fde38b14610424575f80fd5b8063715018a6146102d6578063751039fc146102ea5780638da5cb5b146102fe5780638f9a55c01461031a57806395d89b411461032f578063a9059cbb1461035b575f80fd5b80632cb32354116101045780632cb32354146102125780632fd689e314610231578063313ce5671461024657806349bd5a5e146102615780636fcba3771461029857806370a08231146102b7575f80fd5b806301339c211461014a57806306fdde0314610160578063095ea7b3146101a257806318160ddd146101d157806323b872dd146101f3575f80fd5b3661014657005b5f80fd5b348015610155575f80fd5b5061015e610443565b005b34801561016b575f80fd5b50604080518082019091526008815267547261646520414960c01b60208201525b604051610199919061137a565b60405180910390f35b3480156101ad575f80fd5b506101c16101bc3660046113da565b610484565b6040519015158152602001610199565b3480156101dc575f80fd5b506101e561049a565b604051908152602001610199565b3480156101fe575f80fd5b506101c161020d366004611404565b6104ba565b34801561021d575f80fd5b5061015e61022c366004611442565b610521565b34801561023c575f80fd5b506101e560145481565b348015610251575f80fd5b5060405160098152602001610199565b34801561026c575f80fd5b50600754610280906001600160a01b031681565b6040516001600160a01b039091168152602001610199565b3480156102a3575f80fd5b5061015e6102b2366004611459565b61054f565b3480156102c2575f80fd5b506101e56102d1366004611488565b6105ec565b3480156102e1575f80fd5b5061015e61060d565b3480156102f5575f80fd5b5061015e61067e565b348015610309575f80fd5b505f546001600160a01b0316610280565b348015610325575f80fd5b506101e560135481565b34801561033a575f80fd5b506040805180820190915260048152637754414960e01b602082015261018c565b348015610366575f80fd5b506101c16103753660046113da565b6106bf565b348015610385575f80fd5b506101e56106cb565b348015610399575f80fd5b5061015e6106e8565b3480156103ad575f80fd5b5061015e6103bc3660046114a3565b61071f565b3480156103cc575f80fd5b506101e56103db366004611526565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205490565b348015610410575f80fd5b5061015e61041f366004611442565b6107ac565b34801561042f575f80fd5b5061015e61043e366004611488565b6107da565b5f546001600160a01b031633146104755760405162461bcd60e51b815260040161046c9061155d565b60405180910390fd5b6015805460ff19166001179055565b5f6104903384846108c1565b5060015b92915050565b5f6104a76009600a611686565b6104b5906305f5e100611694565b905090565b5f6104c6848484610921565b6105178433610512856040518060600160405280602881526020016117d4602891396001600160a01b038a165f9081526005602090815260408083203384529091529020549190610c40565b6108c1565b5060019392505050565b5f546001600160a01b0316331461054a5760405162461bcd60e51b815260040161046c9061155d565b601455565b5f546001600160a01b031633146105785760405162461bcd60e51b815260040161046c9061155d565b600a849055600c839055600b829055600d819055601e61059883866116ab565b111580156105b05750601e6105ad82856116ab565b11155b6105e65760405162461bcd60e51b81526020600482015260076024820152664d61782033302560c81b604482015260640161046c565b50505050565b6001600160a01b0381165f9081526003602052604081205461049490610c78565b5f546001600160a01b031633146106365760405162461bcd60e51b815260040161046c9061155d565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146106a75760405162461bcd60e51b815260040161046c9061155d565b6004600b8190555f600a819055600d91909155600c55565b5f610490338484610921565b6106d76009600a611686565b6106e5906305f5e100611694565b81565b6012546001600160a01b0316336001600160a01b031614610707575f80fd5b5f610711306105ec565b905061071c81610cfa565b50565b5f546001600160a01b031633146107485760405162461bcd60e51b815260040161046c9061155d565b5f5b828110156105e6578160025f868685818110610768576107686116be565b905060200201602081019061077d9190611488565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905560010161074a565b5f546001600160a01b031633146107d55760405162461bcd60e51b815260040161046c9061155d565b601355565b5f546001600160a01b031633146108035760405162461bcd60e51b815260040161046c9061155d565b6001600160a01b0381166108685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161046c565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383165f9081526002602052604090205460ff1615801561096157506001600160a01b0382165f9081526002602052604090205460ff16155b15610b3c5760155460ff166109de5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400606482015260840161046c565b6007546001600160a01b03838116911614610a275760135481610a00846105ec565b610a0a91906116ab565b10610a275760405162461bcd60e51b815260040161046c906116d2565b6007546001600160a01b0390811690831603610a7757610a496009600a611686565b610a57906305f5e100611694565b60135410610a775760405162461bcd60e51b815260040161046c906116d2565b5f610a81306105ec565b60145490915081108015908190610aa25750601254600160a01b900460ff16155b8015610abc57506007546001600160a01b03868116911614155b8015610ad15750601254600160a81b900460ff165b8015610af557506001600160a01b0385165f9081526002602052604090205460ff16155b8015610b1957506001600160a01b0384165f9081526002602052604090205460ff16155b15610b3957610b2782610cfa565b478015610b3757610b3747610e6a565b505b50505b6001600160a01b0383165f9081526002602052604090205460019060ff1680610b7c57506001600160a01b0383165f9081526002602052604090205460ff165b80610bae57506007546001600160a01b03858116911614801590610bae57506007546001600160a01b03848116911614155b15610bba57505f610c34565b6007546001600160a01b038581169116148015610be557506006546001600160a01b03848116911614155b15610bf757600a54600e55600b54600f555b6007546001600160a01b038481169116148015610c2257506006546001600160a01b03858116911614155b15610c3457600c54600e55600d54600f555b6105e684848484610ea5565b5f8184841115610c635760405162461bcd60e51b815260040161046c919061137a565b505f610c6f8486611715565b95945050505050565b5f600854821115610cde5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161046c565b5f610ce7610ed3565b9050610cf38382610ef4565b9392505050565b6012805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110610d4057610d406116be565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610d97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dbb9190611728565b81600181518110610dce57610dce6116be565b6001600160a01b039283166020918202929092010152600654610df491309116846108c1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790610e2c9085905f90869030904290600401611743565b5f604051808303815f87803b158015610e43575f80fd5b505af1158015610e55573d5f803e3d5ffd5b50506012805460ff60a01b1916905550505050565b6012546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610ea1573d5f803e3d5ffd5b5050565b80610eb257610eb2610f35565b610ebd848484610f62565b806105e6576105e6601054600e55601154600f55565b5f805f610ede611053565b9092509050610eed8282610ef4565b9250505090565b5f610cf383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506110d4565b600e54158015610f455750600f54155b15610f4c57565b600e8054601055600f80546011555f9182905555565b5f805f805f80610f7187611100565b6001600160a01b038f165f90815260036020526040902054959b50939950919750955093509150610fa29087611155565b6001600160a01b03808b165f9081526003602052604080822093909355908a1681522054610fd09086611196565b6001600160a01b0389165f90815260036020526040902055610ff1816111f4565b610ffb848361123a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161104091815260200190565b60405180910390a3505050505050505050565b6008545f908190816110676009600a611686565b611075906305f5e100611694565b905061109d6110866009600a611686565b611094906305f5e100611694565b60085490610ef4565b8210156110cb576008546110b36009600a611686565b6110c1906305f5e100611694565b9350935050509091565b90939092509050565b5f81836110f45760405162461bcd60e51b815260040161046c919061137a565b505f610c6f84866117b4565b5f805f805f805f805f6111188a600e54600f5461125e565b9250925092505f611127610ed3565b90505f805f6111388e8787876112b0565b919e509c509a509598509396509194505050505091939550919395565b5f610cf383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c40565b5f806111a283856116ab565b905083811015610cf35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161046c565b5f6111fd610ed3565b90505f61120a83836112fc565b305f908152600360205260409020549091506112269082611196565b305f90815260036020526040902055505050565b6008546112479083611155565b6008556009546112579082611196565b6009555050565b5f808080611277606461127189896112fc565b90610ef4565b90505f61128960646112718a896112fc565b90505f6112a08261129a8b86611155565b90611155565b9992985090965090945050505050565b5f8080806112be88866112fc565b90505f6112cb88876112fc565b90505f6112d888886112fc565b90505f6112e98261129a8686611155565b939b939a50919850919650505050505050565b5f825f0361130b57505f610494565b5f6113168385611694565b90508261132385836117b4565b14610cf35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161046c565b5f602080835283518060208501525f5b818110156113a65785810183015185820160400152820161138a565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461071c575f80fd5b5f80604083850312156113eb575f80fd5b82356113f6816113c6565b946020939093013593505050565b5f805f60608486031215611416575f80fd5b8335611421816113c6565b92506020840135611431816113c6565b929592945050506040919091013590565b5f60208284031215611452575f80fd5b5035919050565b5f805f806080858703121561146c575f80fd5b5050823594602084013594506040840135936060013592509050565b5f60208284031215611498575f80fd5b8135610cf3816113c6565b5f805f604084860312156114b5575f80fd5b833567ffffffffffffffff808211156114cc575f80fd5b818601915086601f8301126114df575f80fd5b8135818111156114ed575f80fd5b8760208260051b8501011115611501575f80fd5b60209283019550935050840135801515811461151b575f80fd5b809150509250925092565b5f8060408385031215611537575f80fd5b8235611542816113c6565b91506020830135611552816113c6565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156115e057815f19048211156115c6576115c6611592565b808516156115d357918102915b93841c93908002906115ab565b509250929050565b5f826115f657506001610494565b8161160257505f610494565b816001811461161857600281146116225761163e565b6001915050610494565b60ff84111561163357611633611592565b50506001821b610494565b5060208310610133831016604e8410600b8410161715611661575081810a610494565b61166b83836115a6565b805f190482111561167e5761167e611592565b029392505050565b5f610cf360ff8416836115e8565b808202811582820484141761049457610494611592565b8082018082111561049457610494611592565b634e487b7160e01b5f52603260045260245ffd5b60208082526023908201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696040820152627a652160e81b606082015260800190565b8181038181111561049457610494611592565b5f60208284031215611738575f80fd5b8151610cf3816113c6565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156117935784516001600160a01b03168352938301939183019160010161176e565b50506001600160a01b03969096166060850152505050608001529392505050565b5f826117ce57634e487b7160e01b5f52601260045260245ffd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212209348b19241c27a6f63360ccb7b727230ee879c993ef9e0f4453e16394d33e90464736f6c63430008180033

Deployed Bytecode

0x60806040526004361061013f575f3560e01c8063715018a6116100b3578063af465a271161006d578063af465a271461037a578063c3c8cd801461038e578063c492f046146103a2578063dd62ed3e146103c1578063ea1644d514610405578063f2fde38b14610424575f80fd5b8063715018a6146102d6578063751039fc146102ea5780638da5cb5b146102fe5780638f9a55c01461031a57806395d89b411461032f578063a9059cbb1461035b575f80fd5b80632cb32354116101045780632cb32354146102125780632fd689e314610231578063313ce5671461024657806349bd5a5e146102615780636fcba3771461029857806370a08231146102b7575f80fd5b806301339c211461014a57806306fdde0314610160578063095ea7b3146101a257806318160ddd146101d157806323b872dd146101f3575f80fd5b3661014657005b5f80fd5b348015610155575f80fd5b5061015e610443565b005b34801561016b575f80fd5b50604080518082019091526008815267547261646520414960c01b60208201525b604051610199919061137a565b60405180910390f35b3480156101ad575f80fd5b506101c16101bc3660046113da565b610484565b6040519015158152602001610199565b3480156101dc575f80fd5b506101e561049a565b604051908152602001610199565b3480156101fe575f80fd5b506101c161020d366004611404565b6104ba565b34801561021d575f80fd5b5061015e61022c366004611442565b610521565b34801561023c575f80fd5b506101e560145481565b348015610251575f80fd5b5060405160098152602001610199565b34801561026c575f80fd5b50600754610280906001600160a01b031681565b6040516001600160a01b039091168152602001610199565b3480156102a3575f80fd5b5061015e6102b2366004611459565b61054f565b3480156102c2575f80fd5b506101e56102d1366004611488565b6105ec565b3480156102e1575f80fd5b5061015e61060d565b3480156102f5575f80fd5b5061015e61067e565b348015610309575f80fd5b505f546001600160a01b0316610280565b348015610325575f80fd5b506101e560135481565b34801561033a575f80fd5b506040805180820190915260048152637754414960e01b602082015261018c565b348015610366575f80fd5b506101c16103753660046113da565b6106bf565b348015610385575f80fd5b506101e56106cb565b348015610399575f80fd5b5061015e6106e8565b3480156103ad575f80fd5b5061015e6103bc3660046114a3565b61071f565b3480156103cc575f80fd5b506101e56103db366004611526565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205490565b348015610410575f80fd5b5061015e61041f366004611442565b6107ac565b34801561042f575f80fd5b5061015e61043e366004611488565b6107da565b5f546001600160a01b031633146104755760405162461bcd60e51b815260040161046c9061155d565b60405180910390fd5b6015805460ff19166001179055565b5f6104903384846108c1565b5060015b92915050565b5f6104a76009600a611686565b6104b5906305f5e100611694565b905090565b5f6104c6848484610921565b6105178433610512856040518060600160405280602881526020016117d4602891396001600160a01b038a165f9081526005602090815260408083203384529091529020549190610c40565b6108c1565b5060019392505050565b5f546001600160a01b0316331461054a5760405162461bcd60e51b815260040161046c9061155d565b601455565b5f546001600160a01b031633146105785760405162461bcd60e51b815260040161046c9061155d565b600a849055600c839055600b829055600d819055601e61059883866116ab565b111580156105b05750601e6105ad82856116ab565b11155b6105e65760405162461bcd60e51b81526020600482015260076024820152664d61782033302560c81b604482015260640161046c565b50505050565b6001600160a01b0381165f9081526003602052604081205461049490610c78565b5f546001600160a01b031633146106365760405162461bcd60e51b815260040161046c9061155d565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146106a75760405162461bcd60e51b815260040161046c9061155d565b6004600b8190555f600a819055600d91909155600c55565b5f610490338484610921565b6106d76009600a611686565b6106e5906305f5e100611694565b81565b6012546001600160a01b0316336001600160a01b031614610707575f80fd5b5f610711306105ec565b905061071c81610cfa565b50565b5f546001600160a01b031633146107485760405162461bcd60e51b815260040161046c9061155d565b5f5b828110156105e6578160025f868685818110610768576107686116be565b905060200201602081019061077d9190611488565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905560010161074a565b5f546001600160a01b031633146107d55760405162461bcd60e51b815260040161046c9061155d565b601355565b5f546001600160a01b031633146108035760405162461bcd60e51b815260040161046c9061155d565b6001600160a01b0381166108685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161046c565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383165f9081526002602052604090205460ff1615801561096157506001600160a01b0382165f9081526002602052604090205460ff16155b15610b3c5760155460ff166109de5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400606482015260840161046c565b6007546001600160a01b03838116911614610a275760135481610a00846105ec565b610a0a91906116ab565b10610a275760405162461bcd60e51b815260040161046c906116d2565b6007546001600160a01b0390811690831603610a7757610a496009600a611686565b610a57906305f5e100611694565b60135410610a775760405162461bcd60e51b815260040161046c906116d2565b5f610a81306105ec565b60145490915081108015908190610aa25750601254600160a01b900460ff16155b8015610abc57506007546001600160a01b03868116911614155b8015610ad15750601254600160a81b900460ff165b8015610af557506001600160a01b0385165f9081526002602052604090205460ff16155b8015610b1957506001600160a01b0384165f9081526002602052604090205460ff16155b15610b3957610b2782610cfa565b478015610b3757610b3747610e6a565b505b50505b6001600160a01b0383165f9081526002602052604090205460019060ff1680610b7c57506001600160a01b0383165f9081526002602052604090205460ff165b80610bae57506007546001600160a01b03858116911614801590610bae57506007546001600160a01b03848116911614155b15610bba57505f610c34565b6007546001600160a01b038581169116148015610be557506006546001600160a01b03848116911614155b15610bf757600a54600e55600b54600f555b6007546001600160a01b038481169116148015610c2257506006546001600160a01b03858116911614155b15610c3457600c54600e55600d54600f555b6105e684848484610ea5565b5f8184841115610c635760405162461bcd60e51b815260040161046c919061137a565b505f610c6f8486611715565b95945050505050565b5f600854821115610cde5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161046c565b5f610ce7610ed3565b9050610cf38382610ef4565b9392505050565b6012805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110610d4057610d406116be565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610d97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dbb9190611728565b81600181518110610dce57610dce6116be565b6001600160a01b039283166020918202929092010152600654610df491309116846108c1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790610e2c9085905f90869030904290600401611743565b5f604051808303815f87803b158015610e43575f80fd5b505af1158015610e55573d5f803e3d5ffd5b50506012805460ff60a01b1916905550505050565b6012546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610ea1573d5f803e3d5ffd5b5050565b80610eb257610eb2610f35565b610ebd848484610f62565b806105e6576105e6601054600e55601154600f55565b5f805f610ede611053565b9092509050610eed8282610ef4565b9250505090565b5f610cf383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506110d4565b600e54158015610f455750600f54155b15610f4c57565b600e8054601055600f80546011555f9182905555565b5f805f805f80610f7187611100565b6001600160a01b038f165f90815260036020526040902054959b50939950919750955093509150610fa29087611155565b6001600160a01b03808b165f9081526003602052604080822093909355908a1681522054610fd09086611196565b6001600160a01b0389165f90815260036020526040902055610ff1816111f4565b610ffb848361123a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161104091815260200190565b60405180910390a3505050505050505050565b6008545f908190816110676009600a611686565b611075906305f5e100611694565b905061109d6110866009600a611686565b611094906305f5e100611694565b60085490610ef4565b8210156110cb576008546110b36009600a611686565b6110c1906305f5e100611694565b9350935050509091565b90939092509050565b5f81836110f45760405162461bcd60e51b815260040161046c919061137a565b505f610c6f84866117b4565b5f805f805f805f805f6111188a600e54600f5461125e565b9250925092505f611127610ed3565b90505f805f6111388e8787876112b0565b919e509c509a509598509396509194505050505091939550919395565b5f610cf383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c40565b5f806111a283856116ab565b905083811015610cf35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161046c565b5f6111fd610ed3565b90505f61120a83836112fc565b305f908152600360205260409020549091506112269082611196565b305f90815260036020526040902055505050565b6008546112479083611155565b6008556009546112579082611196565b6009555050565b5f808080611277606461127189896112fc565b90610ef4565b90505f61128960646112718a896112fc565b90505f6112a08261129a8b86611155565b90611155565b9992985090965090945050505050565b5f8080806112be88866112fc565b90505f6112cb88876112fc565b90505f6112d888886112fc565b90505f6112e98261129a8686611155565b939b939a50919850919650505050505050565b5f825f0361130b57505f610494565b5f6113168385611694565b90508261132385836117b4565b14610cf35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161046c565b5f602080835283518060208501525f5b818110156113a65785810183015185820160400152820161138a565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461071c575f80fd5b5f80604083850312156113eb575f80fd5b82356113f6816113c6565b946020939093013593505050565b5f805f60608486031215611416575f80fd5b8335611421816113c6565b92506020840135611431816113c6565b929592945050506040919091013590565b5f60208284031215611452575f80fd5b5035919050565b5f805f806080858703121561146c575f80fd5b5050823594602084013594506040840135936060013592509050565b5f60208284031215611498575f80fd5b8135610cf3816113c6565b5f805f604084860312156114b5575f80fd5b833567ffffffffffffffff808211156114cc575f80fd5b818601915086601f8301126114df575f80fd5b8135818111156114ed575f80fd5b8760208260051b8501011115611501575f80fd5b60209283019550935050840135801515811461151b575f80fd5b809150509250925092565b5f8060408385031215611537575f80fd5b8235611542816113c6565b91506020830135611552816113c6565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156115e057815f19048211156115c6576115c6611592565b808516156115d357918102915b93841c93908002906115ab565b509250929050565b5f826115f657506001610494565b8161160257505f610494565b816001811461161857600281146116225761163e565b6001915050610494565b60ff84111561163357611633611592565b50506001821b610494565b5060208310610133831016604e8410600b8410161715611661575081810a610494565b61166b83836115a6565b805f190482111561167e5761167e611592565b029392505050565b5f610cf360ff8416836115e8565b808202811582820484141761049457610494611592565b8082018082111561049457610494611592565b634e487b7160e01b5f52603260045260245ffd5b60208082526023908201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696040820152627a652160e81b606082015260800190565b8181038181111561049457610494611592565b5f60208284031215611738575f80fd5b8151610cf3816113c6565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156117935784516001600160a01b03168352938301939183019160010161176e565b50506001600160a01b03969096166060850152505050608001529392505050565b5f826117ce57634e487b7160e01b5f52601260045260245ffd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212209348b19241c27a6f63360ccb7b727230ee879c993ef9e0f4453e16394d33e90464736f6c63430008180033

Deployed Bytecode Sourcemap

4282:11958:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11441:72;;;;;;;;;;;;;:::i;:::-;;6485:83;;;;;;;;;;-1:-1:-1;6555:5:0;;;;;;;;;;;;-1:-1:-1;;;6555:5:0;;;;6485:83;;;;;;;:::i;:::-;;;;;;;;7410:193;;;;;;;;;;-1:-1:-1;7410:193:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;7410:193:0;1023:187:1;6762:95:0;;;;;;;;;;;;;:::i;:::-;;;1361:25:1;;;1349:2;1334:18;6762:95:0;1215:177:1;7611:446:0;;;;;;;;;;-1:-1:-1;7611:446:0;;;;;:::i;:::-;;:::i;15168:133::-;;;;;;;;;;-1:-1:-1;15168:133:0;;;;;:::i;:::-;;:::i;5590:51::-;;;;;;;;;;;;;;;;6671:83;;;;;;;;;;-1:-1:-1;6671:83:0;;4402:1;2185:36:1;;2173:2;2158:18;6671:83:0;2043:184:1;4787:28:0;;;;;;;;;;-1:-1:-1;4787:28:0;;;;-1:-1:-1;;;;;4787:28:0;;;;;;-1:-1:-1;;;;;2396:32:1;;;2378:51;;2366:2;2351:18;4787:28:0;2232:203:1;15847:390:0;;;;;;;;;;-1:-1:-1;15847:390:0;;;;;:::i;:::-;;:::i;6865:138::-;;;;;;;;;;-1:-1:-1;6865:138:0;;;;;:::i;:::-;;:::i;1769:148::-;;;;;;;;;;;;;:::i;15551:165::-;;;;;;;;;;;;;:::i;1555:79::-;;;;;;;;;;-1:-1:-1;1593:7:0;1620:6;-1:-1:-1;;;;;1620:6:0;1555:79;;5520:45;;;;;;;;;;;;;;;;6576:87;;;;;;;;;;-1:-1:-1;6648:7:0;;;;;;;;;;;;-1:-1:-1;;;6648:7:0;;;;6576:87;;7011:199;;;;;;;;;;-1:-1:-1;7011:199:0;;;;;:::i;:::-;;:::i;4871:63::-;;;;;;;;;;;;;:::i;11521:197::-;;;;;;;;;;;;;:::i;15309:234::-;;;;;;;;;;-1:-1:-1;15309:234:0;;;;;:::i;:::-;;:::i;7218:184::-;;;;;;;;;;-1:-1:-1;7218:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;7367:18:0;;;7335:7;7367:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7218:184;15724:115;;;;;;;;;;-1:-1:-1;15724:115:0;;;;;:::i;:::-;;:::i;1925:244::-;;;;;;;;;;-1:-1:-1;1925:244:0;;;;;:::i;:::-;;:::i;11441:72::-;1682:6;;-1:-1:-1;;;;;1682:6:0;394:10;1682:22;1674:67;;;;-1:-1:-1;;;1674:67:0;;;;;;;:::i;:::-;;;;;;;;;11487:11:::1;:18:::0;;-1:-1:-1;;11487:18:0::1;11501:4;11487:18;::::0;;11441:72::o;7410:193::-;7512:4;7534:39;394:10;7557:7;7566:6;7534:8;:39::i;:::-;-1:-1:-1;7591:4:0;7410:193;;;;;:::o;6762:95::-;6815:7;4919:15;4402:1;4919:2;:15;:::i;:::-;4905:29;;:11;:29;:::i;:::-;6835:14;;6762:95;:::o;7611:446::-;7743:4;7760:36;7770:6;7778:9;7789:6;7760:9;:36::i;:::-;7807:220;7830:6;394:10;7878:138;7934:6;7878:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7878:19:0;;;;;;:11;:19;;;;;;;;394:10;7878:33;;;;;;;;;;:37;:138::i;:::-;7807:8;:220::i;:::-;-1:-1:-1;8045:4:0;7611:446;;;;;:::o;15168:133::-;1682:6;;-1:-1:-1;;;;;1682:6:0;394:10;1682:22;1674:67;;;;-1:-1:-1;;;1674:67:0;;;;;;;:::i;:::-;15253:19:::1;:40:::0;15168:133::o;15847:390::-;1682:6;;-1:-1:-1;;;;;1682:6:0;394:10;1682:22;1674:67;;;;-1:-1:-1;;;1674:67:0;;;;;;;:::i;:::-;15982:14:::1;:30:::0;;;16023:15:::1;:32:::0;;;16066:12:::1;:26:::0;;;16103:13:::1;:28:::0;;;16179:2:::1;16150:25;16081:11:::0;15999:13;16150:25:::1;:::i;:::-;:31;;:67;;;;-1:-1:-1::0;16215:2:0::1;16184:27;16199:12:::0;16184:14;:27:::1;:::i;:::-;:33;;16150:67;16142:87;;;::::0;-1:-1:-1;;;16142:87:0;;6637:2:1;16142:87:0::1;::::0;::::1;6619:21:1::0;6676:1;6656:18;;;6649:29;-1:-1:-1;;;6694:18:1;;;6687:37;6741:18;;16142:87:0::1;6435:330:1::0;16142:87:0::1;15847:390:::0;;;;:::o;6865:138::-;-1:-1:-1;;;;;6978:16:0;;6931:7;6978:16;;;:7;:16;;;;;;6958:37;;:19;:37::i;1769:148::-;1682:6;;-1:-1:-1;;;;;1682:6:0;394:10;1682:22;1674:67;;;;-1:-1:-1;;;1674:67:0;;;;;;;:::i;:::-;1876:1:::1;1860:6:::0;;1839:40:::1;::::0;-1:-1:-1;;;;;1860:6:0;;::::1;::::0;1839:40:::1;::::0;1876:1;;1839:40:::1;1907:1;1890:19:::0;;-1:-1:-1;;;;;;1890:19:0::1;::::0;;1769:148::o;15551:165::-;1682:6;;-1:-1:-1;;;;;1682:6:0;394:10;1682:22;1674:67;;;;-1:-1:-1;;;1674:67:0;;;;;;;:::i;:::-;15620:1:::1;15605:12;:16:::0;;;15649:1:::1;15632:14;:18:::0;;;15661:13:::1;:17:::0;;;;15689:15:::1;:19:::0;15551:165::o;7011:199::-;7116:4;7138:42;394:10;7162:9;7173:6;7138:9;:42::i;4871:63::-;4919:15;4402:1;4919:2;:15;:::i;:::-;4905:29;;:11;:29;:::i;:::-;4871:63;:::o;11521:197::-;11587:17;;-1:-1:-1;;;;;11587:17:0;394:10;-1:-1:-1;;;;;11571:33:0;;11563:42;;;;;;11616:23;11642:24;11660:4;11642:9;:24::i;:::-;11616:50;;11677:33;11694:15;11677:16;:33::i;:::-;11552:166;11521:197::o;15309:234::-;1682:6;;-1:-1:-1;;;;;1682:6:0;394:10;1682:22;1674:67;;;;-1:-1:-1;;;1674:67:0;;;;;;;:::i;:::-;15426:9:::1;15422:114;15441:19:::0;;::::1;15422:114;;;15516:8;15482:18;:31;15501:8;;15510:1;15501:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15482:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15482:31:0;:42;;-1:-1:-1;;15482:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;15462:3:0::1;15422:114;;15724:115:::0;1682:6;;-1:-1:-1;;;;;1682:6:0;394:10;1682:22;1674:67;;;;-1:-1:-1;;;1674:67:0;;;;;;;:::i;:::-;15801:14:::1;:30:::0;15724:115::o;1925:244::-;1682:6;;-1:-1:-1;;;;;1682:6:0;394:10;1682:22;1674:67;;;;-1:-1:-1;;;1674:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2014:22:0;::::1;2006:73;;;::::0;-1:-1:-1;;;2006:73:0;;7104:2:1;2006:73:0::1;::::0;::::1;7086:21:1::0;7143:2;7123:18;;;7116:30;7182:34;7162:18;;;7155:62;-1:-1:-1;;;7233:18:1;;;7226:36;7279:19;;2006:73:0::1;6902:402:1::0;2006:73:0::1;2116:6;::::0;;2095:38:::1;::::0;-1:-1:-1;;;;;2095:38:0;;::::1;::::0;2116:6;::::1;::::0;2095:38:::1;::::0;::::1;2144:6;:17:::0;;-1:-1:-1;;;;;;2144:17:0::1;-1:-1:-1::0;;;;;2144:17:0;;;::::1;::::0;;;::::1;::::0;;1925:244::o;8748:211::-;-1:-1:-1;;;;;8867:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8919:32;;1361:25:1;;;8919:32:0;;1334:18:1;8919:32:0;;;;;;;8748:211;;;:::o;8967:1868::-;-1:-1:-1;;;;;9086:24:0;;;;;;:18;:24;;;;;;;;9085:25;:52;;;;-1:-1:-1;;;;;;9115:22:0;;;;;;:18;:22;;;;;;;;9114:23;9085:52;9081:1028;;;9162:11;;;;9154:87;;;;-1:-1:-1;;;9154:87:0;;7511:2:1;9154:87:0;;;7493:21:1;7550:2;7530:18;;;7523:30;7589:34;7569:18;;;7562:62;7660:33;7640:18;;;7633:61;7711:19;;9154:87:0;7309:427:1;9154:87:0;9267:13;;-1:-1:-1;;;;;9261:19:0;;;9267:13;;9261:19;9258:146;;9334:14;;9325:6;9309:13;9319:2;9309:9;:13::i;:::-;:22;;;;:::i;:::-;:39;9301:87;;;;-1:-1:-1;;;9301:87:0;;;;;;;:::i;:::-;9429:13;;-1:-1:-1;;;;;9429:13:0;;;9423:19;;;;9420:131;;4919:15;4402:1;4919:2;:15;:::i;:::-;4905:29;;:11;:29;:::i;:::-;9471:14;;:24;9463:72;;;;-1:-1:-1;;;9463:72:0;;;;;;;:::i;:::-;9567:28;9598:24;9616:4;9598:9;:24::i;:::-;9676:19;;9567:55;;-1:-1:-1;9652:43:0;;;;;;;9716:18;;-1:-1:-1;9728:6:0;;-1:-1:-1;;;9728:6:0;;;;9727:7;9716:18;:43;;;;-1:-1:-1;9746:13:0;;-1:-1:-1;;;;;9738:21:0;;;9746:13;;9738:21;;9716:43;:58;;;;-1:-1:-1;9763:11:0;;-1:-1:-1;;;9763:11:0;;;;9716:58;:87;;;;-1:-1:-1;;;;;;9779:24:0;;;;;;:18;:24;;;;;;;;9778:25;9716:87;:114;;;;-1:-1:-1;;;;;;9808:22:0;;;;;;:18;:22;;;;;;;;9807:23;9716:114;9712:386;;;9851:38;9868:20;9851:16;:38::i;:::-;9937:21;9981:22;;9977:106;;10028:35;10041:21;10028:12;:35::i;:::-;9832:266;9712:386;9139:970;;9081:1028;-1:-1:-1;;;;;10185:24:0;;10121:12;10185:24;;;:18;:24;;;;;;10136:4;;10185:24;;;:50;;-1:-1:-1;;;;;;10213:22:0;;;;;;:18;:22;;;;;;;;10185:50;10184:102;;;-1:-1:-1;10249:13:0;;-1:-1:-1;;;;;10241:21:0;;;10249:13;;10241:21;;;;:44;;-1:-1:-1;10272:13:0;;-1:-1:-1;;;;;10266:19:0;;;10272:13;;10266:19;;10241:44;10180:594;;;-1:-1:-1;10313:5:0;10180:594;;;10396:13;;-1:-1:-1;;;;;10388:21:0;;;10396:13;;10388:21;:55;;;;-1:-1:-1;10427:15:0;;-1:-1:-1;;;;;10413:30:0;;;10427:15;;10413:30;;10388:55;10385:162;;;10476:14;;10464:9;:26;10519:12;;10509:7;:22;10385:162;10606:13;;-1:-1:-1;;;;;10600:19:0;;;10606:13;;10600:19;:55;;;;-1:-1:-1;10639:15:0;;-1:-1:-1;;;;;10623:32:0;;;10639:15;;10623:32;;10600:55;10596:165;;;10688:15;;10676:9;:27;10732:13;;10722:7;:23;10596:165;10786:41;10801:4;10807:2;10811:6;10819:7;10786:14;:41::i;2533:224::-;2653:7;2689:12;2681:6;;;;2673:29;;;;-1:-1:-1;;;2673:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2713:9:0;2725:5;2729:1;2725;:5;:::i;:::-;2713:17;2533:224;-1:-1:-1;;;;;2533:224:0:o;8065:323::-;8160:7;8218;;8207;:18;;8185:110;;;;-1:-1:-1;;;8185:110:0;;8480:2:1;8185:110:0;;;8462:21:1;8519:2;8499:18;;;8492:30;8558:34;8538:18;;;8531:62;-1:-1:-1;;;8609:18:1;;;8602:40;8659:19;;8185:110:0;8278:406:1;8185:110:0;8306:19;8328:10;:8;:10::i;:::-;8306:32;-1:-1:-1;8356:24:0;:7;8306:32;8356:11;:24::i;:::-;8349:31;8065:323;-1:-1:-1;;;8065:323:0:o;10843:483::-;5723:6;:13;;-1:-1:-1;;;;5723:13:0;-1:-1:-1;;;5723:13:0;;;10945:16:::1;::::0;;10959:1:::1;10945:16:::0;;;;;::::1;::::0;;-1:-1:-1;;10945:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;10945:16:0::1;10921:40;;10990:4;10972;10977:1;10972:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10972:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;11016:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;11016:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;10972:7;;11016:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11006:4;11011:1;11006:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11006:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;11081:15:::1;::::0;11049:62:::1;::::0;11066:4:::1;::::0;11081:15:::1;11099:11:::0;11049:8:::1;:62::i;:::-;11122:15;::::0;:196:::1;::::0;-1:-1:-1;;;11122:196:0;;-1:-1:-1;;;;;11122:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;11203:11;;11122:15:::1;::::0;11245:4;;11272::::1;::::0;11292:15:::1;::::0;11122:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5759:6:0;:14;;-1:-1:-1;;;;5759:14:0;;;-1:-1:-1;;;;10843:483:0:o;11334:99::-;11391:17;;:34;;-1:-1:-1;;;;;11391:17:0;;;;:34;;;;;11418:6;;11391:17;:34;:17;:34;11418:6;11391:17;:34;;;;;;;;;;;;;;;;;;;;;11334:99;:::o;11726:282::-;11882:7;11877:28;;11891:14;:12;:14::i;:::-;11916:44;11934:6;11942:9;11953:6;11916:17;:44::i;:::-;11976:7;11971:29;;11985:15;8679:17;;8667:9;:29;8717:15;;8707:7;:25;8623:117;14687:164;14729:7;14750:15;14767;14786:19;:17;:19::i;:::-;14749:56;;-1:-1:-1;14749:56:0;-1:-1:-1;14823:20:0;14749:56;;14823:11;:20::i;:::-;14816:27;;;;14687:164;:::o;3019:132::-;3077:7;3104:39;3108:1;3111;3104:39;;;;;;;;;;;;;;;;;:3;:39::i;8396:219::-;8443:9;;:14;:30;;;;-1:-1:-1;8461:7:0;;:12;8443:30;8439:43;;;8396:219::o;8439:43::-;8514:9;;;8494:17;:29;8552:7;;;8534:15;:25;-1:-1:-1;8572:13:0;;;;8596:11;8396:219::o;12016:610::-;12163:15;12193:23;12231:12;12258:23;12296:12;12323:13;12350:19;12361:7;12350:10;:19::i;:::-;-1:-1:-1;;;;;12398:15:0;;;;;;:7;:15;;;;;;12148:221;;-1:-1:-1;12148:221:0;;-1:-1:-1;12148:221:0;;-1:-1:-1;12148:221:0;-1:-1:-1;12148:221:0;-1:-1:-1;12148:221:0;-1:-1:-1;12398:28:0;;12148:221;12398:19;:28::i;:::-;-1:-1:-1;;;;;12380:15:0;;;;;;;:7;:15;;;;;;:46;;;;12458:18;;;;;;;:39;;12481:15;12458:22;:39::i;:::-;-1:-1:-1;;;;;12437:18:0;;;;;;:7;:18;;;;;:60;12508:16;12518:5;12508:9;:16::i;:::-;12535:23;12547:4;12553;12535:11;:23::i;:::-;12591:9;-1:-1:-1;;;;;12574:44:0;12583:6;-1:-1:-1;;;;;12574:44:0;;12602:15;12574:44;;;;1361:25:1;;1349:2;1334:18;;1215:177;12574:44:0;;;;;;;;12137:489;;;;;;12016:610;;;:::o;14859:257::-;14957:7;;14910;;;;;4919:15;4402:1;4919:2;:15;:::i;:::-;4905:29;;:11;:29;:::i;:::-;14975:25;-1:-1:-1;15025:20:0;4919:15;4402:1;4919:2;:15;:::i;:::-;4905:29;;:11;:29;:::i;:::-;15025:7;;;:11;:20::i;:::-;15015:7;:30;15011:61;;;15055:7;;4919:15;4402:1;4919:2;:15;:::i;:::-;4905:29;;:11;:29;:::i;:::-;15047:25;;;;;;14859:257;;:::o;15011:61::-;15091:7;;15100;;-1:-1:-1;14859:257:0;-1:-1:-1;14859:257:0:o;3159:223::-;3279:7;3314:12;3307:5;3299:28;;;;-1:-1:-1;;;3299:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3338:9:0;3350:5;3354:1;3350;:5;:::i;13045:615::-;13145:7;13167;13189;13211;13233;13255;13291:23;13316:12;13330:13;13360:40;13372:7;13381:9;;13392:7;;13360:11;:40::i;:::-;13290:110;;;;;;13411:19;13433:10;:8;:10::i;:::-;13411:32;;13455:15;13472:23;13497:12;13526:46;13538:7;13547:4;13553:5;13560:11;13526;:46::i;:::-;13454:118;;-1:-1:-1;13454:118:0;-1:-1:-1;13454:118:0;-1:-1:-1;13623:15:0;;-1:-1:-1;13640:4:0;;-1:-1:-1;13646:5:0;;-1:-1:-1;;;;;13045:615:0;;;;;;;:::o;2389:136::-;2447:7;2474:43;2478:1;2481;2474:43;;;;;;;;;;;;;;;;;:3;:43::i;2202:179::-;2260:7;;2292:5;2296:1;2292;:5;:::i;:::-;2280:17;;2321:1;2316;:6;;2308:46;;;;-1:-1:-1;;;2308:46:0;;10486:2:1;2308:46:0;;;10468:21:1;10525:2;10505:18;;;10498:30;10564:29;10544:18;;;10537:57;10611:18;;2308:46:0;10284:351:1;12634:211:0;12687:19;12709:10;:8;:10::i;:::-;12687:32;-1:-1:-1;12730:13:0;12746:22;:5;12687:32;12746:9;:22::i;:::-;12820:4;12804:22;;;;:7;:22;;;;;;12730:38;;-1:-1:-1;12804:33:0;;12730:38;12804:26;:33::i;:::-;12795:4;12779:22;;;;:7;:22;;;;;:58;-1:-1:-1;;;12634:211:0:o;12853:147::-;12931:7;;:17;;12943:4;12931:11;:17::i;:::-;12921:7;:27;12972:10;;:20;;12987:4;12972:14;:20::i;:::-;12959:10;:33;-1:-1:-1;;12853:147:0:o;13668:469::-;13837:7;;;;13931:30;13957:3;13931:21;:7;13943:8;13931:11;:21::i;:::-;:25;;:30::i;:::-;13916:45;-1:-1:-1;13972:13:0;13988:28;14012:3;13988:19;:7;14000:6;13988:11;:19::i;:28::-;13972:44;-1:-1:-1;14027:23:0;14053:28;13972:44;14053:17;:7;14065:4;14053:11;:17::i;:::-;:21;;:28::i;:::-;14027:54;14117:4;;-1:-1:-1;14123:5:0;;-1:-1:-1;13668:469:0;;-1:-1:-1;;;;;13668:469:0:o;14145:534::-;14339:7;;;;14436:24;:7;14448:11;14436;:24::i;:::-;14418:42;-1:-1:-1;14471:12:0;14486:21;:4;14495:11;14486:8;:21::i;:::-;14471:36;-1:-1:-1;14518:13:0;14534:22;:5;14544:11;14534:9;:22::i;:::-;14518:38;-1:-1:-1;14567:23:0;14593:28;14518:38;14593:17;:7;14605:4;14593:11;:17::i;:28::-;14640:7;;;;-1:-1:-1;14666:4:0;;-1:-1:-1;14145:534:0;;-1:-1:-1;;;;;;;14145:534:0:o;2765:246::-;2823:7;2847:1;2852;2847:6;2843:47;;-1:-1:-1;2877:1:0;2870:8;;2843:47;2900:9;2912:5;2916:1;2912;:5;:::i;:::-;2900:17;-1:-1:-1;2945:1:0;2936:5;2940:1;2900:17;2936:5;:::i;:::-;:10;2928:56;;;;-1:-1:-1;;;2928:56:0;;10842:2:1;2928:56:0;;;10824:21:1;10881:2;10861:18;;;10854:30;10920:34;10900:18;;;10893:62;-1:-1:-1;;;10971:18:1;;;10964:31;11012:19;;2928:56:0;10640:397:1;14:548;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;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:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;-1:-1:-1;2009:23:1;;1858:180;-1:-1:-1;1858:180:1:o;2440:385::-;2526:6;2534;2542;2550;2603:3;2591:9;2582:7;2578:23;2574:33;2571:53;;;2620:1;2617;2610:12;2571:53;-1:-1:-1;;2643:23:1;;;2713:2;2698:18;;2685:32;;-1:-1:-1;2764:2:1;2749:18;;2736:32;;2815:2;2800:18;2787:32;;-1:-1:-1;2440:385:1;-1:-1:-1;2440:385:1:o;2830:247::-;2889:6;2942:2;2930:9;2921:7;2917:23;2913:32;2910:52;;;2958:1;2955;2948:12;2910:52;2997:9;2984:23;3016:31;3041:5;3016:31;:::i;3082:782::-;3174:6;3182;3190;3243:2;3231:9;3222:7;3218:23;3214:32;3211:52;;;3259:1;3256;3249:12;3211:52;3299:9;3286:23;3328:18;3369:2;3361:6;3358:14;3355:34;;;3385:1;3382;3375:12;3355:34;3423:6;3412:9;3408:22;3398:32;;3468:7;3461:4;3457:2;3453:13;3449:27;3439:55;;3490:1;3487;3480:12;3439:55;3530:2;3517:16;3556:2;3548:6;3545:14;3542:34;;;3572:1;3569;3562:12;3542:34;3627:7;3620:4;3610:6;3607:1;3603:14;3599:2;3595:23;3591:34;3588:47;3585:67;;;3648:1;3645;3638:12;3585:67;3679:4;3671:13;;;;-1:-1:-1;3703:6:1;-1:-1:-1;;3744:20:1;;3731:34;3801:13;;3794:21;3784:32;;3774:60;;3830:1;3827;3820:12;3774:60;3853:5;3843:15;;;3082:782;;;;;:::o;3869:388::-;3937:6;3945;3998:2;3986:9;3977:7;3973:23;3969:32;3966:52;;;4014:1;4011;4004:12;3966:52;4053:9;4040:23;4072:31;4097:5;4072:31;:::i;:::-;4122:5;-1:-1:-1;4179:2:1;4164:18;;4151:32;4192:33;4151:32;4192:33;:::i;:::-;4244:7;4234:17;;;3869:388;;;;;:::o;4262:356::-;4464:2;4446:21;;;4483:18;;;4476:30;4542:34;4537:2;4522:18;;4515:62;4609:2;4594:18;;4262:356::o;4623:127::-;4684:10;4679:3;4675:20;4672:1;4665:31;4715:4;4712:1;4705:15;4739:4;4736:1;4729:15;4755:416;4844:1;4881:5;4844:1;4895:270;4916:7;4906:8;4903:21;4895:270;;;4975:4;4971:1;4967:6;4963:17;4957:4;4954:27;4951:53;;;4984:18;;:::i;:::-;5034:7;5024:8;5020:22;5017:55;;;5054:16;;;;5017:55;5133:22;;;;5093:15;;;;4895:270;;;4899:3;4755:416;;;;;:::o;5176:806::-;5225:5;5255:8;5245:80;;-1:-1:-1;5296:1:1;5310:5;;5245:80;5344:4;5334:76;;-1:-1:-1;5381:1:1;5395:5;;5334:76;5426:4;5444:1;5439:59;;;;5512:1;5507:130;;;;5419:218;;5439:59;5469:1;5460:10;;5483:5;;;5507:130;5544:3;5534:8;5531:17;5528:43;;;5551:18;;:::i;:::-;-1:-1:-1;;5607:1:1;5593:16;;5622:5;;5419:218;;5721:2;5711:8;5708:16;5702:3;5696:4;5693:13;5689:36;5683:2;5673:8;5670:16;5665:2;5659:4;5656:12;5652:35;5649:77;5646:159;;;-1:-1:-1;5758:19:1;;;5790:5;;5646:159;5837:34;5862:8;5856:4;5837:34;:::i;:::-;5907:6;5903:1;5899:6;5895:19;5886:7;5883:32;5880:58;;;5918:18;;:::i;:::-;5956:20;;5176:806;-1:-1:-1;;;5176:806:1:o;5987:140::-;6045:5;6074:47;6115:4;6105:8;6101:19;6095:4;6074:47;:::i;6132:168::-;6205:9;;;6236;;6253:15;;;6247:22;;6233:37;6223:71;;6274:18;;:::i;6305:125::-;6370:9;;;6391:10;;;6388:36;;;6404:18;;:::i;6770:127::-;6831:10;6826:3;6822:20;6819:1;6812:31;6862:4;6859:1;6852:15;6886:4;6883:1;6876:15;7741:399;7943:2;7925:21;;;7982:2;7962:18;;;7955:30;8021:34;8016:2;8001:18;;7994:62;-1:-1:-1;;;8087:2:1;8072:18;;8065:33;8130:3;8115:19;;7741:399::o;8145:128::-;8212:9;;;8233:11;;;8230:37;;;8247:18;;:::i;8821:251::-;8891:6;8944:2;8932:9;8923:7;8919:23;8915:32;8912:52;;;8960:1;8957;8950:12;8912:52;8992:9;8986:16;9011:31;9036:5;9011:31;:::i;9077:980::-;9339:4;9387:3;9376:9;9372:19;9418:6;9407:9;9400:25;9444:2;9482:6;9477:2;9466:9;9462:18;9455:34;9525:3;9520:2;9509:9;9505:18;9498:31;9549:6;9584;9578:13;9615:6;9607;9600:22;9653:3;9642:9;9638:19;9631:26;;9692:2;9684:6;9680:15;9666:29;;9713:1;9723:195;9737:6;9734:1;9731:13;9723:195;;;9802:13;;-1:-1:-1;;;;;9798:39:1;9786:52;;9893:15;;;;9858:12;;;;9834:1;9752:9;9723:195;;;-1:-1:-1;;;;;;;9974:32:1;;;;9969:2;9954:18;;9947:60;-1:-1:-1;;;10038:3:1;10023:19;10016:35;9935:3;9077:980;-1:-1:-1;;;9077:980:1:o;10062:217::-;10102:1;10128;10118:132;;10172:10;10167:3;10163:20;10160:1;10153:31;10207:4;10204:1;10197:15;10235:4;10232:1;10225:15;10118:132;-1:-1:-1;10264:9:1;;10062:217::o

Swarm Source

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