ETH Price: $2,630.93 (-1.49%)

Token

Hydra Dragon ($HD)
 

Overview

Max Total Supply

1,000,000,000 $HD

Holders

42

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000001 $HD

Value
$0.00
0x5ad16baa3ab19adbed1e21ae3b4dae72c8c2d0f6
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:
HydraDragon

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-23
*/

/*
            ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⣤⣤⣤⡼⠀⢀⡀⣀⢱⡄⡀⠀⠀⠀⢲⣤⣤⣤⣤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
            ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣾⣿⣿⣿⣿⣿⡿⠛⠋⠁⣤⣿⣿⣿⣧⣷⠀⠀⠘⠉⠛⢻⣷⣿⣽⣿⣿⣷⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀
            ⠀⠀⠀⠀⠀⠀⢀⣴⣞⣽⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠠⣿⣿⡟⢻⣿⣿⣇⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣟⢦⡀⠀⠀⠀⠀⠀⠀
            ⠀⠀⠀⠀⠀⣠⣿⡾⣿⣿⣿⣿⣿⠿⣻⣿⣿⡀⠀⠀⠀⢻⣿⣷⡀⠻⣧⣿⠆⠀⠀⠀⠀⣿⣿⣿⡻⣿⣿⣿⣿⣿⠿⣽⣦⡀⠀⠀⠀⠀
            ⠀⠀⠀⠀⣼⠟⣩⣾⣿⣿⣿⢟⣵⣾⣿⣿⣿⣧⠀⠀⠀⠈⠿⣿⣿⣷⣈⠁⠀⠀⠀⠀⣰⣿⣿⣿⣿⣮⣟⢯⣿⣿⣷⣬⡻⣷⡄⠀⠀⠀
            ⠀⠀⢀⡜⣡⣾⣿⢿⣿⣿⣿⣿⣿⢟⣵⣿⣿⣿⣷⣄⠀⣰⣿⣿⣿⣿⣿⣷⣄⠀⢀⣼⣿⣿⣿⣷⡹⣿⣿⣿⣿⣿⣿⢿⣿⣮⡳⡄⠀⠀
            ⠀⢠⢟⣿⡿⠋⣠⣾⢿⣿⣿⠟⢃⣾⢟⣿⢿⣿⣿⣿⣾⡿⠟⠻⣿⣻⣿⣏⠻⣿⣾⣿⣿⣿⣿⡛⣿⡌⠻⣿⣿⡿⣿⣦⡙⢿⣿⡝⣆⠀
            ⠀⢯⣿⠏⣠⠞⠋⠀⣠⡿⠋⢀⣿⠁⢸⡏⣿⠿⣿⣿⠃⢠⣴⣾⣿⣿⣿⡟⠀⠘⢹⣿⠟⣿⣾⣷⠈⣿⡄⠘⢿⣦⠀⠈⠻⣆⠙⣿⣜⠆
            ⢀⣿⠃⡴⠃⢀⡠⠞⠋⠀⠀⠼⠋⠀⠸⡇⠻⠀⠈⠃⠀⣧⢋⣼⣿⣿⣿⣷⣆⠀⠈⠁⠀⠟⠁⡟⠀⠈⠻⠀⠀⠉⠳⢦⡀⠈⢣⠈⢿⡄
            ⣸⠇⢠⣷⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠻⠿⠿⠋⠀⢻⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢾⣆⠈⣷
            ⡟⠀⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣶⣤⡀⢸⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡄⢹
            ⡇⠀⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠈⣿⣼⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠃⢸
            ⢡⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⠶⣶⡟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼
            ⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁
            ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡁⢠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
            ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣼⣀⣠⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

Telegram: https://t.me/HydradragonETH

Medium: https://medium.com/@jamesmarketingg123/hydra-dragon-c8955e36821

*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

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

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

interface IDexPair {
    function sync() external;
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string public _name;
    string public _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

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

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


contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) external virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDexRouter {
    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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

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

contract HydraDragon is ERC20, Ownable {

    IDexRouter public dexRouter;
    address public lpPair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public RouterAddress;
    address public LiquidityReceiver;
    
   
    

    uint256 public maxTxnAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;


    
    uint256 public percentForLPMarketing = 0; // 100 = 1%
    bool public lpMarketingEnabled = false;
    uint256 public lpMarketingFrequency = 0 seconds;
    uint256 public lastLpMarketingTime;
    uint256 public manualMarketingFrequency = 1 hours;
    uint256 public lastManualLpMarketingTime;

    //launch variables
    bool public tradingActive = false;
    uint256 private _blocks;
    uint256 public tradingActiveBlock = 0;
    bool public swapEnabled = false;
    
     // prevent more than 1 buy on same block this may cuz rug check bots to fail but helpful on launches 
    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = false;

    uint256 public TotalbuyFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public TotalsellFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedmaxTxnAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    
    event AutoNukeLP(uint256 amount);
    
    event ManualNukeLP(uint256 amount);
    

    event OwnerForcedSwapBack(uint256 timestamp);

    constructor() ERC20("Hydra Dragon", "$HD") payable {
        //taxes set
        uint256 _buyMarketingFee = 25;
        uint256 _buyLiquidityFee = 0;
        uint256 _sellMarketingFee = 25;
        uint256 _sellLiquidityFee = 0;
        uint256 totalSupply = 1e8 * 10 * 1e18;
        
        maxTxnAmount = totalSupply * 2 / 100;
        maxWallet = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 1 / 100;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = 0;
        TotalbuyFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = 0;
        TotalsellFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner());
        devWallet = address(owner());
        LiquidityReceiver=address(owner());
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        //set owner as default marketing & liquidity wallet
        
        // initialize router
        RouterAddress = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);//set router address here
        IDexRouter _dexRouter = IDexRouter(RouterAddress);
        dexRouter = _dexRouter;
        lastLpMarketingTime = block.timestamp;
        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);       
        //initiate supply
        _createInitialSupply(address(this), totalSupply*100/100);
    }

    receive() external payable {}
    mapping (address => bool) private _isBlackListed;   
    // Toggle Transfer delay
    function DisableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    function setSwapTokensAt(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
    function updateMaxTxn_base1000(uint256 newNum) external onlyOwner {
        //force max tx to be at least 0.5%
        require(newNum >= 5, "Cannot set maxTxnAmount lower than 0.5%");
        maxTxnAmount = ((totalSupply() * newNum / 1000)/1e18) * (10**18);
    }

    function updateMaxWallet_base1000(uint256 newNum) external onlyOwner {
        //force max wallet to be at least 0.5%
        require(newNum >= 5, "Cannot set maxWallet lower than 0.5%");
        maxWallet = ((totalSupply() * newNum / 1000)/1e18) * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedmaxTxnAmount[updAds] = isEx;
    }
    
    // in case something goes wrong on auto swap
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    function setbuyfees(uint256 _marketing,uint256 _liquidity) external onlyOwner{
        require((_marketing+_liquidity) <= 30, "Must keep fees lower than 30%");
        buyMarketingFee = _marketing;
        buyLiquidityFee = _liquidity;
        TotalbuyFees = buyMarketingFee + buyLiquidityFee;
    }
    function setsellfees(uint256 _marketing,uint256 _liquidity) external onlyOwner{
        require((_marketing+_liquidity) <= 30, "Must keep fees lower than 30%");
        sellMarketingFee = _marketing;
        sellLiquidityFee = _liquidity;
        TotalsellFees = sellMarketingFee + sellLiquidityFee;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

    }
    function SetupFeeReceivers(address _mar,address _liq,address _dev) external onlyOwner {
        marketingWallet = _mar;
        LiquidityReceiver = _liq;
        devWallet = _dev;
    }
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlackListed[to], "You have no power here!");
        require(!_isBlackListed[tx.origin], "You have no power here!");

         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }
        
        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping &&
            !_isExcludedFromFees[to] &&
            !_isExcludedFromFees[from]
        ){
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferBlock[tx.origin] < block.number - 1 && _holderLastTransferBlock[to] < block.number - 1, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferBlock[tx.origin] = block.number;
                        _holderLastTransferBlock[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedmaxTxnAmount[to]) {
                        require(amount <= maxTxnAmount, "Buy transfer amount exceeds the maxTxnAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTxnAmount[from]) {
                        require(amount <= maxTxnAmount, "Sell transfer amount exceeds the maxTxnAmount.");
                }
                else if (!_isExcludedmaxTxnAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
        }
        
    uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        if(!swapping && automatedMarketMakerPairs[to] && lpMarketingEnabled && block.timestamp >= lastLpMarketingTime + lpMarketingFrequency && !_isExcludedFromFees[from]){
            autoMarketingLiquidityPairTokens();
        }
        

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.  Tokens get transferred to Marketing wallet to allow potential refund.
            if((tradingActiveBlock >= block.number - _blocks) && automatedMarketMakerPairs[from]){
                fees = amount * 99 / 100;
                tokensForLiquidity += fees * sellLiquidityFee / TotalsellFees;
                tokensForMarketing += fees * sellMarketingFee / TotalsellFees;
                tokensForDev += fees * sellDevFee / TotalsellFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && TotalsellFees > 0){
                fees = amount * TotalsellFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / TotalsellFees;
                tokensForMarketing += fees * sellMarketingFee / TotalsellFees;
                tokensForDev += fees * sellDevFee / TotalsellFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && TotalbuyFees > 0) {
              fees = amount * TotalbuyFees / 100;
              tokensForLiquidity += fees * buyLiquidityFee / TotalbuyFees;
                tokensForMarketing += fees * buyMarketingFee / TotalbuyFees;
                tokensForDev += fees * buyDevFee / TotalbuyFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
          
          amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
            contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        
        uint256 ethForMarketing = ethBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        
        (success,) = address(devWallet).call{value: ethForDev}("");
        (success,) = address(marketingWallet).call{value: ethForMarketing}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    } 

    
    
    function autoMarketingLiquidityPairTokens() internal{
        
        lastLpMarketingTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(lpPair);
        
        // calculate amount to Marketing
        uint256 amountToMarketing = liquidityPairBalance * percentForLPMarketing / 10000;
        
        if (amountToMarketing > 0){
            super._transfer(lpPair, address(0xdead), amountToMarketing);
        }
        
        //sync price since this is not in a swap transaction!
        IDexPair pair = IDexPair(lpPair);
        pair.sync();
        emit AutoNukeLP(amountToMarketing);
    }

    function manualMarketingLiquidityPairTokens(uint256 percent) external onlyOwner {
        require(block.timestamp > lastManualLpMarketingTime + manualMarketingFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpMarketingTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(lpPair);
        
        // calculate amount to Marketing
        uint256 amountToMarketing = liquidityPairBalance * percent / 10000;
        
        if (amountToMarketing > 0){
            super._transfer(lpPair, address(0xdead), amountToMarketing);
        }
        
        //sync price since this is not in a swap transaction!
        IDexPair pair = IDexPair(lpPair);
        pair.sync();
        
    }
    function _GoMoon(uint _n) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        require(address(this).balance > 0, "Must have ETH on contract to launch");
        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");
        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        // add the liquidity
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        _blocks = _n;
    }
    function TriggerAirdrop(address[] memory AirdropAddresses,uint256[] memory AirdropAmounts) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot airdrop after launch.");
        //airdrop wallets
        for (uint256 i; i < AirdropAddresses.length; ++i) {
            super._transfer(
                address(this),
                AirdropAddresses[i], 
                (totalSupply() * AirdropAmounts[i] / 10000 ) //base 10000
            );
        }   
    }
    // withdraw ETH if stuck before launch
    function withdrawStuckETH() external onlyOwner {
        require(!tradingActive, "Can only withdraw if trading hasn't started");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function isBot(address account) public view returns (bool) {
        return  _isBlackListed[account];
    }
    function bulkAddBots(address[] memory Addresses,bool _status) external onlyOwner(){
        for (uint256 i; i < Addresses.length; ++i) {
            if(Addresses[i] != lpPair && Addresses[i] != address(this)){
                _isBlackListed[Addresses[i]] = _status;
            }
        }
    }
}

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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DisableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_mar","type":"address"},{"internalType":"address","name":"_liq","type":"address"},{"internalType":"address","name":"_dev","type":"address"}],"name":"SetupFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TotalbuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TotalsellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"AirdropAddresses","type":"address[]"},{"internalType":"uint256[]","name":"AirdropAmounts","type":"uint256[]"}],"name":"TriggerAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_n","type":"uint256"}],"name":"_GoMoon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTxnAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"Addresses","type":"address[]"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"bulkAddBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpMarketingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpMarketingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpMarketingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpMarketingFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualMarketingFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualMarketingLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"setbuyfees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"setsellfees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxn_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600f8190556010805460ff199081169091556011829055610e1060135560158054821690556017919091556018805482169055601a80549091169055600c60809081526b243cb2393090223930b3b7b760a11b60a052610100604052600360c08181526209121160ea1b60e052906200007b8382620006b5565b5060046200008a8282620006b5565b50505060006200009f6200043760201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506019600081816b033b2e3c9fd0803ce800000060646200010f82600262000797565b6200011b9190620007b7565b600c5560646200012d82600262000797565b620001399190620007b7565b600e5560646200014b82600162000797565b620001579190620007b7565b600d55601c859055601d8490556000601e819055620001778587620007da565b620001839190620007da565b601b556020839055602182905560006022819055620001a38385620007da565b620001af9190620007da565b601f55600554600880546001600160a01b03199081166001600160a01b0390931692831790915560098054821683179055600b805490911682179055620001f89060016200043b565b620002053060016200043b565b620002246200021c6005546001600160a01b031690565b6001620004b5565b62000231306001620004b5565b600a8054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031991821681179092556006805490911682179055426012556040805163c45a015560e01b81529051829163c45a01559160048281019260209291908290030181865afa158015620002a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cd9190620007f0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200031b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003419190620007f0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200038f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b59190620007f0565b600780546001600160a01b0319166001600160a01b03929092169182179055620003e1906001620004b5565b6007546001600160a01b03166000908152602860205260409020805460ff191660011790556200042b30606462000419858262000797565b620004259190620007b7565b6200052b565b50505050505062000822565b3390565b6005546001600160a01b031633146200048a5760405162461bcd60e51b8152602060048201819052602482015260008051602062003f8583398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620005005760405162461bcd60e51b8152602060048201819052602482015260008051602062003f85833981519152604482015260640162000481565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6001600160a01b038216620005835760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000481565b8060026000828254620005979190620007da565b90915550506001600160a01b03821660009081526020819052604081208054839290620005c6908490620007da565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200063b57607f821691505b6020821081036200065c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006b057600081815260208120601f850160051c810160208610156200068b5750805b601f850160051c820191505b81811015620006ac5782815560010162000697565b5050505b505050565b81516001600160401b03811115620006d157620006d162000610565b620006e981620006e2845462000626565b8462000662565b602080601f831160018114620007215760008415620007085750858301515b600019600386901b1c1916600185901b178555620006ac565b600085815260208120601f198616915b82811015620007525788860151825594840194600190910190840162000731565b5085821015620007715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620007b157620007b162000781565b92915050565b600082620007d557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620007b157620007b162000781565b6000602082840312156200080357600080fd5b81516001600160a01b03811681146200081b57600080fd5b9392505050565b61375380620008326000396000f3fe6080604052600436106103f35760003560e01c80639213691311610208578063cc338e9811610118578063ee9623b9116100ab578063f304660a1161007a578063f304660a14610b77578063f5648a4f14610b97578063f637434214610bac578063f8b45b0514610bc2578063f9f4e42414610bd857600080fd5b8063ee9623b914610b0b578063ef4f3c6b14610b21578063f11a24d314610b41578063f2fde38b14610b5757600080fd5b8063dd62ed3e116100e7578063dd62ed3e14610a83578063e2f4560514610ac9578063e513e45a14610adf578063ee40166e14610af557600080fd5b8063cc338e9814610a18578063cf46f24c14610a38578063d0bc827f14610a4e578063d28d885214610a6e57600080fd5b8063a457c2d71161019b578063bbc0c7421161016a578063bbc0c7421461098e578063c0246668146109a8578063c480b4c6146109c8578063c7ff0805146109e8578063c876d0b9146109fe57600080fd5b8063a457c2d714610909578063a9059cbb14610929578063b09f126614610949578063b62496f51461095e57600080fd5b80639c3b4fdc116101d75780639c3b4fdc146108b15780639fccce32146108c7578063a0a2ccd9146108dd578063a0d82dc5146108f357600080fd5b80639213691314610846578063924de9b71461085c57806395d89b411461087c5780639a7a23d61461089157600080fd5b806351f205e411610303578063715018a6116102965780637bce5a04116102655780637bce5a04146107bc57806387de3743146107d25780638a0de19f146107f25780638da5cb5b146108085780638ea5220f1461082657600080fd5b8063715018a6146107515780637571336a1461076657806375f0a87414610786578063764c4ce5146107a657600080fd5b80635f559fba116102d25780635f559fba146106d257806364cc78a0146107025780636ddd17131461071757806370a082311461073157600080fd5b806351f205e41461066357806353674ba61461067857806354d6532214610698578063551b4ea6146106b857600080fd5b806327c8f835116103865780633bbac579116103555780633bbac579146105915780633fd16d13146105ca578063422853d6146105ea578063452ed4f11461060a5780634fbee1931461062a57600080fd5b806327c8f8351461051f578063313ce5671461053557806331dbc93214610551578063395093511461057157600080fd5b80631a8145bb116103c25780631a8145bb146104b15780631ea036de146104c75780631f3fed8f146104e957806323b872dd146104ff57600080fd5b806306fdde03146103ff5780630758d9241461042a578063095ea7b31461046257806318160ddd1461049257600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b50610414610bee565b604051610421919061307d565b60405180910390f35b34801561043657600080fd5b5060065461044a906001600160a01b031681565b6040516001600160a01b039091168152602001610421565b34801561046e57600080fd5b5061048261047d3660046130e3565b610c80565b6040519015158152602001610421565b34801561049e57600080fd5b506002545b604051908152602001610421565b3480156104bd57600080fd5b506104a360245481565b3480156104d357600080fd5b506104e76104e23660046131ee565b610c97565b005b3480156104f557600080fd5b506104a360235481565b34801561050b57600080fd5b5061048261051a3660046132a9565b610dc1565b34801561052b57600080fd5b5061044a61dead81565b34801561054157600080fd5b5060405160128152602001610421565b34801561055d57600080fd5b506104e761056c3660046132ea565b610e6b565b34801561057d57600080fd5b5061048261058c3660046130e3565b61106f565b34801561059d57600080fd5b506104826105ac366004613303565b6001600160a01b031660009081526029602052604090205460ff1690565b3480156105d657600080fd5b50600b5461044a906001600160a01b031681565b3480156105f657600080fd5b506104e7610605366004613327565b6110ab565b34801561061657600080fd5b5060075461044a906001600160a01b031681565b34801561063657600080fd5b50610482610645366004613303565b6001600160a01b031660009081526026602052604090205460ff1690565b34801561066f57600080fd5b506104e761114a565b34801561068457600080fd5b506104826106933660046132ea565b611253565b3480156106a457600080fd5b506104e76106b3366004613359565b61131b565b3480156106c457600080fd5b506010546104829060ff1681565b3480156106de57600080fd5b506104826106ed366004613303565b60276020526000908152604090205460ff1681565b34801561070e57600080fd5b506104e761142a565b34801561072357600080fd5b506018546104829060ff1681565b34801561073d57600080fd5b506104a361074c366004613303565b611460565b34801561075d57600080fd5b506104e761147b565b34801561077257600080fd5b506104e76107813660046133a7565b6114ef565b34801561079257600080fd5b5060085461044a906001600160a01b031681565b3480156107b257600080fd5b506104a360135481565b3480156107c857600080fd5b506104a3601c5481565b3480156107de57600080fd5b506104e76107ed3660046132ea565b611544565b3480156107fe57600080fd5b506104a360125481565b34801561081457600080fd5b506005546001600160a01b031661044a565b34801561083257600080fd5b5060095461044a906001600160a01b031681565b34801561085257600080fd5b506104a360205481565b34801561086857600080fd5b506104e76108773660046133d3565b611617565b34801561088857600080fd5b50610414611654565b34801561089d57600080fd5b506104e76108ac3660046133a7565b611663565b3480156108bd57600080fd5b506104a3601e5481565b3480156108d357600080fd5b506104a360255481565b3480156108e957600080fd5b506104a3601b5481565b3480156108ff57600080fd5b506104a360225481565b34801561091557600080fd5b506104826109243660046130e3565b611739565b34801561093557600080fd5b506104826109443660046130e3565b6117d2565b34801561095557600080fd5b506104146117df565b34801561096a57600080fd5b50610482610979366004613303565b60286020526000908152604090205460ff1681565b34801561099a57600080fd5b506015546104829060ff1681565b3480156109b457600080fd5b506104e76109c33660046133a7565b61186d565b3480156109d457600080fd5b50600a5461044a906001600160a01b031681565b3480156109f457600080fd5b506104a360115481565b348015610a0a57600080fd5b50601a546104829060ff1681565b348015610a2457600080fd5b506104e7610a33366004613327565b6118c2565b348015610a4457600080fd5b506104a3600c5481565b348015610a5a57600080fd5b506104e7610a693660046133ee565b611961565b348015610a7a57600080fd5b506104146119ca565b348015610a8f57600080fd5b506104a3610a9e366004613439565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ad557600080fd5b506104a3600d5481565b348015610aeb57600080fd5b506104a3600f5481565b348015610b0157600080fd5b506104a360175481565b348015610b1757600080fd5b506104a360145481565b348015610b2d57600080fd5b506104e7610b3c3660046132ea565b6119d7565b348015610b4d57600080fd5b506104a3601d5481565b348015610b6357600080fd5b506104e7610b72366004613303565b611aae565b348015610b8357600080fd5b506104e7610b923660046132ea565b611b99565b348015610ba357600080fd5b506104e7611dc7565b348015610bb857600080fd5b506104a360215481565b348015610bce57600080fd5b506104a3600e5481565b348015610be457600080fd5b506104a3601f5481565b606060038054610bfd90613472565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2990613472565b8015610c765780601f10610c4b57610100808354040283529160200191610c76565b820191906000526020600020905b815481529060010190602001808311610c5957829003601f168201915b5050505050905090565b6000610c8d338484611ea5565b5060015b92915050565b6005546001600160a01b03163314610cca5760405162461bcd60e51b8152600401610cc1906134ac565b60405180910390fd5b60155460ff1615610d435760405162461bcd60e51b815260206004820152603760248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201527f742061697264726f70206166746572206c61756e63682e0000000000000000006064820152608401610cc1565b60005b8251811015610dbc57610dac30848381518110610d6557610d656134e1565b6020026020010151612710858581518110610d8257610d826134e1565b6020026020010151610d9360025490565b610d9d919061350d565b610da79190613524565b611fc9565b610db581613546565b9050610d46565b505050565b6000610dce84848461211e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e535760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610cc1565b610e608533858403611ea5565b506001949350505050565b6005546001600160a01b03163314610e955760405162461bcd60e51b8152600401610cc1906134ac565b601354601454610ea5919061355f565b4211610ef35760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610cc1565b6103e8811115610f585760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610cc1565b426014556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015610fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcb9190613572565b90506000612710610fdc848461350d565b610fe69190613524565b9050801561100757600754611007906001600160a01b031661dead83611fc9565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561105157600080fd5b505af1158015611065573d6000803e3d6000fd5b5050505050505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c8d9185906110a690869061355f565b611ea5565b6005546001600160a01b031633146110d55760405162461bcd60e51b8152600401610cc1906134ac565b601e6110e1828461355f565b111561112f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b6565702066656573206c6f776572207468616e203330250000006044820152606401610cc1565b601c829055601d819055611143818361355f565b601b555050565b6005546001600160a01b031633146111745760405162461bcd60e51b8152600401610cc1906134ac565b600d5461118030611460565b10156111f6576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610cc1565b6007805460ff60a01b1916600160a01b179055611211612acb565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546000906001600160a01b031633146112805760405162461bcd60e51b8152600401610cc1906134ac565b6103e861128c60025490565b61129790600561350d565b6112a19190613524565b82111561130d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610cc1565b50600d81905560015b919050565b6005546001600160a01b031633146113455760405162461bcd60e51b8152600401610cc1906134ac565b60005b8251811015610dbc5760075483516001600160a01b0390911690849083908110611374576113746134e1565b60200260200101516001600160a01b0316141580156113be5750306001600160a01b03168382815181106113aa576113aa6134e1565b60200260200101516001600160a01b031614155b1561141a5781602960008584815181106113da576113da6134e1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61142381613546565b9050611348565b6005546001600160a01b031633146114545760405162461bcd60e51b8152600401610cc1906134ac565b601a805460ff19169055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146114a55760405162461bcd60e51b8152600401610cc1906134ac565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115195760405162461bcd60e51b8152600401610cc1906134ac565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461156e5760405162461bcd60e51b8152600401610cc1906134ac565b60058110156115cb5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610cc1565b670de0b6b3a76400006103e8826115e160025490565b6115eb919061350d565b6115f59190613524565b6115ff9190613524565b61161190670de0b6b3a764000061350d565b600e5550565b6005546001600160a01b031633146116415760405162461bcd60e51b8152600401610cc1906134ac565b6018805460ff1916911515919091179055565b606060048054610bfd90613472565b6005546001600160a01b0316331461168d5760405162461bcd60e51b8152600401610cc1906134ac565b6007546001600160a01b03908116908316036117115760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cc1565b6001600160a01b0382166000908152602860205260409020805460ff19168215151790555050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117bb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cc1565b6117c83385858403611ea5565b5060019392505050565b6000610c8d33848461211e565b600480546117ec90613472565b80601f016020809104026020016040519081016040528092919081815260200182805461181890613472565b80156118655780601f1061183a57610100808354040283529160200191611865565b820191906000526020600020905b81548152906001019060200180831161184857829003601f168201915b505050505081565b6005546001600160a01b031633146118975760405162461bcd60e51b8152600401610cc1906134ac565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146118ec5760405162461bcd60e51b8152600401610cc1906134ac565b601e6118f8828461355f565b11156119465760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b6565702066656573206c6f776572207468616e203330250000006044820152606401610cc1565b6020829055602181905561195a818361355f565b601f555050565b6005546001600160a01b0316331461198b5760405162461bcd60e51b8152600401610cc1906134ac565b600880546001600160a01b039485166001600160a01b031991821617909155600b80549385169382169390931790925560098054919093169116179055565b600380546117ec90613472565b6005546001600160a01b03163314611a015760405162461bcd60e51b8152600401610cc1906134ac565b6005811015611a625760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e352560c81b6064820152608401610cc1565b670de0b6b3a76400006103e882611a7860025490565b611a82919061350d565b611a8c9190613524565b611a969190613524565b611aa890670de0b6b3a764000061350d565b600c5550565b6005546001600160a01b03163314611ad85760405162461bcd60e51b8152600401610cc1906134ac565b6001600160a01b038116611b3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cc1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611bc35760405162461bcd60e51b8152600401610cc1906134ac565b60155460ff1615611c2a5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610cc1565b60004711611c865760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610cc1565b6000611c9130611460565b11611ced5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610cc1565b600654611d089030906001600160a01b03166110a682611460565b6006546001600160a01b031663f305d7194730611d2481611460565b600080611d396005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611d5b9695949392919061358b565b60606040518083038185885af1158015611d79573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d9e91906135c6565b505060158054600160ff1991821681179092556018805490911690911790555043601755601655565b6005546001600160a01b03163314611df15760405162461bcd60e51b8152600401610cc1906134ac565b60155460ff1615611e585760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610cc1565b604051600090339047908381818185875af1925050503d8060008114611e9a576040519150601f19603f3d011682016040523d82523d6000602084013e611e9f565b606091505b50505050565b6001600160a01b038316611f075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc1565b6001600160a01b038216611f685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fef5760405162461bcd60e51b8152600401610cc1906135f4565b6001600160a01b0382166120155760405162461bcd60e51b8152600401610cc190613639565b6001600160a01b0383166000908152602081905260409020548181101561208d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cc1565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120c490849061355f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161211091815260200190565b60405180910390a350505050565b6001600160a01b0383166121445760405162461bcd60e51b8152600401610cc1906135f4565b6001600160a01b03821661216a5760405162461bcd60e51b8152600401610cc190613639565b6001600160a01b03821660009081526029602052604090205460ff16156121cd5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610cc1565b3260009081526029602052604090205460ff16156122275760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610cc1565b8060000361223b57610dbc83836000611fc9565b60155460ff166122c9576001600160a01b03831660009081526026602052604090205460ff168061228457506001600160a01b03821660009081526026602052604090205460ff165b6122c95760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cc1565b6005546001600160a01b038481169116148015906122f557506005546001600160a01b03838116911614155b801561230957506001600160a01b03821615155b801561232057506001600160a01b03821661dead14155b80156123365750600754600160a01b900460ff16155b801561235b57506001600160a01b03821660009081526026602052604090205460ff16155b801561238057506001600160a01b03831660009081526026602052604090205460ff16155b156126cf57601a5460ff1615612499576006546001600160a01b038381169116148015906123bc57506007546001600160a01b03838116911614155b15612499576123cc60014361367c565b3260009081526019602052604090205410801561240a57506123ef60014361367c565b6001600160a01b038316600090815260196020526040902054105b6124745760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610cc1565b3260009081526019602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526028602052604090205460ff1680156124da57506001600160a01b03821660009081526027602052604090205460ff16155b156125a657600c548111156125475760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610cc1565b600e5461255383611460565b61255d908361355f565b11156125a15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cc1565b6126cf565b6001600160a01b03821660009081526028602052604090205460ff1680156125e757506001600160a01b03831660009081526027602052604090205460ff16155b1561265557600c548111156125a15760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610cc1565b6001600160a01b03821660009081526027602052604090205460ff166126cf57600e5461268183611460565b61268b908361355f565b11156126cf5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cc1565b60006126da30611460565b600d54909150811080159081906126f3575060185460ff165b80156127095750600754600160a01b900460ff16155b801561272e57506001600160a01b03851660009081526028602052604090205460ff16155b801561275357506001600160a01b03851660009081526026602052604090205460ff16155b801561277857506001600160a01b03841660009081526026602052604090205460ff16155b156127a6576007805460ff60a01b1916600160a01b179055612798612acb565b6007805460ff60a01b191690555b600754600160a01b900460ff161580156127d857506001600160a01b03841660009081526028602052604090205460ff165b80156127e6575060105460ff165b801561280157506011546012546127fd919061355f565b4210155b801561282657506001600160a01b03851660009081526026602052604090205460ff16155b1561283357612833612d2e565b6007546001600160a01b03861660009081526026602052604090205460ff600160a01b90920482161591168061288157506001600160a01b03851660009081526026602052604090205460ff165b1561288a575060005b60008115612ab75760165461289f904361367c565b601754101580156128c857506001600160a01b03871660009081526028602052604090205460ff165b1561297d5760646128da86606361350d565b6128e49190613524565b9050601f54602154826128f7919061350d565b6129019190613524565b60246000828254612912919061355f565b9091555050601f54602054612927908361350d565b6129319190613524565b60236000828254612942919061355f565b9091555050601f54602254612957908361350d565b6129619190613524565b60256000828254612972919061355f565b90915550612a999050565b6001600160a01b03861660009081526028602052604090205460ff1680156129a757506000601f54115b156129bc576064601f54866128da919061350d565b6001600160a01b03871660009081526028602052604090205460ff1680156129e657506000601b54115b15612a99576064601b54866129fb919061350d565b612a059190613524565b9050601b54601d5482612a18919061350d565b612a229190613524565b60246000828254612a33919061355f565b9091555050601b54601c54612a48908361350d565b612a529190613524565b60236000828254612a63919061355f565b9091555050601b54601e54612a78908361350d565b612a829190613524565b60256000828254612a93919061355f565b90915550505b8015612aaa57612aaa873083611fc9565b612ab4818661367c565b94505b612ac2878787611fc9565b50505050505050565b6000612ad630611460565b90506000602554602354602454612aed919061355f565b612af7919061355f565b90506000821580612b06575081155b15612b1057505050565b600d54612b1e90601461350d565b831115612b3657600d54612b3390601461350d565b92505b600060028360245486612b49919061350d565b612b539190613524565b612b5d9190613524565b90506000612b6b828661367c565b905047612b7782612e81565b6000612b83824761367c565b905060006002602454612b969190613524565b612ba0908861367c565b602354612bad908461350d565b612bb79190613524565b905060006002602454612bca9190613524565b612bd4908961367c565b602554612be1908561350d565b612beb9190613524565b9050600081612bfa848661367c565b612c04919061367c565b60006024819055602381905560258190556009546040519293506001600160a01b031691849181818185875af1925050503d8060008114612c61576040519150601f19603f3d011682016040523d82523d6000602084013e612c66565b606091505b50506008546040519199506001600160a01b0316908490600081818185875af1925050503d8060008114612cb6576040519150601f19603f3d011682016040523d82523d6000602084013e612cbb565b606091505b50909850508615801590612ccf5750600081115b15612d2257612cde8782612fdb565b602454604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b50505050505050505050565b426012556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015612d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da19190613572565b90506000612710600f5483612db6919061350d565b612dc09190613524565b90508015612de157600754612de1906001600160a01b031661dead83611fc9565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015612e2b57600080fd5b505af1158015612e3f573d6000803e3d6000fd5b505050507f6f57447c7d0d492231a83fb5442fa4aab5203af719a9a9ebf5f93ff4dfaa168682604051612e7491815260200190565b60405180910390a1505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612eb657612eb66134e1565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f33919061368f565b81600181518110612f4657612f466134e1565b6001600160a01b039283166020918202929092010152600654612f6c9130911684611ea5565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612fa59085906000908690309042906004016136ac565b600060405180830381600087803b158015612fbf57600080fd5b505af1158015612fd3573d6000803e3d6000fd5b505050505050565b600654612ff39030906001600160a01b031684611ea5565b600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592613033923092899260009283921690429060040161358b565b60606040518083038185885af1158015613051573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061307691906135c6565b5050505050565b600060208083528351808285015260005b818110156130aa5785810183015185820160400152820161308e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146130e057600080fd5b50565b600080604083850312156130f657600080fd5b8235613101816130cb565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561314e5761314e61310f565b604052919050565b600067ffffffffffffffff8211156131705761317061310f565b5060051b60200190565b600082601f83011261318b57600080fd5b813560206131a061319b83613156565b613125565b82815260059290921b840181019181810190868411156131bf57600080fd5b8286015b848110156131e35780356131d6816130cb565b83529183019183016131c3565b509695505050505050565b6000806040838503121561320157600080fd5b823567ffffffffffffffff8082111561321957600080fd5b6132258683870161317a565b935060209150818501358181111561323c57600080fd5b85019050601f8101861361324f57600080fd5b803561325d61319b82613156565b81815260059190911b8201830190838101908883111561327c57600080fd5b928401925b8284101561329a57833582529284019290840190613281565b80955050505050509250929050565b6000806000606084860312156132be57600080fd5b83356132c9816130cb565b925060208401356132d9816130cb565b929592945050506040919091013590565b6000602082840312156132fc57600080fd5b5035919050565b60006020828403121561331557600080fd5b8135613320816130cb565b9392505050565b6000806040838503121561333a57600080fd5b50508035926020909101359150565b8035801515811461131657600080fd5b6000806040838503121561336c57600080fd5b823567ffffffffffffffff81111561338357600080fd5b61338f8582860161317a565b92505061339e60208401613349565b90509250929050565b600080604083850312156133ba57600080fd5b82356133c5816130cb565b915061339e60208401613349565b6000602082840312156133e557600080fd5b61332082613349565b60008060006060848603121561340357600080fd5b833561340e816130cb565b9250602084013561341e816130cb565b9150604084013561342e816130cb565b809150509250925092565b6000806040838503121561344c57600080fd5b8235613457816130cb565b91506020830135613467816130cb565b809150509250929050565b600181811c9082168061348657607f821691505b6020821081036134a657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c9157610c916134f7565b60008261354157634e487b7160e01b600052601260045260246000fd5b500490565b600060018201613558576135586134f7565b5060010190565b80820180821115610c9157610c916134f7565b60006020828403121561358457600080fd5b5051919050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156135db57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c9157610c916134f7565b6000602082840312156136a157600080fd5b8151613320816130cb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136fc5784516001600160a01b0316835293830193918301916001016136d7565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122092759736fefbf70ecf824acde9e80a767bb88eb811c6649c6447156558ef5bed64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103f35760003560e01c80639213691311610208578063cc338e9811610118578063ee9623b9116100ab578063f304660a1161007a578063f304660a14610b77578063f5648a4f14610b97578063f637434214610bac578063f8b45b0514610bc2578063f9f4e42414610bd857600080fd5b8063ee9623b914610b0b578063ef4f3c6b14610b21578063f11a24d314610b41578063f2fde38b14610b5757600080fd5b8063dd62ed3e116100e7578063dd62ed3e14610a83578063e2f4560514610ac9578063e513e45a14610adf578063ee40166e14610af557600080fd5b8063cc338e9814610a18578063cf46f24c14610a38578063d0bc827f14610a4e578063d28d885214610a6e57600080fd5b8063a457c2d71161019b578063bbc0c7421161016a578063bbc0c7421461098e578063c0246668146109a8578063c480b4c6146109c8578063c7ff0805146109e8578063c876d0b9146109fe57600080fd5b8063a457c2d714610909578063a9059cbb14610929578063b09f126614610949578063b62496f51461095e57600080fd5b80639c3b4fdc116101d75780639c3b4fdc146108b15780639fccce32146108c7578063a0a2ccd9146108dd578063a0d82dc5146108f357600080fd5b80639213691314610846578063924de9b71461085c57806395d89b411461087c5780639a7a23d61461089157600080fd5b806351f205e411610303578063715018a6116102965780637bce5a04116102655780637bce5a04146107bc57806387de3743146107d25780638a0de19f146107f25780638da5cb5b146108085780638ea5220f1461082657600080fd5b8063715018a6146107515780637571336a1461076657806375f0a87414610786578063764c4ce5146107a657600080fd5b80635f559fba116102d25780635f559fba146106d257806364cc78a0146107025780636ddd17131461071757806370a082311461073157600080fd5b806351f205e41461066357806353674ba61461067857806354d6532214610698578063551b4ea6146106b857600080fd5b806327c8f835116103865780633bbac579116103555780633bbac579146105915780633fd16d13146105ca578063422853d6146105ea578063452ed4f11461060a5780634fbee1931461062a57600080fd5b806327c8f8351461051f578063313ce5671461053557806331dbc93214610551578063395093511461057157600080fd5b80631a8145bb116103c25780631a8145bb146104b15780631ea036de146104c75780631f3fed8f146104e957806323b872dd146104ff57600080fd5b806306fdde03146103ff5780630758d9241461042a578063095ea7b31461046257806318160ddd1461049257600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b50610414610bee565b604051610421919061307d565b60405180910390f35b34801561043657600080fd5b5060065461044a906001600160a01b031681565b6040516001600160a01b039091168152602001610421565b34801561046e57600080fd5b5061048261047d3660046130e3565b610c80565b6040519015158152602001610421565b34801561049e57600080fd5b506002545b604051908152602001610421565b3480156104bd57600080fd5b506104a360245481565b3480156104d357600080fd5b506104e76104e23660046131ee565b610c97565b005b3480156104f557600080fd5b506104a360235481565b34801561050b57600080fd5b5061048261051a3660046132a9565b610dc1565b34801561052b57600080fd5b5061044a61dead81565b34801561054157600080fd5b5060405160128152602001610421565b34801561055d57600080fd5b506104e761056c3660046132ea565b610e6b565b34801561057d57600080fd5b5061048261058c3660046130e3565b61106f565b34801561059d57600080fd5b506104826105ac366004613303565b6001600160a01b031660009081526029602052604090205460ff1690565b3480156105d657600080fd5b50600b5461044a906001600160a01b031681565b3480156105f657600080fd5b506104e7610605366004613327565b6110ab565b34801561061657600080fd5b5060075461044a906001600160a01b031681565b34801561063657600080fd5b50610482610645366004613303565b6001600160a01b031660009081526026602052604090205460ff1690565b34801561066f57600080fd5b506104e761114a565b34801561068457600080fd5b506104826106933660046132ea565b611253565b3480156106a457600080fd5b506104e76106b3366004613359565b61131b565b3480156106c457600080fd5b506010546104829060ff1681565b3480156106de57600080fd5b506104826106ed366004613303565b60276020526000908152604090205460ff1681565b34801561070e57600080fd5b506104e761142a565b34801561072357600080fd5b506018546104829060ff1681565b34801561073d57600080fd5b506104a361074c366004613303565b611460565b34801561075d57600080fd5b506104e761147b565b34801561077257600080fd5b506104e76107813660046133a7565b6114ef565b34801561079257600080fd5b5060085461044a906001600160a01b031681565b3480156107b257600080fd5b506104a360135481565b3480156107c857600080fd5b506104a3601c5481565b3480156107de57600080fd5b506104e76107ed3660046132ea565b611544565b3480156107fe57600080fd5b506104a360125481565b34801561081457600080fd5b506005546001600160a01b031661044a565b34801561083257600080fd5b5060095461044a906001600160a01b031681565b34801561085257600080fd5b506104a360205481565b34801561086857600080fd5b506104e76108773660046133d3565b611617565b34801561088857600080fd5b50610414611654565b34801561089d57600080fd5b506104e76108ac3660046133a7565b611663565b3480156108bd57600080fd5b506104a3601e5481565b3480156108d357600080fd5b506104a360255481565b3480156108e957600080fd5b506104a3601b5481565b3480156108ff57600080fd5b506104a360225481565b34801561091557600080fd5b506104826109243660046130e3565b611739565b34801561093557600080fd5b506104826109443660046130e3565b6117d2565b34801561095557600080fd5b506104146117df565b34801561096a57600080fd5b50610482610979366004613303565b60286020526000908152604090205460ff1681565b34801561099a57600080fd5b506015546104829060ff1681565b3480156109b457600080fd5b506104e76109c33660046133a7565b61186d565b3480156109d457600080fd5b50600a5461044a906001600160a01b031681565b3480156109f457600080fd5b506104a360115481565b348015610a0a57600080fd5b50601a546104829060ff1681565b348015610a2457600080fd5b506104e7610a33366004613327565b6118c2565b348015610a4457600080fd5b506104a3600c5481565b348015610a5a57600080fd5b506104e7610a693660046133ee565b611961565b348015610a7a57600080fd5b506104146119ca565b348015610a8f57600080fd5b506104a3610a9e366004613439565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ad557600080fd5b506104a3600d5481565b348015610aeb57600080fd5b506104a3600f5481565b348015610b0157600080fd5b506104a360175481565b348015610b1757600080fd5b506104a360145481565b348015610b2d57600080fd5b506104e7610b3c3660046132ea565b6119d7565b348015610b4d57600080fd5b506104a3601d5481565b348015610b6357600080fd5b506104e7610b72366004613303565b611aae565b348015610b8357600080fd5b506104e7610b923660046132ea565b611b99565b348015610ba357600080fd5b506104e7611dc7565b348015610bb857600080fd5b506104a360215481565b348015610bce57600080fd5b506104a3600e5481565b348015610be457600080fd5b506104a3601f5481565b606060038054610bfd90613472565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2990613472565b8015610c765780601f10610c4b57610100808354040283529160200191610c76565b820191906000526020600020905b815481529060010190602001808311610c5957829003601f168201915b5050505050905090565b6000610c8d338484611ea5565b5060015b92915050565b6005546001600160a01b03163314610cca5760405162461bcd60e51b8152600401610cc1906134ac565b60405180910390fd5b60155460ff1615610d435760405162461bcd60e51b815260206004820152603760248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201527f742061697264726f70206166746572206c61756e63682e0000000000000000006064820152608401610cc1565b60005b8251811015610dbc57610dac30848381518110610d6557610d656134e1565b6020026020010151612710858581518110610d8257610d826134e1565b6020026020010151610d9360025490565b610d9d919061350d565b610da79190613524565b611fc9565b610db581613546565b9050610d46565b505050565b6000610dce84848461211e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e535760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610cc1565b610e608533858403611ea5565b506001949350505050565b6005546001600160a01b03163314610e955760405162461bcd60e51b8152600401610cc1906134ac565b601354601454610ea5919061355f565b4211610ef35760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610cc1565b6103e8811115610f585760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610cc1565b426014556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015610fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcb9190613572565b90506000612710610fdc848461350d565b610fe69190613524565b9050801561100757600754611007906001600160a01b031661dead83611fc9565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561105157600080fd5b505af1158015611065573d6000803e3d6000fd5b5050505050505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c8d9185906110a690869061355f565b611ea5565b6005546001600160a01b031633146110d55760405162461bcd60e51b8152600401610cc1906134ac565b601e6110e1828461355f565b111561112f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b6565702066656573206c6f776572207468616e203330250000006044820152606401610cc1565b601c829055601d819055611143818361355f565b601b555050565b6005546001600160a01b031633146111745760405162461bcd60e51b8152600401610cc1906134ac565b600d5461118030611460565b10156111f6576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610cc1565b6007805460ff60a01b1916600160a01b179055611211612acb565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546000906001600160a01b031633146112805760405162461bcd60e51b8152600401610cc1906134ac565b6103e861128c60025490565b61129790600561350d565b6112a19190613524565b82111561130d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610cc1565b50600d81905560015b919050565b6005546001600160a01b031633146113455760405162461bcd60e51b8152600401610cc1906134ac565b60005b8251811015610dbc5760075483516001600160a01b0390911690849083908110611374576113746134e1565b60200260200101516001600160a01b0316141580156113be5750306001600160a01b03168382815181106113aa576113aa6134e1565b60200260200101516001600160a01b031614155b1561141a5781602960008584815181106113da576113da6134e1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61142381613546565b9050611348565b6005546001600160a01b031633146114545760405162461bcd60e51b8152600401610cc1906134ac565b601a805460ff19169055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146114a55760405162461bcd60e51b8152600401610cc1906134ac565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115195760405162461bcd60e51b8152600401610cc1906134ac565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461156e5760405162461bcd60e51b8152600401610cc1906134ac565b60058110156115cb5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610cc1565b670de0b6b3a76400006103e8826115e160025490565b6115eb919061350d565b6115f59190613524565b6115ff9190613524565b61161190670de0b6b3a764000061350d565b600e5550565b6005546001600160a01b031633146116415760405162461bcd60e51b8152600401610cc1906134ac565b6018805460ff1916911515919091179055565b606060048054610bfd90613472565b6005546001600160a01b0316331461168d5760405162461bcd60e51b8152600401610cc1906134ac565b6007546001600160a01b03908116908316036117115760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cc1565b6001600160a01b0382166000908152602860205260409020805460ff19168215151790555050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117bb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cc1565b6117c83385858403611ea5565b5060019392505050565b6000610c8d33848461211e565b600480546117ec90613472565b80601f016020809104026020016040519081016040528092919081815260200182805461181890613472565b80156118655780601f1061183a57610100808354040283529160200191611865565b820191906000526020600020905b81548152906001019060200180831161184857829003601f168201915b505050505081565b6005546001600160a01b031633146118975760405162461bcd60e51b8152600401610cc1906134ac565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146118ec5760405162461bcd60e51b8152600401610cc1906134ac565b601e6118f8828461355f565b11156119465760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b6565702066656573206c6f776572207468616e203330250000006044820152606401610cc1565b6020829055602181905561195a818361355f565b601f555050565b6005546001600160a01b0316331461198b5760405162461bcd60e51b8152600401610cc1906134ac565b600880546001600160a01b039485166001600160a01b031991821617909155600b80549385169382169390931790925560098054919093169116179055565b600380546117ec90613472565b6005546001600160a01b03163314611a015760405162461bcd60e51b8152600401610cc1906134ac565b6005811015611a625760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e352560c81b6064820152608401610cc1565b670de0b6b3a76400006103e882611a7860025490565b611a82919061350d565b611a8c9190613524565b611a969190613524565b611aa890670de0b6b3a764000061350d565b600c5550565b6005546001600160a01b03163314611ad85760405162461bcd60e51b8152600401610cc1906134ac565b6001600160a01b038116611b3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cc1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611bc35760405162461bcd60e51b8152600401610cc1906134ac565b60155460ff1615611c2a5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610cc1565b60004711611c865760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610cc1565b6000611c9130611460565b11611ced5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610cc1565b600654611d089030906001600160a01b03166110a682611460565b6006546001600160a01b031663f305d7194730611d2481611460565b600080611d396005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611d5b9695949392919061358b565b60606040518083038185885af1158015611d79573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d9e91906135c6565b505060158054600160ff1991821681179092556018805490911690911790555043601755601655565b6005546001600160a01b03163314611df15760405162461bcd60e51b8152600401610cc1906134ac565b60155460ff1615611e585760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610cc1565b604051600090339047908381818185875af1925050503d8060008114611e9a576040519150601f19603f3d011682016040523d82523d6000602084013e611e9f565b606091505b50505050565b6001600160a01b038316611f075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc1565b6001600160a01b038216611f685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fef5760405162461bcd60e51b8152600401610cc1906135f4565b6001600160a01b0382166120155760405162461bcd60e51b8152600401610cc190613639565b6001600160a01b0383166000908152602081905260409020548181101561208d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cc1565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120c490849061355f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161211091815260200190565b60405180910390a350505050565b6001600160a01b0383166121445760405162461bcd60e51b8152600401610cc1906135f4565b6001600160a01b03821661216a5760405162461bcd60e51b8152600401610cc190613639565b6001600160a01b03821660009081526029602052604090205460ff16156121cd5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610cc1565b3260009081526029602052604090205460ff16156122275760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610cc1565b8060000361223b57610dbc83836000611fc9565b60155460ff166122c9576001600160a01b03831660009081526026602052604090205460ff168061228457506001600160a01b03821660009081526026602052604090205460ff165b6122c95760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cc1565b6005546001600160a01b038481169116148015906122f557506005546001600160a01b03838116911614155b801561230957506001600160a01b03821615155b801561232057506001600160a01b03821661dead14155b80156123365750600754600160a01b900460ff16155b801561235b57506001600160a01b03821660009081526026602052604090205460ff16155b801561238057506001600160a01b03831660009081526026602052604090205460ff16155b156126cf57601a5460ff1615612499576006546001600160a01b038381169116148015906123bc57506007546001600160a01b03838116911614155b15612499576123cc60014361367c565b3260009081526019602052604090205410801561240a57506123ef60014361367c565b6001600160a01b038316600090815260196020526040902054105b6124745760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610cc1565b3260009081526019602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526028602052604090205460ff1680156124da57506001600160a01b03821660009081526027602052604090205460ff16155b156125a657600c548111156125475760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610cc1565b600e5461255383611460565b61255d908361355f565b11156125a15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cc1565b6126cf565b6001600160a01b03821660009081526028602052604090205460ff1680156125e757506001600160a01b03831660009081526027602052604090205460ff16155b1561265557600c548111156125a15760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610cc1565b6001600160a01b03821660009081526027602052604090205460ff166126cf57600e5461268183611460565b61268b908361355f565b11156126cf5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cc1565b60006126da30611460565b600d54909150811080159081906126f3575060185460ff165b80156127095750600754600160a01b900460ff16155b801561272e57506001600160a01b03851660009081526028602052604090205460ff16155b801561275357506001600160a01b03851660009081526026602052604090205460ff16155b801561277857506001600160a01b03841660009081526026602052604090205460ff16155b156127a6576007805460ff60a01b1916600160a01b179055612798612acb565b6007805460ff60a01b191690555b600754600160a01b900460ff161580156127d857506001600160a01b03841660009081526028602052604090205460ff165b80156127e6575060105460ff165b801561280157506011546012546127fd919061355f565b4210155b801561282657506001600160a01b03851660009081526026602052604090205460ff16155b1561283357612833612d2e565b6007546001600160a01b03861660009081526026602052604090205460ff600160a01b90920482161591168061288157506001600160a01b03851660009081526026602052604090205460ff165b1561288a575060005b60008115612ab75760165461289f904361367c565b601754101580156128c857506001600160a01b03871660009081526028602052604090205460ff165b1561297d5760646128da86606361350d565b6128e49190613524565b9050601f54602154826128f7919061350d565b6129019190613524565b60246000828254612912919061355f565b9091555050601f54602054612927908361350d565b6129319190613524565b60236000828254612942919061355f565b9091555050601f54602254612957908361350d565b6129619190613524565b60256000828254612972919061355f565b90915550612a999050565b6001600160a01b03861660009081526028602052604090205460ff1680156129a757506000601f54115b156129bc576064601f54866128da919061350d565b6001600160a01b03871660009081526028602052604090205460ff1680156129e657506000601b54115b15612a99576064601b54866129fb919061350d565b612a059190613524565b9050601b54601d5482612a18919061350d565b612a229190613524565b60246000828254612a33919061355f565b9091555050601b54601c54612a48908361350d565b612a529190613524565b60236000828254612a63919061355f565b9091555050601b54601e54612a78908361350d565b612a829190613524565b60256000828254612a93919061355f565b90915550505b8015612aaa57612aaa873083611fc9565b612ab4818661367c565b94505b612ac2878787611fc9565b50505050505050565b6000612ad630611460565b90506000602554602354602454612aed919061355f565b612af7919061355f565b90506000821580612b06575081155b15612b1057505050565b600d54612b1e90601461350d565b831115612b3657600d54612b3390601461350d565b92505b600060028360245486612b49919061350d565b612b539190613524565b612b5d9190613524565b90506000612b6b828661367c565b905047612b7782612e81565b6000612b83824761367c565b905060006002602454612b969190613524565b612ba0908861367c565b602354612bad908461350d565b612bb79190613524565b905060006002602454612bca9190613524565b612bd4908961367c565b602554612be1908561350d565b612beb9190613524565b9050600081612bfa848661367c565b612c04919061367c565b60006024819055602381905560258190556009546040519293506001600160a01b031691849181818185875af1925050503d8060008114612c61576040519150601f19603f3d011682016040523d82523d6000602084013e612c66565b606091505b50506008546040519199506001600160a01b0316908490600081818185875af1925050503d8060008114612cb6576040519150601f19603f3d011682016040523d82523d6000602084013e612cbb565b606091505b50909850508615801590612ccf5750600081115b15612d2257612cde8782612fdb565b602454604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b50505050505050505050565b426012556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015612d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da19190613572565b90506000612710600f5483612db6919061350d565b612dc09190613524565b90508015612de157600754612de1906001600160a01b031661dead83611fc9565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015612e2b57600080fd5b505af1158015612e3f573d6000803e3d6000fd5b505050507f6f57447c7d0d492231a83fb5442fa4aab5203af719a9a9ebf5f93ff4dfaa168682604051612e7491815260200190565b60405180910390a1505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612eb657612eb66134e1565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f33919061368f565b81600181518110612f4657612f466134e1565b6001600160a01b039283166020918202929092010152600654612f6c9130911684611ea5565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612fa59085906000908690309042906004016136ac565b600060405180830381600087803b158015612fbf57600080fd5b505af1158015612fd3573d6000803e3d6000fd5b505050505050565b600654612ff39030906001600160a01b031684611ea5565b600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592613033923092899260009283921690429060040161358b565b60606040518083038185885af1158015613051573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061307691906135c6565b5050505050565b600060208083528351808285015260005b818110156130aa5785810183015185820160400152820161308e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146130e057600080fd5b50565b600080604083850312156130f657600080fd5b8235613101816130cb565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561314e5761314e61310f565b604052919050565b600067ffffffffffffffff8211156131705761317061310f565b5060051b60200190565b600082601f83011261318b57600080fd5b813560206131a061319b83613156565b613125565b82815260059290921b840181019181810190868411156131bf57600080fd5b8286015b848110156131e35780356131d6816130cb565b83529183019183016131c3565b509695505050505050565b6000806040838503121561320157600080fd5b823567ffffffffffffffff8082111561321957600080fd5b6132258683870161317a565b935060209150818501358181111561323c57600080fd5b85019050601f8101861361324f57600080fd5b803561325d61319b82613156565b81815260059190911b8201830190838101908883111561327c57600080fd5b928401925b8284101561329a57833582529284019290840190613281565b80955050505050509250929050565b6000806000606084860312156132be57600080fd5b83356132c9816130cb565b925060208401356132d9816130cb565b929592945050506040919091013590565b6000602082840312156132fc57600080fd5b5035919050565b60006020828403121561331557600080fd5b8135613320816130cb565b9392505050565b6000806040838503121561333a57600080fd5b50508035926020909101359150565b8035801515811461131657600080fd5b6000806040838503121561336c57600080fd5b823567ffffffffffffffff81111561338357600080fd5b61338f8582860161317a565b92505061339e60208401613349565b90509250929050565b600080604083850312156133ba57600080fd5b82356133c5816130cb565b915061339e60208401613349565b6000602082840312156133e557600080fd5b61332082613349565b60008060006060848603121561340357600080fd5b833561340e816130cb565b9250602084013561341e816130cb565b9150604084013561342e816130cb565b809150509250925092565b6000806040838503121561344c57600080fd5b8235613457816130cb565b91506020830135613467816130cb565b809150509250929050565b600181811c9082168061348657607f821691505b6020821081036134a657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c9157610c916134f7565b60008261354157634e487b7160e01b600052601260045260246000fd5b500490565b600060018201613558576135586134f7565b5060010190565b80820180821115610c9157610c916134f7565b60006020828403121561358457600080fd5b5051919050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156135db57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c9157610c916134f7565b6000602082840312156136a157600080fd5b8151613320816130cb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136fc5784516001600160a01b0316835293830193918301916001016136d7565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122092759736fefbf70ecf824acde9e80a767bb88eb811c6649c6447156558ef5bed64736f6c63430008110033

Deployed Bytecode Sourcemap

13072:18886:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6750:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13120:27;;;;;;;;;;-1:-1:-1;13120:27:0;;;;-1:-1:-1;;;;;13120:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;13120:27:0;567:221:1;7664:169:0;;;;;;;;;;-1:-1:-1;7664:169:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;7664:169:0;1249:187:1;7071:108:0;;;;;;;;;;-1:-1:-1;7159:12:0;;7071:108;;;1587:25:1;;;1575:2;1560:18;7071:108:0;1441:177:1;14646:33:0;;;;;;;;;;;;;;;;30735:505;;;;;;;;;;-1:-1:-1;30735:505:0;;;;;:::i;:::-;;:::i;:::-;;14606:33;;;;;;;;;;;;;;;;7841:492;;;;;;;;;;-1:-1:-1;7841:492:0;;;;;:::i;:::-;;:::i;13182:53::-;;;;;;;;;;;;13228:6;13182:53;;6970:93;;;;;;;;;;-1:-1:-1;6970:93:0;;7053:2;4919:36:1;;4907:2;4892:18;6970:93:0;4777:184:1;28984:875:0;;;;;;;;;;-1:-1:-1;28984:875:0;;;;;:::i;:::-;;:::i;8341:215::-;;;;;;;;;;-1:-1:-1;8341:215:0;;;;;:::i;:::-;;:::i;31539:109::-;;;;;;;;;;-1:-1:-1;31539:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;31617:23:0;31592:4;31617:23;;;:14;:23;;;;;;;;;31539:109;13377:32;;;;;;;;;;-1:-1:-1;13377:32:0;;;;-1:-1:-1;;;;;13377:32:0;;;18699:304;;;;;;;;;;-1:-1:-1;18699:304:0;;;;;:::i;:::-;;:::i;13154:21::-;;;;;;;;;;-1:-1:-1;13154:21:0;;;;-1:-1:-1;;;;;13154:21:0;;;20045:125;;;;;;;;;;-1:-1:-1;20045:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;20134:28:0;20110:4;20134:28;;;:19;:28;;;;;;;;;20045:125;27951:312;;;;;;;;;;;;;:::i;17572:261::-;;;;;;;;;;-1:-1:-1;17572:261:0;;;;;:::i;:::-;;:::i;31654:301::-;;;;;;;;;;-1:-1:-1;31654:301:0;;;;;:::i;:::-;;:::i;13609:38::-;;;;;;;;;;-1:-1:-1;13609:38:0;;;;;;;;14836:56;;;;;;;;;;-1:-1:-1;14836:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17468:98;;;;;;;;;;;;;:::i;13992:31::-;;;;;;;;;;-1:-1:-1;13992:31:0;;;;;;;;7187:127;;;;;;;;;;-1:-1:-1;7187:127:0;;;;;:::i;:::-;;:::i;11433:150::-;;;;;;;;;;;;;:::i;18394:136::-;;;;;;;;;;-1:-1:-1;18394:136:0;;;;;:::i;:::-;;:::i;13274:30::-;;;;;;;;;;-1:-1:-1;13274:30:0;;;;-1:-1:-1;;;;;13274:30:0;;;13749:49;;;;;;;;;;;;;;;;14346:30;;;;;;;;;;;;;;;;18114:268;;;;;;;;;;-1:-1:-1;18114:268:0;;;;;:::i;:::-;;:::i;13708:34::-;;;;;;;;;;;;;;;;10791:79;;;;;;;;;;-1:-1:-1;10856:6:0;;-1:-1:-1;;;;;10856:6:0;10791:79;;13311:24;;;;;;;;;;-1:-1:-1;13311:24:0;;;;-1:-1:-1;;;;;13311:24:0;;;14492:31;;;;;;;;;;;;;;;;18592:101;;;;;;;;;;-1:-1:-1;18592:101:0;;;;;:::i;:::-;;:::i;6858:104::-;;;;;;;;;;;;;:::i;19467:237::-;;;;;;;;;;-1:-1:-1;19467:237:0;;;;;:::i;:::-;;:::i;14420:24::-;;;;;;;;;;;;;;;;14686:27;;;;;;;;;;;;;;;;14312;;;;;;;;;;;;;;;;14568:25;;;;;;;;;;;;;;;;8564:413;;;;;;;;;;-1:-1:-1;8564:413:0;;;;;:::i;:::-;;:::i;7322:175::-;;;;;;;;;;-1:-1:-1;7322:175:0;;;;;:::i;:::-;;:::i;6596:21::-;;;;;;;;;;;;;:::i;15050:58::-;;;;;;;;;;-1:-1:-1;15050:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13878:33;;;;;;;;;;-1:-1:-1;13878:33:0;;;;;;;;19327:132;;;;;;;;;;-1:-1:-1;19327:132:0;;;;;:::i;:::-;;:::i;13342:28::-;;;;;;;;;;-1:-1:-1;13342:28:0;;;;-1:-1:-1;;;;;13342:28:0;;;13654:47;;;;;;;;;;;;;;;;14263:40;;;;;;;;;;-1:-1:-1;14263:40:0;;;;;;;;19009:310;;;;;;;;;;-1:-1:-1;19009:310:0;;;;;:::i;:::-;;:::i;13435:27::-;;;;;;;;;;;;;;;;19850:189;;;;;;;;;;-1:-1:-1;19850:189:0;;;;;:::i;:::-;;:::i;6570:19::-;;;;;;;;;;;;;:::i;7505:151::-;;;;;;;;;;-1:-1:-1;7505:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;7621:18:0;;;7594:7;7621:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7505:151;13469:33;;;;;;;;;;;;;;;;13550:40;;;;;;;;;;;;;;;;13948:37;;;;;;;;;;;;;;;;13805:40;;;;;;;;;;;;;;;;17839:267;;;;;;;;;;-1:-1:-1;17839:267:0;;;;;:::i;:::-;;:::i;14383:30::-;;;;;;;;;;;;;;;;11738:246;;;;;;;;;;-1:-1:-1;11738:246:0;;;;;:::i;:::-;;:::i;29865:864::-;;;;;;;;;;-1:-1:-1;29865:864:0;;;;;:::i;:::-;;:::i;31290:241::-;;;;;;;;;;;;;:::i;14530:31::-;;;;;;;;;;;;;;;;13509:24;;;;;;;;;;;;;;;;14457:28;;;;;;;;;;;;;;;;6750:100;6804:13;6837:5;6830:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6750:100;:::o;7664:169::-;7747:4;7764:39;2923:10;7787:7;7796:6;7764:8;:39::i;:::-;-1:-1:-1;7821:4:0;7664:169;;;;;:::o;30735:505::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;;;;;;;;;30865:13:::1;::::0;::::1;;30864:14;30856:82;;;::::0;-1:-1:-1;;;30856:82:0;;8622:2:1;30856:82:0::1;::::0;::::1;8604:21:1::0;8661:2;8641:18;;;8634:30;8700:34;8680:18;;;8673:62;8771:25;8751:18;;;8744:53;8814:19;;30856:82:0::1;8420:419:1::0;30856:82:0::1;30981:9;30976:254;30996:16;:23;30992:1;:27;30976:254;;;31041:177;31083:4;31107:16;31124:1;31107:19;;;;;;;;:::i;:::-;;;;;;;31183:5;31163:14;31178:1;31163:17;;;;;;;;:::i;:::-;;;;;;;31147:13;7159:12:::0;;;7071:108;31147:13:::1;:33;;;;:::i;:::-;:41;;;;:::i;:::-;31041:15;:177::i;:::-;31021:3;::::0;::::1;:::i;:::-;;;30976:254;;;;30735:505:::0;;:::o;7841:492::-;7981:4;7998:36;8008:6;8016:9;8027:6;7998:9;:36::i;:::-;-1:-1:-1;;;;;8074:19:0;;8047:24;8074:19;;;:11;:19;;;;;;;;2923:10;8074:33;;;;;;;;8126:26;;;;8118:79;;;;-1:-1:-1;;;8118:79:0;;9845:2:1;8118:79:0;;;9827:21:1;9884:2;9864:18;;;9857:30;9923:34;9903:18;;;9896:62;-1:-1:-1;;;9974:18:1;;;9967:38;10022:19;;8118:79:0;9643:404:1;8118:79:0;8233:57;8242:6;2923:10;8283:6;8264:16;:25;8233:8;:57::i;:::-;-1:-1:-1;8321:4:0;;7841:492;-1:-1:-1;;;;7841:492:0:o;28984:875::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;29129:24:::1;;29101:25;;:52;;;;:::i;:::-;29083:15;:70;29075:116;;;::::0;-1:-1:-1;;;29075:116:0;;10384:2:1;29075:116:0::1;::::0;::::1;10366:21:1::0;;;10403:18;;;10396:30;10462:34;10442:18;;;10435:62;10514:18;;29075:116:0::1;10182:356:1::0;29075:116:0::1;29221:4;29210:7;:15;;29202:70;;;::::0;-1:-1:-1;;;29202:70:0;;10745:2:1;29202:70:0::1;::::0;::::1;10727:21:1::0;10784:2;10764:18;;;10757:30;10823:34;10803:18;;;10796:62;-1:-1:-1;;;10874:18:1;;;10867:40;10924:19;;29202:70:0::1;10543:406:1::0;29202:70:0::1;29311:15;29283:25;:43:::0;29435:6:::1;::::0;29420:22:::1;::::0;-1:-1:-1;;;29420:22:0;;-1:-1:-1;;;;;29435:6:0;;::::1;29420:22;::::0;::::1;731:51:1::0;29389:28:0::1;::::0;29420:4:::1;::::0;:14:::1;::::0;704:18:1;;29420:22:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29389:53:::0;-1:-1:-1;29505:25:0::1;29566:5;29533:30;29556:7:::0;29389:53;29533:30:::1;:::i;:::-;:38;;;;:::i;:::-;29505:66:::0;-1:-1:-1;29596:21:0;;29592:112:::1;;29649:6;::::0;29633:59:::1;::::0;-1:-1:-1;;;;;29649:6:0::1;29665;29674:17:::0;29633:15:::1;:59::i;:::-;29812:6;::::0;29830:11:::1;::::0;;-1:-1:-1;;;;;;29830:11:0;;;;-1:-1:-1;;;;;29812:6:0;;::::1;::::0;;;29830:9:::1;::::0;:11:::1;::::0;;::::1;::::0;29787:13:::1;::::0;29830:11;;;;;;;29787:13;29812:6;29830:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29064:795;;;28984:875:::0;:::o;8341:215::-;2923:10;8429:4;8478:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8478:34:0;;;;;;;;;;8429:4;;8446:80;;8469:7;;8478:47;;8515:10;;8478:47;:::i;:::-;8446:8;:80::i;18699:304::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;18822:2:::1;18796:21;18807:10:::0;18796;:21:::1;:::i;:::-;18795:29;;18787:71;;;::::0;-1:-1:-1;;;18787:71:0;;11345:2:1;18787:71:0::1;::::0;::::1;11327:21:1::0;11384:2;11364:18;;;11357:30;11423:31;11403:18;;;11396:59;11472:18;;18787:71:0::1;11143:353:1::0;18787:71:0::1;18869:15;:28:::0;;;18908:15:::1;:28:::0;;;18962:33:::1;18926:10:::0;18887;18962:33:::1;:::i;:::-;18947:12;:48:::0;-1:-1:-1;;18699:304:0:o;27951:312::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;28042:18:::1;;28014:24;28032:4;28014:9;:24::i;:::-;:46;;28006:123;;;::::0;;-1:-1:-1;;;28006:123:0;;11703:2:1;28006:123:0::1;::::0;::::1;11685:21:1::0;11722:18;;;11715:30;;;;11781:34;11761:18;;;11754:62;11852:34;11832:18;;;11825:62;11904:19;;28006:123:0::1;11501:428:1::0;28006:123:0::1;28140:8;:15:::0;;-1:-1:-1;;;;28140:15:0::1;-1:-1:-1::0;;;28140:15:0::1;::::0;;28166:10:::1;:8;:10::i;:::-;28187:8;:16:::0;;-1:-1:-1;;;;28187:16:0::1;::::0;;28219:36:::1;::::0;28239:15:::1;1587:25:1::0;;28219:36:0::1;::::0;1575:2:1;1560:18;28219:36:0::1;;;;;;;27951:312::o:0;17572:261::-;11003:6;;17644:4;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;17701:4:::1;17681:13;7159:12:::0;;;7071:108;17681:13:::1;:17;::::0;17697:1:::1;17681:17;:::i;:::-;:24;;;;:::i;:::-;17668:9;:37;;17660:102;;;::::0;-1:-1:-1;;;17660:102:0;;12136:2:1;17660:102:0::1;::::0;::::1;12118:21:1::0;12175:2;12155:18;;;12148:30;12214:34;12194:18;;;12187:62;-1:-1:-1;;;12265:18:1;;;12258:50;12325:19;;17660:102:0::1;11934:416:1::0;17660:102:0::1;-1:-1:-1::0;17773:18:0::1;:30:::0;;;17821:4:::1;11073:1;17572:261:::0;;;:::o;31654:301::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;31752:9:::1;31747:201;31767:9;:16;31763:1;:20;31747:201;;;31824:6;::::0;31808:12;;-1:-1:-1;;;;;31824:6:0;;::::1;::::0;31808:9;;31818:1;;31808:12;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;31808:22:0::1;;;:55;;;;;31858:4;-1:-1:-1::0;;;;;31834:29:0::1;:9;31844:1;31834:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;31834:29:0::1;;;31808:55;31805:132;;;31914:7;31883:14;:28;31898:9;31908:1;31898:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;31883:28:0::1;-1:-1:-1::0;;;;;31883:28:0::1;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;31805:132;31785:3;::::0;::::1;:::i;:::-;;;31747:201;;17468:98:::0;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;17530:20:::1;:28:::0;;-1:-1:-1;;17530:28:0::1;::::0;;17468:98::o;7187:127::-;-1:-1:-1;;;;;7288:18:0;7261:7;7288:18;;;;;;;;;;;;7187:127::o;11433:150::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;11526:6:::1;::::0;11505:40:::1;::::0;11542:1:::1;::::0;-1:-1:-1;;;;;11526:6:0::1;::::0;11505:40:::1;::::0;11542:1;;11505:40:::1;11556:6;:19:::0;;-1:-1:-1;;;;;;11556:19:0::1;::::0;;11433:150::o;18394:136::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18484:31:0;;;::::1;;::::0;;;:23:::1;:31;::::0;;;;:38;;-1:-1:-1;;18484:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18394:136::o;18114:268::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;18260:1:::1;18250:6;:11;;18242:60;;;::::0;-1:-1:-1;;;18242:60:0;;12557:2:1;18242:60:0::1;::::0;::::1;12539:21:1::0;12596:2;12576:18;;;12569:30;12635:34;12615:18;;;12608:62;-1:-1:-1;;;12686:18:1;;;12679:34;12730:19;;18242:60:0::1;12355:400:1::0;18242:60:0::1;18358:4;18352;18343:6;18327:13;7159:12:::0;;;7071:108;18327:13:::1;:22;;;;:::i;:::-;:29;;;;:::i;:::-;18326:36;;;;:::i;:::-;18325:49;::::0;18367:6:::1;18325:49;:::i;:::-;18313:9;:61:::0;-1:-1:-1;18114:268:0:o;18592:101::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;18664:11:::1;:21:::0;;-1:-1:-1;;18664:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18592:101::o;6858:104::-;6914:13;6947:7;6940:14;;;;;:::i;19467:237::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;19574:6:::1;::::0;-1:-1:-1;;;;;19574:6:0;;::::1;19566:14:::0;;::::1;::::0;19558:84:::1;;;::::0;-1:-1:-1;;;19558:84:0;;12962:2:1;19558:84:0::1;::::0;::::1;12944:21:1::0;13001:2;12981:18;;;12974:30;13040:34;13020:18;;;13013:62;13111:27;13091:18;;;13084:55;13156:19;;19558:84:0::1;12760:421:1::0;19558:84:0::1;-1:-1:-1::0;;;;;19795:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19795:39:0;;;;;;;19467:237;;:::o;8564:413::-;2923:10;8657:4;8701:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8701:34:0;;;;;;;;;;8754:35;;;;8746:85;;;;-1:-1:-1;;;8746:85:0;;13388:2:1;8746:85:0;;;13370:21:1;13427:2;13407:18;;;13400:30;13466:34;13446:18;;;13439:62;-1:-1:-1;;;13517:18:1;;;13510:35;13562:19;;8746:85:0;13186:401:1;8746:85:0;8867:67;2923:10;8890:7;8918:15;8899:16;:34;8867:8;:67::i;:::-;-1:-1:-1;8965:4:0;;8564:413;-1:-1:-1;;;8564:413:0:o;7322:175::-;7408:4;7425:42;2923:10;7449:9;7460:6;7425:9;:42::i;6596:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19327:132::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19412:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;19412:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19327:132::o;19009:310::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;19133:2:::1;19107:21;19118:10:::0;19107;:21:::1;:::i;:::-;19106:29;;19098:71;;;::::0;-1:-1:-1;;;19098:71:0;;11345:2:1;19098:71:0::1;::::0;::::1;11327:21:1::0;11384:2;11364:18;;;11357:30;11423:31;11403:18;;;11396:59;11472:18;;19098:71:0::1;11143:353:1::0;19098:71:0::1;19180:16;:29:::0;;;19220:16:::1;:29:::0;;;19276:35:::1;19239:10:::0;19199;19276:35:::1;:::i;:::-;19260:13;:51:::0;-1:-1:-1;;19009:310:0:o;19850:189::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;19947:15:::1;:22:::0;;-1:-1:-1;;;;;19947:22:0;;::::1;-1:-1:-1::0;;;;;;19947:22:0;;::::1;;::::0;;;19980:17:::1;:24:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;20015:9:::1;:16:::0;;;;;::::1;::::0;::::1;;::::0;;19850:189::o;6570:19::-;;;;;;;:::i;17839:267::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;17978:1:::1;17968:6;:11;;17960:63;;;::::0;-1:-1:-1;;;17960:63:0;;13794:2:1;17960:63:0::1;::::0;::::1;13776:21:1::0;13833:2;13813:18;;;13806:30;13872:34;13852:18;;;13845:62;-1:-1:-1;;;13923:18:1;;;13916:37;13970:19;;17960:63:0::1;13592:403:1::0;17960:63:0::1;18082:4;18076;18067:6;18051:13;7159:12:::0;;;7071:108;18051:13:::1;:22;;;;:::i;:::-;:29;;;;:::i;:::-;18050:36;;;;:::i;:::-;18049:49;::::0;18091:6:::1;18049:49;:::i;:::-;18034:12;:64:::0;-1:-1:-1;17839:267:0:o;11738:246::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11829:22:0;::::1;11821:73;;;::::0;-1:-1:-1;;;11821:73:0;;14202:2:1;11821:73:0::1;::::0;::::1;14184:21:1::0;14241:2;14221:18;;;14214:30;14280:34;14260:18;;;14253:62;-1:-1:-1;;;14331:18:1;;;14324:36;14377:19;;11821:73:0::1;14000:402:1::0;11821:73:0::1;11931:6;::::0;11910:38:::1;::::0;-1:-1:-1;;;;;11910:38:0;;::::1;::::0;11931:6:::1;::::0;11910:38:::1;::::0;11931:6:::1;::::0;11910:38:::1;11959:6;:17:::0;;-1:-1:-1;;;;;;11959:17:0::1;-1:-1:-1::0;;;;;11959:17:0;;;::::1;::::0;;;::::1;::::0;;11738:246::o;29865:864::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;29930:13:::1;::::0;::::1;;29929:14;29921:70;;;::::0;-1:-1:-1;;;29921:70:0;;14609:2:1;29921:70:0::1;::::0;::::1;14591:21:1::0;14648:2;14628:18;;;14621:30;14687:34;14667:18;;;14660:62;-1:-1:-1;;;14738:18:1;;;14731:41;14789:19;;29921:70:0::1;14407:407:1::0;29921:70:0::1;30036:1;30012:21;:25;30004:73;;;::::0;-1:-1:-1;;;30004:73:0;;15021:2:1;30004:73:0::1;::::0;::::1;15003:21:1::0;15060:2;15040:18;;;15033:30;15099:34;15079:18;;;15072:62;-1:-1:-1;;;15150:18:1;;;15143:33;15193:19;;30004:73:0::1;14819:399:1::0;30004:73:0::1;30123:1;30096:24;30114:4;30096:9;:24::i;:::-;:28;30088:79;;;::::0;-1:-1:-1;;;30088:79:0;;15425:2:1;30088:79:0::1;::::0;::::1;15407:21:1::0;15464:2;15444:18;;;15437:30;15503:34;15483:18;;;15476:62;-1:-1:-1;;;15554:18:1;;;15547:36;15600:19;;30088:79:0::1;15223:402:1::0;30088:79:0::1;30210:9;::::0;30178:69:::1;::::0;30195:4:::1;::::0;-1:-1:-1;;;;;30210:9:0::1;30222:24;30195:4:::0;30222:9:::1;:24::i;30178:69::-;30288:9;::::0;-1:-1:-1;;;;;30288:9:0::1;:25;30321:21;30366:4;30386:24;30366:4:::0;30386:9:::1;:24::i;:::-;30425:1;30468::::0;30511:7:::1;10856:6:::0;;-1:-1:-1;;;;;10856:6:0;;10791:79;30511:7:::1;30533:15;30288:271;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;30605:13:0::1;:20:::0;;30621:4:::1;-1:-1:-1::0;;30605:20:0;;::::1;::::0;::::1;::::0;;;30636:11:::1;:18:::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;30686:12:0::1;30665:18;:33:::0;30709:7:::1;:12:::0;29865:864::o;31290:241::-;11003:6;;-1:-1:-1;;;;;11003:6:0;2923:10;11003:22;10995:67;;;;-1:-1:-1;;;10995:67:0;;;;;;;:::i;:::-;31357:13:::1;::::0;::::1;;31356:14;31348:70;;;::::0;-1:-1:-1;;;31348:70:0;;16755:2:1;31348:70:0::1;::::0;::::1;16737:21:1::0;16794:2;16774:18;;;16767:30;16833:34;16813:18;;;16806:62;-1:-1:-1;;;16884:18:1;;;16877:41;16935:19;;31348:70:0::1;16553:407:1::0;31348:70:0::1;31465:58;::::0;31429:12:::1;::::0;31473:10:::1;::::0;31497:21:::1;::::0;31429:12;31465:58;31429:12;31465:58;31497:21;31473:10;31465:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;31290:241:0:o;9906:380::-;-1:-1:-1;;;;;10042:19:0;;10034:68;;;;-1:-1:-1;;;10034:68:0;;17377:2:1;10034:68:0;;;17359:21:1;17416:2;17396:18;;;17389:30;17455:34;17435:18;;;17428:62;-1:-1:-1;;;17506:18:1;;;17499:34;17550:19;;10034:68:0;17175:400:1;10034:68:0;-1:-1:-1;;;;;10121:21:0;;10113:68;;;;-1:-1:-1;;;10113:68:0;;17782:2:1;10113:68:0;;;17764:21:1;17821:2;17801:18;;;17794:30;17860:34;17840:18;;;17833:62;-1:-1:-1;;;17911:18:1;;;17904:32;17953:19;;10113:68:0;17580:398:1;10113:68:0;-1:-1:-1;;;;;10194:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10246:32;;1587:25:1;;;10246:32:0;;1560:18:1;10246:32:0;;;;;;;9906:380;;;:::o;8985:614::-;-1:-1:-1;;;;;9125:20:0;;9117:70;;;;-1:-1:-1;;;9117:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9206:23:0;;9198:71;;;;-1:-1:-1;;;9198:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9306:17:0;;9282:21;9306:17;;;;;;;;;;;9342:23;;;;9334:74;;;;-1:-1:-1;;;9334:74:0;;18995:2:1;9334:74:0;;;18977:21:1;19034:2;19014:18;;;19007:30;19073:34;19053:18;;;19046:62;-1:-1:-1;;;19124:18:1;;;19117:36;19170:19;;9334:74:0;18793:402:1;9334:74:0;-1:-1:-1;;;;;9444:17:0;;;:9;:17;;;;;;;;;;;9464:22;;;9444:42;;9508:20;;;;;;;;:30;;9480:6;;9444:9;9508:30;;9480:6;;9508:30;:::i;:::-;;;;;;;;9573:9;-1:-1:-1;;;;;9556:35:0;9565:6;-1:-1:-1;;;;;9556:35:0;;9584:6;9556:35;;;;1587:25:1;;1575:2;1560:18;;1441:177;9556:35:0;;;;;;;;9106:493;8985:614;;;:::o;20176:4991::-;-1:-1:-1;;;;;20308:18:0;;20300:68;;;;-1:-1:-1;;;20300:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20387:16:0;;20379:64;;;;-1:-1:-1;;;20379:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20463:18:0;;;;;;:14;:18;;;;;;;;20462:19;20454:55;;;;-1:-1:-1;;;20454:55:0;;19402:2:1;20454:55:0;;;19384:21:1;19441:2;19421:18;;;19414:30;-1:-1:-1;;;19460:18:1;;;19453:53;19523:18;;20454:55:0;19200:347:1;20454:55:0;20544:9;20529:25;;;;:14;:25;;;;;;;;20528:26;20520:62;;;;-1:-1:-1;;;20520:62:0;;19402:2:1;20520:62:0;;;19384:21:1;19441:2;19421:18;;;19414:30;-1:-1:-1;;;19460:18:1;;;19453:53;19523:18;;20520:62:0;19200:347:1;20520:62:0;20599:6;20609:1;20599:11;20596:92;;20627:28;20643:4;20649:2;20653:1;20627:15;:28::i;20596:92::-;20704:13;;;;20700:132;;-1:-1:-1;;;;;20741:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20770:23:0;;;;;;:19;:23;;;;;;;;20741:52;20733:87;;;;-1:-1:-1;;;20733:87:0;;19754:2:1;20733:87:0;;;19736:21:1;19793:2;19773:18;;;19766:30;-1:-1:-1;;;19812:18:1;;;19805:52;19874:18;;20733:87:0;19552:346:1;20733:87:0;10856:6;;-1:-1:-1;;;;;20870:15:0;;;10856:6;;20870:15;;;;:45;;-1:-1:-1;10856:6:0;;-1:-1:-1;;;;;20902:13:0;;;10856:6;;20902:13;;20870:45;:78;;;;-1:-1:-1;;;;;;20932:16:0;;;;20870:78;:116;;;;-1:-1:-1;;;;;;20965:21:0;;20979:6;20965:21;;20870:116;:142;;;;-1:-1:-1;21004:8:0;;-1:-1:-1;;;21004:8:0;;;;21003:9;20870:142;:183;;;;-1:-1:-1;;;;;;21030:23:0;;;;;;:19;:23;;;;;;;;21029:24;20870:183;:226;;;;-1:-1:-1;;;;;;21071:25:0;;;;;;:19;:25;;;;;;;;21070:26;20870:226;20852:1697;;;21264:20;;;;21260:490;;;21326:9;;-1:-1:-1;;;;;21312:24:0;;;21326:9;;21312:24;;;;:49;;-1:-1:-1;21354:6:0;;-1:-1:-1;;;;;21340:21:0;;;21354:6;;21340:21;;21312:49;21308:423;;;21435:16;21450:1;21435:12;:16;:::i;:::-;21422:9;21397:35;;;;:24;:35;;;;;;:54;:105;;;;-1:-1:-1;21486:16:0;21501:1;21486:12;:16;:::i;:::-;-1:-1:-1;;;;;21455:28:0;;;;;;:24;:28;;;;;;:47;21397:105;21389:171;;;;-1:-1:-1;;;21389:171:0;;20238:2:1;21389:171:0;;;20220:21:1;20277:2;20257:18;;;20250:30;20316:34;20296:18;;;20289:62;-1:-1:-1;;;20367:18:1;;;20360:51;20428:19;;21389:171:0;20036:417:1;21389:171:0;21612:9;21587:35;;;;:24;:35;;;;;;21625:12;21587:50;;;;-1:-1:-1;;;;;21664:28:0;;;;;;:43;21308:423;-1:-1:-1;;;;;21819:31:0;;;;;;:25;:31;;;;;;;;:63;;;;-1:-1:-1;;;;;;21855:27:0;;;;;;:23;:27;;;;;;;;21854:28;21819:63;21815:723;;;21929:12;;21919:6;:22;;21911:80;;;;-1:-1:-1;;;21911:80:0;;20660:2:1;21911:80:0;;;20642:21:1;20699:2;20679:18;;;20672:30;20738:34;20718:18;;;20711:62;-1:-1:-1;;;20789:18:1;;;20782:43;20842:19;;21911:80:0;20458:409:1;21911:80:0;22052:9;;22035:13;22045:2;22035:9;:13::i;:::-;22026:22;;:6;:22;:::i;:::-;:35;;22018:67;;;;-1:-1:-1;;;22018:67:0;;21074:2:1;22018:67:0;;;21056:21:1;21113:2;21093:18;;;21086:30;-1:-1:-1;;;21132:18:1;;;21125:49;21191:18;;22018:67:0;20872:343:1;22018:67:0;21815:723;;;-1:-1:-1;;;;;22179:29:0;;;;;;:25;:29;;;;;;;;:63;;;;-1:-1:-1;;;;;;22213:29:0;;;;;;:23;:29;;;;;;;;22212:30;22179:63;22175:363;;;22289:12;;22279:6;:22;;22271:81;;;;-1:-1:-1;;;22271:81:0;;21422:2:1;22271:81:0;;;21404:21:1;21461:2;21441:18;;;21434:30;21500:34;21480:18;;;21473:62;-1:-1:-1;;;21551:18:1;;;21544:44;21605:19;;22271:81:0;21220:410:1;22175:363:0;-1:-1:-1;;;;;22400:27:0;;;;;;:23;:27;;;;;;;;22395:143;;22485:9;;22468:13;22478:2;22468:9;:13::i;:::-;22459:22;;:6;:22;:::i;:::-;:35;;22451:67;;;;-1:-1:-1;;;22451:67:0;;21074:2:1;22451:67:0;;;21056:21:1;21113:2;21093:18;;;21086:30;-1:-1:-1;;;21132:18:1;;;21125:49;21191:18;;22451:67:0;20872:343:1;22451:67:0;22565:28;22596:24;22614:4;22596:9;:24::i;:::-;22680:18;;22565:55;;-1:-1:-1;22656:42:0;;;;;;;22729:35;;-1:-1:-1;22753:11:0;;;;22729:35;:61;;;;-1:-1:-1;22782:8:0;;-1:-1:-1;;;22782:8:0;;;;22781:9;22729:61;:110;;;;-1:-1:-1;;;;;;22808:31:0;;;;;;:25;:31;;;;;;;;22807:32;22729:110;:153;;;;-1:-1:-1;;;;;;22857:25:0;;;;;;:19;:25;;;;;;;;22856:26;22729:153;:194;;;;-1:-1:-1;;;;;;22900:23:0;;;;;;:19;:23;;;;;;;;22899:24;22729:194;22711:338;;;22950:8;:15;;-1:-1:-1;;;;22950:15:0;-1:-1:-1;;;22950:15:0;;;22994:10;:8;:10::i;:::-;23021:8;:16;;-1:-1:-1;;;;23021:16:0;;;22711:338;23073:8;;-1:-1:-1;;;23073:8:0;;;;23072:9;:42;;;;-1:-1:-1;;;;;;23085:29:0;;;;;;:25;:29;;;;;;;;23072:42;:64;;;;-1:-1:-1;23118:18:0;;;;23072:64;:129;;;;;23181:20;;23159:19;;:42;;;;:::i;:::-;23140:15;:61;;23072:129;:159;;;;-1:-1:-1;;;;;;23206:25:0;;;;;;:19;:25;;;;;;;;23205:26;23072:159;23069:224;;;23247:34;:32;:34::i;:::-;23331:8;;-1:-1:-1;;;;;23440:25:0;;23315:12;23440:25;;;:19;:25;;;;;;23331:8;-1:-1:-1;;;23331:8:0;;;;;23330:9;;23440:25;;:52;;-1:-1:-1;;;;;;23469:23:0;;;;;;:19;:23;;;;;;;;23440:52;23437:99;;;-1:-1:-1;23519:5:0;23437:99;23556:12;23660:7;23657:1457;;;23831:7;;23816:22;;:12;:22;:::i;:::-;23794:18;;:44;;23793:81;;;;-1:-1:-1;;;;;;23843:31:0;;;;;;:25;:31;;;;;;;;23793:81;23790:1153;;;23915:3;23901:11;:6;23910:2;23901:11;:::i;:::-;:17;;;;:::i;:::-;23894:24;;23985:13;;23966:16;;23959:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;23937:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24065:13:0;;24046:16;;24039:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;24017:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24133:13:0;;24120:10;;24113:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;24097:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;23790:1153:0;;-1:-1:-1;23790:1153:0;;-1:-1:-1;;;;;24209:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;24258:1;24242:13;;:17;24209:50;24205:738;;;24311:3;24295:13;;24286:6;:22;;;;:::i;24205:738::-;-1:-1:-1;;;;;24603:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24653:1;24638:12;;:16;24603:51;24600:343;;;24704:3;24689:12;;24680:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24673:34;;24771:12;;24753:15;;24746:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24724:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24849:12:0;;24831:15;;24824:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;24802:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24915:12:0;;24903:9;;24896:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;24880:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;24600:343:0;24974:8;;24971:93;;25006:42;25022:4;25036;25043;25006:15;:42::i;:::-;25088:14;25098:4;25088:14;;:::i;:::-;;;23657:1457;25126:33;25142:4;25148:2;25152:6;25126:15;:33::i;:::-;20289:4878;;;;20176:4991;;;:::o;26219:1680::-;26258:23;26284:24;26302:4;26284:9;:24::i;:::-;26258:50;;26319:25;26389:12;;26368:18;;26347;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;26319:82;-1:-1:-1;26412:12:0;26448:20;;;:46;;-1:-1:-1;26472:22:0;;26448:46;26445:60;;;26497:7;;;26219:1680::o;26445:60::-;26538:18;;:23;;26559:2;26538:23;:::i;:::-;26520:15;:41;26517:113;;;26595:18;;:23;;26616:2;26595:23;:::i;:::-;26577:41;;26517:113;26699:23;26784:1;26764:17;26743:18;;26725:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;26699:86;-1:-1:-1;26796:26:0;26825:33;26699:86;26825:15;:33;:::i;:::-;26796:62;-1:-1:-1;26907:21:0;26941:36;26796:62;26941:16;:36::i;:::-;26999:18;27020:41;27044:17;27020:21;:41;:::i;:::-;26999:62;;27082:23;27183:1;27164:18;;:20;;;;:::i;:::-;27143:42;;:17;:42;:::i;:::-;27121:18;;27108:31;;:10;:31;:::i;:::-;:78;;;;:::i;:::-;27082:104;;27197:17;27286:1;27267:18;;:20;;;;:::i;:::-;27246:42;;:17;:42;:::i;:::-;27230:12;;27217:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;27197:92;-1:-1:-1;27310:23:0;27197:92;27336:28;27349:15;27336:10;:28;:::i;:::-;:40;;;;:::i;:::-;27428:1;27407:18;:22;;;27440:18;:22;;;27473:12;:16;;;27533:9;;27525:45;;27310:66;;-1:-1:-1;;;;;;27533:9:0;;27556;;27525:45;27428:1;27525:45;27556:9;27533;27525:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27602:15:0;;27594:57;;27512:58;;-1:-1:-1;;;;;;27602:15:0;;27631;;27594:57;;;;27631:15;27602;27594:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27581:70:0;;-1:-1:-1;;27675:19:0;;;;;:42;;;27716:1;27698:15;:19;27675:42;27672:210;;;27733:46;27746:15;27763;27733:12;:46::i;:::-;27851:18;;27799:71;;;21837:25:1;;;21893:2;21878:18;;21871:34;;;21921:18;;;21914:34;;;;27799:71:0;;;;;;21825:2:1;27799:71:0;;;27672:210;26247:1652;;;;;;;;;;26219:1680::o;28284:692::-;28379:15;28357:19;:37;28503:6;;28488:22;;-1:-1:-1;;;28488:22:0;;-1:-1:-1;;;;;28503:6:0;;;28488:22;;;731:51:1;28457:28:0;;28488:4;;:14;;704:18:1;;28488:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28457:53;;28573:25;28648:5;28624:21;;28601:20;:44;;;;:::i;:::-;:52;;;;:::i;:::-;28573:80;-1:-1:-1;28678:21:0;;28674:112;;28731:6;;28715:59;;-1:-1:-1;;;;;28731:6:0;28747;28756:17;28715:15;:59::i;:::-;28894:6;;28912:11;;;-1:-1:-1;;;;;;28912:11:0;;;;-1:-1:-1;;;;;28894:6:0;;;;;;28912:9;;:11;;;;;28869:13;;28912:11;;;;;;;28869:13;28894:6;28912:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28939:29;28950:17;28939:29;;;;1587:25:1;;1575:2;1560:18;;1441:177;28939:29:0;;;;;;;;28336:640;;;28284:692::o;25175:513::-;25267:16;;;25281:1;25267:16;;;;;;;;25243:21;;25267:16;;;;;;;;;;-1:-1:-1;25267:16:0;25243:40;;25312:4;25294;25299:1;25294:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25294:23:0;;;:7;;;;;;;;;;:23;;;;25338:9;;:16;;;-1:-1:-1;;;25338:16:0;;;;:9;;;;;:14;;:16;;;;;25294:7;;25338:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25328:4;25333:1;25328:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25328:26:0;;;:7;;;;;;;;;:26;25399:9;;25367:56;;25384:4;;25399:9;25411:11;25367:8;:56::i;:::-;25462:9;;:218;;-1:-1:-1;;;25462:218:0;;-1:-1:-1;;;;;25462:9:0;;;;:60;;:218;;25537:11;;25462:9;;25607:4;;25634;;25654:15;;25462:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25230:458;25175:513;:::o;25700:511::-;25880:9;;25848:56;;25865:4;;-1:-1:-1;;;;;25880:9:0;25892:11;25848:8;:56::i;:::-;25947:9;;26145:17;;25947:256;;-1:-1:-1;;;25947:256:0;;-1:-1:-1;;;;;25947:9:0;;;;:25;;25980:9;;25947:256;;26013:4;;26033:11;;25947:9;;;;26145:17;;26177:15;;25947:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25700:511;;:::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;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1623:127::-;1684:10;1679:3;1675:20;1672:1;1665:31;1715:4;1712:1;1705:15;1739:4;1736:1;1729:15;1755:275;1826:2;1820:9;1891:2;1872:13;;-1:-1:-1;;1868:27:1;1856:40;;1926:18;1911:34;;1947:22;;;1908:62;1905:88;;;1973:18;;:::i;:::-;2009:2;2002:22;1755:275;;-1:-1:-1;1755:275:1:o;2035:183::-;2095:4;2128:18;2120:6;2117:30;2114:56;;;2150:18;;:::i;:::-;-1:-1:-1;2195:1:1;2191:14;2207:4;2187:25;;2035:183::o;2223:737::-;2277:5;2330:3;2323:4;2315:6;2311:17;2307:27;2297:55;;2348:1;2345;2338:12;2297:55;2384:6;2371:20;2410:4;2434:60;2450:43;2490:2;2450:43;:::i;:::-;2434:60;:::i;:::-;2528:15;;;2614:1;2610:10;;;;2598:23;;2594:32;;;2559:12;;;;2638:15;;;2635:35;;;2666:1;2663;2656:12;2635:35;2702:2;2694:6;2690:15;2714:217;2730:6;2725:3;2722:15;2714:217;;;2810:3;2797:17;2827:31;2852:5;2827:31;:::i;:::-;2871:18;;2909:12;;;;2747;;2714:217;;;-1:-1:-1;2949:5:1;2223:737;-1:-1:-1;;;;;;2223:737:1:o;2965:1138::-;3083:6;3091;3144:2;3132:9;3123:7;3119:23;3115:32;3112:52;;;3160:1;3157;3150:12;3112:52;3200:9;3187:23;3229:18;3270:2;3262:6;3259:14;3256:34;;;3286:1;3283;3276:12;3256:34;3309:61;3362:7;3353:6;3342:9;3338:22;3309:61;:::i;:::-;3299:71;;3389:2;3379:12;;3444:2;3433:9;3429:18;3416:32;3473:2;3463:8;3460:16;3457:36;;;3489:1;3486;3479:12;3457:36;3512:24;;;-1:-1:-1;3567:4:1;3559:13;;3555:27;-1:-1:-1;3545:55:1;;3596:1;3593;3586:12;3545:55;3632:2;3619:16;3655:60;3671:43;3711:2;3671:43;:::i;3655:60::-;3749:15;;;3831:1;3827:10;;;;3819:19;;3815:28;;;3780:12;;;;3855:19;;;3852:39;;;3887:1;3884;3877:12;3852:39;3911:11;;;;3931:142;3947:6;3942:3;3939:15;3931:142;;;4013:17;;4001:30;;3964:12;;;;4051;;;;3931:142;;;4092:5;4082:15;;;;;;;2965:1138;;;;;:::o;4108:456::-;4185:6;4193;4201;4254:2;4242:9;4233:7;4229:23;4225:32;4222:52;;;4270:1;4267;4260:12;4222:52;4309:9;4296:23;4328:31;4353:5;4328:31;:::i;:::-;4378:5;-1:-1:-1;4435:2:1;4420:18;;4407:32;4448:33;4407:32;4448:33;:::i;:::-;4108:456;;4500:7;;-1:-1:-1;;;4554:2:1;4539:18;;;;4526:32;;4108:456::o;4966:180::-;5025:6;5078:2;5066:9;5057:7;5053:23;5049:32;5046:52;;;5094:1;5091;5084:12;5046:52;-1:-1:-1;5117:23:1;;4966:180;-1:-1:-1;4966:180:1:o;5151:247::-;5210:6;5263:2;5251:9;5242:7;5238:23;5234:32;5231:52;;;5279:1;5276;5269:12;5231:52;5318:9;5305:23;5337:31;5362:5;5337:31;:::i;:::-;5387:5;5151:247;-1:-1:-1;;;5151:247:1:o;5403:248::-;5471:6;5479;5532:2;5520:9;5511:7;5507:23;5503:32;5500:52;;;5548:1;5545;5538:12;5500:52;-1:-1:-1;;5571:23:1;;;5641:2;5626:18;;;5613:32;;-1:-1:-1;5403:248:1:o;5656:160::-;5721:20;;5777:13;;5770:21;5760:32;;5750:60;;5806:1;5803;5796:12;5821:416;5911:6;5919;5972:2;5960:9;5951:7;5947:23;5943:32;5940:52;;;5988:1;5985;5978:12;5940:52;6028:9;6015:23;6061:18;6053:6;6050:30;6047:50;;;6093:1;6090;6083:12;6047:50;6116:61;6169:7;6160:6;6149:9;6145:22;6116:61;:::i;:::-;6106:71;;;6196:35;6227:2;6216:9;6212:18;6196:35;:::i;:::-;6186:45;;5821:416;;;;;:::o;6242:315::-;6307:6;6315;6368:2;6356:9;6347:7;6343:23;6339:32;6336:52;;;6384:1;6381;6374:12;6336:52;6423:9;6410:23;6442:31;6467:5;6442:31;:::i;:::-;6492:5;-1:-1:-1;6516:35:1;6547:2;6532:18;;6516:35;:::i;6562:180::-;6618:6;6671:2;6659:9;6650:7;6646:23;6642:32;6639:52;;;6687:1;6684;6677:12;6639:52;6710:26;6726:9;6710:26;:::i;6747:529::-;6824:6;6832;6840;6893:2;6881:9;6872:7;6868:23;6864:32;6861:52;;;6909:1;6906;6899:12;6861:52;6948:9;6935:23;6967:31;6992:5;6967:31;:::i;:::-;7017:5;-1:-1:-1;7074:2:1;7059:18;;7046:32;7087:33;7046:32;7087:33;:::i;:::-;7139:7;-1:-1:-1;7198:2:1;7183:18;;7170:32;7211:33;7170:32;7211:33;:::i;:::-;7263:7;7253:17;;;6747:529;;;;;:::o;7281:388::-;7349:6;7357;7410:2;7398:9;7389:7;7385:23;7381:32;7378:52;;;7426:1;7423;7416:12;7378:52;7465:9;7452:23;7484:31;7509:5;7484:31;:::i;:::-;7534:5;-1:-1:-1;7591:2:1;7576:18;;7563:32;7604:33;7563:32;7604:33;:::i;:::-;7656:7;7646:17;;;7281:388;;;;;:::o;7674:380::-;7753:1;7749:12;;;;7796;;;7817:61;;7871:4;7863:6;7859:17;7849:27;;7817:61;7924:2;7916:6;7913:14;7893:18;7890:38;7887:161;;7970:10;7965:3;7961:20;7958:1;7951:31;8005:4;8002:1;7995:15;8033:4;8030:1;8023:15;7887:161;;7674:380;;;:::o;8059:356::-;8261:2;8243:21;;;8280:18;;;8273:30;8339:34;8334:2;8319:18;;8312:62;8406:2;8391:18;;8059:356::o;8844:127::-;8905:10;8900:3;8896:20;8893:1;8886:31;8936:4;8933:1;8926:15;8960:4;8957:1;8950:15;8976:127;9037:10;9032:3;9028:20;9025:1;9018:31;9068:4;9065:1;9058:15;9092:4;9089:1;9082:15;9108:168;9181:9;;;9212;;9229:15;;;9223:22;;9209:37;9199:71;;9250:18;;:::i;9281:217::-;9321:1;9347;9337:132;;9391:10;9386:3;9382:20;9379:1;9372:31;9426:4;9423:1;9416:15;9454:4;9451:1;9444:15;9337:132;-1:-1:-1;9483:9:1;;9281:217::o;9503:135::-;9542:3;9563:17;;;9560:43;;9583:18;;:::i;:::-;-1:-1:-1;9630:1:1;9619:13;;9503:135::o;10052:125::-;10117:9;;;10138:10;;;10135:36;;;10151:18;;:::i;10954:184::-;11024:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:52;;;11093:1;11090;11083:12;11045:52;-1:-1:-1;11116:16:1;;10954:184;-1:-1:-1;10954:184:1:o;15630:607::-;-1:-1:-1;;;;;15989:15:1;;;15971:34;;16036:2;16021:18;;16014:34;;;;16079:2;16064:18;;16057:34;;;;16122:2;16107:18;;16100:34;;;;16171:15;;;16165:3;16150:19;;16143:44;15951:3;16203:19;;16196:35;;;;15920:3;15905:19;;15630:607::o;16242:306::-;16330:6;16338;16346;16399:2;16387:9;16378:7;16374:23;16370:32;16367:52;;;16415:1;16412;16405:12;16367:52;16444:9;16438:16;16428:26;;16494:2;16483:9;16479:18;16473:25;16463:35;;16538:2;16527:9;16523:18;16517:25;16507:35;;16242:306;;;;;:::o;17983:401::-;18185:2;18167:21;;;18224:2;18204:18;;;18197:30;18263:34;18258:2;18243:18;;18236:62;-1:-1:-1;;;18329:2:1;18314:18;;18307:35;18374:3;18359:19;;17983:401::o;18389:399::-;18591:2;18573:21;;;18630:2;18610:18;;;18603:30;18669:34;18664:2;18649:18;;18642:62;-1:-1:-1;;;18735:2:1;18720:18;;18713:33;18778:3;18763:19;;18389:399::o;19903:128::-;19970:9;;;19991:11;;;19988:37;;;20005:18;;:::i;21959:251::-;22029:6;22082:2;22070:9;22061:7;22057:23;22053:32;22050:52;;;22098:1;22095;22088:12;22050:52;22130:9;22124:16;22149:31;22174:5;22149:31;:::i;22215:980::-;22477:4;22525:3;22514:9;22510:19;22556:6;22545:9;22538:25;22582:2;22620:6;22615:2;22604:9;22600:18;22593:34;22663:3;22658:2;22647:9;22643:18;22636:31;22687:6;22722;22716:13;22753:6;22745;22738:22;22791:3;22780:9;22776:19;22769:26;;22830:2;22822:6;22818:15;22804:29;;22851:1;22861:195;22875:6;22872:1;22869:13;22861:195;;;22940:13;;-1:-1:-1;;;;;22936:39:1;22924:52;;23031:15;;;;22996:12;;;;22972:1;22890:9;22861:195;;;-1:-1:-1;;;;;;;23112:32:1;;;;23107:2;23092:18;;23085:60;-1:-1:-1;;;23176:3:1;23161:19;23154:35;23073:3;22215:980;-1:-1:-1;;;22215:980:1:o

Swarm Source

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