ETH Price: $2,408.98 (-0.24%)

Token

The Vault (VAULT)
 

Overview

Max Total Supply

377.263229536634079973 VAULT

Holders

235

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000009 VAULT

Value
$0.00
0xf257cdccf92b9af7d2f34b13355446d3e67392e6
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The VAULT project employs a token-burning mechanism, permanently removing tokens sold to its smart contract from the circulating supply to enhance token scarcity.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TheVault

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-02
*/

/**
 * SPDX-License-Identifier: Unlicensed
 * https://www.thevault.capital/
 * https://twitter.com/TheVaultERC
 * https://t.me/TheVaultERC
 */

pragma solidity 0.8.19;

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

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

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

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

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

contract TheVault is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    uint256 public totalBurned = 0;
    uint256 public ethSentFromVault = 0;

    string private _name = "The Vault";
    string private _symbol = "VAULT";
    uint8 private _decimals = 18;
    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    address payable private devMarketingWallet;

    address public immutable deadAddress =
        0x000000000000000000000000000000000000dEaD;
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;

    uint256 public _liquidityShares = 0;
    uint256 public _devShares = 1;
    uint256 public _vaultShares = 1;

    uint256 public _taxOnBuy = 20;
    uint256 public _taxOnSell = 90;
    uint256 public _totalDistributionShrs;

    bool public _tradingOpen = false;
    bool public _checkWalletLimit = true;
    mapping(address => bool) public _checkExcludedFromFees;
    mapping(address => bool) public _checkWalletLimitExcept;
    mapping(address => bool) public _checkTxLimitExcept;
    mapping(address => bool) public _checkMarketPair;

    uint256 private _totalSupply = 1000 * 10 ** 18;
    uint256 public maxTxAmount = (_totalSupply * 10) / 1000;
    uint256 public walletMax = (_totalSupply * 10) / 1000;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    uint256 private minimumTokensBeforeSwap = (_totalSupply * 5) / 10000;

    event ExchangedOnVault(
        address account,
        uint256 burnAmount,
        uint256 ethRecievedAmount
    );

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        devMarketingWallet = payable(msg.sender);

        _checkExcludedFromFees[owner()] = true;
        _checkExcludedFromFees[address(this)] = true;
        _checkExcludedFromFees[devMarketingWallet] = true;

        _totalDistributionShrs = _liquidityShares.add(_devShares).add(
            _vaultShares
        );

        _checkWalletLimitExcept[owner()] = true;
        _checkWalletLimitExcept[devMarketingWallet] = true;
        _checkWalletLimitExcept[address(uniswapPair)] = true;
        _checkWalletLimitExcept[address(this)] = true;

        _checkTxLimitExcept[owner()] = true;
        _checkTxLimitExcept[address(this)] = true;
        _checkTxLimitExcept[devMarketingWallet] = true;

        _checkMarketPair[address(uniswapPair)] = true;

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

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

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

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

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

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

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

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _addMarketPair(address account) public onlyOwner {
        _checkMarketPair[account] = true;
    }

    function _set_checkTxLimitExcept(
        address holder,
        bool exempt
    ) external onlyOwner {
        _checkTxLimitExcept[holder] = exempt;
    }

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

    function makeItLive() external onlyOwner {
        _tradingOpen = true;
    }

    function _setBuyFee(uint256 newTax) external onlyOwner {
        _taxOnBuy = newTax;
    }

    function _setSellFee(uint256 newTax) external onlyOwner {
        _taxOnSell = newTax;
    }

    function setDistributionSettings(
        uint256 newLiquidityShare,
        uint256 newDevShare,
        uint256 newBurnShare
    ) external onlyOwner {
        _liquidityShares = newLiquidityShare;
        _devShares = newDevShare;
        _vaultShares = newBurnShare;

        _totalDistributionShrs = _liquidityShares.add(_devShares).add(
            _vaultShares
        );
    }

    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner {
        require(maxTxAmount >= 5, "Max tx should be at least .5%");
        maxTxAmount = (_totalSupply * maxTxAmount) / 1000;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
        _checkWalletLimit = newValue;
    }

    function set_checkWalletLimitExcept(
        address holder,
        bool exempt
    ) external onlyOwner {
        _checkWalletLimitExcept[holder] = exempt;
    }

    function setWalletMax(uint256 maxWalletAmount) external onlyOwner {
        require(maxWalletAmount >= 5, "Max wallet should be at least .5%");
        walletMax = (_totalSupply * maxWalletAmount) / 1000;
    }

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

    function setDevMarketingWallet(address newAddress) external onlyOwner {
        devMarketingWallet = payable(newAddress);
    }

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

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

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(
        address payable recipient,
        uint256 amount
    ) private {
        recipient.transfer(amount);
    }

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        uint256 accountBalance = _balances[account];

        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }
    
    function getEthOut(uint256 amount) public view returns (uint256 value) {
        uint256 contractEtherBalance = address(this).balance;
        uint256 currentSupply = _totalSupply.sub(balanceOf(deadAddress));
        value = amount.mul(contractEtherBalance).div(currentSupply);
    }

    /// @dev burns tokens and receive eth based on the total contract balance and the total supply
    /// @param amount of tokens to burn
    function useTheVault(uint256 amount) public returns (bool) {
        require(balanceOf(_msgSender()) >= amount, "not enough funds to swap");

        uint256 ethAmount = getEthOut(amount);

        require(
            address(this).balance >= ethAmount,
            "not enough funds in contract"
        );

        _burn(_msgSender(), amount);
        transferToAddressETH(_msgSender(), ethAmount);

        ethSentFromVault += ethAmount;
        totalBurned += amount;

        emit ExchangedOnVault(_msgSender(), amount, ethAmount);
        return true;
    }

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if (inSwapAndLiquify) {
            _basicTransfer(sender, recipient, amount);
        } else {

            if (!_tradingOpen) {
                require(
                    _checkExcludedFromFees[sender] ||
                        _checkExcludedFromFees[recipient],
                    "Trading is not enabled"
                );
            }

            if (!_checkTxLimitExcept[sender] && !_checkTxLimitExcept[recipient]) {
                require(
                    amount <= maxTxAmount,
                    "Transfer amount exceeds the maxTxAmount."
                );
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >=
                minimumTokensBeforeSwap;

            if (
                overMinimumTokenBalance &&
                !inSwapAndLiquify &&
                !_checkMarketPair[sender] &&
                swapAndLiquifyEnabled
            ) {
                if (swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);
            }

            _balances[sender] = _balances[sender].sub(
                amount,
                "Insufficient Balance"
            );

            uint256 finalAmount = (_checkExcludedFromFees[sender] ||
                _checkExcludedFromFees[recipient])
                ? amount
                : takeFee(sender, recipient, amount);

            if (_checkWalletLimit && !_checkWalletLimitExcept[recipient])
                require(balanceOf(recipient).add(finalAmount) <= walletMax);

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

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

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

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        uint256 ethBalanceBeforeSwap = address(this).balance;
        uint256 tokensForLP = tAmount
            .mul(_liquidityShares)
            .div(_totalDistributionShrs)
            .div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

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

        uint256 totalETHFee = _totalDistributionShrs.sub(
            _liquidityShares.div(2)
        );

        uint256 amountETHLiquidity = amountReceived
            .mul(_liquidityShares)
            .div(totalETHFee)
            .div(2);
        uint256 amountETHBurn = amountReceived.mul(_vaultShares).div(
            totalETHFee
        );
        uint256 amountETHDev = amountReceived.sub(amountETHLiquidity).sub(
            amountETHBurn
        );

        if (amountETHDev > 0)
            transferToAddressETH(devMarketingWallet, amountETHDev);

        if (amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }

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

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

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

        emit SwapTokensForETH(tokenAmount, path);
    }

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

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

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeAmount = 0;

        if (_checkMarketPair[sender]) {
            feeAmount = amount.mul(_taxOnBuy).div(100);
        } else if (_checkMarketPair[recipient]) {
            feeAmount = amount.mul(_taxOnSell).div(100);
        }

        if (feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

    function getStats()
        public
        view
        returns (uint256, uint256, uint256, uint256)
    {
        return (
            totalBurned,
            ethSentFromVault,
            address(this).balance,
            getVaultTokenValue()
        );
    }

    function getVaultTokenValue() public view returns (uint256) {
        uint256 contractEtherBalance = address(this).balance;
        uint256 currentSupply = _totalSupply.sub(balanceOf(deadAddress)).div(10 ** 18);
        uint256 ratio = contractEtherBalance.div(currentSupply);
        return ratio;
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethRecievedAmount","type":"uint256"}],"name":"ExchangedOnVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_addMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_checkExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_checkMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_checkTxLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_checkWalletLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTax","type":"uint256"}],"name":"_setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTax","type":"uint256"}],"name":"_setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"_set_checkExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"_set_checkTxLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShrs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_vaultShares","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethSentFromVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getEthOut","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStats","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultTokenValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"makeItLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDevMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newDevShare","type":"uint256"},{"internalType":"uint256","name":"newBurnShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setWalletMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"set_checkWalletLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"useTheVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600281905560035560e0604052600960a090815268151a194815985d5b1d60ba1b60c05260049062000034908262000661565b5060408051808201909152600580825264159055531560da1b6020830152906200005f908262000661565b506006805460ff1916601290811790915561dead6080526000600c556001600d819055600e556014600f55605a601055805461ffff1916610100179055683635c9adc5dea0000060178190556103e890620000bc90600a62000743565b620000c891906200075d565b6018556103e8601754600a620000df919062000743565b620000eb91906200075d565b601955601a805462ffff001916610100179055601754612710906200011290600562000743565b6200011e91906200075d565b601b553480156200012e57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ee919062000780565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000262919062000780565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d6919062000780565b600b80546001600160a01b039283166001600160a01b031991821617909155600a805492841692821683179055601754306000908152600860209081526040808320958352949052928320556009805490911633179055600190601390620003466000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526013909352818320805485166001908117909155600954909116835291208054909216179055600e54600d54600c54620003bf9291620003b891906200054d565b906200054d565b601155600160146000620003db6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600954821681526014909352818320805485166001908117909155600b5490911683528183208054851682179055308352908220805490931681179092556015906200045d6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260158452828120805486166001908117909155600954831682528382208054871682179055600b549092168152601690935290822080549093161790915560175490600790620004db3390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6017546040516200053e91815260200190565b60405180910390a350620007c1565b6000806200055c8385620007ab565b905083811015620005b35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005e757607f821691505b6020821081036200060857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200065c57600081815260208120601f850160051c81016020861015620006375750805b601f850160051c820191505b81811015620006585782815560010162000643565b5050505b505050565b81516001600160401b038111156200067d576200067d620005bc565b62000695816200068e8454620005d2565b846200060e565b602080601f831160018114620006cd5760008415620006b45750858301515b600019600386901b1c1916600185901b17855562000658565b600085815260208120601f198616915b82811015620006fe57888601518255948401946001909101908401620006dd565b50858210156200071d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620005b657620005b66200072d565b6000826200077b57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200079357600080fd5b81516001600160a01b0381168114620005b357600080fd5b80820180821115620005b657620005b66200072d565b60805161273d620007f26000396000818161050b01528181610d1001528181610dcf0152611284015261273d6000f3fe6080604052600436106103545760003560e01c8063914eb66a116101c6578063b56abed7116100f7578063cd52c70111610095578063dd62ed3e1161006f578063dd62ed3e146109e4578063ea656ea614610a2a578063f2fde38b14610a40578063fe31452414610a6057600080fd5b8063cd52c70114610994578063d89135cd146109ae578063da00097d146109c457600080fd5b8063c2d4640e116100d1578063c2d4640e146108ff578063c49b9a801461091f578063c59d48471461093f578063c816841b1461097457600080fd5b8063b56abed714610899578063b787dade146108af578063bcd67657146108df57600080fd5b80639e3fa32311610164578063a62dbb131161013e578063a62dbb1314610809578063a9059cbb14610829578063afa9677914610849578063b2ff24101461087957600080fd5b80639e3fa323146107b3578063a457c2d7146107c9578063a5d69d1f146107e957600080fd5b806395d89b41116101a057806395d89b411461074957806397be450e1461075e57806398d8c186146107745780639c3ffe1e1461079357600080fd5b8063914eb66a146106e457806394690ab8146106f9578063954662ea1461071957600080fd5b8063313ce567116102a057806355fbffd01161023e57806374e8414e1161021857806374e8414e146106705780638c0b5e22146106905780638da5cb5b146106a65780638ff4013f146106c457600080fd5b806355fbffd01461060557806370a082311461061a578063714e8c4d1461065057600080fd5b80633f2516881161027a5780633f251688146105a45780633fb7e9c5146105ba57806344547f5d146105d05780634a74bb02146105e657600080fd5b8063313ce5671461054257806339509351146105645780633b97084a1461058457600080fd5b80631bbae6e01161030d5780632563ae83116102e75780632563ae83146104c45780632657fd61146104e457806327c8f835146104f95780632b112e491461052d57600080fd5b80631bbae6e0146104645780631be965171461048457806323b872dd146104a457600080fd5b8063025468f21461036057806306fdde0314610382578063095ea7b3146103ad57806309c1a2fb146103dd5780631694505e1461040d57806318160ddd1461044557600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061038061037b3660046122e9565b610a76565b005b34801561038e57600080fd5b50610397610aae565b6040516103a49190612302565b60405180910390f35b3480156103b957600080fd5b506103cd6103c8366004612368565b610b40565b60405190151581526020016103a4565b3480156103e957600080fd5b506103cd6103f8366004612394565b60146020526000908152604090205460ff1681565b34801561041957600080fd5b50600a5461042d906001600160a01b031681565b6040516001600160a01b0390911681526020016103a4565b34801561045157600080fd5b506017545b6040519081526020016103a4565b34801561047057600080fd5b5061038061047f3660046122e9565b610b57565b34801561049057600080fd5b5061038061049f3660046122e9565b610bf1565b3480156104b057600080fd5b506103cd6104bf3660046123b1565b610c20565b3480156104d057600080fd5b506103806104df366004612407565b610c89565b3480156104f057600080fd5b50610380610ccd565b34801561050557600080fd5b5061042d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053957600080fd5b50610456610d06565b34801561054e57600080fd5b5060065460405160ff90911681526020016103a4565b34801561057057600080fd5b506103cd61057f366004612368565b610d52565b34801561059057600080fd5b5061038061059f3660046122e9565b610d88565b3480156105b057600080fd5b50610456600d5481565b3480156105c657600080fd5b5061045660115481565b3480156105dc57600080fd5b5061045660035481565b3480156105f257600080fd5b50601a546103cd90610100900460ff1681565b34801561061157600080fd5b50610456610db7565b34801561062657600080fd5b50610456610635366004612394565b6001600160a01b031660009081526007602052604090205490565b34801561065c57600080fd5b5061038061066b366004612394565b610e25565b34801561067c57600080fd5b5061038061068b366004612394565b610e73565b34801561069c57600080fd5b5061045660185481565b3480156106b257600080fd5b506000546001600160a01b031661042d565b3480156106d057600080fd5b506103806106df3660046122e9565b610ebf565b3480156106f057600080fd5b50610380610f65565b34801561070557600080fd5b50610380610714366004612422565b610fd9565b34801561072557600080fd5b506103cd610734366004612394565b60156020526000908152604090205460ff1681565b34801561075557600080fd5b5061039761102e565b34801561076a57600080fd5b50610456600f5481565b34801561078057600080fd5b506012546103cd90610100900460ff1681565b34801561079f57600080fd5b506103cd6107ae3660046122e9565b61103d565b3480156107bf57600080fd5b50610456600c5481565b3480156107d557600080fd5b506103cd6107e4366004612368565b611181565b3480156107f557600080fd5b50610380610804366004612407565b6111d0565b34801561081557600080fd5b50610380610824366004612422565b611216565b34801561083557600080fd5b506103cd610844366004612368565b61126b565b34801561085557600080fd5b506103cd610864366004612394565b60166020526000908152604090205460ff1681565b34801561088557600080fd5b506104566108943660046122e9565b611278565b3480156108a557600080fd5b5061045660105481565b3480156108bb57600080fd5b506103cd6108ca366004612394565b60136020526000908152604090205460ff1681565b3480156108eb57600080fd5b506103806108fa366004612422565b6112ce565b34801561090b57600080fd5b5061038061091a366004612457565b611323565b34801561092b57600080fd5b5061038061093a366004612407565b611378565b34801561094b57600080fd5b506109546113f6565b6040805194855260208501939093529183015260608201526080016103a4565b34801561098057600080fd5b50600b5461042d906001600160a01b031681565b3480156109a057600080fd5b506012546103cd9060ff1681565b3480156109ba57600080fd5b5061045660025481565b3480156109d057600080fd5b50601a546103cd9062010000900460ff1681565b3480156109f057600080fd5b506104566109ff366004612483565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610a3657600080fd5b50610456600e5481565b348015610a4c57600080fd5b50610380610a5b366004612394565b611419565b348015610a6c57600080fd5b5061045660195481565b6000546001600160a01b03163314610aa95760405162461bcd60e51b8152600401610aa0906124bc565b60405180910390fd5b600f55565b606060048054610abd906124f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae9906124f1565b8015610b365780601f10610b0b57610100808354040283529160200191610b36565b820191906000526020600020905b815481529060010190602001808311610b1957829003601f168201915b5050505050905090565b6000610b4d338484611503565b5060015b92915050565b6000546001600160a01b03163314610b815760405162461bcd60e51b8152600401610aa0906124bc565b6005811015610bd25760405162461bcd60e51b815260206004820152601d60248201527f4d61782074782073686f756c64206265206174206c65617374202e35250000006044820152606401610aa0565b6103e881601754610be39190612541565b610bed9190612558565b5050565b6000546001600160a01b03163314610c1b5760405162461bcd60e51b8152600401610aa0906124bc565b601055565b6000610c2d848484611628565b610c7f8433610c7a8560405180606001604052806028815260200161269b602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611a5a565b611503565b5060019392505050565b6000546001600160a01b03163314610cb35760405162461bcd60e51b8152600401610aa0906124bc565b601280549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314610cf75760405162461bcd60e51b8152600401610aa0906124bc565b6012805460ff19166001179055565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260076020526040812054610d4d905b60175490611a94565b905090565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b4d918590610c7a9086611add565b6000546001600160a01b03163314610db25760405162461bcd60e51b8152600401610aa0906124bc565b601b55565b60004781610e0f670de0b6b3a7640000610e09610d447f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526007602052604090205490565b90611b3c565b90506000610e1d8383611b3c565b949350505050565b6000546001600160a01b03163314610e4f5760405162461bcd60e51b8152600401610aa0906124bc565b6001600160a01b03166000908152601660205260409020805460ff19166001179055565b6000546001600160a01b03163314610e9d5760405162461bcd60e51b8152600401610aa0906124bc565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ee95760405162461bcd60e51b8152600401610aa0906124bc565b6005811015610f445760405162461bcd60e51b815260206004820152602160248201527f4d61782077616c6c65742073686f756c64206265206174206c65617374202e356044820152602560f81b6064820152608401610aa0565b6103e881601754610f559190612541565b610f5f9190612558565b60195550565b6000546001600160a01b03163314610f8f5760405162461bcd60e51b8152600401610aa0906124bc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110035760405162461bcd60e51b8152600401610aa0906124bc565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b606060058054610abd906124f1565b60008161104933610635565b10156110975760405162461bcd60e51b815260206004820152601860248201527f6e6f7420656e6f7567682066756e647320746f207377617000000000000000006044820152606401610aa0565b60006110a283611278565b9050804710156110f45760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f7567682066756e647320696e20636f6e7472616374000000006044820152606401610aa0565b6110fe3384611b7e565b6111083382611cb2565b806003600082825461111a919061257a565b925050819055508260026000828254611133919061257a565b9091555050604080513381526020810185905280820183905290517f37b3abe2b44fc13ceae31d76ce01bb5ae309393fc8b737ead76d60360eb2c4159181900360600190a150600192915050565b6000610b4d3384610c7a856040518060600160405280602581526020016126e3602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611a5a565b6000546001600160a01b031633146111fa5760405162461bcd60e51b8152600401610aa0906124bc565b601a8054911515620100000262ff000019909216919091179055565b6000546001600160a01b031633146112405760405162461bcd60e51b8152600401610aa0906124bc565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6000610b4d338484611628565b600047816112be610d447f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526007602052604090205490565b9050610e1d81610e098685611ce8565b6000546001600160a01b031633146112f85760405162461bcd60e51b8152600401610aa0906124bc565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461134d5760405162461bcd60e51b8152600401610aa0906124bc565b600c839055600d829055600e8190556113708161136a8585611add565b90611add565b601155505050565b6000546001600160a01b031633146113a25760405162461bcd60e51b8152600401610aa0906124bc565b601a80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906113eb90831515815260200190565b60405180910390a150565b6000806000806002546003544761140b610db7565b935093509350935090919293565b6000546001600160a01b031633146114435760405162461bcd60e51b8152600401610aa0906124bc565b6001600160a01b0381166114a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa0565b6001600160a01b0382166115c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa0565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661168c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610aa0565b6001600160a01b0382166116ee5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610aa0565b601a5460ff161561170a57611704838383611d6a565b50505050565b60125460ff16611798576001600160a01b03831660009081526013602052604090205460ff168061175357506001600160a01b03821660009081526013602052604090205460ff165b6117985760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610aa0565b6001600160a01b03831660009081526015602052604090205460ff161580156117da57506001600160a01b03821660009081526015602052604090205460ff16155b15611842576018548111156118425760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610aa0565b30600090815260076020526040902054601b54811080159081906118695750601a5460ff16155b801561188e57506001600160a01b03851660009081526016602052604090205460ff16155b80156118a15750601a54610100900460ff165b156118c657601a5462010000900460ff16156118bd57601b5491505b6118c682611e3e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038816600090815260079091529190912054611918918590611a5a565b6001600160a01b038616600090815260076020908152604080832093909355601390529081205460ff168061196557506001600160a01b03851660009081526013602052604090205460ff165b61197957611974868686611f5f565b61197b565b835b601254909150610100900460ff1680156119ae57506001600160a01b03851660009081526014602052604090205460ff16155b156119e4576019546119d98261136a886001600160a01b031660009081526007602052604090205490565b11156119e457600080fd5b6001600160a01b038516600090815260076020526040902054611a079082611add565b6001600160a01b0380871660008181526007602052604090819020939093559151908816906000805160206126c383398151915290611a499085815260200190565b60405180910390a35050505b505050565b60008184841115611a7e5760405162461bcd60e51b8152600401610aa09190612302565b506000611a8b848661258d565b95945050505050565b6000611ad683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a5a565b9392505050565b600080611aea838561257a565b905083811015611ad65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610aa0565b6000611ad683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612053565b6001600160a01b038216611bde5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610aa0565b6001600160a01b03821660009081526007602052604090205481811015611c525760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610aa0565b6001600160a01b0383166000908152600760205260408120838303905560178054849290611c8190849061258d565b90915550506040518281526000906001600160a01b038516906000805160206126c38339815191529060200161161b565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611a55573d6000803e3d6000fd5b600082600003611cfa57506000610b51565b6000611d068385612541565b905082611d138583612558565b14611ad65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610aa0565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600790915291822054611dbb918490611a5a565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611dea9083611add565b6001600160a01b0380851660008181526007602052604090819020939093559151908616906000805160206126c383398151915290611e2c9086815260200190565b60405180910390a35060019392505050565b601a805460ff19166001179055601154600c544791600091611e6b91600291610e09919082908890611ce8565b90506000611e798483611a94565b9050611e8481612081565b6000611e904785611a94565b90506000611eb6611ead6002600c54611b3c90919063ffffffff16565b60115490611a94565b90506000611ed86002610e0984610e09600c5488611ce890919063ffffffff16565b90506000611ef583610e09600e5487611ce890919063ffffffff16565b90506000611f0d82611f078786611a94565b90611a94565b90508015611f2b57600954611f2b906001600160a01b031682611cb2565b600083118015611f3b5750600087115b15611f4a57611f4a8784612214565b5050601a805460ff1916905550505050505050565b6001600160a01b038316600090815260166020526040812054819060ff1615611fa357611f9c6064610e09600f5486611ce890919063ffffffff16565b9050611fe1565b6001600160a01b03841660009081526016602052604090205460ff1615611fe157611fde6064610e0960105486611ce890919063ffffffff16565b90505b801561204957306000908152600760205260409020546120019082611add565b30600081815260076020526040908190209290925590516001600160a01b038716906000805160206126c3833981519152906120409085815260200190565b60405180910390a35b611a8b8382611a94565b600081836120745760405162461bcd60e51b8152600401610aa09190612302565b506000611a8b8486612558565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120b6576120b66125a0565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561210f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213391906125b6565b81600181518110612146576121466125a0565b6001600160a01b039283166020918202929092010152600a5461216c9130911684611503565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906121a5908590600090869030904290600401612617565b600060405180830381600087803b1580156121bf57600080fd5b505af11580156121d3573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612208929190612653565b60405180910390a15050565b600a5461222c9030906001600160a01b031684611503565b600a546001600160a01b031663f305d7198230856000806122556000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156122bd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122e2919061266c565b5050505050565b6000602082840312156122fb57600080fd5b5035919050565b600060208083528351808285015260005b8181101561232f57858101830151858201604001528201612313565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461236557600080fd5b50565b6000806040838503121561237b57600080fd5b823561238681612350565b946020939093013593505050565b6000602082840312156123a657600080fd5b8135611ad681612350565b6000806000606084860312156123c657600080fd5b83356123d181612350565b925060208401356123e181612350565b929592945050506040919091013590565b8035801515811461240257600080fd5b919050565b60006020828403121561241957600080fd5b611ad6826123f2565b6000806040838503121561243557600080fd5b823561244081612350565b915061244e602084016123f2565b90509250929050565b60008060006060848603121561246c57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561249657600080fd5b82356124a181612350565b915060208301356124b181612350565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061250557607f821691505b60208210810361252557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b5157610b5161252b565b60008261257557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b5157610b5161252b565b81810381811115610b5157610b5161252b565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156125c857600080fd5b8151611ad681612350565b600081518084526020808501945080840160005b8381101561260c5781516001600160a01b0316875295820195908201906001016125e7565b509495945050505050565b85815284602082015260a06040820152600061263660a08301866125d3565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000610e1d60408301846125d3565b60008060006060848603121561268157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203e76f185537529fff264325d61e284161c544fbe655cb76c9b118db17c53692a64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103545760003560e01c8063914eb66a116101c6578063b56abed7116100f7578063cd52c70111610095578063dd62ed3e1161006f578063dd62ed3e146109e4578063ea656ea614610a2a578063f2fde38b14610a40578063fe31452414610a6057600080fd5b8063cd52c70114610994578063d89135cd146109ae578063da00097d146109c457600080fd5b8063c2d4640e116100d1578063c2d4640e146108ff578063c49b9a801461091f578063c59d48471461093f578063c816841b1461097457600080fd5b8063b56abed714610899578063b787dade146108af578063bcd67657146108df57600080fd5b80639e3fa32311610164578063a62dbb131161013e578063a62dbb1314610809578063a9059cbb14610829578063afa9677914610849578063b2ff24101461087957600080fd5b80639e3fa323146107b3578063a457c2d7146107c9578063a5d69d1f146107e957600080fd5b806395d89b41116101a057806395d89b411461074957806397be450e1461075e57806398d8c186146107745780639c3ffe1e1461079357600080fd5b8063914eb66a146106e457806394690ab8146106f9578063954662ea1461071957600080fd5b8063313ce567116102a057806355fbffd01161023e57806374e8414e1161021857806374e8414e146106705780638c0b5e22146106905780638da5cb5b146106a65780638ff4013f146106c457600080fd5b806355fbffd01461060557806370a082311461061a578063714e8c4d1461065057600080fd5b80633f2516881161027a5780633f251688146105a45780633fb7e9c5146105ba57806344547f5d146105d05780634a74bb02146105e657600080fd5b8063313ce5671461054257806339509351146105645780633b97084a1461058457600080fd5b80631bbae6e01161030d5780632563ae83116102e75780632563ae83146104c45780632657fd61146104e457806327c8f835146104f95780632b112e491461052d57600080fd5b80631bbae6e0146104645780631be965171461048457806323b872dd146104a457600080fd5b8063025468f21461036057806306fdde0314610382578063095ea7b3146103ad57806309c1a2fb146103dd5780631694505e1461040d57806318160ddd1461044557600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061038061037b3660046122e9565b610a76565b005b34801561038e57600080fd5b50610397610aae565b6040516103a49190612302565b60405180910390f35b3480156103b957600080fd5b506103cd6103c8366004612368565b610b40565b60405190151581526020016103a4565b3480156103e957600080fd5b506103cd6103f8366004612394565b60146020526000908152604090205460ff1681565b34801561041957600080fd5b50600a5461042d906001600160a01b031681565b6040516001600160a01b0390911681526020016103a4565b34801561045157600080fd5b506017545b6040519081526020016103a4565b34801561047057600080fd5b5061038061047f3660046122e9565b610b57565b34801561049057600080fd5b5061038061049f3660046122e9565b610bf1565b3480156104b057600080fd5b506103cd6104bf3660046123b1565b610c20565b3480156104d057600080fd5b506103806104df366004612407565b610c89565b3480156104f057600080fd5b50610380610ccd565b34801561050557600080fd5b5061042d7f000000000000000000000000000000000000000000000000000000000000dead81565b34801561053957600080fd5b50610456610d06565b34801561054e57600080fd5b5060065460405160ff90911681526020016103a4565b34801561057057600080fd5b506103cd61057f366004612368565b610d52565b34801561059057600080fd5b5061038061059f3660046122e9565b610d88565b3480156105b057600080fd5b50610456600d5481565b3480156105c657600080fd5b5061045660115481565b3480156105dc57600080fd5b5061045660035481565b3480156105f257600080fd5b50601a546103cd90610100900460ff1681565b34801561061157600080fd5b50610456610db7565b34801561062657600080fd5b50610456610635366004612394565b6001600160a01b031660009081526007602052604090205490565b34801561065c57600080fd5b5061038061066b366004612394565b610e25565b34801561067c57600080fd5b5061038061068b366004612394565b610e73565b34801561069c57600080fd5b5061045660185481565b3480156106b257600080fd5b506000546001600160a01b031661042d565b3480156106d057600080fd5b506103806106df3660046122e9565b610ebf565b3480156106f057600080fd5b50610380610f65565b34801561070557600080fd5b50610380610714366004612422565b610fd9565b34801561072557600080fd5b506103cd610734366004612394565b60156020526000908152604090205460ff1681565b34801561075557600080fd5b5061039761102e565b34801561076a57600080fd5b50610456600f5481565b34801561078057600080fd5b506012546103cd90610100900460ff1681565b34801561079f57600080fd5b506103cd6107ae3660046122e9565b61103d565b3480156107bf57600080fd5b50610456600c5481565b3480156107d557600080fd5b506103cd6107e4366004612368565b611181565b3480156107f557600080fd5b50610380610804366004612407565b6111d0565b34801561081557600080fd5b50610380610824366004612422565b611216565b34801561083557600080fd5b506103cd610844366004612368565b61126b565b34801561085557600080fd5b506103cd610864366004612394565b60166020526000908152604090205460ff1681565b34801561088557600080fd5b506104566108943660046122e9565b611278565b3480156108a557600080fd5b5061045660105481565b3480156108bb57600080fd5b506103cd6108ca366004612394565b60136020526000908152604090205460ff1681565b3480156108eb57600080fd5b506103806108fa366004612422565b6112ce565b34801561090b57600080fd5b5061038061091a366004612457565b611323565b34801561092b57600080fd5b5061038061093a366004612407565b611378565b34801561094b57600080fd5b506109546113f6565b6040805194855260208501939093529183015260608201526080016103a4565b34801561098057600080fd5b50600b5461042d906001600160a01b031681565b3480156109a057600080fd5b506012546103cd9060ff1681565b3480156109ba57600080fd5b5061045660025481565b3480156109d057600080fd5b50601a546103cd9062010000900460ff1681565b3480156109f057600080fd5b506104566109ff366004612483565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610a3657600080fd5b50610456600e5481565b348015610a4c57600080fd5b50610380610a5b366004612394565b611419565b348015610a6c57600080fd5b5061045660195481565b6000546001600160a01b03163314610aa95760405162461bcd60e51b8152600401610aa0906124bc565b60405180910390fd5b600f55565b606060048054610abd906124f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae9906124f1565b8015610b365780601f10610b0b57610100808354040283529160200191610b36565b820191906000526020600020905b815481529060010190602001808311610b1957829003601f168201915b5050505050905090565b6000610b4d338484611503565b5060015b92915050565b6000546001600160a01b03163314610b815760405162461bcd60e51b8152600401610aa0906124bc565b6005811015610bd25760405162461bcd60e51b815260206004820152601d60248201527f4d61782074782073686f756c64206265206174206c65617374202e35250000006044820152606401610aa0565b6103e881601754610be39190612541565b610bed9190612558565b5050565b6000546001600160a01b03163314610c1b5760405162461bcd60e51b8152600401610aa0906124bc565b601055565b6000610c2d848484611628565b610c7f8433610c7a8560405180606001604052806028815260200161269b602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611a5a565b611503565b5060019392505050565b6000546001600160a01b03163314610cb35760405162461bcd60e51b8152600401610aa0906124bc565b601280549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314610cf75760405162461bcd60e51b8152600401610aa0906124bc565b6012805460ff19166001179055565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead16600090815260076020526040812054610d4d905b60175490611a94565b905090565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b4d918590610c7a9086611add565b6000546001600160a01b03163314610db25760405162461bcd60e51b8152600401610aa0906124bc565b601b55565b60004781610e0f670de0b6b3a7640000610e09610d447f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b031660009081526007602052604090205490565b90611b3c565b90506000610e1d8383611b3c565b949350505050565b6000546001600160a01b03163314610e4f5760405162461bcd60e51b8152600401610aa0906124bc565b6001600160a01b03166000908152601660205260409020805460ff19166001179055565b6000546001600160a01b03163314610e9d5760405162461bcd60e51b8152600401610aa0906124bc565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ee95760405162461bcd60e51b8152600401610aa0906124bc565b6005811015610f445760405162461bcd60e51b815260206004820152602160248201527f4d61782077616c6c65742073686f756c64206265206174206c65617374202e356044820152602560f81b6064820152608401610aa0565b6103e881601754610f559190612541565b610f5f9190612558565b60195550565b6000546001600160a01b03163314610f8f5760405162461bcd60e51b8152600401610aa0906124bc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110035760405162461bcd60e51b8152600401610aa0906124bc565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b606060058054610abd906124f1565b60008161104933610635565b10156110975760405162461bcd60e51b815260206004820152601860248201527f6e6f7420656e6f7567682066756e647320746f207377617000000000000000006044820152606401610aa0565b60006110a283611278565b9050804710156110f45760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f7567682066756e647320696e20636f6e7472616374000000006044820152606401610aa0565b6110fe3384611b7e565b6111083382611cb2565b806003600082825461111a919061257a565b925050819055508260026000828254611133919061257a565b9091555050604080513381526020810185905280820183905290517f37b3abe2b44fc13ceae31d76ce01bb5ae309393fc8b737ead76d60360eb2c4159181900360600190a150600192915050565b6000610b4d3384610c7a856040518060600160405280602581526020016126e3602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611a5a565b6000546001600160a01b031633146111fa5760405162461bcd60e51b8152600401610aa0906124bc565b601a8054911515620100000262ff000019909216919091179055565b6000546001600160a01b031633146112405760405162461bcd60e51b8152600401610aa0906124bc565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6000610b4d338484611628565b600047816112be610d447f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b031660009081526007602052604090205490565b9050610e1d81610e098685611ce8565b6000546001600160a01b031633146112f85760405162461bcd60e51b8152600401610aa0906124bc565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461134d5760405162461bcd60e51b8152600401610aa0906124bc565b600c839055600d829055600e8190556113708161136a8585611add565b90611add565b601155505050565b6000546001600160a01b031633146113a25760405162461bcd60e51b8152600401610aa0906124bc565b601a80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906113eb90831515815260200190565b60405180910390a150565b6000806000806002546003544761140b610db7565b935093509350935090919293565b6000546001600160a01b031633146114435760405162461bcd60e51b8152600401610aa0906124bc565b6001600160a01b0381166114a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa0565b6001600160a01b0382166115c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa0565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661168c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610aa0565b6001600160a01b0382166116ee5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610aa0565b601a5460ff161561170a57611704838383611d6a565b50505050565b60125460ff16611798576001600160a01b03831660009081526013602052604090205460ff168061175357506001600160a01b03821660009081526013602052604090205460ff165b6117985760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610aa0565b6001600160a01b03831660009081526015602052604090205460ff161580156117da57506001600160a01b03821660009081526015602052604090205460ff16155b15611842576018548111156118425760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610aa0565b30600090815260076020526040902054601b54811080159081906118695750601a5460ff16155b801561188e57506001600160a01b03851660009081526016602052604090205460ff16155b80156118a15750601a54610100900460ff165b156118c657601a5462010000900460ff16156118bd57601b5491505b6118c682611e3e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038816600090815260079091529190912054611918918590611a5a565b6001600160a01b038616600090815260076020908152604080832093909355601390529081205460ff168061196557506001600160a01b03851660009081526013602052604090205460ff165b61197957611974868686611f5f565b61197b565b835b601254909150610100900460ff1680156119ae57506001600160a01b03851660009081526014602052604090205460ff16155b156119e4576019546119d98261136a886001600160a01b031660009081526007602052604090205490565b11156119e457600080fd5b6001600160a01b038516600090815260076020526040902054611a079082611add565b6001600160a01b0380871660008181526007602052604090819020939093559151908816906000805160206126c383398151915290611a499085815260200190565b60405180910390a35050505b505050565b60008184841115611a7e5760405162461bcd60e51b8152600401610aa09190612302565b506000611a8b848661258d565b95945050505050565b6000611ad683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a5a565b9392505050565b600080611aea838561257a565b905083811015611ad65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610aa0565b6000611ad683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612053565b6001600160a01b038216611bde5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610aa0565b6001600160a01b03821660009081526007602052604090205481811015611c525760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610aa0565b6001600160a01b0383166000908152600760205260408120838303905560178054849290611c8190849061258d565b90915550506040518281526000906001600160a01b038516906000805160206126c38339815191529060200161161b565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611a55573d6000803e3d6000fd5b600082600003611cfa57506000610b51565b6000611d068385612541565b905082611d138583612558565b14611ad65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610aa0565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600790915291822054611dbb918490611a5a565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611dea9083611add565b6001600160a01b0380851660008181526007602052604090819020939093559151908616906000805160206126c383398151915290611e2c9086815260200190565b60405180910390a35060019392505050565b601a805460ff19166001179055601154600c544791600091611e6b91600291610e09919082908890611ce8565b90506000611e798483611a94565b9050611e8481612081565b6000611e904785611a94565b90506000611eb6611ead6002600c54611b3c90919063ffffffff16565b60115490611a94565b90506000611ed86002610e0984610e09600c5488611ce890919063ffffffff16565b90506000611ef583610e09600e5487611ce890919063ffffffff16565b90506000611f0d82611f078786611a94565b90611a94565b90508015611f2b57600954611f2b906001600160a01b031682611cb2565b600083118015611f3b5750600087115b15611f4a57611f4a8784612214565b5050601a805460ff1916905550505050505050565b6001600160a01b038316600090815260166020526040812054819060ff1615611fa357611f9c6064610e09600f5486611ce890919063ffffffff16565b9050611fe1565b6001600160a01b03841660009081526016602052604090205460ff1615611fe157611fde6064610e0960105486611ce890919063ffffffff16565b90505b801561204957306000908152600760205260409020546120019082611add565b30600081815260076020526040908190209290925590516001600160a01b038716906000805160206126c3833981519152906120409085815260200190565b60405180910390a35b611a8b8382611a94565b600081836120745760405162461bcd60e51b8152600401610aa09190612302565b506000611a8b8486612558565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120b6576120b66125a0565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561210f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213391906125b6565b81600181518110612146576121466125a0565b6001600160a01b039283166020918202929092010152600a5461216c9130911684611503565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906121a5908590600090869030904290600401612617565b600060405180830381600087803b1580156121bf57600080fd5b505af11580156121d3573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612208929190612653565b60405180910390a15050565b600a5461222c9030906001600160a01b031684611503565b600a546001600160a01b031663f305d7198230856000806122556000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156122bd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122e2919061266c565b5050505050565b6000602082840312156122fb57600080fd5b5035919050565b600060208083528351808285015260005b8181101561232f57858101830151858201604001528201612313565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461236557600080fd5b50565b6000806040838503121561237b57600080fd5b823561238681612350565b946020939093013593505050565b6000602082840312156123a657600080fd5b8135611ad681612350565b6000806000606084860312156123c657600080fd5b83356123d181612350565b925060208401356123e181612350565b929592945050506040919091013590565b8035801515811461240257600080fd5b919050565b60006020828403121561241957600080fd5b611ad6826123f2565b6000806040838503121561243557600080fd5b823561244081612350565b915061244e602084016123f2565b90509250929050565b60008060006060848603121561246c57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561249657600080fd5b82356124a181612350565b915060208301356124b181612350565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061250557607f821691505b60208210810361252557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b5157610b5161252b565b60008261257557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b5157610b5161252b565b81810381811115610b5157610b5161252b565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156125c857600080fd5b8151611ad681612350565b600081518084526020808501945080840160005b8381101561260c5781516001600160a01b0316875295820195908201906001016125e7565b509495945050505050565b85815284602082015260a06040820152600061263660a08301866125d3565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000610e1d60408301846125d3565b60008060006060848603121561268157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203e76f185537529fff264325d61e284161c544fbe655cb76c9b118db17c53692a64736f6c63430008130033

Deployed Bytecode Sourcemap

15805:16653:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21846:92;;;;;;;;;;-1:-1:-1;21846:92:0;;;;;:::i;:::-;;:::i;:::-;;19322:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20712:186;;;;;;;;;;-1:-1:-1;20712:186:0;;;;;:::i;:::-;;:::i;:::-;;;1373:14:1;;1366:22;1348:41;;1336:2;1321:18;20712:186:0;1208:187:1;16852:55:0;;;;;;;;;;-1:-1:-1;16852:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16389:41;;;;;;;;;;-1:-1:-1;16389:41:0;;;;-1:-1:-1;;;;;16389:41:0;;;;;;-1:-1:-1;;;;;1843:32:1;;;1825:51;;1813:2;1798:18;16389:41:0;1652:230:1;19599:100:0;;;;;;;;;;-1:-1:-1;19679:12:0;;19599:100;;;2033:25:1;;;2021:2;2006:18;19599:100:0;1887:177:1;22452:202:0;;;;;;;;;;-1:-1:-1;22452:202:0;;;;;:::i;:::-;;:::i;21946:94::-;;;;;;;;;;-1:-1:-1;21946:94:0;;;;;:::i;:::-;;:::i;25860:446::-;;;;;;;;;;-1:-1:-1;25860:446:0;;;;;:::i;:::-;;:::i;22662:115::-;;;;;;;;;;-1:-1:-1;22662:115:0;;;;;:::i;:::-;;:::i;21759:79::-;;;;;;;;;;;;;:::i;16292:90::-;;;;;;;;;;;;;;;23761:128;;;;;;;;;;;;;:::i;19508:83::-;;;;;;;;;;-1:-1:-1;19574:9:0;;19508:83;;19574:9;;;;3230:36:1;;3218:2;3203:18;19508:83:0;3088:184:1;20010:293:0;;;;;;;;;;-1:-1:-1;20010:293:0;;;;;:::i;:::-;;:::i;23182:122::-;;;;;;;;;;-1:-1:-1;23182:122:0;;;;;:::i;:::-;;:::i;16514:29::-;;;;;;;;;;;;;;;;16663:37;;;;;;;;;;;;;;;;15962:35;;;;;;;;;;;;;;;;17234:40;;;;;;;;;;-1:-1:-1;17234:40:0;;;;;;;;;;;32146:309;;;;;;;;;;;;;:::i;19707:119::-;;;;;;;;;;-1:-1:-1;19707:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;19800:18:0;19773:7;19800:18;;;:9;:18;;;;;;;19707:119;21294:109;;;;;;;;;;-1:-1:-1;21294:109:0;;;;;:::i;:::-;;:::i;23312:129::-;;;;;;;;;;-1:-1:-1;23312:129:0;;;;;:::i;:::-;;:::i;17082:55::-;;;;;;;;;;;;;;;;6543:79;;;;;;;;;;-1:-1:-1;6581:7:0;6608:6;-1:-1:-1;;;;;6608:6:0;6543:79;;22961:213;;;;;;;;;;-1:-1:-1;22961:213:0;;;;;:::i;:::-;;:::i;6757:145::-;;;;;;;;;;;;;:::i;22785:168::-;;;;;;;;;;-1:-1:-1;22785:168:0;;;;;:::i;:::-;;:::i;16914:51::-;;;;;;;;;;-1:-1:-1;16914:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19413:87;;;;;;;;;;;;;:::i;16590:29::-;;;;;;;;;;;;;;;;16748:36;;;;;;;;;;-1:-1:-1;16748:36:0;;;;;;;;;;;25070:582;;;;;;;;;;-1:-1:-1;25070:582:0;;;;;:::i;:::-;;:::i;16472:35::-;;;;;;;;;;;;;;;;20311:393;;;;;;;;;;-1:-1:-1;20311:393:0;;;;;:::i;:::-;;:::i;23628:125::-;;;;;;;;;;-1:-1:-1;23628:125:0;;;;;:::i;:::-;;:::i;21580:171::-;;;;;;;;;;-1:-1:-1;21580:171:0;;;;;:::i;:::-;;:::i;25660:192::-;;;;;;;;;;-1:-1:-1;25660:192:0;;;;;:::i;:::-;;:::i;16972:48::-;;;;;;;;;;-1:-1:-1;16972:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24634:287;;;;;;;;;;-1:-1:-1;24634:287:0;;;;;:::i;:::-;;:::i;16626:30::-;;;;;;;;;;;;;;;;16791:54;;;;;;;;;;-1:-1:-1;16791:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21411:161;;;;;;;;;;-1:-1:-1;21411:161:0;;;;;:::i;:::-;;:::i;22048:396::-;;;;;;;;;;-1:-1:-1;22048:396:0;;;;;:::i;:::-;;:::i;23449:171::-;;;;;;;;;;-1:-1:-1;23449:171:0;;;;;:::i;:::-;;:::i;31864:274::-;;;;;;;;;;;;;:::i;:::-;;;;4149:25:1;;;4205:2;4190:18;;4183:34;;;;4233:18;;;4226:34;4291:2;4276:18;;4269:34;4136:3;4121:19;31864:274:0;3918:391:1;16437:26:0;;;;;;;;;;-1:-1:-1;16437:26:0;;;;-1:-1:-1;;;;;16437:26:0;;;16709:32;;;;;;;;;;-1:-1:-1;16709:32:0;;;;;;;;15925:30;;;;;;;;;;;;;;;;17281:45;;;;;;;;;;-1:-1:-1;17281:45:0;;;;;;;;;;;19834:168;;;;;;;;;;-1:-1:-1;19834:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;19967:18:0;;;19940:7;19967:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19834:168;16550:31;;;;;;;;;;;;;;;;6910:281;;;;;;;;;;-1:-1:-1;6910:281:0;;;;;:::i;:::-;;:::i;17144:53::-;;;;;;;;;;;;;;;;21846:92;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;;;;;;;;;21912:9:::1;:18:::0;21846:92::o;19322:83::-;19359:13;19392:5;19385:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19322:83;:::o;20712:186::-;20812:4;20829:39;307:10;20852:7;20861:6;20829:8;:39::i;:::-;-1:-1:-1;20886:4:0;20712:186;;;;;:::o;22452:202::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;22551:1:::1;22536:11;:16;;22528:58;;;::::0;-1:-1:-1;;;22528:58:0;;5655:2:1;22528:58:0::1;::::0;::::1;5637:21:1::0;5694:2;5674:18;;;5667:30;5733:31;5713:18;;;5706:59;5782:18;;22528:58:0::1;5453:353:1::0;22528:58:0::1;22642:4;22627:11;22612:12;;:26;;;;:::i;:::-;22611:35;;;;:::i;:::-;-1:-1:-1::0;;22452:202:0:o;21946:94::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;22013:10:::1;:19:::0;21946:94::o;25860:446::-;25992:4;26009:36;26019:6;26027:9;26038:6;26009:9;:36::i;:::-;26056:220;26079:6;307:10;26127:138;26183:6;26127:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26127:19:0;;;;;;:11;:19;;;;;;;;307:10;26127:33;;;;;;;;;;:37;:138::i;:::-;26056:8;:220::i;:::-;-1:-1:-1;26294:4:0;25860:446;;;;;:::o;22662:115::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;22741:17:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;22741:28:0;;::::1;::::0;;;::::1;::::0;;22662:115::o;21759:79::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;21811:12:::1;:19:::0;;-1:-1:-1;;21811:19:0::1;21826:4;21811:19;::::0;;21759:79::o;23761:128::-;-1:-1:-1;;;;;23868:11:0;19800:18;23814:7;19800:18;;;:9;:18;;;;;;23841:40;;23858:22;23841:12;;;:16;:40::i;:::-;23834:47;;23761:128;:::o;20010:293::-;307:10;20123:4;20212:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20212:34:0;;;;;;;;;;20123:4;;20140:133;;20190:7;;20212:50;;20251:10;20212:38;:50::i;23182:122::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;23262:23:::1;:34:::0;23182:122::o;32146:309::-;32197:7;32248:21;32197:7;32304:54;32349:8;32304:40;32321:22;32331:11;-1:-1:-1;;;;;19800:18:0;19773:7;19800:18;;;:9;:18;;;;;;;19707:119;32304:40;:44;;:54::i;:::-;32280:78;-1:-1:-1;32369:13:0;32385:39;:20;32280:78;32385:24;:39::i;:::-;32369:55;32146:309;-1:-1:-1;;;;32146:309:0:o;21294:109::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21363:25:0::1;;::::0;;;:16:::1;:25;::::0;;;;:32;;-1:-1:-1;;21363:32:0::1;21391:4;21363:32;::::0;;21294:109::o;23312:129::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;23393:18:::1;:40:::0;;-1:-1:-1;;;;;;23393:40:0::1;-1:-1:-1::0;;;;;23393:40:0;;;::::1;::::0;;;::::1;::::0;;23312:129::o;22961:213::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;23065:1:::1;23046:15;:20;;23038:66;;;::::0;-1:-1:-1;;;23038:66:0;;6540:2:1;23038:66:0::1;::::0;::::1;6522:21:1::0;6579:2;6559:18;;;6552:30;6618:34;6598:18;;;6591:62;-1:-1:-1;;;6669:18:1;;;6662:31;6710:19;;23038:66:0::1;6338:397:1::0;23038:66:0::1;23162:4;23143:15;23128:12;;:30;;;;:::i;:::-;23127:39;;;;:::i;:::-;23115:9;:51:::0;-1:-1:-1;22961:213:0:o;6757:145::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;6861:1:::1;6845:6:::0;;6824:40:::1;::::0;-1:-1:-1;;;;;6845:6:0;;::::1;::::0;6824:40:::1;::::0;6861:1;;6824:40:::1;6892:1;6875:19:::0;;-1:-1:-1;;;;;;6875:19:0::1;::::0;;6757:145::o;22785:168::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22905:31:0;;;::::1;;::::0;;;:23:::1;:31;::::0;;;;:40;;-1:-1:-1;;22905:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22785:168::o;19413:87::-;19452:13;19485:7;19478:14;;;;;:::i;25070:582::-;25123:4;25175:6;25148:23;307:10;19707:119;:::i;25148:23::-;:33;;25140:70;;;;-1:-1:-1;;;25140:70:0;;6942:2:1;25140:70:0;;;6924:21:1;6981:2;6961:18;;;6954:30;7020:26;7000:18;;;6993:54;7064:18;;25140:70:0;6740:348:1;25140:70:0;25223:17;25243;25253:6;25243:9;:17::i;:::-;25223:37;;25320:9;25295:21;:34;;25273:112;;;;-1:-1:-1;;;25273:112:0;;7295:2:1;25273:112:0;;;7277:21:1;7334:2;7314:18;;;7307:30;7373;7353:18;;;7346:58;7421:18;;25273:112:0;7093:352:1;25273:112:0;25398:27;307:10;25418:6;25398:5;:27::i;:::-;25436:45;307:10;25471:9;25436:20;:45::i;:::-;25514:9;25494:16;;:29;;;;;;;:::i;:::-;;;;;;;;25549:6;25534:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;25573:49:0;;;307:10;7790:51:1;;7872:2;7857:18;;7850:34;;;7900:18;;;7893:34;;;25573:49:0;;;;;;;7778:2:1;25573:49:0;;;-1:-1:-1;25640:4:0;;25070:582;-1:-1:-1;;25070:582:0:o;20311:393::-;20429:4;20446:228;307:10;20496:7;20518:145;20575:15;20518:145;;;;;;;;;;;;;;;;;307:10;20518:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20518:34:0;;;;;;;;;;;;:38;:145::i;23628:125::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;23709:25:::1;:36:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;23709:36:0;;::::1;::::0;;;::::1;::::0;;23628:125::o;21580:171::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21701:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:42;;-1:-1:-1;;21701:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21580:171::o;25660:192::-;25763:4;25780:42;307:10;25804:9;25815:6;25780:9;:42::i;24634:287::-;24690:13;24747:21;24690:13;24803:40;24820:22;24830:11;-1:-1:-1;;;;;19800:18:0;19773:7;19800:18;;;:9;:18;;;;;;;19707:119;24803:40;24779:64;-1:-1:-1;24862:51:0;24779:64;24862:32;:6;24873:20;24862:10;:32::i;21411:161::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21528:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;21528:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21411:161::o;22048:396::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;22215:16:::1;:36:::0;;;22262:10:::1;:24:::0;;;22297:12:::1;:27:::0;;;22362:74:::1;22312:12:::0;22362:32:::1;22234:17:::0;22275:11;22362:20:::1;:32::i;:::-;:36:::0;::::1;:74::i;:::-;22337:22;:99:::0;-1:-1:-1;;;22048:396:0:o;23449:171::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;23526:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;23526:32:0;;::::1;;::::0;;23574:38:::1;::::0;::::1;::::0;::::1;::::0;23550:8;1373:14:1;1366:22;1348:41;;1336:2;1321:18;;1208:187;23574:38:0::1;;;;;;;;23449:171:::0;:::o;31864:274::-;31932:7;31941;31950;31959;32006:11;;32032:16;;32063:21;32099:20;:18;:20::i;:::-;31984:146;;;;;;;;31864:274;;;;:::o;6910:281::-;6670:6;;-1:-1:-1;;;;;6670:6:0;307:10;6670:22;6662:67;;;;-1:-1:-1;;;6662:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7013:22:0;::::1;6991:110;;;::::0;-1:-1:-1;;;6991:110:0;;8140:2:1;6991:110:0::1;::::0;::::1;8122:21:1::0;8179:2;8159:18;;;8152:30;8218:34;8198:18;;;8191:62;-1:-1:-1;;;8269:18:1;;;8262:36;8315:19;;6991:110:0::1;7938:402:1::0;6991:110:0::1;7138:6;::::0;;7117:38:::1;::::0;-1:-1:-1;;;;;7117:38:0;;::::1;::::0;7138:6;::::1;::::0;7117:38:::1;::::0;::::1;7166:6;:17:::0;;-1:-1:-1;;;;;;7166:17:0::1;-1:-1:-1::0;;;;;7166:17:0;;;::::1;::::0;;;::::1;::::0;;6910:281::o;20906:380::-;-1:-1:-1;;;;;21042:19:0;;21034:68;;;;-1:-1:-1;;;21034:68:0;;8547:2:1;21034:68:0;;;8529:21:1;8586:2;8566:18;;;8559:30;8625:34;8605:18;;;8598:62;-1:-1:-1;;;8676:18:1;;;8669:34;8720:19;;21034:68:0;8345:400:1;21034:68:0;-1:-1:-1;;;;;21121:21:0;;21113:68;;;;-1:-1:-1;;;21113:68:0;;8952:2:1;21113:68:0;;;8934:21:1;8991:2;8971:18;;;8964:30;9030:34;9010:18;;;9003:62;-1:-1:-1;;;9081:18:1;;;9074:32;9123:19;;21113:68:0;8750:398:1;21113:68:0;-1:-1:-1;;;;;21194:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21246:32;;2033:25:1;;;21246:32:0;;2006:18:1;21246:32:0;;;;;;;;20906:380;;;:::o;26314:2136::-;-1:-1:-1;;;;;26454:20:0;;26446:70;;;;-1:-1:-1;;;26446:70:0;;9355:2:1;26446:70:0;;;9337:21:1;9394:2;9374:18;;;9367:30;9433:34;9413:18;;;9406:62;-1:-1:-1;;;9484:18:1;;;9477:35;9529:19;;26446:70:0;9153:401:1;26446:70:0;-1:-1:-1;;;;;26535:23:0;;26527:71;;;;-1:-1:-1;;;26527:71:0;;9761:2:1;26527:71:0;;;9743:21:1;9800:2;9780:18;;;9773:30;9839:34;9819:18;;;9812:62;-1:-1:-1;;;9890:18:1;;;9883:33;9933:19;;26527:71:0;9559:399:1;26527:71:0;26615:16;;;;26611:1832;;;26648:41;26663:6;26671:9;26682:6;26648:14;:41::i;:::-;;26314:2136;;;:::o;26611:1832::-;26729:12;;;;26724:242;;-1:-1:-1;;;;;26792:30:0;;;;;;:22;:30;;;;;;;;;:92;;-1:-1:-1;;;;;;26851:33:0;;;;;;:22;:33;;;;;;;;26792:92;26762:188;;;;-1:-1:-1;;;26762:188:0;;10165:2:1;26762:188:0;;;10147:21:1;10204:2;10184:18;;;10177:30;-1:-1:-1;;;10223:18:1;;;10216:52;10285:18;;26762:188:0;9963:346:1;26762:188:0;-1:-1:-1;;;;;26987:27:0;;;;;;:19;:27;;;;;;;;26986:28;:63;;;;-1:-1:-1;;;;;;27019:30:0;;;;;;:19;:30;;;;;;;;27018:31;26986:63;26982:239;;;27110:11;;27100:6;:21;;27070:135;;;;-1:-1:-1;;;27070:135:0;;10516:2:1;27070:135:0;;;10498:21:1;10555:2;10535:18;;;10528:30;10594:34;10574:18;;;10567:62;-1:-1:-1;;;10645:18:1;;;10638:38;10693:19;;27070:135:0;10314:404:1;27070:135:0;27286:4;27237:28;19800:18;;;:9;:18;;;;;;27379:23;;27338:64;;;;;;;27441:61;;-1:-1:-1;27486:16:0;;;;27485:17;27441:61;:107;;;;-1:-1:-1;;;;;;27524:24:0;;;;;;:16;:24;;;;;;;;27523:25;27441:107;:149;;;;-1:-1:-1;27569:21:0;;;;;;;27441:149;27419:375;;;27629:25;;;;;;;27625:98;;;27700:23;;27677:46;;27625:98;27742:36;27757:20;27742:14;:36::i;:::-;27830:102;;;;;;;;;;;-1:-1:-1;;;27830:102:0;;;;;;;;-1:-1:-1;;;;;27830:17:0;;-1:-1:-1;27830:17:0;;;:9;:17;;;;;;;;:102;;27870:6;;27830:21;:102::i;:::-;-1:-1:-1;;;;;27810:17:0;;;;;;:9;:17;;;;;;;;:122;;;;27972:22;:30;;;;;;;;;:84;;-1:-1:-1;;;;;;28023:33:0;;;;;;:22;:33;;;;;;;;27972:84;27971:166;;28103:34;28111:6;28119:9;28130:6;28103:7;:34::i;:::-;27971:166;;;28077:6;27971:166;28158:17;;27949:188;;-1:-1:-1;28158:17:0;;;;;:56;;;;-1:-1:-1;;;;;;28180:34:0;;;;;;:23;:34;;;;;;;;28179:35;28158:56;28154:138;;;28282:9;;28241:37;28266:11;28241:20;28251:9;-1:-1:-1;;;;;19800:18:0;19773:7;19800:18;;;:9;:18;;;;;;;19707:119;28241:37;:50;;28233:59;;;;;;-1:-1:-1;;;;;28332:20:0;;;;;;:9;:20;;;;;;:37;;28357:11;28332:24;:37::i;:::-;-1:-1:-1;;;;;28309:20:0;;;;;;;:9;:20;;;;;;;:60;;;;28391:40;;;;;;-1:-1:-1;;;;;;;;;;;28391:40:0;;;28419:11;2033:25:1;;2021:2;2006:18;;1887:177;28391:40:0;;;;;;;;26707:1736;;;26611:1832;26314:2136;;;:::o;1738:226::-;1858:7;1894:12;1886:6;;;;1878:29;;;;-1:-1:-1;;;1878:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1918:9:0;1930:5;1934:1;1930;:5;:::i;:::-;1918:17;1738:226;-1:-1:-1;;;;;1738:226:0:o;1594:136::-;1652:7;1679:43;1683:1;1686;1679:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1672:50;1594:136;-1:-1:-1;;;1594:136:0:o;1405:181::-;1463:7;;1495:5;1499:1;1495;:5;:::i;:::-;1483:17;;1524:1;1519;:6;;1511:46;;;;-1:-1:-1;;;1511:46:0;;11058:2:1;1511:46:0;;;11040:21:1;11097:2;11077:18;;;11070:30;11136:29;11116:18;;;11109:57;11183:18;;1511:46:0;10856:351:1;2230:132:0;2288:7;2315:39;2319:1;2322;2315:39;;;;;;;;;;;;;;;;;:3;:39::i;24150:472::-;-1:-1:-1;;;;;24234:21:0;;24226:67;;;;-1:-1:-1;;;24226:67:0;;11414:2:1;24226:67:0;;;11396:21:1;11453:2;11433:18;;;11426:30;11492:34;11472:18;;;11465:62;-1:-1:-1;;;11543:18:1;;;11536:31;11584:19;;24226:67:0;11212:397:1;24226:67:0;-1:-1:-1;;;;;24331:18:0;;24306:22;24331:18;;;:9;:18;;;;;;24370:24;;;;24362:71;;;;-1:-1:-1;;;24362:71:0;;11816:2:1;24362:71:0;;;11798:21:1;11855:2;11835:18;;;11828:30;11894:34;11874:18;;;11867:62;-1:-1:-1;;;11945:18:1;;;11938:32;11987:19;;24362:71:0;11614:398:1;24362:71:0;-1:-1:-1;;;;;24471:18:0;;;;;;:9;:18;;;;;24492:23;;;24471:44;;24537:12;:22;;24509:6;;24471:18;24537:22;;24509:6;;24537:22;:::i;:::-;;;;-1:-1:-1;;24577:37:0;;2033:25:1;;;24603:1:0;;-1:-1:-1;;;;;24577:37:0;;;-1:-1:-1;;;;;;;;;;;24577:37:0;2021:2:1;2006:18;24577:37:0;1887:177:1;23897:151:0;24014:26;;-1:-1:-1;;;;;24014:18:0;;;:26;;;;;24033:6;;24014:26;;;;24033:6;24014:18;:26;;;;;;;;;;;;;;;;;;;1972:250;2030:7;2054:1;2059;2054:6;2050:47;;-1:-1:-1;2084:1:0;2077:8;;2050:47;2109:9;2121:5;2125:1;2121;:5;:::i;:::-;2109:17;-1:-1:-1;2154:1:0;2145:5;2149:1;2109:17;2145:5;:::i;:::-;:10;2137:56;;;;-1:-1:-1;;;2137:56:0;;12219:2:1;2137:56:0;;;12201:21:1;12258:2;12238:18;;;12231:30;12297:34;12277:18;;;12270:62;-1:-1:-1;;;12348:18:1;;;12341:31;12389:19;;2137:56:0;12017:397:1;28458:401:0;28622:90;;;;;;;;;;;-1:-1:-1;;;28622:90:0;;;;;;;;-1:-1:-1;;;;;28622:17:0;;28585:4;28622:17;;;:9;:17;;;;;;;:90;;28658:6;;28622:21;:90::i;:::-;-1:-1:-1;;;;;28602:17:0;;;;;;;:9;:17;;;;;;:110;;;;28746:20;;;;;;;:32;;28771:6;28746:24;:32::i;:::-;-1:-1:-1;;;;;28723:20:0;;;;;;;:9;:20;;;;;;;:55;;;;28794:35;;;;;;-1:-1:-1;;;;;;;;;;;28794:35:0;;;28822:6;2033:25:1;;2021:2;2006:18;;1887:177;28794:35:0;;;;;;;;-1:-1:-1;28847:4:0;28458:401;;;;;:::o;28867:1178::-;17893:16;:23;;-1:-1:-1;;17893:23:0;17912:4;17893:23;;;29086:22:::1;::::0;29050:16:::1;::::0;28970:21:::1;::::0;17893:16;;29024:106:::1;::::0;29128:1:::1;::::0;29024:85:::1;::::0;29086:22;29024:85;;:7;;:25:::1;:43::i;:106::-;29002:128:::0;-1:-1:-1;29141:21:0::1;29165:24;:7:::0;29002:128;29165:11:::1;:24::i;:::-;29141:48;;29202:31;29219:13;29202:16;:31::i;:::-;29244:22;29269:71;:21;29309:20:::0;29269:25:::1;:71::i;:::-;29244:96;;29353:19;29375:75;29416:23;29437:1;29416:16;;:20;;:23;;;;:::i;:::-;29375:22;::::0;;:26:::1;:75::i;:::-;29353:97;;29463:26;29492:102;29592:1;29492:81;29561:11;29492:50;29525:16;;29492:14;:32;;:50;;;;:::i;:102::-;29463:131;;29605:21;29629:73;29680:11;29629:32;29648:12;;29629:14;:18;;:32;;;;:::i;:73::-;29605:97:::0;-1:-1:-1;29713:20:0::1;29736:81;29605:97:::0;29736:38:::1;:14:::0;29755:18;29736::::1;:38::i;:::-;:42:::0;::::1;:81::i;:::-;29713:104:::0;-1:-1:-1;29834:16:0;;29830:89:::1;;29886:18;::::0;29865:54:::1;::::0;-1:-1:-1;;;;;29886:18:0::1;29906:12:::0;29865:20:::1;:54::i;:::-;29957:1;29936:18;:22;:41;;;;;29976:1;29962:11;:15;29936:41;29932:105;;;29992:45;30005:11;30018:18;29992:12;:45::i;:::-;-1:-1:-1::0;;17939:16:0;:24;;-1:-1:-1;;17939:24:0;;;-1:-1:-1;;;;;;;28867:1178:0:o;31240:616::-;-1:-1:-1;;;;;31418:24:0;;31360:7;31418:24;;;:16;:24;;;;;;31360:7;;31418:24;;31414:208;;;31471:30;31497:3;31471:21;31482:9;;31471:6;:10;;:21;;;;:::i;:30::-;31459:42;;31414:208;;;-1:-1:-1;;;;;31523:27:0;;;;;;:16;:27;;;;;;;;31519:103;;;31579:31;31606:3;31579:22;31590:10;;31579:6;:10;;:22;;;;:::i;:31::-;31567:43;;31519:103;31638:13;;31634:174;;31713:4;31695:24;;;;:9;:24;;;;;;:39;;31724:9;31695:28;:39::i;:::-;31686:4;31668:24;;;;:9;:24;;;;;;;:66;;;;31754:42;;-1:-1:-1;;;;;31754:42:0;;;-1:-1:-1;;;;;;;;;;;31754:42:0;;;31786:9;2033:25:1;;2021:2;2006:18;;1887:177;31754:42:0;;;;;;;;31634:174;31827:21;:6;31838:9;31827:10;:21::i;2370:312::-;2490:7;2525:12;2518:5;2510:28;;;;-1:-1:-1;;;2510:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2549:9:0;2561:5;2565:1;2561;:5;:::i;30053:658::-;30203:16;;;30217:1;30203:16;;;;;;;;30179:21;;30203:16;;;;;;;;;;-1:-1:-1;30203:16:0;30179:40;;30248:4;30230;30235:1;30230:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30230:23:0;;;:7;;;;;;;;;;:23;;;;30274:15;;:22;;;-1:-1:-1;;;30274:22:0;;;;:15;;;;;:20;;:22;;;;;30230:7;;30274:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30264:4;30269:1;30264:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30264:32:0;;;:7;;;;;;;;;:32;30341:15;;30309:62;;30326:4;;30341:15;30359:11;30309:8;:62::i;:::-;30410:15;;:240;;-1:-1:-1;;;30410:240:0;;-1:-1:-1;;;;;30410:15:0;;;;:66;;:240;;30491:11;;30410:15;;30561:4;;30588;;30624:15;;30410:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30668:35;30685:11;30698:4;30668:35;;;;;;;:::i;:::-;;;;;;;;30108:603;30053:658;:::o;30719:513::-;30899:15;;30867:62;;30884:4;;-1:-1:-1;;;;;30899:15:0;30917:11;30867:8;:62::i;:::-;30972:15;;-1:-1:-1;;;;;30972:15:0;:31;31011:9;31044:4;31064:11;30972:15;;31176:7;6581;6608:6;-1:-1:-1;;;;;6608:6:0;;6543:79;31176:7;30972:252;;;;;;-1:-1:-1;;;;;;30972:252:0;;;-1:-1:-1;;;;;14688:15:1;;;30972:252:0;;;14670:34:1;14720:18;;;14713:34;;;;14763:18;;;14756:34;;;;14806:18;;;14799:34;14870:15;;;14849:19;;;14842:44;31198:15:0;14902:19:1;;;14895:35;14604:19;;30972:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30719:513;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:131::-;-1:-1:-1;;;;;827:31:1;;817:42;;807:70;;873:1;870;863:12;807:70;752:131;:::o;888:315::-;956:6;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1072:9;1059:23;1091:31;1116:5;1091:31;:::i;:::-;1141:5;1193:2;1178:18;;;;1165:32;;-1:-1:-1;;;888:315:1:o;1400:247::-;1459:6;1512:2;1500:9;1491:7;1487:23;1483:32;1480:52;;;1528:1;1525;1518:12;1480:52;1567:9;1554:23;1586:31;1611:5;1586:31;:::i;2069:456::-;2146:6;2154;2162;2215:2;2203:9;2194:7;2190:23;2186:32;2183:52;;;2231:1;2228;2221:12;2183:52;2270:9;2257:23;2289:31;2314:5;2289:31;:::i;:::-;2339:5;-1:-1:-1;2396:2:1;2381:18;;2368:32;2409:33;2368:32;2409:33;:::i;:::-;2069:456;;2461:7;;-1:-1:-1;;;2515:2:1;2500:18;;;;2487:32;;2069:456::o;2530:160::-;2595:20;;2651:13;;2644:21;2634:32;;2624:60;;2680:1;2677;2670:12;2624:60;2530:160;;;:::o;2695:180::-;2751:6;2804:2;2792:9;2783:7;2779:23;2775:32;2772:52;;;2820:1;2817;2810:12;2772:52;2843:26;2859:9;2843:26;:::i;3277:315::-;3342:6;3350;3403:2;3391:9;3382:7;3378:23;3374:32;3371:52;;;3419:1;3416;3409:12;3371:52;3458:9;3445:23;3477:31;3502:5;3477:31;:::i;:::-;3527:5;-1:-1:-1;3551:35:1;3582:2;3567:18;;3551:35;:::i;:::-;3541:45;;3277:315;;;;;:::o;3597:316::-;3674:6;3682;3690;3743:2;3731:9;3722:7;3718:23;3714:32;3711:52;;;3759:1;3756;3749:12;3711:52;-1:-1:-1;;3782:23:1;;;3852:2;3837:18;;3824:32;;-1:-1:-1;3903:2:1;3888:18;;;3875:32;;3597:316;-1:-1:-1;3597:316:1:o;4314:388::-;4382:6;4390;4443:2;4431:9;4422:7;4418:23;4414:32;4411:52;;;4459:1;4456;4449:12;4411:52;4498:9;4485:23;4517:31;4542:5;4517:31;:::i;:::-;4567:5;-1:-1:-1;4624:2:1;4609:18;;4596:32;4637:33;4596:32;4637:33;:::i;:::-;4689:7;4679:17;;;4314:388;;;;;:::o;4707:356::-;4909:2;4891:21;;;4928:18;;;4921:30;4987:34;4982:2;4967:18;;4960:62;5054:2;5039:18;;4707:356::o;5068:380::-;5147:1;5143:12;;;;5190;;;5211:61;;5265:4;5257:6;5253:17;5243:27;;5211:61;5318:2;5310:6;5307:14;5287:18;5284:38;5281:161;;5364:10;5359:3;5355:20;5352:1;5345:31;5399:4;5396:1;5389:15;5427:4;5424:1;5417:15;5281:161;;5068:380;;;:::o;5811:127::-;5872:10;5867:3;5863:20;5860:1;5853:31;5903:4;5900:1;5893:15;5927:4;5924:1;5917:15;5943:168;6016:9;;;6047;;6064:15;;;6058:22;;6044:37;6034:71;;6085:18;;:::i;6116:217::-;6156:1;6182;6172:132;;6226:10;6221:3;6217:20;6214:1;6207:31;6261:4;6258:1;6251:15;6289:4;6286:1;6279:15;6172:132;-1:-1:-1;6318:9:1;;6116:217::o;7450:125::-;7515:9;;;7536:10;;;7533:36;;;7549:18;;:::i;10723:128::-;10790:9;;;10811:11;;;10808:37;;;10825:18;;:::i;12551:127::-;12612:10;12607:3;12603:20;12600:1;12593:31;12643:4;12640:1;12633:15;12667:4;12664:1;12657:15;12683:251;12753:6;12806:2;12794:9;12785:7;12781:23;12777:32;12774:52;;;12822:1;12819;12812:12;12774:52;12854:9;12848:16;12873:31;12898:5;12873:31;:::i;12939:461::-;12992:3;13030:5;13024:12;13057:6;13052:3;13045:19;13083:4;13112:2;13107:3;13103:12;13096:19;;13149:2;13142:5;13138:14;13170:1;13180:195;13194:6;13191:1;13188:13;13180:195;;;13259:13;;-1:-1:-1;;;;;13255:39:1;13243:52;;13315:12;;;;13350:15;;;;13291:1;13209:9;13180:195;;;-1:-1:-1;13391:3:1;;12939:461;-1:-1:-1;;;;;12939:461:1:o;13405:582::-;13704:6;13693:9;13686:25;13747:6;13742:2;13731:9;13727:18;13720:34;13790:3;13785:2;13774:9;13770:18;13763:31;13667:4;13811:57;13863:3;13852:9;13848:19;13840:6;13811:57;:::i;:::-;-1:-1:-1;;;;;13904:32:1;;;;13899:2;13884:18;;13877:60;-1:-1:-1;13968:3:1;13953:19;13946:35;13803:65;13405:582;-1:-1:-1;;;13405:582:1:o;13992:332::-;14199:6;14188:9;14181:25;14242:2;14237;14226:9;14222:18;14215:30;14162:4;14262:56;14314:2;14303:9;14299:18;14291:6;14262:56;:::i;14941:306::-;15029:6;15037;15045;15098:2;15086:9;15077:7;15073:23;15069:32;15066:52;;;15114:1;15111;15104:12;15066:52;15143:9;15137:16;15127:26;;15193:2;15182:9;15178:18;15172:25;15162:35;;15237:2;15226:9;15222:18;15216:25;15206:35;;14941:306;;;;;:::o

Swarm Source

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