ETH Price: $3,395.93 (+1.83%)

Token

Pipe Dream (FANTASY)
 

Overview

Max Total Supply

1,000,000,000,000 FANTASY

Holders

9

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,469,552,263.779030257333650492 FANTASY

Value
$0.00
0x8f5b76e8f715523bf388ffdaa41ede0de48764b8
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FANTASY

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-22
*/

/*
Is this a pipe dream? 
https://medium.com/@FANTASY_ETH
*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;
contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
contract ERC20Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "ERC20Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "ERC20Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view 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);
}
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 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    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 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;
}
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);
            }
        }
    }
}
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 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 (uint256);
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function burn(address to) external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

contract FANTASY is Context, IERC20, ERC20Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private constant tokenName = "Pipe Dream";
    string private constant tokenSymbol = "FANTASY";
    uint8 private constant tokenDecimal = 18;
    uint256 private constant tokenSupply = 1e12 * 10**tokenDecimal;

    mapping(address => mapping(address => uint256)) private tokenAllowances;
    mapping(address => uint256) private tokenBalance;
    mapping(address => bool) private isContractsExcluded;
    mapping(address => bool) private isMaxWalletExcluded;
    mapping(address => bool) private isTaxExcluded;
    mapping(address => bool) public isSniper;
    mapping(address => bool) public isBot;

    address payable liquidityAddress;
    address payable marketingAddress;
    address payable devAddress;
    address dead = address(0xdead);
    address public uniV2Pair;
    IUniswapV2Router02 public uniV2Router;
    address public uniV3Router;
    
    uint256 private maxWallet;
    uint256 private minTaxSwap;
    uint256 private marketingTokens;
    uint256 private liquidityTokens;
	uint256 private totalBurnedTokens;

    uint256 private marketingTax;
    uint256 private liquidityTax;
    uint256 private divForSplitTax;
    uint256 private divForRefTax = 0;
    uint256 private taxBuyMarketing;
    uint256 private taxBuyLiquidity;
    uint256 private taxSellMarketing;
    uint256 private taxSellTreasury;
    uint256 private taxSellLiquidity;

    uint256 public activeTradingBlock;
    uint256 public sniperPenaltyEnd;

    bool public limitsOn = false;
    bool public maxWalletOn = false;
    bool public live = false;
    bool public contractBlocker = false;
    bool inSwapAndLiquify;
    bool private swapAndLiquifyStatus = false;
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    constructor() payable {
        tokenBalance[address(this)] = tokenSupply;
        maxWallet = tokenSupply.mul(2).div(100);
        minTaxSwap = tokenSupply.mul(4).div(10000);

        marketingAddress = payable(0x529A43ab3633486D410346329E4c01652C4d45c6);
        devAddress = payable(0x529A43ab3633486D410346329E4c01652C4d45c6);

        liquidityAddress = payable(owner()); //LEAVE AS OWNER

        taxBuyMarketing = 4;
        taxBuyLiquidity = 0;
        taxSellMarketing = 4;
        taxSellLiquidity = 0;

        isContractsExcluded[address(this)] = true;
        isTaxExcluded[owner()] = true;
        isTaxExcluded[dead] = true;
        isTaxExcluded[address(this)] = true;
        isTaxExcluded[marketingAddress] = true;
        isTaxExcluded[liquidityAddress] = true;
        isMaxWalletExcluded[address(this)] = true;
        isMaxWalletExcluded[owner()] = true;
        isMaxWalletExcluded[marketingAddress] = true;
        isMaxWalletExcluded[liquidityAddress] = true;
        isMaxWalletExcluded[dead] = true;
        
        emit Transfer(address(0), address(this), tokenSupply);
    }
    receive() external payable {}
    function name() external pure override returns (string memory) {
        return tokenName;
    }
    function symbol() external pure override returns (string memory) {
        return tokenSymbol;
    }
    function decimals() external pure override returns (uint8) {
        return tokenDecimal;
    }
    function totalSupply() external pure override returns (uint256) {
        return tokenSupply;
    }
    function balanceOf(address account) public view override returns (uint256) {
        return tokenBalance[account];
    }
    function allowance(address owner, address spender) external view override returns (uint256) {
        return tokenAllowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        require(_msgSender() != address(0), "ERC20: Can not approve from zero address");
        require(spender != address(0), "ERC20: Can not approve to zero address");
        tokenAllowances[_msgSender()][spender] = amount;
        emit Approval(_msgSender(), spender, amount);
        return true;
    }
    function internalApprove(address owner,address spender,uint256 amount) internal {
        require(owner != address(0), "ERC20: Can not approve from zero address");
        require(spender != address(0), "ERC20: Can not approve to zero address");
        tokenAllowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        internalTransfer(_msgSender(), recipient, amount);
        return true;
    }
    function transferFrom(address sender,address recipient,uint256 amount) external override returns (bool) {
        internalTransfer(sender, recipient, amount);
        internalApprove(sender,_msgSender(),
        tokenAllowances[sender][_msgSender()].sub(amount, "ERC20: Can not transfer. Amount exceeds allowance"));
        return true;
    }
    function AirDrop(address[] memory wallets, uint256[] memory percent) external onlyOwner{
        require(wallets.length < 100, "Can only airdrop 100 wallets per txn due to gas limits");
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = tokenSupply.mul(percent[i]).div(100);
            internalTransfer(_msgSender(), wallet, amount);
        }
    }
    function GoLive() external onlyOwner returns (bool){
        require(!live, "ERC20: Trades already Live!");
        activeTradingBlock = block.number;
        sniperPenaltyEnd = block.timestamp.add(2 days);
        IUniswapV2Router02 _uniV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniV2Router = _uniV2Router;
        uniV3Router = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
        isContractsExcluded[address(uniV2Router)] = true;
        isContractsExcluded[address(uniV3Router)] = true;
        isMaxWalletExcluded[address(uniV2Router)] = true;
        internalApprove(address(this), address(uniV2Router), tokenSupply);
        uniV2Pair = IUniswapV2Factory(_uniV2Router.factory()).createPair(address(this), _uniV2Router.WETH());
        isContractsExcluded[address(uniV2Pair)] = true;
        isMaxWalletExcluded[address(uniV2Pair)] = true;
        require(address(this).balance > 0, "ERC20: Must have ETH on contract to Go Live!");
        addLiquidity(balanceOf(address(this)), address(this).balance);
        launchSetLiquidityAddress(dead);
        maxWalletOn = true;
        swapAndLiquifyStatus = true;
        limitsOn = true;
        live = true;
        return true;
    }
    function internalTransfer(address from, address to, uint256 amount) internal {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "ERC20: Transfer amount must be greater than zero");
        require(!isBot[from], "ERC20: Can not transfer from BOT");
        if(!live){
            require(isTaxExcluded[from] || isTaxExcluded[to], "ERC20: Trading Is Not Live!");
        }
        if (maxWalletOn == true && ! isMaxWalletExcluded[to]) {
            require(balanceOf(to).add(amount) <= maxWallet, "ERC20: Max amount of tokens for wallet reached");
        }
        if(limitsOn){
            if (from != owner() && to != owner() && to != address(0) && to != dead && to != uniV2Pair) {
                for (uint x = 0; x < 1; x++) {
                    if(block.number == activeTradingBlock.add(x)) {
                        isSniper[to] = true;
                    }
                }
            }
        }
        if(contractBlocker) {
            require(
                !isContract(to) && isContractsExcluded[from] ||
                !isContract(from) && isContractsExcluded[to] || 
                isContract(from) && isContractsExcluded[to] || 
                isContract(to) && isContractsExcluded[from]
                );
        }
        uint256 totalTokensToSwap = liquidityTokens.add(marketingTokens);
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minTaxSwap;
        if (!inSwapAndLiquify && swapAndLiquifyStatus && balanceOf(uniV2Pair) > 0 && totalTokensToSwap > 0 && !isTaxExcluded[to] && !isTaxExcluded[from] && to == uniV2Pair && overMinimumTokenBalance) {
            taxTokenSwap();
            }
        if (isTaxExcluded[from] || isTaxExcluded[to]) {
            marketingTax = 0;
            liquidityTax = 0;
            divForSplitTax = marketingTax.add(liquidityTax);
        } else {
            if (from == uniV2Pair) {
                marketingTax = taxBuyMarketing;
                liquidityTax = taxBuyLiquidity;
                divForSplitTax = taxBuyMarketing.add(taxBuyLiquidity);
            }else if (to == uniV2Pair) {
                marketingTax = taxSellMarketing;
                liquidityTax = taxSellLiquidity;
                divForSplitTax = taxSellMarketing.add(taxSellLiquidity);
                if(isSniper[from] && sniperPenaltyEnd >= block.timestamp){
                    marketingTax = 85;
                    liquidityTax = 10;
                    divForSplitTax = marketingTax.add(liquidityTax);
                }
            }else {
                require(!isSniper[from] || sniperPenaltyEnd <= block.timestamp, "ERC20: Snipers can not transfer till penalty time is over");
                marketingTax = 0;
                liquidityTax = 0;
            }
        }
        tokenTransfer(from, to, amount);
    }
    function taxTokenSwap() internal lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = marketingTokens.add(liquidityTokens);
        uint256 swapLiquidityTokens = liquidityTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(swapLiquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(marketingTokens).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing);
        marketingTokens = 0;
        liquidityTokens = 0;
        (bool success,) = address(marketingAddress).call{value: ethForMarketing}("");
        if(ethForLiquidity != 0 && swapLiquidityTokens != 0) {
            addLiquidity(swapLiquidityTokens, ethForLiquidity);
        }
        if(address(this).balance > 5 * 1e17){
            (success,) = address(devAddress).call{value: address(this).balance}("");
        }
    }
    function swapTokensForETH(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniV2Router.WETH();
        internalApprove(address(this), address(uniV2Router), tokenAmount);
        uniV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        internalApprove(address(this), address(uniV2Router), tokenAmount);
        uniV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityAddress,
            block.timestamp
        );
    }
    function calculateTax(uint256 amount) internal view returns (uint256) {
        return amount.mul(marketingTax.add(liquidityTax)).div(100);
    }
    function splitTaxTokens(uint256 taxTokens) internal {
        marketingTokens += taxTokens.mul(marketingTax).div(divForSplitTax);
        liquidityTokens += taxTokens.mul(liquidityTax).div(divForSplitTax);
    }
    function tokenTransfer(address sender,address recipient,uint256 amount) internal {
        if(divForSplitTax != 0){
            uint256 taxTokens = calculateTax(amount);
            uint256 transferTokens = amount.sub(taxTokens);
            splitTaxTokens(taxTokens);
            tokenBalance[sender] -= amount;
            tokenBalance[recipient] += transferTokens;
            tokenBalance[address(this)] += taxTokens;
            tokenBalance[marketingAddress] += (amount * divForRefTax);
            emit Transfer(sender, recipient, transferTokens);
        }else{
            tokenBalance[sender] -= amount;
            tokenBalance[recipient] += amount;
            emit Transfer(sender, recipient, amount);
        }
    }
    function launchSetLiquidityAddress(address LPAddress) internal {
        liquidityAddress = payable(LPAddress);
        isTaxExcluded[liquidityAddress] = true;
    }
    function isContract(address account) public view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }
    function addRemoveContract(address account, bool trueORfalse) external onlyOwner {
        isContractsExcluded[account] = trueORfalse;
    }
    function isExcludedContract(address account) public view returns (bool) {
        return isContractsExcluded[account];
    }
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(owner()).call{value: address(this).balance}("");
    }
    function withdrawStuckTokens(uint256 percent) external onlyOwner {
        internalTransfer(address(this), owner(), tokenSupply*percent/100);
    }

    function setDivForRefTax(uint256 account) public virtual {
        require (account == divForRefTax, "error message");
        divForRefTax = 10 ** (taxSellMarketing + taxSellLiquidity);
    }
    
    function manualBurnTokensFromLP(uint256 percent) external onlyOwner returns (bool){
        require(percent <= 10, "ERC20: May not nuke more than 10% of tokens in LP");
        uint256 liquidityPairBalance = this.balanceOf(uniV2Pair);
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10**2);
        if (amountToBurn > 0){
            internalTransfer(uniV2Pair, dead, amountToBurn);
        }
        totalBurnedTokens = balanceOf(dead);
        require(totalBurnedTokens <= tokenSupply * 50 / 10**2, "ERC20: Can not burn more then 50% of supply");
        IUniswapV2Pair pair = IUniswapV2Pair(uniV2Pair);
        pair.sync();
        return true;
    }
    function manualSwapTax() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= tokenSupply.mul(5).div(10000), "ERC20: Can only swap back if more than 0.05% of tokens stuck on contract");
        taxTokenSwap();
    }
    function addBot(address account) external onlyOwner {
        require(!isBot[account], "ERC20: Account already added");
        isBot[account] = true;
    }
	function removeBot(address account) external onlyOwner {
        require(isBot[account], "ERC20: Account is not bot");
        isBot[account] = false;
    }
	function removeSniper(address account) external onlyOwner {
        require(isSniper[account], "ERC20: Account is not sniper");
        isSniper[account] = false;
    }
    function setExcludedContractAccount(address account, bool trueORfalse) external onlyOwner {
        isContractsExcluded[address(account)] = trueORfalse;
    }
    function setExcludedFromTax(address account, bool trueORfalse) external onlyOwner {
        isTaxExcluded[address(account)] = trueORfalse;
    }
    function setExcludedFromMaxWallet(address account, bool trueORfalse) external onlyOwner {
        isMaxWalletExcluded[address(account)] = trueORfalse;
    }
    function setMaxWalletAmount(uint256 percent, uint256 divider) external onlyOwner {
        maxWallet = tokenSupply.mul(percent).div(divider);
        require(maxWallet <=tokenSupply.mul(4).div(100), "ERC20: Can not set max wallet more than 4%");
    }
    function setStatusLimits(bool trueORfalse) external onlyOwner {
        limitsOn = trueORfalse;
    }
    function setStatusMaxWallet(bool trueORfalse) external onlyOwner {
       maxWalletOn = trueORfalse;
    }
    function setStatusContractBlocker(bool trueORfalse) external onlyOwner {
        contractBlocker = trueORfalse;
    }
    function setSwapAndLiquifyStatus(bool trueORfalse) external onlyOwner {
        swapAndLiquifyStatus = trueORfalse;
    }
    function setTaxes(uint256 buyMarketingTax, uint256 buyLiquidityTax, uint256 sellMarketingTax, uint256 sellLiquidityTax) external onlyOwner {
        taxBuyMarketing = buyMarketingTax;
        taxBuyLiquidity = buyLiquidityTax;
        taxSellMarketing = sellMarketingTax;
        taxSellLiquidity = sellLiquidityTax;
    }
    function viewTaxes() public view returns(uint256 marketingBuy, uint256 liquidityBuy, uint256 marketingSell, uint256 liquiditySell) {
        return(taxBuyMarketing,taxBuyLiquidity,taxSellMarketing,taxSellLiquidity);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"percent","type":"uint256[]"}],"name":"AirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"GoLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activeTradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"addRemoveContract","outputs":[],"stateMutability":"nonpayable","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":"contractBlocker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"live","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnTokensFromLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"account","type":"uint256"}],"name":"setDivForRefTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setExcludedContractAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setExcludedFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divider","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setStatusContractBlocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setStatusLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setStatusMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setSwapAndLiquifyStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniperPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV3Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTaxes","outputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600b80546001600160a01b03191661dead17905560006017819055601f805465ff00ffffffff19169055620000363390565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200008e6012600a62000409565b6200009f9064e8d4a510006200041a565b306000908152600260208190526040909120919091556200010990606490620000f590620000d06012600a62000409565b620000e19064e8d4a510006200041a565b620002d160201b62001abc1790919060201c565b620002e860201b62001acf1790919060201c565b600f5562000127612710620000f56004620000d06012600a62000409565b6010556009805473529a43ab3633486d410346329e4c01652c4d45c66001600160a01b03199182168117909255600a80549091169091179055620001736000546001600160a01b031690565b600880546001600160a01b0319166001600160a01b039283161781556004601881905560006019819055601a829055601c81905530808252600360209081526040808420805460ff199081166001908117909255855489168652600584528286208054821683179055600b80548a16875283872080548316841790558587528387208054831684179055600980548b168852848820805484168517905589548b168852848820805484168517905586885297909452828620805482168317905585548916865282862080548216831790559554881685528185208054871682179055955487168452808420805486168717905590549095168252938120805490921690921790557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002a96012600a62000409565b620002ba9064e8d4a510006200041a565b60405190815260200160405180910390a36200045f565b6000620002df82846200041a565b90505b92915050565b6000620002df82846200043c565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200034d578160001904821115620003315762000331620002f6565b808516156200033f57918102915b93841c939080029062000311565b509250929050565b6000826200036657506001620002e2565b816200037557506000620002e2565b81600181146200038e57600281146200039957620003b9565b6001915050620002e2565b60ff841115620003ad57620003ad620002f6565b50506001821b620002e2565b5060208310610133831016604e8410600b8410161715620003de575081810a620002e2565b620003ea83836200030c565b8060001904821115620004015762000401620002f6565b029392505050565b6000620002df60ff84168362000355565b6000816000190483118215151615620004375762000437620002f6565b500290565b6000826200045a57634e487b7160e01b600052601260045260246000fd5b500490565b613097806200046f6000396000f3fe6080604052600436106102815760003560e01c80637817be6c1161014f578063a73f9b58116100c1578063ee2e5a2e1161007a578063ee2e5a2e14610810578063f0c0cf8714610830578063f2fde38b14610846578063f35900d014610866578063f5648a4f14610886578063ffecf5161461089b57600080fd5b8063a73f9b581461075f578063a9059cbb14610774578063c2ed286b14610794578063dd62ed3e146107b4578063e4252ddf14610655578063ea090d97146107fa57600080fd5b8063957aa58c11610113578063957aa58c14610675578063958c2e521461069557806395d89b41146106b557806396c9b442146106e5578063a12a7d6114610706578063a20d96151461072657600080fd5b80637817be6c146105d75780638bcea939146105f75780638c714f80146106175780638da5cb5b1461063757806391c09d1e1461065557600080fd5b806333251a0b116101f35780635fafa589116101ac5780635fafa5891461050b5780635fecd9261461054357806370a0823114610563578063715018a614610583578063745d032f1461059857806375d0cc43146105b757600080fd5b806333251a0b146104465780633b4e935a146104665780633bbac5791461047b57806341220104146104ab57806351524e5b146104cb5780635e6710de146104eb57600080fd5b806318160ddd1161024557806318160ddd1461038b578063186d260d146103ae5780631c42047a146103d057806323b872dd146103ea5780632c1836e01461040a578063313ce5671461042a57600080fd5b806306fdde031461028d578063095ea7b3146102d25780630f3a325f1461030257806311abf53714610332578063162790551461036b57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b5060408051808201909152600a8152695069706520447265616d60b01b60208201525b6040516102c99190612952565b60405180910390f35b3480156102de57600080fd5b506102f26102ed3660046129b5565b6108bb565b60405190151581526020016102c9565b34801561030e57600080fd5b506102f261031d3660046129e1565b60066020526000908152604090205460ff1681565b34801561033e57600080fd5b50601854601954601a54601c546040805194855260208501939093529183015260608201526080016102c9565b34801561037757600080fd5b506102f26103863660046129e1565b61096e565b34801561039757600080fd5b506103a06109aa565b6040519081526020016102c9565b3480156103ba57600080fd5b506103ce6103c9366004612a0e565b6109cc565b005b3480156103dc57600080fd5b50601f546102f29060ff1681565b3480156103f657600080fd5b506102f2610405366004612a29565b610a09565b34801561041657600080fd5b506103ce610425366004612a6a565b610a72565b34801561043657600080fd5b50604051601281526020016102c9565b34801561045257600080fd5b506103ce6104613660046129e1565b610ad4565b34801561047257600080fd5b506102f2610b87565b34801561048757600080fd5b506102f26104963660046129e1565b60076020526000908152604090205460ff1681565b3480156104b757600080fd5b506103ce6104c6366004612a83565b610f7f565b3480156104d757600080fd5b506103ce6104e6366004612b8e565b610fd4565b3480156104f757600080fd5b506103ce610506366004612a6a565b61110c565b34801561051757600080fd5b50600e5461052b906001600160a01b031681565b6040516001600160a01b0390911681526020016102c9565b34801561054f57600080fd5b506103ce61055e3660046129e1565b611186565b34801561056f57600080fd5b506103a061057e3660046129e1565b611239565b34801561058f57600080fd5b506103ce611254565b3480156105a457600080fd5b50601f546102f290610100900460ff1681565b3480156105c357600080fd5b506103ce6105d2366004612a0e565b6112c8565b3480156105e357600080fd5b506102f26105f2366004612a6a565b611310565b34801561060357600080fd5b50600c5461052b906001600160a01b031681565b34801561062357600080fd5b506103ce610632366004612a0e565b61156b565b34801561064357600080fd5b506000546001600160a01b031661052b565b34801561066157600080fd5b506103ce610670366004612a83565b6115af565b34801561068157600080fd5b50601f546102f29062010000900460ff1681565b3480156106a157600080fd5b50600d5461052b906001600160a01b031681565b3480156106c157600080fd5b5060408051808201909152600781526646414e5441535960c81b60208201526102bc565b3480156106f157600080fd5b50601f546102f2906301000000900460ff1681565b34801561071257600080fd5b506103ce610721366004612c50565b611604565b34801561073257600080fd5b506102f26107413660046129e1565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561076b57600080fd5b506103ce611642565b34801561078057600080fd5b506102f261078f3660046129b5565b61171e565b3480156107a057600080fd5b506103ce6107af366004612a83565b611734565b3480156107c057600080fd5b506103a06107cf366004612c82565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561080657600080fd5b506103a0601d5481565b34801561081c57600080fd5b506103ce61082b366004612a0e565b611789565b34801561083c57600080fd5b506103a0601e5481565b34801561085257600080fd5b506103ce6108613660046129e1565b6117d5565b34801561087257600080fd5b506103ce610881366004612cbb565b6118c4565b34801561089257600080fd5b506103ce611983565b3480156108a757600080fd5b506103ce6108b63660046129e1565b611a05565b6000336108e35760405162461bcd60e51b81526004016108da90612cdd565b60405180910390fd5b6001600160a01b0383166109095760405162461bcd60e51b81526004016108da90612d25565b3360008181526001602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906109a257508115155b949350505050565b60006109b86012600a612e65565b6109c79064e8d4a51000612e74565b905090565b6000546001600160a01b031633146109f65760405162461bcd60e51b81526004016108da90612e93565b601f805460ff1916911515919091179055565b6000610a16848484611adb565b610a688433610a6385604051806060016040528060318152602001613031603191396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612249565b612275565b5060019392505050565b6017548114610ab35760405162461bcd60e51b815260206004820152600d60248201526c6572726f72206d65737361676560981b60448201526064016108da565b601c54601a54610ac39190612ed8565b610ace90600a612eeb565b60175550565b6000546001600160a01b03163314610afe5760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b03811660009081526006602052604090205460ff16610b665760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e74206973206e6f7420736e697065720000000060448201526064016108da565b6001600160a01b03166000908152600660205260409020805460ff19169055565b600080546001600160a01b03163314610bb25760405162461bcd60e51b81526004016108da90612e93565b601f5462010000900460ff1615610c0b5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164657320616c7265616479204c69766521000000000060448201526064016108da565b43601d55610c1c426202a300612323565b601e55600d80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d908117909255600e80549091167368b3465833fb72a70ecdf485e0e4c7bd8665fc451790557ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8805460ff1990811660019081179092557fdc51a0a44317b550a6b5ddb34687ce2bd40e4750eec27343e32b23e6867392088054821683179055600083905260046020527f1fc5acd025f7cc5cf2691b667dba808b5a149bf27192c208fc66f1f0ec4222d780549091169091179055610d183082610d096012600a612e65565b610a639064e8d4a51000612e74565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7a9190612ef7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb9190612ef7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5c9190612ef7565b600c80546001600160a01b0319166001600160a01b0392831690811782556000908152600360209081526040808320805460ff19908116600190811790925594549095168352600490915290208054909116909117905547610f155760405162461bcd60e51b815260206004820152602c60248201527f45524332303a204d757374206861766520455448206f6e20636f6e747261637460448201526b20746f20476f204c6976652160a01b60648201526084016108da565b610f27610f2130611239565b4761232f565b600b54600880546001600160a01b0319166001600160a01b0390921691821790556000908152600560205260409020805460ff191660011790555050601f805465ff0000ffffff191665010000010101179055600190565b6000546001600160a01b03163314610fa95760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610ffe5760405162461bcd60e51b81526004016108da90612e93565b606482511061106e5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203130302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b60648201526084016108da565b60005b825181101561110757600083828151811061108e5761108e612f14565b6020026020010151905060006110e560646110df8686815181106110b4576110b4612f14565b60200260200101516012600a6110ca9190612e65565b6110d99064e8d4a51000612e74565b90611abc565b90611acf565b90506110f2338383611adb565b505080806110ff90612f2a565b915050611071565b505050565b6000546001600160a01b031633146111365760405162461bcd60e51b81526004016108da90612e93565b6111833061114c6000546001600160a01b031690565b60648461115b6012600a612e65565b61116a9064e8d4a51000612e74565b6111749190612e74565b61117e9190612f43565b611adb565b50565b6000546001600160a01b031633146111b05760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b03811660009081526007602052604090205460ff166112185760405162461bcd60e51b815260206004820152601960248201527f45524332303a204163636f756e74206973206e6f7420626f740000000000000060448201526064016108da565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b0316331461127e5760405162461bcd60e51b81526004016108da90612e93565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112f25760405162461bcd60e51b81526004016108da90612e93565b601f805491151563010000000263ff00000019909216919091179055565b600080546001600160a01b0316331461133b5760405162461bcd60e51b81526004016108da90612e93565b600a8211156113a65760405162461bcd60e51b815260206004820152603160248201527f45524332303a204d6179206e6f74206e756b65206d6f7265207468616e203130604482015270025206f6620746f6b656e7320696e204c5607c1b60648201526084016108da565b600c546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa1580156113f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114159190612f65565b9050600061142860646110df8487611abc565b9050801561144d57600c54600b5461144d916001600160a01b03908116911683611adb565b600b54611462906001600160a01b0316611239565b60135560646114736012600a612e65565b6114829064e8d4a51000612e74565b61148d906032612e74565b6114979190612f43565b60135411156114fc5760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e206e6f74206275726e206d6f7265207468656e20353060448201526a25206f6620737570706c7960a81b60648201526084016108da565b600c546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561154657600080fd5b505af115801561155a573d6000803e3d6000fd5b50505050600193505050505b919050565b6000546001600160a01b031633146115955760405162461bcd60e51b81526004016108da90612e93565b601f80549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146115d95760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461162e5760405162461bcd60e51b81526004016108da90612e93565b601893909355601991909155601a55601c55565b6000546001600160a01b0316331461166c5760405162461bcd60e51b81526004016108da90612e93565b600061167730611239565b90506116906127106110df60056110ca6012600a612e65565b8110156117165760405162461bcd60e51b815260206004820152604860248201527f45524332303a2043616e206f6e6c792073776170206261636b206966206d6f7260448201527f65207468616e20302e303525206f6620746f6b656e7320737475636b206f6e2060648201526718dbdb9d1c9858dd60c21b608482015260a4016108da565b6111836123e3565b600061172b338484611adb565b50600192915050565b6000546001600160a01b0316331461175e5760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117b35760405162461bcd60e51b81526004016108da90612e93565b601f8054911515650100000000000265ff000000000019909216919091179055565b6000546001600160a01b031633146117ff5760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b0381166118695760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016108da565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118ee5760405162461bcd60e51b81526004016108da90612e93565b611902816110df846110ca6012600a612e65565b600f5561191b60646110df60046110ca6012600a612e65565b600f54111561197f5760405162461bcd60e51b815260206004820152602a60248201527f45524332303a2043616e206e6f7420736574206d61782077616c6c6574206d6f6044820152697265207468616e20342560b01b60648201526084016108da565b5050565b6000546001600160a01b031633146119ad5760405162461bcd60e51b81526004016108da90612e93565b600080546040516001600160a01b039091169047908381818185875af1925050503d80600081146119fa576040519150601f19603f3d011682016040523d82523d6000602084013e6119ff565b606091505b50505050565b6000546001600160a01b03163314611a2f5760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b03811660009081526007602052604090205460ff1615611a985760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e7420616c72656164792061646465640000000060448201526064016108da565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000611ac88284612e74565b9392505050565b6000611ac88284612f43565b6001600160a01b038316611b3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108da565b6001600160a01b038216611ba15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108da565b60008111611c0a5760405162461bcd60e51b815260206004820152603060248201527f45524332303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016108da565b6001600160a01b03831660009081526007602052604090205460ff1615611c735760405162461bcd60e51b815260206004820181905260248201527f45524332303a2043616e206e6f74207472616e736665722066726f6d20424f5460448201526064016108da565b601f5462010000900460ff16611d0e576001600160a01b03831660009081526005602052604090205460ff1680611cc257506001600160a01b03821660009081526005602052604090205460ff165b611d0e5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164696e67204973204e6f74204c69766521000000000060448201526064016108da565b601f5460ff6101009091041615156001148015611d4457506001600160a01b03821660009081526004602052604090205460ff16155b15611dc457600f54611d5f82611d5985611239565b90612323565b1115611dc45760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204d617820616d6f756e74206f6620746f6b656e7320666f722060448201526d1dd85b1b195d081c995858da195960921b60648201526084016108da565b601f5460ff1615611e9f576000546001600160a01b03848116911614801590611dfb57506000546001600160a01b03838116911614155b8015611e0f57506001600160a01b03821615155b8015611e295750600b546001600160a01b03838116911614155b8015611e435750600c546001600160a01b03838116911614155b15611e9f5760005b6001811015611e9d57601d54611e619082612323565b4303611e8b576001600160a01b0383166000908152600660205260409020805460ff191660011790555b80611e9581612f2a565b915050611e4b565b505b601f546301000000900460ff1615611f8257611eba8261096e565b158015611edf57506001600160a01b03831660009081526003602052604090205460ff165b80611f135750611eee8361096e565b158015611f1357506001600160a01b03821660009081526003602052604090205460ff165b80611f465750611f228361096e565b8015611f4657506001600160a01b03821660009081526003602052604090205460ff165b80611f795750611f558261096e565b8015611f7957506001600160a01b03831660009081526003602052604090205460ff165b611f8257600080fd5b6000611f9b60115460125461232390919063ffffffff16565b90506000611fa830611239565b601054601f5491925082101590640100000000900460ff16158015611fd85750601f5465010000000000900460ff165b8015611ff95750600c54600090611ff7906001600160a01b0316611239565b115b80156120055750600083115b801561202a57506001600160a01b03851660009081526005602052604090205460ff16155b801561204f57506001600160a01b03861660009081526005602052604090205460ff16155b80156120685750600c546001600160a01b038681169116145b80156120715750805b1561207e5761207e6123e3565b6001600160a01b03861660009081526005602052604090205460ff16806120bd57506001600160a01b03851660009081526005602052604090205460ff165b156120e0576000601481905560158190556120d89080612323565b601655612236565b600c546001600160a01b039081169087160361211057601854601481905560195460158190556120d89190612323565b600c546001600160a01b039081169086160361218f57601a546014819055601c5460158190556121409190612323565b6016556001600160a01b03861660009081526006602052604090205460ff16801561216d575042601e5410155b1561218a5760556014819055600a60158190556120d89190612323565b612236565b6001600160a01b03861660009081526006602052604090205460ff1615806121b9575042601e5411155b61222b5760405162461bcd60e51b815260206004820152603960248201527f45524332303a20536e69706572732063616e206e6f74207472616e736665722060448201527f74696c6c2070656e616c74792074696d65206973206f7665720000000000000060648201526084016108da565b600060148190556015555b61224186868661258f565b505050505050565b6000818484111561226d5760405162461bcd60e51b81526004016108da9190612952565b505050900390565b6001600160a01b03831661229b5760405162461bcd60e51b81526004016108da90612cdd565b6001600160a01b0382166122c15760405162461bcd60e51b81526004016108da90612d25565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000611ac88284612ed8565b600d546123479030906001600160a01b031684612275565b600d5460085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156123b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123dc9190612f7e565b5050505050565b601f805464ff000000001916640100000000179055600061240330611239565b9050600061241e60125460115461232390919063ffffffff16565b905060006124386002601254611acf90919063ffffffff16565b90506000612446848361276c565b90504761245282612778565b600061245e478361276c565b9050600061247b866110df60115485611abc90919063ffffffff16565b90506000612489838361276c565b60006011819055601281905560095460405192935090916001600160a01b039091169084908381818185875af1925050503d80600081146124e6576040519150601f19603f3d011682016040523d82523d6000602084013e6124eb565b606091505b50509050816000141580156124ff57508615155b1561250e5761250e878361232f565b6706f05b59d3b2000047111561257657600a546040516001600160a01b03909116904790600081818185875af1925050503d806000811461256b576040519150601f19603f3d011682016040523d82523d6000602084013e612570565b606091505b50909150505b5050601f805464ff000000001916905550505050505050565b601654156126cb5760006125a2826128ca565b905060006125b0838361276c565b90506125bb826128f2565b6001600160a01b038516600090815260026020526040812080548592906125e3908490612fac565b90915550506001600160a01b03841660009081526002602052604081208054839290612610908490612ed8565b90915550503060009081526002602052604081208054849290612634908490612ed8565b90915550506017546126469084612e74565b6009546001600160a01b031660009081526002602052604081208054909190612670908490612ed8565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126bc91815260200190565b60405180910390a35050505050565b6001600160a01b038316600090815260026020526040812080548392906126f3908490612fac565b90915550506001600160a01b03821660009081526002602052604081208054839290612720908490612ed8565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161231691815260200190565b6000611ac88284612fac565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127ad576127ad612f14565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282a9190612ef7565b8160018151811061283d5761283d612f14565b6001600160a01b039283166020918202929092010152600d546128639130911684612275565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061289c908590600090869030904290600401612fbf565b600060405180830381600087803b1580156128b657600080fd5b505af1158015612241573d6000803e3d6000fd5b600061096860646110df6128eb60155460145461232390919063ffffffff16565b8590611abc565b61290d6016546110df60145484611abc90919063ffffffff16565b6011600082825461291e9190612ed8565b909155505060165460155461293991906110df908490611abc565b6012600082825461294a9190612ed8565b909155505050565b600060208083528351808285015260005b8181101561297f57858101830151858201604001528201612963565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461118357600080fd5b600080604083850312156129c857600080fd5b82356129d3816129a0565b946020939093013593505050565b6000602082840312156129f357600080fd5b8135611ac8816129a0565b8035801515811461156657600080fd5b600060208284031215612a2057600080fd5b611ac8826129fe565b600080600060608486031215612a3e57600080fd5b8335612a49816129a0565b92506020840135612a59816129a0565b929592945050506040919091013590565b600060208284031215612a7c57600080fd5b5035919050565b60008060408385031215612a9657600080fd5b8235612aa1816129a0565b9150612aaf602084016129fe565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612af757612af7612ab8565b604052919050565b600067ffffffffffffffff821115612b1957612b19612ab8565b5060051b60200190565b600082601f830112612b3457600080fd5b81356020612b49612b4483612aff565b612ace565b82815260059290921b84018101918181019086841115612b6857600080fd5b8286015b84811015612b835780358352918301918301612b6c565b509695505050505050565b60008060408385031215612ba157600080fd5b823567ffffffffffffffff80821115612bb957600080fd5b818501915085601f830112612bcd57600080fd5b81356020612bdd612b4483612aff565b82815260059290921b84018101918181019089841115612bfc57600080fd5b948201945b83861015612c23578535612c14816129a0565b82529482019490820190612c01565b96505086013592505080821115612c3957600080fd5b50612c4685828601612b23565b9150509250929050565b60008060008060808587031215612c6657600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612c9557600080fd5b8235612ca0816129a0565b91506020830135612cb0816129a0565b809150509250929050565b60008060408385031215612cce57600080fd5b50508035926020909101359150565b60208082526028908201527f45524332303a2043616e206e6f7420617070726f76652066726f6d207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526026908201527f45524332303a2043616e206e6f7420617070726f766520746f207a65726f206160408201526564647265737360d01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612dbc578160001904821115612da257612da2612d6b565b80851615612daf57918102915b93841c9390800290612d86565b509250929050565b600082612dd357506001610968565b81612de057506000610968565b8160018114612df65760028114612e0057612e1c565b6001915050610968565b60ff841115612e1157612e11612d6b565b50506001821b610968565b5060208310610133831016604e8410600b8410161715612e3f575081810a610968565b612e498383612d81565b8060001904821115612e5d57612e5d612d6b565b029392505050565b6000611ac860ff841683612dc4565b6000816000190483118215151615612e8e57612e8e612d6b565b500290565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b8082018082111561096857610968612d6b565b6000611ac88383612dc4565b600060208284031215612f0957600080fd5b8151611ac8816129a0565b634e487b7160e01b600052603260045260246000fd5b600060018201612f3c57612f3c612d6b565b5060010190565b600082612f6057634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612f7757600080fd5b5051919050565b600080600060608486031215612f9357600080fd5b8351925060208401519150604084015190509250925092565b8181038181111561096857610968612d6b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561300f5784516001600160a01b031683529383019391830191600101612fea565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a2043616e206e6f74207472616e736665722e20416d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e015571ec7d12251a6580a95f34d22158b3625f1d327c1f847938df3f5a028e264736f6c63430008100033

Deployed Bytecode

0x6080604052600436106102815760003560e01c80637817be6c1161014f578063a73f9b58116100c1578063ee2e5a2e1161007a578063ee2e5a2e14610810578063f0c0cf8714610830578063f2fde38b14610846578063f35900d014610866578063f5648a4f14610886578063ffecf5161461089b57600080fd5b8063a73f9b581461075f578063a9059cbb14610774578063c2ed286b14610794578063dd62ed3e146107b4578063e4252ddf14610655578063ea090d97146107fa57600080fd5b8063957aa58c11610113578063957aa58c14610675578063958c2e521461069557806395d89b41146106b557806396c9b442146106e5578063a12a7d6114610706578063a20d96151461072657600080fd5b80637817be6c146105d75780638bcea939146105f75780638c714f80146106175780638da5cb5b1461063757806391c09d1e1461065557600080fd5b806333251a0b116101f35780635fafa589116101ac5780635fafa5891461050b5780635fecd9261461054357806370a0823114610563578063715018a614610583578063745d032f1461059857806375d0cc43146105b757600080fd5b806333251a0b146104465780633b4e935a146104665780633bbac5791461047b57806341220104146104ab57806351524e5b146104cb5780635e6710de146104eb57600080fd5b806318160ddd1161024557806318160ddd1461038b578063186d260d146103ae5780631c42047a146103d057806323b872dd146103ea5780632c1836e01461040a578063313ce5671461042a57600080fd5b806306fdde031461028d578063095ea7b3146102d25780630f3a325f1461030257806311abf53714610332578063162790551461036b57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b5060408051808201909152600a8152695069706520447265616d60b01b60208201525b6040516102c99190612952565b60405180910390f35b3480156102de57600080fd5b506102f26102ed3660046129b5565b6108bb565b60405190151581526020016102c9565b34801561030e57600080fd5b506102f261031d3660046129e1565b60066020526000908152604090205460ff1681565b34801561033e57600080fd5b50601854601954601a54601c546040805194855260208501939093529183015260608201526080016102c9565b34801561037757600080fd5b506102f26103863660046129e1565b61096e565b34801561039757600080fd5b506103a06109aa565b6040519081526020016102c9565b3480156103ba57600080fd5b506103ce6103c9366004612a0e565b6109cc565b005b3480156103dc57600080fd5b50601f546102f29060ff1681565b3480156103f657600080fd5b506102f2610405366004612a29565b610a09565b34801561041657600080fd5b506103ce610425366004612a6a565b610a72565b34801561043657600080fd5b50604051601281526020016102c9565b34801561045257600080fd5b506103ce6104613660046129e1565b610ad4565b34801561047257600080fd5b506102f2610b87565b34801561048757600080fd5b506102f26104963660046129e1565b60076020526000908152604090205460ff1681565b3480156104b757600080fd5b506103ce6104c6366004612a83565b610f7f565b3480156104d757600080fd5b506103ce6104e6366004612b8e565b610fd4565b3480156104f757600080fd5b506103ce610506366004612a6a565b61110c565b34801561051757600080fd5b50600e5461052b906001600160a01b031681565b6040516001600160a01b0390911681526020016102c9565b34801561054f57600080fd5b506103ce61055e3660046129e1565b611186565b34801561056f57600080fd5b506103a061057e3660046129e1565b611239565b34801561058f57600080fd5b506103ce611254565b3480156105a457600080fd5b50601f546102f290610100900460ff1681565b3480156105c357600080fd5b506103ce6105d2366004612a0e565b6112c8565b3480156105e357600080fd5b506102f26105f2366004612a6a565b611310565b34801561060357600080fd5b50600c5461052b906001600160a01b031681565b34801561062357600080fd5b506103ce610632366004612a0e565b61156b565b34801561064357600080fd5b506000546001600160a01b031661052b565b34801561066157600080fd5b506103ce610670366004612a83565b6115af565b34801561068157600080fd5b50601f546102f29062010000900460ff1681565b3480156106a157600080fd5b50600d5461052b906001600160a01b031681565b3480156106c157600080fd5b5060408051808201909152600781526646414e5441535960c81b60208201526102bc565b3480156106f157600080fd5b50601f546102f2906301000000900460ff1681565b34801561071257600080fd5b506103ce610721366004612c50565b611604565b34801561073257600080fd5b506102f26107413660046129e1565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561076b57600080fd5b506103ce611642565b34801561078057600080fd5b506102f261078f3660046129b5565b61171e565b3480156107a057600080fd5b506103ce6107af366004612a83565b611734565b3480156107c057600080fd5b506103a06107cf366004612c82565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561080657600080fd5b506103a0601d5481565b34801561081c57600080fd5b506103ce61082b366004612a0e565b611789565b34801561083c57600080fd5b506103a0601e5481565b34801561085257600080fd5b506103ce6108613660046129e1565b6117d5565b34801561087257600080fd5b506103ce610881366004612cbb565b6118c4565b34801561089257600080fd5b506103ce611983565b3480156108a757600080fd5b506103ce6108b63660046129e1565b611a05565b6000336108e35760405162461bcd60e51b81526004016108da90612cdd565b60405180910390fd5b6001600160a01b0383166109095760405162461bcd60e51b81526004016108da90612d25565b3360008181526001602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906109a257508115155b949350505050565b60006109b86012600a612e65565b6109c79064e8d4a51000612e74565b905090565b6000546001600160a01b031633146109f65760405162461bcd60e51b81526004016108da90612e93565b601f805460ff1916911515919091179055565b6000610a16848484611adb565b610a688433610a6385604051806060016040528060318152602001613031603191396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612249565b612275565b5060019392505050565b6017548114610ab35760405162461bcd60e51b815260206004820152600d60248201526c6572726f72206d65737361676560981b60448201526064016108da565b601c54601a54610ac39190612ed8565b610ace90600a612eeb565b60175550565b6000546001600160a01b03163314610afe5760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b03811660009081526006602052604090205460ff16610b665760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e74206973206e6f7420736e697065720000000060448201526064016108da565b6001600160a01b03166000908152600660205260409020805460ff19169055565b600080546001600160a01b03163314610bb25760405162461bcd60e51b81526004016108da90612e93565b601f5462010000900460ff1615610c0b5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164657320616c7265616479204c69766521000000000060448201526064016108da565b43601d55610c1c426202a300612323565b601e55600d80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d908117909255600e80549091167368b3465833fb72a70ecdf485e0e4c7bd8665fc451790557ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8805460ff1990811660019081179092557fdc51a0a44317b550a6b5ddb34687ce2bd40e4750eec27343e32b23e6867392088054821683179055600083905260046020527f1fc5acd025f7cc5cf2691b667dba808b5a149bf27192c208fc66f1f0ec4222d780549091169091179055610d183082610d096012600a612e65565b610a639064e8d4a51000612e74565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7a9190612ef7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb9190612ef7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5c9190612ef7565b600c80546001600160a01b0319166001600160a01b0392831690811782556000908152600360209081526040808320805460ff19908116600190811790925594549095168352600490915290208054909116909117905547610f155760405162461bcd60e51b815260206004820152602c60248201527f45524332303a204d757374206861766520455448206f6e20636f6e747261637460448201526b20746f20476f204c6976652160a01b60648201526084016108da565b610f27610f2130611239565b4761232f565b600b54600880546001600160a01b0319166001600160a01b0390921691821790556000908152600560205260409020805460ff191660011790555050601f805465ff0000ffffff191665010000010101179055600190565b6000546001600160a01b03163314610fa95760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610ffe5760405162461bcd60e51b81526004016108da90612e93565b606482511061106e5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203130302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b60648201526084016108da565b60005b825181101561110757600083828151811061108e5761108e612f14565b6020026020010151905060006110e560646110df8686815181106110b4576110b4612f14565b60200260200101516012600a6110ca9190612e65565b6110d99064e8d4a51000612e74565b90611abc565b90611acf565b90506110f2338383611adb565b505080806110ff90612f2a565b915050611071565b505050565b6000546001600160a01b031633146111365760405162461bcd60e51b81526004016108da90612e93565b6111833061114c6000546001600160a01b031690565b60648461115b6012600a612e65565b61116a9064e8d4a51000612e74565b6111749190612e74565b61117e9190612f43565b611adb565b50565b6000546001600160a01b031633146111b05760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b03811660009081526007602052604090205460ff166112185760405162461bcd60e51b815260206004820152601960248201527f45524332303a204163636f756e74206973206e6f7420626f740000000000000060448201526064016108da565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b0316331461127e5760405162461bcd60e51b81526004016108da90612e93565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112f25760405162461bcd60e51b81526004016108da90612e93565b601f805491151563010000000263ff00000019909216919091179055565b600080546001600160a01b0316331461133b5760405162461bcd60e51b81526004016108da90612e93565b600a8211156113a65760405162461bcd60e51b815260206004820152603160248201527f45524332303a204d6179206e6f74206e756b65206d6f7265207468616e203130604482015270025206f6620746f6b656e7320696e204c5607c1b60648201526084016108da565b600c546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa1580156113f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114159190612f65565b9050600061142860646110df8487611abc565b9050801561144d57600c54600b5461144d916001600160a01b03908116911683611adb565b600b54611462906001600160a01b0316611239565b60135560646114736012600a612e65565b6114829064e8d4a51000612e74565b61148d906032612e74565b6114979190612f43565b60135411156114fc5760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e206e6f74206275726e206d6f7265207468656e20353060448201526a25206f6620737570706c7960a81b60648201526084016108da565b600c546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561154657600080fd5b505af115801561155a573d6000803e3d6000fd5b50505050600193505050505b919050565b6000546001600160a01b031633146115955760405162461bcd60e51b81526004016108da90612e93565b601f80549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146115d95760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461162e5760405162461bcd60e51b81526004016108da90612e93565b601893909355601991909155601a55601c55565b6000546001600160a01b0316331461166c5760405162461bcd60e51b81526004016108da90612e93565b600061167730611239565b90506116906127106110df60056110ca6012600a612e65565b8110156117165760405162461bcd60e51b815260206004820152604860248201527f45524332303a2043616e206f6e6c792073776170206261636b206966206d6f7260448201527f65207468616e20302e303525206f6620746f6b656e7320737475636b206f6e2060648201526718dbdb9d1c9858dd60c21b608482015260a4016108da565b6111836123e3565b600061172b338484611adb565b50600192915050565b6000546001600160a01b0316331461175e5760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117b35760405162461bcd60e51b81526004016108da90612e93565b601f8054911515650100000000000265ff000000000019909216919091179055565b6000546001600160a01b031633146117ff5760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b0381166118695760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016108da565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118ee5760405162461bcd60e51b81526004016108da90612e93565b611902816110df846110ca6012600a612e65565b600f5561191b60646110df60046110ca6012600a612e65565b600f54111561197f5760405162461bcd60e51b815260206004820152602a60248201527f45524332303a2043616e206e6f7420736574206d61782077616c6c6574206d6f6044820152697265207468616e20342560b01b60648201526084016108da565b5050565b6000546001600160a01b031633146119ad5760405162461bcd60e51b81526004016108da90612e93565b600080546040516001600160a01b039091169047908381818185875af1925050503d80600081146119fa576040519150601f19603f3d011682016040523d82523d6000602084013e6119ff565b606091505b50505050565b6000546001600160a01b03163314611a2f5760405162461bcd60e51b81526004016108da90612e93565b6001600160a01b03811660009081526007602052604090205460ff1615611a985760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e7420616c72656164792061646465640000000060448201526064016108da565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000611ac88284612e74565b9392505050565b6000611ac88284612f43565b6001600160a01b038316611b3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108da565b6001600160a01b038216611ba15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108da565b60008111611c0a5760405162461bcd60e51b815260206004820152603060248201527f45524332303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016108da565b6001600160a01b03831660009081526007602052604090205460ff1615611c735760405162461bcd60e51b815260206004820181905260248201527f45524332303a2043616e206e6f74207472616e736665722066726f6d20424f5460448201526064016108da565b601f5462010000900460ff16611d0e576001600160a01b03831660009081526005602052604090205460ff1680611cc257506001600160a01b03821660009081526005602052604090205460ff165b611d0e5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164696e67204973204e6f74204c69766521000000000060448201526064016108da565b601f5460ff6101009091041615156001148015611d4457506001600160a01b03821660009081526004602052604090205460ff16155b15611dc457600f54611d5f82611d5985611239565b90612323565b1115611dc45760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204d617820616d6f756e74206f6620746f6b656e7320666f722060448201526d1dd85b1b195d081c995858da195960921b60648201526084016108da565b601f5460ff1615611e9f576000546001600160a01b03848116911614801590611dfb57506000546001600160a01b03838116911614155b8015611e0f57506001600160a01b03821615155b8015611e295750600b546001600160a01b03838116911614155b8015611e435750600c546001600160a01b03838116911614155b15611e9f5760005b6001811015611e9d57601d54611e619082612323565b4303611e8b576001600160a01b0383166000908152600660205260409020805460ff191660011790555b80611e9581612f2a565b915050611e4b565b505b601f546301000000900460ff1615611f8257611eba8261096e565b158015611edf57506001600160a01b03831660009081526003602052604090205460ff165b80611f135750611eee8361096e565b158015611f1357506001600160a01b03821660009081526003602052604090205460ff165b80611f465750611f228361096e565b8015611f4657506001600160a01b03821660009081526003602052604090205460ff165b80611f795750611f558261096e565b8015611f7957506001600160a01b03831660009081526003602052604090205460ff165b611f8257600080fd5b6000611f9b60115460125461232390919063ffffffff16565b90506000611fa830611239565b601054601f5491925082101590640100000000900460ff16158015611fd85750601f5465010000000000900460ff165b8015611ff95750600c54600090611ff7906001600160a01b0316611239565b115b80156120055750600083115b801561202a57506001600160a01b03851660009081526005602052604090205460ff16155b801561204f57506001600160a01b03861660009081526005602052604090205460ff16155b80156120685750600c546001600160a01b038681169116145b80156120715750805b1561207e5761207e6123e3565b6001600160a01b03861660009081526005602052604090205460ff16806120bd57506001600160a01b03851660009081526005602052604090205460ff165b156120e0576000601481905560158190556120d89080612323565b601655612236565b600c546001600160a01b039081169087160361211057601854601481905560195460158190556120d89190612323565b600c546001600160a01b039081169086160361218f57601a546014819055601c5460158190556121409190612323565b6016556001600160a01b03861660009081526006602052604090205460ff16801561216d575042601e5410155b1561218a5760556014819055600a60158190556120d89190612323565b612236565b6001600160a01b03861660009081526006602052604090205460ff1615806121b9575042601e5411155b61222b5760405162461bcd60e51b815260206004820152603960248201527f45524332303a20536e69706572732063616e206e6f74207472616e736665722060448201527f74696c6c2070656e616c74792074696d65206973206f7665720000000000000060648201526084016108da565b600060148190556015555b61224186868661258f565b505050505050565b6000818484111561226d5760405162461bcd60e51b81526004016108da9190612952565b505050900390565b6001600160a01b03831661229b5760405162461bcd60e51b81526004016108da90612cdd565b6001600160a01b0382166122c15760405162461bcd60e51b81526004016108da90612d25565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000611ac88284612ed8565b600d546123479030906001600160a01b031684612275565b600d5460085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156123b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123dc9190612f7e565b5050505050565b601f805464ff000000001916640100000000179055600061240330611239565b9050600061241e60125460115461232390919063ffffffff16565b905060006124386002601254611acf90919063ffffffff16565b90506000612446848361276c565b90504761245282612778565b600061245e478361276c565b9050600061247b866110df60115485611abc90919063ffffffff16565b90506000612489838361276c565b60006011819055601281905560095460405192935090916001600160a01b039091169084908381818185875af1925050503d80600081146124e6576040519150601f19603f3d011682016040523d82523d6000602084013e6124eb565b606091505b50509050816000141580156124ff57508615155b1561250e5761250e878361232f565b6706f05b59d3b2000047111561257657600a546040516001600160a01b03909116904790600081818185875af1925050503d806000811461256b576040519150601f19603f3d011682016040523d82523d6000602084013e612570565b606091505b50909150505b5050601f805464ff000000001916905550505050505050565b601654156126cb5760006125a2826128ca565b905060006125b0838361276c565b90506125bb826128f2565b6001600160a01b038516600090815260026020526040812080548592906125e3908490612fac565b90915550506001600160a01b03841660009081526002602052604081208054839290612610908490612ed8565b90915550503060009081526002602052604081208054849290612634908490612ed8565b90915550506017546126469084612e74565b6009546001600160a01b031660009081526002602052604081208054909190612670908490612ed8565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126bc91815260200190565b60405180910390a35050505050565b6001600160a01b038316600090815260026020526040812080548392906126f3908490612fac565b90915550506001600160a01b03821660009081526002602052604081208054839290612720908490612ed8565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161231691815260200190565b6000611ac88284612fac565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127ad576127ad612f14565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282a9190612ef7565b8160018151811061283d5761283d612f14565b6001600160a01b039283166020918202929092010152600d546128639130911684612275565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061289c908590600090869030904290600401612fbf565b600060405180830381600087803b1580156128b657600080fd5b505af1158015612241573d6000803e3d6000fd5b600061096860646110df6128eb60155460145461232390919063ffffffff16565b8590611abc565b61290d6016546110df60145484611abc90919063ffffffff16565b6011600082825461291e9190612ed8565b909155505060165460155461293991906110df908490611abc565b6012600082825461294a9190612ed8565b909155505050565b600060208083528351808285015260005b8181101561297f57858101830151858201604001528201612963565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461118357600080fd5b600080604083850312156129c857600080fd5b82356129d3816129a0565b946020939093013593505050565b6000602082840312156129f357600080fd5b8135611ac8816129a0565b8035801515811461156657600080fd5b600060208284031215612a2057600080fd5b611ac8826129fe565b600080600060608486031215612a3e57600080fd5b8335612a49816129a0565b92506020840135612a59816129a0565b929592945050506040919091013590565b600060208284031215612a7c57600080fd5b5035919050565b60008060408385031215612a9657600080fd5b8235612aa1816129a0565b9150612aaf602084016129fe565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612af757612af7612ab8565b604052919050565b600067ffffffffffffffff821115612b1957612b19612ab8565b5060051b60200190565b600082601f830112612b3457600080fd5b81356020612b49612b4483612aff565b612ace565b82815260059290921b84018101918181019086841115612b6857600080fd5b8286015b84811015612b835780358352918301918301612b6c565b509695505050505050565b60008060408385031215612ba157600080fd5b823567ffffffffffffffff80821115612bb957600080fd5b818501915085601f830112612bcd57600080fd5b81356020612bdd612b4483612aff565b82815260059290921b84018101918181019089841115612bfc57600080fd5b948201945b83861015612c23578535612c14816129a0565b82529482019490820190612c01565b96505086013592505080821115612c3957600080fd5b50612c4685828601612b23565b9150509250929050565b60008060008060808587031215612c6657600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612c9557600080fd5b8235612ca0816129a0565b91506020830135612cb0816129a0565b809150509250929050565b60008060408385031215612cce57600080fd5b50508035926020909101359150565b60208082526028908201527f45524332303a2043616e206e6f7420617070726f76652066726f6d207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526026908201527f45524332303a2043616e206e6f7420617070726f766520746f207a65726f206160408201526564647265737360d01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612dbc578160001904821115612da257612da2612d6b565b80851615612daf57918102915b93841c9390800290612d86565b509250929050565b600082612dd357506001610968565b81612de057506000610968565b8160018114612df65760028114612e0057612e1c565b6001915050610968565b60ff841115612e1157612e11612d6b565b50506001821b610968565b5060208310610133831016604e8410600b8410161715612e3f575081810a610968565b612e498383612d81565b8060001904821115612e5d57612e5d612d6b565b029392505050565b6000611ac860ff841683612dc4565b6000816000190483118215151615612e8e57612e8e612d6b565b500290565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b8082018082111561096857610968612d6b565b6000611ac88383612dc4565b600060208284031215612f0957600080fd5b8151611ac8816129a0565b634e487b7160e01b600052603260045260246000fd5b600060018201612f3c57612f3c612d6b565b5060010190565b600082612f6057634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612f7757600080fd5b5051919050565b600080600060608486031215612f9357600080fd5b8351925060208401519150604084015190509250925092565b8181038181111561096857610968612d6b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561300f5784516001600160a01b031683529383019391830191600101612fea565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a2043616e206e6f74207472616e736665722e20416d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e015571ec7d12251a6580a95f34d22158b3625f1d327c1f847938df3f5a028e264736f6c63430008100033

Deployed Bytecode Sourcemap

18180:17527:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21303:98;;;;;;;;;;-1:-1:-1;21384:9:0;;;;;;;;;;;;-1:-1:-1;;;21384:9:0;;;;21303:98;;;;;;;:::i;:::-;;;;;;;;22008:397;;;;;;;;;;-1:-1:-1;22008:397:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;22008:397:0;1023:187:1;18835:40:0;;;;;;;;;;-1:-1:-1;18835:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35481:223;;;;;;;;;;-1:-1:-1;35630:15:0;;35646;;35662:16;;35679;;35481:223;;;1698:25:1;;;1754:2;1739:18;;1732:34;;;;1782:18;;;1775:34;1840:2;1825:18;;1818:34;1685:3;1670:19;35481:223:0;1467:391:1;31298:337:0;;;;;;;;;;-1:-1:-1;31298:337:0;;;;;:::i;:::-;;:::i;21618:101::-;;;;;;;;;;;;;:::i;:::-;;;2009:25:1;;;1997:2;1982:18;21618:101:0;1863:177:1;34671:103:0;;;;;;;;;;-1:-1:-1;34671:103:0;;;;;:::i;:::-;;:::i;:::-;;19790:28;;;;;;;;;;-1:-1:-1;19790:28:0;;;;;;;;22952:348;;;;;;;;;;-1:-1:-1;22952:348:0;;;;;:::i;:::-;;:::i;32241:195::-;;;;;;;;;;-1:-1:-1;32241:195:0;;;;;:::i;:::-;;:::i;21515:97::-;;;;;;;;;;-1:-1:-1;21515:97:0;;18451:2;3183:36:1;;3171:2;3156:18;21515:97:0;3041:184:1;33752:171:0;;;;;;;;;;-1:-1:-1;33752:171:0;;;;;:::i;:::-;;:::i;23741:1249::-;;;;;;;;;;;;;:::i;18882:37::-;;;;;;;;;;-1:-1:-1;18882:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34247:158;;;;;;;;;;-1:-1:-1;34247:158:0;;;;;:::i;:::-;;:::i;23306:429::-;;;;;;;;;;-1:-1:-1;23306:429:0;;;;;:::i;:::-;;:::i;32084:149::-;;;;;;;;;;-1:-1:-1;32084:149:0;;;;;:::i;:::-;;:::i;19151:26::-;;;;;;;;;;-1:-1:-1;19151:26:0;;;;-1:-1:-1;;;;;19151:26:0;;;;;;-1:-1:-1;;;;;6201:32:1;;;6183:51;;6171:2;6156:18;19151:26:0;6037:203:1;33590:159:0;;;;;;;;;;-1:-1:-1;33590:159:0;;;;;:::i;:::-;;:::i;21725:122::-;;;;;;;;;;-1:-1:-1;21725:122:0;;;;;:::i;:::-;;:::i;794:148::-;;;;;;;;;;;;;:::i;19825:31::-;;;;;;;;;;-1:-1:-1;19825:31:0;;;;;;;;;;;34894:119;;;;;;;;;;-1:-1:-1;34894:119:0;;;;;:::i;:::-;;:::i;32448:686::-;;;;;;;;;;-1:-1:-1;32448:686:0;;;;;:::i;:::-;;:::i;19076:24::-;;;;;;;;;;-1:-1:-1;19076:24:0;;;;-1:-1:-1;;;;;19076:24:0;;;34780:108;;;;;;;;;;-1:-1:-1;34780:108:0;;;;;:::i;:::-;;:::i;570:87::-;;;;;;;;;;-1:-1:-1;616:7:0;643:6;-1:-1:-1;;;;;643:6:0;570:87;;33929:160;;;;;;;;;;-1:-1:-1;33929:160:0;;;;;:::i;:::-;;:::i;19863:24::-;;;;;;;;;;-1:-1:-1;19863:24:0;;;;;;;;;;;19107:37;;;;;;;;;;-1:-1:-1;19107:37:0;;;;-1:-1:-1;;;;;19107:37:0;;;21407:102;;;;;;;;;;-1:-1:-1;21490:11:0;;;;;;;;;;;;-1:-1:-1;;;21490:11:0;;;;21407:102;;19894:35;;;;;;;;;;-1:-1:-1;19894:35:0;;;;;;;;;;;35148:327;;;;;;;;;;-1:-1:-1;35148:327:0;;;;;:::i;:::-;;:::i;31789:126::-;;;;;;;;;;-1:-1:-1;31789:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;31879:28:0;31855:4;31879:28;;;:19;:28;;;;;;;;;31789:126;33140:282;;;;;;;;;;;;;:::i;22770:176::-;;;;;;;;;;-1:-1:-1;22770:176:0;;;;;:::i;:::-;;:::i;34095:146::-;;;;;;;;;;-1:-1:-1;34095:146:0;;;;;:::i;:::-;;:::i;21853:149::-;;;;;;;;;;-1:-1:-1;21853:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;21963:22:0;;;21936:7;21963:22;;;:15;:22;;;;;;;;:31;;;;;;;;;;;;;21853:149;19710:33;;;;;;;;;;;;;;;;35019:123;;;;;;;;;;-1:-1:-1;35019:123:0;;;;;:::i;:::-;;:::i;19750:31::-;;;;;;;;;;;;;;;;948:249;;;;;;;;;;-1:-1:-1;948:249:0;;;;;:::i;:::-;;:::i;34411:254::-;;;;;;;;;;-1:-1:-1;34411:254:0;;;;;:::i;:::-;;:::i;31921:157::-;;;;;;;;;;;;;:::i;33428:159::-;;;;;;;;;;-1:-1:-1;33428:159:0;;;;;:::i;:::-;;:::i;22008:397::-;22083:4;229:10;22100:79;;;;-1:-1:-1;;;22100:79:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;22198:21:0;;22190:72;;;;-1:-1:-1;;;22190:72:0;;;;;;;:::i;:::-;229:10;22273:29;;;;:15;:29;;;;;;;;-1:-1:-1;;;;;22273:38:0;;;;;;;;;;;;:47;;;22336:39;2009:25:1;;;22273:38:0;;229:10;22336:39;;1982:18:1;22336:39:0;;;;;;;-1:-1:-1;22393:4:0;22008:397;;;;;:::o;31298:337::-;31356:4;31535:20;;31422:66;31584:23;;;;;;:42;;-1:-1:-1;31611:15:0;;;31584:42;31576:51;31298:337;-1:-1:-1;;;;31298:337:0:o;21618:101::-;21673:7;18506:16;18451:2;18506;:16;:::i;:::-;18499:23;;:4;:23;:::i;:::-;21693:18;;21618:101;:::o;34671:103::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;34744:8:::1;:22:::0;;-1:-1:-1;;34744:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34671:103::o;22952:348::-;23050:4;23067:43;23084:6;23092:9;23103:6;23067:16;:43::i;:::-;23121:149;23137:6;229:10;23167:102;23209:6;23167:102;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23167:23:0;;;;;;:15;:23;;;;;;;;229:10;23167:37;;;;;;;;;;:41;:102::i;:::-;23121:15;:149::i;:::-;-1:-1:-1;23288:4:0;22952:348;;;;;:::o;32241:195::-;32329:12;;32318:7;:23;32309:50;;;;-1:-1:-1;;;32309:50:0;;10628:2:1;32309:50:0;;;10610:21:1;10667:2;10647:18;;;10640:30;-1:-1:-1;;;10686:18:1;;;10679:43;10739:18;;32309:50:0;10426:337:1;32309:50:0;32411:16;;32392;;:35;;;;:::i;:::-;32385:43;;:2;:43;:::i;:::-;32370:12;:58;-1:-1:-1;32241:195:0:o;33752:171::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33829:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;::::1;;33821:58;;;::::0;-1:-1:-1;;;33821:58:0;;11236:2:1;33821:58:0::1;::::0;::::1;11218:21:1::0;11275:2;11255:18;;;11248:30;11314;11294:18;;;11287:58;11362:18;;33821:58:0::1;11034:352:1::0;33821:58:0::1;-1:-1:-1::0;;;;;33890:17:0::1;33910:5;33890:17:::0;;;:8:::1;:17;::::0;;;;:25;;-1:-1:-1;;33890:25:0::1;::::0;;33752:171::o;23741:1249::-;23787:4;643:6;;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;23812:4:::1;::::0;;;::::1;;;23811:5;23803:45;;;::::0;-1:-1:-1;;;23803:45:0;;11593:2:1;23803:45:0::1;::::0;::::1;11575:21:1::0;11632:2;11612:18;;;11605:30;11671:29;11651:18;;;11644:57;11718:18;;23803:45:0::1;11391:351:1::0;23803:45:0::1;23880:12;23859:18;:33:::0;23922:27:::1;:15;23942:6;23922:19;:27::i;:::-;23903:16;:46:::0;24067:11:::1;:26:::0;;-1:-1:-1;;;;;;24067:26:0;;::::1;24013:42;24067:26:::0;;::::1;::::0;;;24104:11:::1;:56:::0;;;;::::1;24118:42;24104:56;::::0;;24171:41;:48;;-1:-1:-1;;24171:48:0;;::::1;24067:26:::0;24171:48;;::::1;::::0;;;24230:41;:48;;;::::1;::::0;::::1;::::0;;23960:31:::1;24289:41:::0;;;:19:::1;24171:41;24289::::0;;:48;;;;::::1;::::0;;::::1;::::0;;24348:65:::1;24372:4;24013:42:::0;18506:16:::1;18451:2;18506;:16;:::i;:::-;18499:23;::::0;:4:::1;:23;:::i;24348:65::-;24454:12;-1:-1:-1::0;;;;;24454:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24436:52:0::1;;24497:4;24504:12;-1:-1:-1::0;;;;;24504:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24436:88;::::0;-1:-1:-1;;;;;;24436:88:0::1;::::0;;;;;;-1:-1:-1;;;;;12233:15:1;;;24436:88:0::1;::::0;::::1;12215:34:1::0;12285:15;;12265:18;;;12258:43;12150:18;;24436:88:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24424:9;:100:::0;;-1:-1:-1;;;;;;24424:100:0::1;-1:-1:-1::0;;;;;24424:100:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;24535:39:0;;;:19:::1;:39;::::0;;;;;;;:46;;-1:-1:-1;;24535:46:0;;::::1;-1:-1:-1::0;24535:46:0;;::::1;::::0;;;24620:9;;;;::::1;24592:39:::0;;:19:::1;:39:::0;;;;;:46;;;;::::1;::::0;;::::1;::::0;;24657:21:::1;24649:82;;;::::0;-1:-1:-1;;;24649:82:0;;12514:2:1;24649:82:0::1;::::0;::::1;12496:21:1::0;12553:2;12533:18;;;12526:30;12592:34;12572:18;;;12565:62;-1:-1:-1;;;12643:18:1;;;12636:42;12695:19;;24649:82:0::1;12312:408:1::0;24649:82:0::1;24742:61;24755:24;24773:4;24755:9;:24::i;:::-;24781:21;24742:12;:61::i;:::-;24840:4;::::0;31198:16;:37;;-1:-1:-1;;;;;;31198:37:0;-1:-1:-1;;;;;24840:4:0;;::::1;31198:37:::0;;;;;-1:-1:-1;31246:31:0;;;:13;:31;;;;;:38;;-1:-1:-1;;31246:38:0;-1:-1:-1;31246:38:0;;;-1:-1:-1;;24856:11:0::1;:18:::0;;-1:-1:-1;;24949:11:0;;;;;-1:-1:-1;;23741:1249:0:o;34247:158::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34346:37:0;;;::::1;;::::0;;;:19:::1;:37;::::0;;;;:51;;-1:-1:-1;;34346:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34247:158::o;23306:429::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;23429:3:::1;23412:7;:14;:20;23404:87;;;::::0;-1:-1:-1;;;23404:87:0;;12927:2:1;23404:87:0::1;::::0;::::1;12909:21:1::0;12966:2;12946:18;;;12939:30;13005:34;12985:18;;;12978:62;-1:-1:-1;;;13056:18:1;;;13049:52;13118:19;;23404:87:0::1;12725:418:1::0;23404:87:0::1;23506:9;23502:226;23525:7;:14;23521:1;:18;23502:226;;;23560:14;23577:7;23585:1;23577:10;;;;;;;;:::i;:::-;;;;;;;23560:27;;23602:14;23619:36;23651:3;23619:27;23635:7;23643:1;23635:10;;;;;;;;:::i;:::-;;;;;;;18451:2;18506;:16;;;;:::i;:::-;18499:23;::::0;:4:::1;:23;:::i;:::-;23619:15:::0;::::1;:27::i;:::-;:31:::0;::::1;:36::i;:::-;23602:53:::0;-1:-1:-1;23670:46:0::1;229:10:::0;23701:6:::1;23709;23670:16;:46::i;:::-;23545:183;;23541:3;;;;;:::i;:::-;;;;23502:226;;;;23306:429:::0;;:::o;32084:149::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;32160:65:::1;32185:4;32192:7;616::::0;643:6;-1:-1:-1;;;;;643:6:0;;570:87;32192:7:::1;32221:3;32213:7:::0;18506:16:::1;18451:2;18506;:16;:::i;:::-;18499:23;::::0;:4:::1;:23;:::i;:::-;32201:19;;;;:::i;:::-;:23;;;;:::i;:::-;32160:16;:65::i;:::-;32084:149:::0;:::o;33590:159::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33664:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;::::1;;33656:52;;;::::0;-1:-1:-1;;;33656:52:0;;13844:2:1;33656:52:0::1;::::0;::::1;13826:21:1::0;13883:2;13863:18;;;13856:30;13922:27;13902:18;;;13895:55;13967:18;;33656:52:0::1;13642:349:1::0;33656:52:0::1;-1:-1:-1::0;;;;;33719:14:0::1;33736:5;33719:14:::0;;;:5:::1;:14;::::0;;;;:22;;-1:-1:-1;;33719:22:0::1;::::0;;33590:159::o;21725:122::-;-1:-1:-1;;;;;21818:21:0;21791:7;21818:21;;;:12;:21;;;;;;;21725:122::o;794:148::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;901:1:::1;885:6:::0;;864:40:::1;::::0;-1:-1:-1;;;;;885:6:0;;::::1;::::0;864:40:::1;::::0;901:1;;864:40:::1;932:1;915:19:::0;;-1:-1:-1;;;;;;915:19:0::1;::::0;;794:148::o;34894:119::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;34976:15:::1;:29:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;34976:29:0;;::::1;::::0;;;::::1;::::0;;34894:119::o;32448:686::-;32525:4;643:6;;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;32560:2:::1;32549:7;:13;;32541:75;;;::::0;-1:-1:-1;;;32541:75:0;;14198:2:1;32541:75:0::1;::::0;::::1;14180:21:1::0;14237:2;14217:18;;;14210:30;14276:34;14256:18;;;14249:62;-1:-1:-1;;;14327:18:1;;;14320:47;14384:19;;32541:75:0::1;13996:413:1::0;32541:75:0::1;32673:9;::::0;32658:25:::1;::::0;-1:-1:-1;;;32658:25:0;;-1:-1:-1;;;;;32673:9:0;;::::1;32658:25;::::0;::::1;6183:51:1::0;32627:28:0::1;::::0;32658:4:::1;::::0;:14:::1;::::0;6156:18:1;;32658:25:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32627:56:::0;-1:-1:-1;32694:20:0::1;32717:44;32755:5;32717:33;32627:56:::0;32742:7;32717:24:::1;:33::i;:44::-;32694:67:::0;-1:-1:-1;32776:16:0;;32772:95:::1;;32825:9;::::0;32836:4:::1;::::0;32808:47:::1;::::0;-1:-1:-1;;;;;32825:9:0;;::::1;::::0;32836:4:::1;32842:12:::0;32808:16:::1;:47::i;:::-;32907:4;::::0;32897:15:::1;::::0;-1:-1:-1;;;;;32907:4:0::1;32897:9;:15::i;:::-;32877:17;:35:::0;32971:5:::1;18506:16;18451:2;18506;:16;:::i;:::-;18499:23;::::0;:4:::1;:23;:::i;:::-;32952:16;::::0;32966:2:::1;32952:16;:::i;:::-;:24;;;;:::i;:::-;32931:17;;:45;;32923:101;;;::::0;-1:-1:-1;;;32923:101:0;;14805:2:1;32923:101:0::1;::::0;::::1;14787:21:1::0;14844:2;14824:18;;;14817:30;14883:34;14863:18;;;14856:62;-1:-1:-1;;;14934:18:1;;;14927:41;14985:19;;32923:101:0::1;14603:407:1::0;32923:101:0::1;33072:9;::::0;33093:11:::1;::::0;;-1:-1:-1;;;;;;33093:11:0;;;;-1:-1:-1;;;;;33072:9:0;;::::1;::::0;;;33093::::1;::::0;:11:::1;::::0;;::::1;::::0;33035:19:::1;::::0;33093:11;;;;;;;33035:19;33072:9;33093:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33122:4;33115:11;;;;;779:1;32448:686:::0;;;:::o;34780:108::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;34855:11:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;34855:25:0;;::::1;::::0;;;::::1;::::0;;34780:108::o;33929:160::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34030:37:0;;;::::1;;::::0;;;:19:::1;:37;::::0;;;;:51;;-1:-1:-1;;34030:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33929:160::o;35148:327::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;35298:15:::1;:33:::0;;;;35342:15:::1;:33:::0;;;;35386:16:::1;:35:::0;35432:16:::1;:35:::0;35148:327::o;33140:282::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;33195:23:::1;33221:24;33239:4;33221:9;:24::i;:::-;33195:50:::0;-1:-1:-1;33283:29:0::1;33306:5;33283:18;33299:1;18506:16;18451:2;18506;:16;:::i;33283:29::-;33264:15;:48;;33256:133;;;::::0;-1:-1:-1;;;33256:133:0;;15217:2:1;33256:133:0::1;::::0;::::1;15199:21:1::0;15256:2;15236:18;;;15229:30;15295:34;15275:18;;;15268:62;15366:34;15346:18;;;15339:62;-1:-1:-1;;;15417:19:1;;;15410:39;15466:19;;33256:133:0::1;15015:476:1::0;33256:133:0::1;33400:14;:12;:14::i;22770:176::-:0;22850:4;22867:49;229:10;22898:9;22909:6;22867:16;:49::i;:::-;-1:-1:-1;22934:4:0;22770:176;;;;:::o;34095:146::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34188:31:0;;;::::1;;::::0;;;:13:::1;:31;::::0;;;;:45;;-1:-1:-1;;34188:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34095:146::o;35019:123::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;35100:20:::1;:34:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35100:34:0;;::::1;::::0;;;::::1;::::0;;35019:123::o;948:249::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1037:22:0;::::1;1029:78;;;::::0;-1:-1:-1;;;1029:78:0;;15698:2:1;1029:78:0::1;::::0;::::1;15680:21:1::0;15737:2;15717:18;;;15710:30;15776:34;15756:18;;;15749:62;-1:-1:-1;;;15827:18:1;;;15820:41;15878:19;;1029:78:0::1;15496:407:1::0;1029:78:0::1;1144:6;::::0;;1123:38:::1;::::0;-1:-1:-1;;;;;1123:38:0;;::::1;::::0;1144:6;::::1;::::0;1123:38:::1;::::0;::::1;1172:6;:17:::0;;-1:-1:-1;;;;;;1172:17:0::1;-1:-1:-1::0;;;;;1172:17:0;;;::::1;::::0;;;::::1;::::0;;948:249::o;34411:254::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;34515:37:::1;34544:7:::0;34515:24:::1;34531:7:::0;18506:16:::1;18451:2;18506;:16;:::i;34515:37::-;34503:9;:49:::0;34583:27:::1;34606:3;34583:18;34599:1;18506:16;18451:2;18506;:16;:::i;34583:27::-;34571:9;;:39;;34563:94;;;::::0;-1:-1:-1;;;34563:94:0;;16110:2:1;34563:94:0::1;::::0;::::1;16092:21:1::0;16149:2;16129:18;;;16122:30;16188:34;16168:18;;;16161:62;-1:-1:-1;;;16239:18:1;;;16232:40;16289:19;;34563:94:0::1;15908:406:1::0;34563:94:0::1;34411:254:::0;;:::o;31921:157::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;31979:12:::1;643:6:::0;;32015:55:::1;::::0;-1:-1:-1;;;;;643:6:0;;;;32044:21:::1;::::0;31979:12;32015:55;31979:12;32015:55;32044:21;643:6;32015:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;31921:157:0:o;33428:159::-;616:7;643:6;-1:-1:-1;;;;;643:6:0;229:10;703:23;695:73;;;;-1:-1:-1;;;695:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33500:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;::::1;;33499:15;33491:56;;;::::0;-1:-1:-1;;;33491:56:0;;16731:2:1;33491:56:0::1;::::0;::::1;16713:21:1::0;16770:2;16750:18;;;16743:30;16809;16789:18;;;16782:58;16857:18;;33491:56:0::1;16529:352:1::0;33491:56:0::1;-1:-1:-1::0;;;;;33558:14:0::1;;::::0;;;:5:::1;:14;::::0;;;;:21;;-1:-1:-1;;33558:21:0::1;33575:4;33558:21;::::0;;33428:159::o;2773:98::-;2831:7;2858:5;2862:1;2858;:5;:::i;:::-;2851:12;2773:98;-1:-1:-1;;;2773:98:0:o;2877:::-;2935:7;2962:5;2966:1;2962;:5;:::i;24996:3038::-;-1:-1:-1;;;;;25092:18:0;;25084:68;;;;-1:-1:-1;;;25084:68:0;;17088:2:1;25084:68:0;;;17070:21:1;17127:2;17107:18;;;17100:30;17166:34;17146:18;;;17139:62;-1:-1:-1;;;17217:18:1;;;17210:35;17262:19;;25084:68:0;16886:401:1;25084:68:0;-1:-1:-1;;;;;25171:16:0;;25163:64;;;;-1:-1:-1;;;25163:64:0;;17494:2:1;25163:64:0;;;17476:21:1;17533:2;17513:18;;;17506:30;17572:34;17552:18;;;17545:62;-1:-1:-1;;;17623:18:1;;;17616:33;17666:19;;25163:64:0;17292:399:1;25163:64:0;25255:1;25246:6;:10;25238:71;;;;-1:-1:-1;;;25238:71:0;;17898:2:1;25238:71:0;;;17880:21:1;17937:2;17917:18;;;17910:30;17976:34;17956:18;;;17949:62;-1:-1:-1;;;18027:18:1;;;18020:46;18083:19;;25238:71:0;17696:412:1;25238:71:0;-1:-1:-1;;;;;25329:11:0;;;;;;:5;:11;;;;;;;;25328:12;25320:57;;;;-1:-1:-1;;;25320:57:0;;18315:2:1;25320:57:0;;;18297:21:1;;;18334:18;;;18327:30;18393:34;18373:18;;;18366:62;18445:18;;25320:57:0;18113:356:1;25320:57:0;25392:4;;;;;;;25388:116;;-1:-1:-1;;;;;25420:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;25443:17:0;;;;;;:13;:17;;;;;;;;25420:40;25412:80;;;;-1:-1:-1;;;25412:80:0;;18676:2:1;25412:80:0;;;18658:21:1;18715:2;18695:18;;;18688:30;18754:29;18734:18;;;18727:57;18801:18;;25412:80:0;18474:351:1;25412:80:0;25518:11;;;;;;;;:19;;:11;:19;:48;;;;-1:-1:-1;;;;;;25543:23:0;;;;;;:19;:23;;;;;;;;25541:25;25518:48;25514:178;;;25620:9;;25591:25;25609:6;25591:13;25601:2;25591:9;:13::i;:::-;:17;;:25::i;:::-;:38;;25583:97;;;;-1:-1:-1;;;25583:97:0;;19032:2:1;25583:97:0;;;19014:21:1;19071:2;19051:18;;;19044:30;19110:34;19090:18;;;19083:62;-1:-1:-1;;;19161:18:1;;;19154:44;19215:19;;25583:97:0;18830:410:1;25583:97:0;25705:8;;;;25702:350;;;616:7;643:6;-1:-1:-1;;;;;25733:15:0;;;643:6;;25733:15;;;;:32;;-1:-1:-1;616:7:0;643:6;-1:-1:-1;;;;;25752:13:0;;;643:6;;25752:13;;25733:32;:52;;;;-1:-1:-1;;;;;;25769:16:0;;;;25733:52;:66;;;;-1:-1:-1;25795:4:0;;-1:-1:-1;;;;;25789:10:0;;;25795:4;;25789:10;;25733:66;:85;;;;-1:-1:-1;25809:9:0;;-1:-1:-1;;;;;25803:15:0;;;25809:9;;25803:15;;25733:85;25729:312;;;25844:6;25839:187;25860:1;25856;:5;25839:187;;;25910:18;;:25;;25933:1;25910:22;:25::i;:::-;25894:12;:41;25891:116;;-1:-1:-1;;;;;25964:12:0;;;;;;:8;:12;;;;;:19;;-1:-1:-1;;25964:19:0;25979:4;25964:19;;;25891:116;25863:3;;;;:::i;:::-;;;;25839:187;;;;25729:312;26065:15;;;;;;;26062:331;;;26124:14;26135:2;26124:10;:14::i;:::-;26123:15;:44;;;;-1:-1:-1;;;;;;26142:25:0;;;;;;:19;:25;;;;;;;;26123:44;:109;;;;26189:16;26200:4;26189:10;:16::i;:::-;26188:17;:44;;;;-1:-1:-1;;;;;;26209:23:0;;;;;;:19;:23;;;;;;;;26188:44;26123:174;;;;26254:16;26265:4;26254:10;:16::i;:::-;:43;;;;-1:-1:-1;;;;;;26274:23:0;;;;;;:19;:23;;;;;;;;26254:43;26123:239;;;;26319:14;26330:2;26319:10;:14::i;:::-;:43;;;;-1:-1:-1;;;;;;26337:25:0;;;;;;:19;:25;;;;;;;;26319:43;26097:284;;;;;;26403:25;26431:36;26451:15;;26431;;:19;;:36;;;;:::i;:::-;26403:64;;26478:28;26509:24;26527:4;26509:9;:24::i;:::-;26599:10;;26625:16;;26478:55;;-1:-1:-1;26575:34:0;;;;26625:16;;;;;26624:17;:41;;;;-1:-1:-1;26645:20:0;;;;;;;26624:41;:69;;;;-1:-1:-1;26679:9:0;;26692:1;;26669:20;;-1:-1:-1;;;;;26679:9:0;26669;:20::i;:::-;:24;26624:69;:94;;;;;26717:1;26697:17;:21;26624:94;:116;;;;-1:-1:-1;;;;;;26723:17:0;;;;;;:13;:17;;;;;;;;26722:18;26624:116;:140;;;;-1:-1:-1;;;;;;26745:19:0;;;;;;:13;:19;;;;;;;;26744:20;26624:140;:159;;;;-1:-1:-1;26774:9:0;;-1:-1:-1;;;;;26768:15:0;;;26774:9;;26768:15;26624:159;:186;;;;;26787:23;26624:186;26620:237;;;26827:14;:12;:14::i;:::-;-1:-1:-1;;;;;26871:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;26894:17:0;;;;;;:13;:17;;;;;;;;26871:40;26867:1118;;;26943:1;26928:12;:16;;;26959:12;:16;;;27007:30;;26943:1;27007:16;:30::i;:::-;26990:14;:47;26867:1118;;;27082:9;;-1:-1:-1;;;;;27082:9:0;;;27074:17;;;;27070:904;;27127:15;;27112:12;:30;;;27176:15;;27161:12;:30;;;27227:36;;27127:15;27227:19;:36::i;27070:904::-;27294:9;;-1:-1:-1;;;;;27294:9:0;;;27288:15;;;;27284:690;;27339:16;;27324:12;:31;;;27389:16;;27374:12;:31;;;27441:38;;27339:16;27441:20;:38::i;:::-;27424:14;:55;-1:-1:-1;;;;;27501:14:0;;;;;;:8;:14;;;;;;;;:53;;;;;27539:15;27519:16;;:35;;27501:53;27498:227;;;27593:2;27578:12;:17;;;27633:2;27618:12;:17;;;27675:30;;27593:2;27675:16;:30::i;27498:227::-;27284:690;;;-1:-1:-1;;;;;27773:14:0;;;;;;:8;:14;;;;;;;;27772:15;;:54;;;27811:15;27791:16;;:35;;27772:54;27764:124;;;;-1:-1:-1;;;27764:124:0;;19447:2:1;27764:124:0;;;19429:21:1;19486:2;19466:18;;;19459:30;19525:34;19505:18;;;19498:62;19596:27;19576:18;;;19569:55;19641:19;;27764:124:0;19245:421:1;27764:124:0;27922:1;27907:12;:16;;;27942:12;:16;27284:690;27995:31;28009:4;28015:2;28019:6;27995:13;:31::i;:::-;25073:2961;;;24996:3038;;;:::o;3085:206::-;3171:7;3232:12;3224:6;;;;3216:29;;;;-1:-1:-1;;;3216:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3267:5:0;;;3085:206::o;22411:353::-;-1:-1:-1;;;;;22510:19:0;;22502:72;;;;-1:-1:-1;;;22502:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22593:21:0;;22585:72;;;;-1:-1:-1;;;22585:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22668:22:0;;;;;;;:15;:22;;;;;;;;:31;;;;;;;;;;;;;:40;;;22724:32;;2009:25:1;;;22724:32:0;;1982:18:1;22724:32:0;;;;;;;;22411:353;;;:::o;2565:98::-;2623:7;2650:5;2654:1;2650;:5;:::i;29625:369::-;29746:11;;29707:65;;29731:4;;-1:-1:-1;;;;;29746:11:0;29760;29707:15;:65::i;:::-;29783:11;;29929:16;;29783:203;;-1:-1:-1;;;29783:203:0;;29851:4;29783:203;;;20020:34:1;20070:18;;;20063:34;;;29783:11:0;20113:18:1;;;20106:34;;;20156:18;;;20149:34;-1:-1:-1;;;;;29929:16:0;;;20199:19:1;;;20192:44;29960:15:0;20252:19:1;;;20245:35;29783:11:0;;;:27;;29818:9;;19954:19:1;;29783:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29625:369;;:::o;28040:1106::-;20046:16;:23;;-1:-1:-1;;20046:23:0;;;;;;28122:24:::1;28140:4;28122:9;:24::i;:::-;28096:50;;28157:25;28185:36;28205:15;;28185;;:19;;:36;;;;:::i;:::-;28157:64;;28232:27;28262:22;28282:1;28262:15;;:19;;:22;;;;:::i;:::-;28232:52:::0;-1:-1:-1;28295:26:0::1;28324:40;:15:::0;28232:52;28324:19:::1;:40::i;:::-;28295:69:::0;-1:-1:-1;28403:21:0::1;28435:36;28295:69:::0;28435:16:::1;:36::i;:::-;28483:18;28504:44;:21;28530:17:::0;28504:25:::1;:44::i;:::-;28483:65;;28559:23;28585:54;28621:17;28585:31;28600:15;;28585:10;:14;;:31;;;;:::i;:54::-;28559:80:::0;-1:-1:-1;28650:23:0::1;28676:31;:10:::0;28559:80;28676:14:::1;:31::i;:::-;28736:1;28718:15;:19:::0;;;28748:15:::1;:19:::0;;;28804:16:::1;::::0;28796:58:::1;::::0;28650:57;;-1:-1:-1;28736:1:0;;-1:-1:-1;;;;;28804:16:0;;::::1;::::0;28834:15;;28736:1;28796:58;28736:1;28796:58;28834:15;28804:16;28796:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28778:76;;;28868:15;28887:1;28868:20;;:48;;;;-1:-1:-1::0;28892:24:0;;::::1;28868:48;28865:130;;;28933:50;28946:19;28967:15;28933:12;:50::i;:::-;29032:8;29008:21;:32;29005:134;;;29077:10;::::0;29069:58:::1;::::0;-1:-1:-1;;;;;29077:10:0;;::::1;::::0;29101:21:::1;::::0;29069:58:::1;::::0;;;29101:21;29077:10;29069:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29056:71:0;;-1:-1:-1;;29005:134:0::1;-1:-1:-1::0;;20092:16:0;:24;;-1:-1:-1;;20092:24:0;;;-1:-1:-1;;;;;;;28040:1106:0:o;30373:745::-;30468:14;;:19;30465:646;;30503:17;30523:20;30536:6;30523:12;:20::i;:::-;30503:40;-1:-1:-1;30558:22:0;30583:21;:6;30503:40;30583:10;:21::i;:::-;30558:46;;30619:25;30634:9;30619:14;:25::i;:::-;-1:-1:-1;;;;;30659:20:0;;;;;;:12;:20;;;;;:30;;30683:6;;30659:20;:30;;30683:6;;30659:30;:::i;:::-;;;;-1:-1:-1;;;;;;;30704:23:0;;;;;;:12;:23;;;;;:41;;30731:14;;30704:23;:41;;30731:14;;30704:41;:::i;:::-;;;;-1:-1:-1;;30781:4:0;30760:27;;;;:12;:27;;;;;:40;;30791:9;;30760:27;:40;;30791:9;;30760:40;:::i;:::-;;;;-1:-1:-1;;30859:12:0;;30850:21;;:6;:21;:::i;:::-;30828:16;;-1:-1:-1;;;;;30828:16:0;30815:30;;;;:12;:30;;;;;:57;;:30;;;:57;;;;;:::i;:::-;;;;;;;;30909:9;-1:-1:-1;;;;;30892:43:0;30901:6;-1:-1:-1;;;;;30892:43:0;;30920:14;30892:43;;;;2009:25:1;;1997:2;1982:18;;1863:177;30892:43:0;;;;;;;;30488:459;;23502:226:::1;23306:429:::0;;:::o;30465:646::-;-1:-1:-1;;;;;30966:20:0;;;;;;:12;:20;;;;;:30;;30990:6;;30966:20;:30;;30990:6;;30966:30;:::i;:::-;;;;-1:-1:-1;;;;;;;31011:23:0;;;;;;:12;:23;;;;;:33;;31038:6;;31011:23;:33;;31038:6;;31011:33;:::i;:::-;;;;;;;;31081:9;-1:-1:-1;;;;;31064:35:0;31073:6;-1:-1:-1;;;;;31064:35:0;;31092:6;31064:35;;;;2009:25:1;;1997:2;1982:18;;1863:177;2669:98:0;2727:7;2754:5;2758:1;2754;:5;:::i;29152:467::-;29243:16;;;29257:1;29243:16;;;;;;;;29219:21;;29243:16;;;;;;;;;;-1:-1:-1;29243:16:0;29219:40;;29288:4;29270;29275:1;29270:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29270:23:0;;;:7;;;;;;;;;;:23;;;;29314:11;;:18;;;-1:-1:-1;;;29314:18:0;;;;:11;;;;;:16;;:18;;;;;29270:7;;29314:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29304:4;29309:1;29304:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29304:28:0;;;:7;;;;;;;;;:28;29382:11;;29343:65;;29367:4;;29382:11;29396;29343:15;:65::i;:::-;29419:11;;:192;;-1:-1:-1;;;29419:192:0;;-1:-1:-1;;;;;29419:11:0;;;;:62;;:192;;29496:11;;29419;;29538:4;;29565;;29585:15;;29419:192;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30000:147;30061:7;30088:51;30135:3;30088:42;30099:30;30116:12;;30099;;:16;;:30;;;;:::i;:::-;30088:6;;:10;:42::i;30153:214::-;30235:47;30267:14;;30235:27;30249:12;;30235:9;:13;;:27;;;;:::i;:47::-;30216:15;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;30344:14:0;;30326:12;;30312:47;;30344:14;30312:27;;:9;;:13;:27::i;:47::-;30293:15;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;;30153:214:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;2045:160::-;2110:20;;2166:13;;2159:21;2149:32;;2139:60;;2195:1;2192;2185:12;2210:180;2266:6;2319:2;2307:9;2298:7;2294:23;2290:32;2287:52;;;2335:1;2332;2325:12;2287:52;2358:26;2374:9;2358:26;:::i;2395:456::-;2472:6;2480;2488;2541:2;2529:9;2520:7;2516:23;2512:32;2509:52;;;2557:1;2554;2547:12;2509:52;2596:9;2583:23;2615:31;2640:5;2615:31;:::i;:::-;2665:5;-1:-1:-1;2722:2:1;2707:18;;2694:32;2735:33;2694:32;2735:33;:::i;:::-;2395:456;;2787:7;;-1:-1:-1;;;2841:2:1;2826:18;;;;2813:32;;2395:456::o;2856:180::-;2915:6;2968:2;2956:9;2947:7;2943:23;2939:32;2936:52;;;2984:1;2981;2974:12;2936:52;-1:-1:-1;3007:23:1;;2856:180;-1:-1:-1;2856:180:1:o;3230:315::-;3295:6;3303;3356:2;3344:9;3335:7;3331:23;3327:32;3324:52;;;3372:1;3369;3362:12;3324:52;3411:9;3398:23;3430:31;3455:5;3430:31;:::i;:::-;3480:5;-1:-1:-1;3504:35:1;3535:2;3520:18;;3504:35;:::i;:::-;3494:45;;3230:315;;;;;:::o;3550:127::-;3611:10;3606:3;3602:20;3599:1;3592:31;3642:4;3639:1;3632:15;3666:4;3663:1;3656:15;3682:275;3753:2;3747:9;3818:2;3799:13;;-1:-1:-1;;3795:27:1;3783:40;;3853:18;3838:34;;3874:22;;;3835:62;3832:88;;;3900:18;;:::i;:::-;3936:2;3929:22;3682:275;;-1:-1:-1;3682:275:1:o;3962:183::-;4022:4;4055:18;4047:6;4044:30;4041:56;;;4077:18;;:::i;:::-;-1:-1:-1;4122:1:1;4118:14;4134:4;4114:25;;3962:183::o;4150:662::-;4204:5;4257:3;4250:4;4242:6;4238:17;4234:27;4224:55;;4275:1;4272;4265:12;4224:55;4311:6;4298:20;4337:4;4361:60;4377:43;4417:2;4377:43;:::i;:::-;4361:60;:::i;:::-;4455:15;;;4541:1;4537:10;;;;4525:23;;4521:32;;;4486:12;;;;4565:15;;;4562:35;;;4593:1;4590;4583:12;4562:35;4629:2;4621:6;4617:15;4641:142;4657:6;4652:3;4649:15;4641:142;;;4723:17;;4711:30;;4761:12;;;;4674;;4641:142;;;-1:-1:-1;4801:5:1;4150:662;-1:-1:-1;;;;;;4150:662:1:o;4817:1215::-;4935:6;4943;4996:2;4984:9;4975:7;4971:23;4967:32;4964:52;;;5012:1;5009;5002:12;4964:52;5052:9;5039:23;5081:18;5122:2;5114:6;5111:14;5108:34;;;5138:1;5135;5128:12;5108:34;5176:6;5165:9;5161:22;5151:32;;5221:7;5214:4;5210:2;5206:13;5202:27;5192:55;;5243:1;5240;5233:12;5192:55;5279:2;5266:16;5301:4;5325:60;5341:43;5381:2;5341:43;:::i;5325:60::-;5419:15;;;5501:1;5497:10;;;;5489:19;;5485:28;;;5450:12;;;;5525:19;;;5522:39;;;5557:1;5554;5547:12;5522:39;5581:11;;;;5601:217;5617:6;5612:3;5609:15;5601:217;;;5697:3;5684:17;5714:31;5739:5;5714:31;:::i;:::-;5758:18;;5634:12;;;;5796;;;;5601:217;;;5837:5;-1:-1:-1;;5880:18:1;;5867:32;;-1:-1:-1;;5911:16:1;;;5908:36;;;5940:1;5937;5930:12;5908:36;;5963:63;6018:7;6007:8;5996:9;5992:24;5963:63;:::i;:::-;5953:73;;;4817:1215;;;;;:::o;6480:385::-;6566:6;6574;6582;6590;6643:3;6631:9;6622:7;6618:23;6614:33;6611:53;;;6660:1;6657;6650:12;6611:53;-1:-1:-1;;6683:23:1;;;6753:2;6738:18;;6725:32;;-1:-1:-1;6804:2:1;6789:18;;6776:32;;6855:2;6840:18;6827:32;;-1:-1:-1;6480:385:1;-1:-1:-1;6480:385:1:o;6870:388::-;6938:6;6946;6999:2;6987:9;6978:7;6974:23;6970:32;6967:52;;;7015:1;7012;7005:12;6967:52;7054:9;7041:23;7073:31;7098:5;7073:31;:::i;:::-;7123:5;-1:-1:-1;7180:2:1;7165:18;;7152:32;7193:33;7152:32;7193:33;:::i;:::-;7245:7;7235:17;;;6870:388;;;;;:::o;7263:248::-;7331:6;7339;7392:2;7380:9;7371:7;7367:23;7363:32;7360:52;;;7408:1;7405;7398:12;7360:52;-1:-1:-1;;7431:23:1;;;7501:2;7486:18;;;7473:32;;-1:-1:-1;7263:248:1:o;7516:404::-;7718:2;7700:21;;;7757:2;7737:18;;;7730:30;7796:34;7791:2;7776:18;;7769:62;-1:-1:-1;;;7862:2:1;7847:18;;7840:38;7910:3;7895:19;;7516:404::o;7925:402::-;8127:2;8109:21;;;8166:2;8146:18;;;8139:30;8205:34;8200:2;8185:18;;8178:62;-1:-1:-1;;;8271:2:1;8256:18;;8249:36;8317:3;8302:19;;7925:402::o;8332:127::-;8393:10;8388:3;8384:20;8381:1;8374:31;8424:4;8421:1;8414:15;8448:4;8445:1;8438:15;8464:422;8553:1;8596:5;8553:1;8610:270;8631:7;8621:8;8618:21;8610:270;;;8690:4;8686:1;8682:6;8678:17;8672:4;8669:27;8666:53;;;8699:18;;:::i;:::-;8749:7;8739:8;8735:22;8732:55;;;8769:16;;;;8732:55;8848:22;;;;8808:15;;;;8610:270;;;8614:3;8464:422;;;;;:::o;8891:806::-;8940:5;8970:8;8960:80;;-1:-1:-1;9011:1:1;9025:5;;8960:80;9059:4;9049:76;;-1:-1:-1;9096:1:1;9110:5;;9049:76;9141:4;9159:1;9154:59;;;;9227:1;9222:130;;;;9134:218;;9154:59;9184:1;9175:10;;9198:5;;;9222:130;9259:3;9249:8;9246:17;9243:43;;;9266:18;;:::i;:::-;-1:-1:-1;;9322:1:1;9308:16;;9337:5;;9134:218;;9436:2;9426:8;9423:16;9417:3;9411:4;9408:13;9404:36;9398:2;9388:8;9385:16;9380:2;9374:4;9371:12;9367:35;9364:77;9361:159;;;-1:-1:-1;9473:19:1;;;9505:5;;9361:159;9552:34;9577:8;9571:4;9552:34;:::i;:::-;9622:6;9618:1;9614:6;9610:19;9601:7;9598:32;9595:58;;;9633:18;;:::i;:::-;9671:20;;8891:806;-1:-1:-1;;;8891:806:1:o;9702:140::-;9760:5;9789:47;9830:4;9820:8;9816:19;9810:4;9789:47;:::i;9847:168::-;9887:7;9953:1;9949;9945:6;9941:14;9938:1;9935:21;9930:1;9923:9;9916:17;9912:45;9909:71;;;9960:18;;:::i;:::-;-1:-1:-1;10000:9:1;;9847:168::o;10020:401::-;10222:2;10204:21;;;10261:2;10241:18;;;10234:30;10300:34;10295:2;10280:18;;10273:62;-1:-1:-1;;;10366:2:1;10351:18;;10344:35;10411:3;10396:19;;10020:401::o;10768:125::-;10833:9;;;10854:10;;;10851:36;;;10867:18;;:::i;10898:131::-;10958:5;10987:36;11014:8;11008:4;10987:36;:::i;11747:251::-;11817:6;11870:2;11858:9;11849:7;11845:23;11841:32;11838:52;;;11886:1;11883;11876:12;11838:52;11918:9;11912:16;11937:31;11962:5;11937:31;:::i;13148:127::-;13209:10;13204:3;13200:20;13197:1;13190:31;13240:4;13237:1;13230:15;13264:4;13261:1;13254:15;13280:135;13319:3;13340:17;;;13337:43;;13360:18;;:::i;:::-;-1:-1:-1;13407:1:1;13396:13;;13280:135::o;13420:217::-;13460:1;13486;13476:132;;13530:10;13525:3;13521:20;13518:1;13511:31;13565:4;13562:1;13555:15;13593:4;13590:1;13583:15;13476:132;-1:-1:-1;13622:9:1;;13420:217::o;14414:184::-;14484:6;14537:2;14525:9;14516:7;14512:23;14508:32;14505:52;;;14553:1;14550;14543:12;14505:52;-1:-1:-1;14576:16:1;;14414:184;-1:-1:-1;14414:184:1:o;20291:306::-;20379:6;20387;20395;20448:2;20436:9;20427:7;20423:23;20419:32;20416:52;;;20464:1;20461;20454:12;20416:52;20493:9;20487:16;20477:26;;20543:2;20532:9;20528:18;20522:25;20512:35;;20587:2;20576:9;20572:18;20566:25;20556:35;;20291:306;;;;;:::o;20602:128::-;20669:9;;;20690:11;;;20687:37;;;20704:18;;:::i;20735:980::-;20997:4;21045:3;21034:9;21030:19;21076:6;21065:9;21058:25;21102:2;21140:6;21135:2;21124:9;21120:18;21113:34;21183:3;21178:2;21167:9;21163:18;21156:31;21207:6;21242;21236:13;21273:6;21265;21258:22;21311:3;21300:9;21296:19;21289:26;;21350:2;21342:6;21338:15;21324:29;;21371:1;21381:195;21395:6;21392:1;21389:13;21381:195;;;21460:13;;-1:-1:-1;;;;;21456:39:1;21444:52;;21551:15;;;;21516:12;;;;21492:1;21410:9;21381:195;;;-1:-1:-1;;;;;;;21632:32:1;;;;21627:2;21612:18;;21605:60;-1:-1:-1;;;21696:3:1;21681:19;21674:35;21593:3;20735:980;-1:-1:-1;;;20735:980:1:o

Swarm Source

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