ETH Price: $2,869.46 (-9.36%)
Gas: 13 Gwei

Token

Hydrohomies (WATER)
 

Overview

Max Total Supply

1,000,000,000 WATER

Holders

6

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
6,279,095.938707971 WATER

Value
$0.00
0x9cac62a691610026b14f69ae8785adf44250cb64
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:
Hydrohomies

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-29
*/

/**
Hydrohomies - Drink plenty of water 

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _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 9;
    }

    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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

    function _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");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

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

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

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), 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);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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


library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Hydrohomies is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping (address => bool) private _isSniper;
    bool private _swapping;
    uint256 private _launchTime;

    address public feeWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
        
    bool public limitsInEffect = true;
    bool public tradingActive;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 private _buyMarketingFee;
    uint256 private _buyLiquidityFee;
    
    uint256 public sellTotalFees;
    uint256 private _sellMarketingFee;
    uint256 private _sellLiquidityFee;
    
    uint256 private _tokensForMarketing;
    uint256 private _tokensForLiquidity;
    
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // 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 UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event feeWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event AutoNukeLP();
    event ManualNukeLP();

    constructor() ERC20("Hydrohomies", "WATER") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 buyMarketingFee = 2;
        uint256 buyLiquidityFee = 1;

        uint256 sellMarketingFee = 2;
        uint256 sellLiquidityFee = 1;
        
        uint256 totalSupply = 1e9 * 1e9;
        
        maxTransactionAmount = totalSupply * 2 / 100; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 3 / 1000;

        _buyMarketingFee = buyMarketingFee;
        _buyLiquidityFee = buyLiquidityFee;
        buyTotalFees = _buyMarketingFee + _buyLiquidityFee;
        
        _sellMarketingFee = sellMarketingFee;
        _sellLiquidityFee = sellLiquidityFee;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee;
        
        feeWallet = address(owner()); // set as fee wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / 1e9, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * 1e9;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e9, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * 1e9;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 marketingFee, uint256 liquidityFee) external onlyOwner {
        _buyMarketingFee = marketingFee;
        _buyLiquidityFee = liquidityFee;
        buyTotalFees = _buyMarketingFee + _buyLiquidityFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }
    
    function updateSellFees(uint256 marketingFee, uint256 liquidityFee) external onlyOwner {
        _sellMarketingFee = marketingFee;
        _sellLiquidityFee = liquidityFee;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee;
        require(sellTotalFees <= 15, "Must keep fees at 15% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function updateFeeWallet(address newWallet) external onlyOwner {
        emit feeWalletUpdated(newWallet, feeWallet);
        feeWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setSnipers(address[] memory snipers_) public onlyOwner() {
        for (uint i = 0; i < snipers_.length; i++) {
            if (snipers_[i] != uniswapV2Pair && snipers_[i] != address(uniswapV2Router)) {
                _isSniper[snipers_[i]] = true;
            }
        }
    }
    
    function delSnipers(address[] memory snipers_) public onlyOwner() {
        for (uint i = 0; i < snipers_.length; i++) {
            _isSniper[snipers_[i]] = false;
        }
    }
    
    function isSniper(address addr) public view returns (bool) {
        return _isSniper[addr];
    }

    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(!_isSniper[from], "Your address has been marked as a sniper, you are unable to transfer or swap.");
        
         if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if (block.timestamp == _launchTime) _isSniper[to] = true;
        
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                // when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                // when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (
            canSwap &&
            !_swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        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) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                _tokensForLiquidity += fees * _sellLiquidityFee / sellTotalFees;
                _tokensForMarketing += fees * _sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    _tokensForLiquidity += fees * _buyLiquidityFee / buyTotalFees;
                _tokensForMarketing += fees * _buyMarketingFee / buyTotalFees;
            }
            
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing;
        
        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.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
        
        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
                
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }

    function withdrawFees() external {
        payable(feeWallet).transfer(address(this).balance);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"snipers_","type":"address[]"}],"name":"delSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","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":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","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":"address[]","name":"snipers_","type":"address[]"}],"name":"setSnipers","outputs":[],"stateMutability":"nonpayable","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":"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":[{"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600d60006101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600b81526020017f487964726f686f6d6965730000000000000000000000000000000000000000008152506040518060400160405280600581526020017f57415445520000000000000000000000000000000000000000000000000000008152508160039080519060200190620000cc92919062000acc565b508060049080519060200190620000e592919062000acc565b5050506000620000fa6200059860201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001c5816001620005a060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026b919062000be6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000be6565b6040518363ffffffff1660e01b81526004016200031892919062000c29565b6020604051808303816000875af115801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e919062000be6565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003a660a0516001620005a060201b60201c565b620003bb60a05160016200069d60201b60201c565b6000600290506000600190506000600290506000600190506000670de0b6b3a764000090506064600282620003f1919062000c8f565b620003fd919062000d1f565b600a81905550606460028262000414919062000c8f565b62000420919062000d1f565b600c819055506103e860038262000438919062000c8f565b62000444919062000d1f565b600b8190555084601181905550836012819055506012546011546200046a919062000d57565b601081905550826014819055508160158190555060155460145462000490919062000d57565b601381905550620004a66200073e60201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000508620004fa6200073e60201b60201c565b60016200076860201b60201c565b6200051b3060016200076860201b60201c565b6200053061dead60016200076860201b60201c565b62000552620005446200073e60201b60201c565b6001620005a060201b60201c565b62000565306001620005a060201b60201c565b6200057a61dead6001620005a060201b60201c565b6200058c3382620008b560201b60201c565b50505050505062000fe8565b600033905090565b620005b06200059860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006399062000e15565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007786200059860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200080a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008019062000e15565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008a9919062000e54565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000928576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200091f9062000ec1565b60405180910390fd5b6200093c6000838362000a6460201b60201c565b620009588160025462000a6960201b620024471790919060201c565b600281905550620009b6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a6960201b620024471790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a58919062000ef4565b60405180910390a35050565b505050565b600080828462000a7a919062000d57565b90508381101562000ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab99062000f61565b60405180910390fd5b8091505092915050565b82805462000ada9062000fb2565b90600052602060002090601f01602090048101928262000afe576000855562000b4a565b82601f1062000b1957805160ff191683800117855562000b4a565b8280016001018555821562000b4a579182015b8281111562000b4957825182559160200191906001019062000b2c565b5b50905062000b59919062000b5d565b5090565b5b8082111562000b7857600081600090555060010162000b5e565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bae8262000b81565b9050919050565b62000bc08162000ba1565b811462000bcc57600080fd5b50565b60008151905062000be08162000bb5565b92915050565b60006020828403121562000bff5762000bfe62000b7c565b5b600062000c0f8482850162000bcf565b91505092915050565b62000c238162000ba1565b82525050565b600060408201905062000c40600083018562000c18565b62000c4f602083018462000c18565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c9c8262000c56565b915062000ca98362000c56565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ce55762000ce462000c60565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d2c8262000c56565b915062000d398362000c56565b92508262000d4c5762000d4b62000cf0565b5b828204905092915050565b600062000d648262000c56565b915062000d718362000c56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000da95762000da862000c60565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000dfd60208362000db4565b915062000e0a8262000dc5565b602082019050919050565b6000602082019050818103600083015262000e308162000dee565b9050919050565b60008115159050919050565b62000e4e8162000e37565b82525050565b600060208201905062000e6b600083018462000e43565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ea9601f8362000db4565b915062000eb68262000e71565b602082019050919050565b6000602082019050818103600083015262000edc8162000e9a565b9050919050565b62000eee8162000c56565b82525050565b600060208201905062000f0b600083018462000ee3565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f49601b8362000db4565b915062000f568262000f11565b602082019050919050565b6000602082019050818103600083015262000f7c8162000f3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fcb57607f821691505b6020821081141562000fe25762000fe162000f83565b5b50919050565b60805160a0516154236200105460003960008181610fde0152818161110e01528181611b620152612b20015260008181610c8e0152818161117f01528181612ac801528181613a4d01528181613b2e01528181613b5501528181613bf10152613c1801526154236000f3fe60806040526004361061026b5760003560e01c80637571336a11610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b80639a7a23d6116101085780639a7a23d614610734578063a457c2d71461075d578063a9059cbb1461079a578063b62496f5146107d7578063bbc0c74214610814578063c02466681461083f57610272565b80637571336a14610675578063892ba4081461069e5780638a8c523c146106c75780638da5cb5b146106de57806395d89b411461070957610272565b8063476343ee116101dd57806366718524116101a1578063667185241461057957806366ca9b83146105a25780636a486a8e146105cb57806370a08231146105f6578063715018a614610633578063751039fc1461064a57610272565b8063476343ee146104a657806349bd5a5e146104bd5780634a62bb65146104e85780634fbee193146105135780635e80148e1461055057610272565b80631694505e1161022f5780631694505e1461038257806318160ddd146103ad578063203e727e146103d857806323b872dd14610401578063313ce5671461043e578063395093511461046957610272565b806302dbd8f81461027757806306fdde03146102a0578063095ea7b3146102cb5780630f3a325f1461030857806310d5de531461034557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613d79565b610a61565b005b3480156102ac57600080fd5b506102b5610b66565b6040516102c29190613e52565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190613ed2565b610bf8565b6040516102ff9190613f2d565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613f48565b610c16565b60405161033c9190613f2d565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613f48565b610c6c565b6040516103799190613f2d565b60405180910390f35b34801561038e57600080fd5b50610397610c8c565b6040516103a49190613fd4565b60405180910390f35b3480156103b957600080fd5b506103c2610cb0565b6040516103cf9190613ffe565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614019565b610cba565b005b34801561040d57600080fd5b5061042860048036038101906104239190614046565b610ddc565b6040516104359190613f2d565b60405180910390f35b34801561044a57600080fd5b50610453610eb5565b60405161046091906140b5565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613ed2565b610ebe565b60405161049d9190613f2d565b60405180910390f35b3480156104b257600080fd5b506104bb610f71565b005b3480156104c957600080fd5b506104d2610fdc565b6040516104df91906140df565b60405180910390f35b3480156104f457600080fd5b506104fd611000565b60405161050a9190613f2d565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190613f48565b611013565b6040516105479190613f2d565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190614242565b611069565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613f48565b611277565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613d79565b6113ce565b005b3480156105d757600080fd5b506105e06114d3565b6040516105ed9190613ffe565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613f48565b6114d9565b60405161062a9190613ffe565b60405180910390f35b34801561063f57600080fd5b50610648611521565b005b34801561065657600080fd5b5061065f611679565b60405161066c9190613f2d565b60405180910390f35b34801561068157600080fd5b5061069c600480360381019061069791906142b7565b611734565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190614242565b611826565b005b3480156106d357600080fd5b506106dc611952565b005b3480156106ea57600080fd5b506106f3611a0d565b60405161070091906140df565b60405180910390f35b34801561071557600080fd5b5061071e611a37565b60405161072b9190613e52565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906142b7565b611ac9565b005b34801561076957600080fd5b50610784600480360381019061077f9190613ed2565b611bfd565b6040516107919190613f2d565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613ed2565b611cca565b6040516107ce9190613f2d565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190613f48565b611ce8565b60405161080b9190613f2d565b60405180910390f35b34801561082057600080fd5b50610829611d08565b6040516108369190613f2d565b60405180910390f35b34801561084b57600080fd5b50610866600480360381019061086191906142b7565b611d1b565b005b34801561087457600080fd5b5061088f600480360381019061088a9190614019565b611e5b565b005b34801561089d57600080fd5b506108a6611f7d565b6040516108b39190613f2d565b60405180910390f35b3480156108c857600080fd5b506108d1611f90565b6040516108de9190613ffe565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190614019565b611f96565b60405161091b9190613f2d565b60405180910390f35b34801561093057600080fd5b50610939612106565b6040516109469190613ffe565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906142f7565b61210c565b6040516109839190613ffe565b60405180910390f35b34801561099857600080fd5b506109a1612193565b6040516109ae9190613ffe565b60405180910390f35b3480156109c357600080fd5b506109cc612199565b6040516109d99190613f2d565b60405180910390f35b3480156109ee57600080fd5b506109f7612254565b604051610a0491906140df565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f48565b61227a565b005b348015610a4257600080fd5b50610a4b612441565b604051610a589190613ffe565b60405180910390f35b610a696124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90614383565b60405180910390fd5b8160148190555080601581905550601554601454610b1691906143d2565b601381905550600f6013541115610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990614474565b60405180910390fd5b5050565b606060038054610b75906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba1906144c3565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050905090565b6000610c0c610c056124a5565b84846124ad565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610cc26124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890614383565b60405180910390fd5b633b9aca006103e86001610d63610cb0565b610d6d91906144f5565b610d77919061457e565b610d81919061457e565b811015610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90614621565b60405180910390fd5b633b9aca0081610dd391906144f5565b600a8190555050565b6000610de9848484612678565b610eaa84610df56124a5565b610ea5856040518060600160405280602881526020016153a160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e5b6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b600190509392505050565b60006009905090565b6000610f67610ecb6124a5565b84610f628560016000610edc6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6124ad565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fd9573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110716124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614383565b60405180910390fd5b60005b8151811015611273577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1682828151811061115657611155614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156111e857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168282815181106111c7576111c6614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156112605760016006600084848151811061120657611205614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061126b90614670565b915050611103565b5050565b61127f6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590614383565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d66124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90614383565b60405180910390fd5b816011819055508060128190555060125460115461148391906143d2565b601081905550600a60105411156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690614705565b60405180910390fd5b5050565b60135481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115296124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116836124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990614383565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61173c6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290614383565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61182e6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614383565b60405180910390fd5b60005b815181101561194e576000600660008484815181106118e2576118e1614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061194690614670565b9150506118c0565b5050565b61195a6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614383565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a46906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611a72906144c3565b8015611abf5780601f10611a9457610100808354040283529160200191611abf565b820191906000526020600020905b815481529060010190602001808311611aa257829003601f168201915b5050505050905090565b611ad16124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5790614383565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690614797565b60405180910390fd5b611bf982826133e8565b5050565b6000611cc0611c0a6124a5565b84611cbb856040518060600160405280602581526020016153c96025913960016000611c346124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b6001905092915050565b6000611cde611cd76124a5565b8484612678565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611d236124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990614383565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e4f9190613f2d565b60405180910390a25050565b611e636124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990614383565b60405180910390fd5b633b9aca006103e86005611f04610cb0565b611f0e91906144f5565b611f18919061457e565b611f22919061457e565b811015611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90614829565b60405180910390fd5b633b9aca0081611f7491906144f5565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611fa06124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614383565b60405180910390fd5b620186a0600161203d610cb0565b61204791906144f5565b612051919061457e565b821015612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906148bb565b60405180910390fd5b6103e860056120a0610cb0565b6120aa91906144f5565b6120b4919061457e565b8211156120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed9061494d565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006121a36124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222990614383565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122826124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612378906149df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461245691906143d2565b90508381101561249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614a4b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614add565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490614b6f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161266b9190613ffe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df90614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614c93565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90614d4b565b60405180910390fd5b60008114156127ff576127fa83836000613489565b61337f565b600854421415612862576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f255761287f611a0d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ed57506128bd611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129265750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129795750600760009054906101000a900460ff16155b15612f2457600d60019054906101000a900460ff16612a7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614db7565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c3b57612a90611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b1757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c3a5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec90614e6f565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cde5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8557600a54811115612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f90614f01565b60405180910390fd5b600c54612d34836114d9565b82612d3f91906143d2565b1115612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7790614f6d565b60405180910390fd5b612f23565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e285750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7757600a54811115612e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6990614fff565b60405180910390fd5b612f22565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2157600c54612ed4836114d9565b82612edf91906143d2565b1115612f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1790614f6d565b60405180910390fd5b5b5b5b5b5b6000612f30306114d9565b90506000600b548210159050808015612f565750600760009054906101000a900460ff16155b8015612fac5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130025750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130585750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561309c576001600760006101000a81548160ff02191690831515021790555061308061371e565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131525750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315c57600090505b6000811561336f57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bf57506000601354115b15613259576131ec60646131de6013548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601354601554826131ff91906144f5565b613209919061457e565b6017600082825461321a91906143d2565b925050819055506013546014548261323291906144f5565b61323c919061457e565b6016600082825461324d91906143d2565b9250508190555061334b565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b457506000601054115b1561334a576132e160646132d36010548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601054601254826132f491906144f5565b6132fe919061457e565b6017600082825461330f91906143d2565b925050819055506010546011548261332791906144f5565b613331919061457e565b6016600082825461334291906143d2565b925050819055505b5b60008111156133605761335f873083613489565b5b808561336c919061501f565b94505b61337a878787613489565b505050505b505050565b60008383111582906133cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c39190613e52565b60405180910390fd5b50600083856133db919061501f565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f090614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356090614c93565b60405180910390fd5b61357483838361395f565b6135df8160405180606001604052806026815260200161537b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613672816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137119190613ffe565b60405180910390a3505050565b6000613729306114d9565b9050600060165460175461373d91906143d2565b9050600082148061374e5750600081145b1561375a575050613898565b6014600b5461376991906144f5565b821115613782576014600b5461377f91906144f5565b91505b60006002826017548561379591906144f5565b61379f919061457e565b6137a9919061457e565b905060006137c0828561396490919063ffffffff16565b905060004790506137d0826139ae565b60006137e5824761396490919063ffffffff16565b90506000613810866138026016548561389a90919063ffffffff16565b61391590919063ffffffff16565b905060008183613820919061501f565b9050600060178190555060006016819055506000861180156138425750600081115b1561388f576138518682613beb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260175460405161388693929190615053565b60405180910390a15b50505050505050505b565b6000808314156138ad576000905061390f565b600082846138bb91906144f5565b90508284826138ca919061457e565b1461390a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613901906150fc565b60405180910390fd5b809150505b92915050565b600061395783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ccc565b905092915050565b505050565b60006139a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613384565b905092915050565b6000600267ffffffffffffffff8111156139cb576139ca6140ff565b5b6040519080825280602002602001820160405280156139f95781602001602082028036833780820191505090505b5090503081600081518110613a1157613a10614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ada9190615131565b81600181518110613aee57613aed614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b53307f0000000000000000000000000000000000000000000000000000000000000000846124ad565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bb5959493929190615257565b600060405180830381600087803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b505050505050565b613c16307f0000000000000000000000000000000000000000000000000000000000000000846124ad565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c60611a0d565b426040518863ffffffff1660e01b8152600401613c82969594939291906152b1565b60606040518083038185885af1158015613ca0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cc59190615327565b5050505050565b60008083118290613d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0a9190613e52565b60405180910390fd5b5060008385613d22919061457e565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613d5681613d43565b8114613d6157600080fd5b50565b600081359050613d7381613d4d565b92915050565b60008060408385031215613d9057613d8f613d39565b5b6000613d9e85828601613d64565b9250506020613daf85828601613d64565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613df3578082015181840152602081019050613dd8565b83811115613e02576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e2482613db9565b613e2e8185613dc4565b9350613e3e818560208601613dd5565b613e4781613e08565b840191505092915050565b60006020820190508181036000830152613e6c8184613e19565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e9f82613e74565b9050919050565b613eaf81613e94565b8114613eba57600080fd5b50565b600081359050613ecc81613ea6565b92915050565b60008060408385031215613ee957613ee8613d39565b5b6000613ef785828601613ebd565b9250506020613f0885828601613d64565b9150509250929050565b60008115159050919050565b613f2781613f12565b82525050565b6000602082019050613f426000830184613f1e565b92915050565b600060208284031215613f5e57613f5d613d39565b5b6000613f6c84828501613ebd565b91505092915050565b6000819050919050565b6000613f9a613f95613f9084613e74565b613f75565b613e74565b9050919050565b6000613fac82613f7f565b9050919050565b6000613fbe82613fa1565b9050919050565b613fce81613fb3565b82525050565b6000602082019050613fe96000830184613fc5565b92915050565b613ff881613d43565b82525050565b60006020820190506140136000830184613fef565b92915050565b60006020828403121561402f5761402e613d39565b5b600061403d84828501613d64565b91505092915050565b60008060006060848603121561405f5761405e613d39565b5b600061406d86828701613ebd565b935050602061407e86828701613ebd565b925050604061408f86828701613d64565b9150509250925092565b600060ff82169050919050565b6140af81614099565b82525050565b60006020820190506140ca60008301846140a6565b92915050565b6140d981613e94565b82525050565b60006020820190506140f460008301846140d0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61413782613e08565b810181811067ffffffffffffffff82111715614156576141556140ff565b5b80604052505050565b6000614169613d2f565b9050614175828261412e565b919050565b600067ffffffffffffffff821115614195576141946140ff565b5b602082029050602081019050919050565b600080fd5b60006141be6141b98461417a565b61415f565b905080838252602082019050602084028301858111156141e1576141e06141a6565b5b835b8181101561420a57806141f68882613ebd565b8452602084019350506020810190506141e3565b5050509392505050565b600082601f830112614229576142286140fa565b5b81356142398482602086016141ab565b91505092915050565b60006020828403121561425857614257613d39565b5b600082013567ffffffffffffffff81111561427657614275613d3e565b5b61428284828501614214565b91505092915050565b61429481613f12565b811461429f57600080fd5b50565b6000813590506142b18161428b565b92915050565b600080604083850312156142ce576142cd613d39565b5b60006142dc85828601613ebd565b92505060206142ed858286016142a2565b9150509250929050565b6000806040838503121561430e5761430d613d39565b5b600061431c85828601613ebd565b925050602061432d85828601613ebd565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061436d602083613dc4565b915061437882614337565b602082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143dd82613d43565b91506143e883613d43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561441d5761441c6143a3565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061445e601d83613dc4565b915061446982614428565b602082019050919050565b6000602082019050818103600083015261448d81614451565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144db57607f821691505b602082108114156144ef576144ee614494565b5b50919050565b600061450082613d43565b915061450b83613d43565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614544576145436143a3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458982613d43565b915061459483613d43565b9250826145a4576145a361454f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061460b602f83613dc4565b9150614616826145af565b604082019050919050565b6000602082019050818103600083015261463a816145fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061467b82613d43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146ae576146ad6143a3565b5b600182019050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006146ef601d83613dc4565b91506146fa826146b9565b602082019050919050565b6000602082019050818103600083015261471e816146e2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614781603983613dc4565b915061478c82614725565b604082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614813602483613dc4565b915061481e826147b7565b604082019050919050565b6000602082019050818103600083015261484281614806565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148a5603583613dc4565b91506148b082614849565b604082019050919050565b600060208201905081810360008301526148d481614898565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614937603483613dc4565b9150614942826148db565b604082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149c9602683613dc4565b91506149d48261496d565b604082019050919050565b600060208201905081810360008301526149f8816149bc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a35601b83613dc4565b9150614a40826149ff565b602082019050919050565b60006020820190508181036000830152614a6481614a28565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ac7602483613dc4565b9150614ad282614a6b565b604082019050919050565b60006020820190508181036000830152614af681614aba565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b59602283613dc4565b9150614b6482614afd565b604082019050919050565b60006020820190508181036000830152614b8881614b4c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614beb602583613dc4565b9150614bf682614b8f565b604082019050919050565b60006020820190508181036000830152614c1a81614bde565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c7d602383613dc4565b9150614c8882614c21565b604082019050919050565b60006020820190508181036000830152614cac81614c70565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614d35604d83613dc4565b9150614d4082614cb3565b606082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614da1601683613dc4565b9150614dac82614d6b565b602082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e59604983613dc4565b9150614e6482614dd7565b606082019050919050565b60006020820190508181036000830152614e8881614e4c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614eeb603583613dc4565b9150614ef682614e8f565b604082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f57601383613dc4565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614fe9603683613dc4565b9150614ff482614f8d565b604082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b600061502a82613d43565b915061503583613d43565b925082821015615048576150476143a3565b5b828203905092915050565b60006060820190506150686000830186613fef565b6150756020830185613fef565b6150826040830184613fef565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150e6602183613dc4565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b60008151905061512b81613ea6565b92915050565b60006020828403121561514757615146613d39565b5b60006151558482850161511c565b91505092915050565b6000819050919050565b600061518361517e6151798461515e565b613f75565b613d43565b9050919050565b61519381615168565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151ce81613e94565b82525050565b60006151e083836151c5565b60208301905092915050565b6000602082019050919050565b600061520482615199565b61520e81856151a4565b9350615219836151b5565b8060005b8381101561524a57815161523188826151d4565b975061523c836151ec565b92505060018101905061521d565b5085935050505092915050565b600060a08201905061526c6000830188613fef565b615279602083018761518a565b818103604083015261528b81866151f9565b905061529a60608301856140d0565b6152a76080830184613fef565b9695505050505050565b600060c0820190506152c660008301896140d0565b6152d36020830188613fef565b6152e0604083018761518a565b6152ed606083018661518a565b6152fa60808301856140d0565b61530760a0830184613fef565b979650505050505050565b60008151905061532181613d4d565b92915050565b6000806000606084860312156153405761533f613d39565b5b600061534e86828701615312565b935050602061535f86828701615312565b925050604061537086828701615312565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021e8ba102930f5f37759711e075fd9effdb3036286f0f74d25e8587dbd27906364736f6c634300080b0033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80637571336a11610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b80639a7a23d6116101085780639a7a23d614610734578063a457c2d71461075d578063a9059cbb1461079a578063b62496f5146107d7578063bbc0c74214610814578063c02466681461083f57610272565b80637571336a14610675578063892ba4081461069e5780638a8c523c146106c75780638da5cb5b146106de57806395d89b411461070957610272565b8063476343ee116101dd57806366718524116101a1578063667185241461057957806366ca9b83146105a25780636a486a8e146105cb57806370a08231146105f6578063715018a614610633578063751039fc1461064a57610272565b8063476343ee146104a657806349bd5a5e146104bd5780634a62bb65146104e85780634fbee193146105135780635e80148e1461055057610272565b80631694505e1161022f5780631694505e1461038257806318160ddd146103ad578063203e727e146103d857806323b872dd14610401578063313ce5671461043e578063395093511461046957610272565b806302dbd8f81461027757806306fdde03146102a0578063095ea7b3146102cb5780630f3a325f1461030857806310d5de531461034557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613d79565b610a61565b005b3480156102ac57600080fd5b506102b5610b66565b6040516102c29190613e52565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190613ed2565b610bf8565b6040516102ff9190613f2d565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613f48565b610c16565b60405161033c9190613f2d565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613f48565b610c6c565b6040516103799190613f2d565b60405180910390f35b34801561038e57600080fd5b50610397610c8c565b6040516103a49190613fd4565b60405180910390f35b3480156103b957600080fd5b506103c2610cb0565b6040516103cf9190613ffe565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614019565b610cba565b005b34801561040d57600080fd5b5061042860048036038101906104239190614046565b610ddc565b6040516104359190613f2d565b60405180910390f35b34801561044a57600080fd5b50610453610eb5565b60405161046091906140b5565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613ed2565b610ebe565b60405161049d9190613f2d565b60405180910390f35b3480156104b257600080fd5b506104bb610f71565b005b3480156104c957600080fd5b506104d2610fdc565b6040516104df91906140df565b60405180910390f35b3480156104f457600080fd5b506104fd611000565b60405161050a9190613f2d565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190613f48565b611013565b6040516105479190613f2d565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190614242565b611069565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613f48565b611277565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613d79565b6113ce565b005b3480156105d757600080fd5b506105e06114d3565b6040516105ed9190613ffe565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613f48565b6114d9565b60405161062a9190613ffe565b60405180910390f35b34801561063f57600080fd5b50610648611521565b005b34801561065657600080fd5b5061065f611679565b60405161066c9190613f2d565b60405180910390f35b34801561068157600080fd5b5061069c600480360381019061069791906142b7565b611734565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190614242565b611826565b005b3480156106d357600080fd5b506106dc611952565b005b3480156106ea57600080fd5b506106f3611a0d565b60405161070091906140df565b60405180910390f35b34801561071557600080fd5b5061071e611a37565b60405161072b9190613e52565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906142b7565b611ac9565b005b34801561076957600080fd5b50610784600480360381019061077f9190613ed2565b611bfd565b6040516107919190613f2d565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613ed2565b611cca565b6040516107ce9190613f2d565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190613f48565b611ce8565b60405161080b9190613f2d565b60405180910390f35b34801561082057600080fd5b50610829611d08565b6040516108369190613f2d565b60405180910390f35b34801561084b57600080fd5b50610866600480360381019061086191906142b7565b611d1b565b005b34801561087457600080fd5b5061088f600480360381019061088a9190614019565b611e5b565b005b34801561089d57600080fd5b506108a6611f7d565b6040516108b39190613f2d565b60405180910390f35b3480156108c857600080fd5b506108d1611f90565b6040516108de9190613ffe565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190614019565b611f96565b60405161091b9190613f2d565b60405180910390f35b34801561093057600080fd5b50610939612106565b6040516109469190613ffe565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906142f7565b61210c565b6040516109839190613ffe565b60405180910390f35b34801561099857600080fd5b506109a1612193565b6040516109ae9190613ffe565b60405180910390f35b3480156109c357600080fd5b506109cc612199565b6040516109d99190613f2d565b60405180910390f35b3480156109ee57600080fd5b506109f7612254565b604051610a0491906140df565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f48565b61227a565b005b348015610a4257600080fd5b50610a4b612441565b604051610a589190613ffe565b60405180910390f35b610a696124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90614383565b60405180910390fd5b8160148190555080601581905550601554601454610b1691906143d2565b601381905550600f6013541115610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990614474565b60405180910390fd5b5050565b606060038054610b75906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba1906144c3565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050905090565b6000610c0c610c056124a5565b84846124ad565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610cc26124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890614383565b60405180910390fd5b633b9aca006103e86001610d63610cb0565b610d6d91906144f5565b610d77919061457e565b610d81919061457e565b811015610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90614621565b60405180910390fd5b633b9aca0081610dd391906144f5565b600a8190555050565b6000610de9848484612678565b610eaa84610df56124a5565b610ea5856040518060600160405280602881526020016153a160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e5b6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b600190509392505050565b60006009905090565b6000610f67610ecb6124a5565b84610f628560016000610edc6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6124ad565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fd9573d6000803e3d6000fd5b50565b7f0000000000000000000000000a8efd7313cc9fc6d8607171bb9fe1433dc3f7e981565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110716124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614383565b60405180910390fd5b60005b8151811015611273577f0000000000000000000000000a8efd7313cc9fc6d8607171bb9fe1433dc3f7e973ffffffffffffffffffffffffffffffffffffffff1682828151811061115657611155614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156111e857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168282815181106111c7576111c6614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156112605760016006600084848151811061120657611205614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061126b90614670565b915050611103565b5050565b61127f6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590614383565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d66124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90614383565b60405180910390fd5b816011819055508060128190555060125460115461148391906143d2565b601081905550600a60105411156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690614705565b60405180910390fd5b5050565b60135481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115296124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116836124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990614383565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61173c6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290614383565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61182e6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614383565b60405180910390fd5b60005b815181101561194e576000600660008484815181106118e2576118e1614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061194690614670565b9150506118c0565b5050565b61195a6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614383565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a46906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611a72906144c3565b8015611abf5780601f10611a9457610100808354040283529160200191611abf565b820191906000526020600020905b815481529060010190602001808311611aa257829003601f168201915b5050505050905090565b611ad16124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5790614383565b60405180910390fd5b7f0000000000000000000000000a8efd7313cc9fc6d8607171bb9fe1433dc3f7e973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690614797565b60405180910390fd5b611bf982826133e8565b5050565b6000611cc0611c0a6124a5565b84611cbb856040518060600160405280602581526020016153c96025913960016000611c346124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b6001905092915050565b6000611cde611cd76124a5565b8484612678565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611d236124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990614383565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e4f9190613f2d565b60405180910390a25050565b611e636124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990614383565b60405180910390fd5b633b9aca006103e86005611f04610cb0565b611f0e91906144f5565b611f18919061457e565b611f22919061457e565b811015611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90614829565b60405180910390fd5b633b9aca0081611f7491906144f5565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611fa06124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614383565b60405180910390fd5b620186a0600161203d610cb0565b61204791906144f5565b612051919061457e565b821015612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906148bb565b60405180910390fd5b6103e860056120a0610cb0565b6120aa91906144f5565b6120b4919061457e565b8211156120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed9061494d565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006121a36124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222990614383565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122826124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612378906149df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461245691906143d2565b90508381101561249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614a4b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614add565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490614b6f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161266b9190613ffe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df90614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614c93565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90614d4b565b60405180910390fd5b60008114156127ff576127fa83836000613489565b61337f565b600854421415612862576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f255761287f611a0d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ed57506128bd611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129265750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129795750600760009054906101000a900460ff16155b15612f2457600d60019054906101000a900460ff16612a7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614db7565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c3b57612a90611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b1757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6f57507f0000000000000000000000000a8efd7313cc9fc6d8607171bb9fe1433dc3f7e973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c3a5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec90614e6f565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cde5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8557600a54811115612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f90614f01565b60405180910390fd5b600c54612d34836114d9565b82612d3f91906143d2565b1115612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7790614f6d565b60405180910390fd5b612f23565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e285750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7757600a54811115612e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6990614fff565b60405180910390fd5b612f22565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2157600c54612ed4836114d9565b82612edf91906143d2565b1115612f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1790614f6d565b60405180910390fd5b5b5b5b5b5b6000612f30306114d9565b90506000600b548210159050808015612f565750600760009054906101000a900460ff16155b8015612fac5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130025750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130585750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561309c576001600760006101000a81548160ff02191690831515021790555061308061371e565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131525750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315c57600090505b6000811561336f57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bf57506000601354115b15613259576131ec60646131de6013548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601354601554826131ff91906144f5565b613209919061457e565b6017600082825461321a91906143d2565b925050819055506013546014548261323291906144f5565b61323c919061457e565b6016600082825461324d91906143d2565b9250508190555061334b565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b457506000601054115b1561334a576132e160646132d36010548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601054601254826132f491906144f5565b6132fe919061457e565b6017600082825461330f91906143d2565b925050819055506010546011548261332791906144f5565b613331919061457e565b6016600082825461334291906143d2565b925050819055505b5b60008111156133605761335f873083613489565b5b808561336c919061501f565b94505b61337a878787613489565b505050505b505050565b60008383111582906133cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c39190613e52565b60405180910390fd5b50600083856133db919061501f565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f090614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356090614c93565b60405180910390fd5b61357483838361395f565b6135df8160405180606001604052806026815260200161537b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613672816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137119190613ffe565b60405180910390a3505050565b6000613729306114d9565b9050600060165460175461373d91906143d2565b9050600082148061374e5750600081145b1561375a575050613898565b6014600b5461376991906144f5565b821115613782576014600b5461377f91906144f5565b91505b60006002826017548561379591906144f5565b61379f919061457e565b6137a9919061457e565b905060006137c0828561396490919063ffffffff16565b905060004790506137d0826139ae565b60006137e5824761396490919063ffffffff16565b90506000613810866138026016548561389a90919063ffffffff16565b61391590919063ffffffff16565b905060008183613820919061501f565b9050600060178190555060006016819055506000861180156138425750600081115b1561388f576138518682613beb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260175460405161388693929190615053565b60405180910390a15b50505050505050505b565b6000808314156138ad576000905061390f565b600082846138bb91906144f5565b90508284826138ca919061457e565b1461390a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613901906150fc565b60405180910390fd5b809150505b92915050565b600061395783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ccc565b905092915050565b505050565b60006139a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613384565b905092915050565b6000600267ffffffffffffffff8111156139cb576139ca6140ff565b5b6040519080825280602002602001820160405280156139f95781602001602082028036833780820191505090505b5090503081600081518110613a1157613a10614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ada9190615131565b81600181518110613aee57613aed614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b53307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124ad565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bb5959493929190615257565b600060405180830381600087803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b505050505050565b613c16307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124ad565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c60611a0d565b426040518863ffffffff1660e01b8152600401613c82969594939291906152b1565b60606040518083038185885af1158015613ca0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cc59190615327565b5050505050565b60008083118290613d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0a9190613e52565b60405180910390fd5b5060008385613d22919061457e565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613d5681613d43565b8114613d6157600080fd5b50565b600081359050613d7381613d4d565b92915050565b60008060408385031215613d9057613d8f613d39565b5b6000613d9e85828601613d64565b9250506020613daf85828601613d64565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613df3578082015181840152602081019050613dd8565b83811115613e02576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e2482613db9565b613e2e8185613dc4565b9350613e3e818560208601613dd5565b613e4781613e08565b840191505092915050565b60006020820190508181036000830152613e6c8184613e19565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e9f82613e74565b9050919050565b613eaf81613e94565b8114613eba57600080fd5b50565b600081359050613ecc81613ea6565b92915050565b60008060408385031215613ee957613ee8613d39565b5b6000613ef785828601613ebd565b9250506020613f0885828601613d64565b9150509250929050565b60008115159050919050565b613f2781613f12565b82525050565b6000602082019050613f426000830184613f1e565b92915050565b600060208284031215613f5e57613f5d613d39565b5b6000613f6c84828501613ebd565b91505092915050565b6000819050919050565b6000613f9a613f95613f9084613e74565b613f75565b613e74565b9050919050565b6000613fac82613f7f565b9050919050565b6000613fbe82613fa1565b9050919050565b613fce81613fb3565b82525050565b6000602082019050613fe96000830184613fc5565b92915050565b613ff881613d43565b82525050565b60006020820190506140136000830184613fef565b92915050565b60006020828403121561402f5761402e613d39565b5b600061403d84828501613d64565b91505092915050565b60008060006060848603121561405f5761405e613d39565b5b600061406d86828701613ebd565b935050602061407e86828701613ebd565b925050604061408f86828701613d64565b9150509250925092565b600060ff82169050919050565b6140af81614099565b82525050565b60006020820190506140ca60008301846140a6565b92915050565b6140d981613e94565b82525050565b60006020820190506140f460008301846140d0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61413782613e08565b810181811067ffffffffffffffff82111715614156576141556140ff565b5b80604052505050565b6000614169613d2f565b9050614175828261412e565b919050565b600067ffffffffffffffff821115614195576141946140ff565b5b602082029050602081019050919050565b600080fd5b60006141be6141b98461417a565b61415f565b905080838252602082019050602084028301858111156141e1576141e06141a6565b5b835b8181101561420a57806141f68882613ebd565b8452602084019350506020810190506141e3565b5050509392505050565b600082601f830112614229576142286140fa565b5b81356142398482602086016141ab565b91505092915050565b60006020828403121561425857614257613d39565b5b600082013567ffffffffffffffff81111561427657614275613d3e565b5b61428284828501614214565b91505092915050565b61429481613f12565b811461429f57600080fd5b50565b6000813590506142b18161428b565b92915050565b600080604083850312156142ce576142cd613d39565b5b60006142dc85828601613ebd565b92505060206142ed858286016142a2565b9150509250929050565b6000806040838503121561430e5761430d613d39565b5b600061431c85828601613ebd565b925050602061432d85828601613ebd565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061436d602083613dc4565b915061437882614337565b602082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143dd82613d43565b91506143e883613d43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561441d5761441c6143a3565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061445e601d83613dc4565b915061446982614428565b602082019050919050565b6000602082019050818103600083015261448d81614451565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144db57607f821691505b602082108114156144ef576144ee614494565b5b50919050565b600061450082613d43565b915061450b83613d43565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614544576145436143a3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458982613d43565b915061459483613d43565b9250826145a4576145a361454f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061460b602f83613dc4565b9150614616826145af565b604082019050919050565b6000602082019050818103600083015261463a816145fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061467b82613d43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146ae576146ad6143a3565b5b600182019050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006146ef601d83613dc4565b91506146fa826146b9565b602082019050919050565b6000602082019050818103600083015261471e816146e2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614781603983613dc4565b915061478c82614725565b604082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614813602483613dc4565b915061481e826147b7565b604082019050919050565b6000602082019050818103600083015261484281614806565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148a5603583613dc4565b91506148b082614849565b604082019050919050565b600060208201905081810360008301526148d481614898565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614937603483613dc4565b9150614942826148db565b604082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149c9602683613dc4565b91506149d48261496d565b604082019050919050565b600060208201905081810360008301526149f8816149bc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a35601b83613dc4565b9150614a40826149ff565b602082019050919050565b60006020820190508181036000830152614a6481614a28565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ac7602483613dc4565b9150614ad282614a6b565b604082019050919050565b60006020820190508181036000830152614af681614aba565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b59602283613dc4565b9150614b6482614afd565b604082019050919050565b60006020820190508181036000830152614b8881614b4c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614beb602583613dc4565b9150614bf682614b8f565b604082019050919050565b60006020820190508181036000830152614c1a81614bde565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c7d602383613dc4565b9150614c8882614c21565b604082019050919050565b60006020820190508181036000830152614cac81614c70565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614d35604d83613dc4565b9150614d4082614cb3565b606082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614da1601683613dc4565b9150614dac82614d6b565b602082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e59604983613dc4565b9150614e6482614dd7565b606082019050919050565b60006020820190508181036000830152614e8881614e4c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614eeb603583613dc4565b9150614ef682614e8f565b604082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f57601383613dc4565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614fe9603683613dc4565b9150614ff482614f8d565b604082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b600061502a82613d43565b915061503583613d43565b925082821015615048576150476143a3565b5b828203905092915050565b60006060820190506150686000830186613fef565b6150756020830185613fef565b6150826040830184613fef565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150e6602183613dc4565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b60008151905061512b81613ea6565b92915050565b60006020828403121561514757615146613d39565b5b60006151558482850161511c565b91505092915050565b6000819050919050565b600061518361517e6151798461515e565b613f75565b613d43565b9050919050565b61519381615168565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151ce81613e94565b82525050565b60006151e083836151c5565b60208301905092915050565b6000602082019050919050565b600061520482615199565b61520e81856151a4565b9350615219836151b5565b8060005b8381101561524a57815161523188826151d4565b975061523c836151ec565b92505060018101905061521d565b5085935050505092915050565b600060a08201905061526c6000830188613fef565b615279602083018761518a565b818103604083015261528b81866151f9565b905061529a60608301856140d0565b6152a76080830184613fef565b9695505050505050565b600060c0820190506152c660008301896140d0565b6152d36020830188613fef565b6152e0604083018761518a565b6152ed606083018661518a565b6152fa60808301856140d0565b61530760a0830184613fef565b979650505050505050565b60008151905061532181613d4d565b92915050565b6000806000606084860312156153405761533f613d39565b5b600061534e86828701615312565b935050602061535f86828701615312565b925050604061537086828701615312565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021e8ba102930f5f37759711e075fd9effdb3036286f0f74d25e8587dbd27906364736f6c634300080b0033

Deployed Bytecode Sourcemap

17556:14487:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23452:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4977:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5890:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25223:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18763:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17637:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5297:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22515:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6067:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5197:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6430:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31901:102;;;;;;;;;;;;;:::i;:::-;;17695:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18017:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24584:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24721:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24419:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23130:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18439:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5413:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10932:148;;;;;;;;;;;;;:::i;:::-;;21725:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22974:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25027:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21546:123;;;;;;;;;;;;;:::i;:::-;;10718:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5085:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23967:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6656:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5548:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18985:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18057:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23777:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22753:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18273:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17894:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22121:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18321:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5731:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17936:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21911:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17857:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11088:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17976:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23452:317;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23570:12:::1;23550:17;:32;;;;23613:12;23593:17;:32;;;;23672:17;;23652;;:37;;;;:::i;:::-;23636:13;:53;;;;23725:2;23708:13;;:19;;23700:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23452:317:::0;;:::o;4977:100::-;5031:13;5064:5;5057:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4977:100;:::o;5890:169::-;5973:4;5990:39;5999:12;:10;:12::i;:::-;6013:7;6022:6;5990:8;:39::i;:::-;6047:4;6040:11;;5890:169;;;;:::o;25223:100::-;25276:4;25300:9;:15;25310:4;25300:15;;;;;;;;;;;;;;;;;;;;;;;;;25293:22;;25223:100;;;:::o;18763:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17637:51::-;;;:::o;5297:108::-;5358:7;5385:12;;5378:19;;5297:108;:::o;22515:230::-;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22636:3:::1;22628:4;22624:1;22608:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22607:32;;;;:::i;:::-;22597:6;:42;;22589:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22734:3;22725:6;:12;;;;:::i;:::-;22702:20;:35;;;;22515:230:::0;:::o;6067:355::-;6207:4;6224:36;6234:6;6242:9;6253:6;6224:9;:36::i;:::-;6271:121;6280:6;6288:12;:10;:12::i;:::-;6302:89;6340:6;6302:89;;;;;;;;;;;;;;;;;:11;:19;6314:6;6302:19;;;;;;;;;;;;;;;:33;6322:12;:10;:12::i;:::-;6302:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6271:8;:121::i;:::-;6410:4;6403:11;;6067:355;;;;;:::o;5197:92::-;5255:5;5280:1;5273:8;;5197:92;:::o;6430:218::-;6518:4;6535:83;6544:12;:10;:12::i;:::-;6558:7;6567:50;6606:10;6567:11;:25;6579:12;:10;:12::i;:::-;6567:25;;;;;;;;;;;;;;;:34;6593:7;6567:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6535:8;:83::i;:::-;6636:4;6629:11;;6430:218;;;;:::o;31901:102::-;31953:9;;;;;;;;;;;31945:27;;:50;31973:21;31945:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31901:102::o;17695:38::-;;;:::o;18017:33::-;;;;;;;;;;;;;:::o;24584:125::-;24649:4;24673:19;:28;24693:7;24673:28;;;;;;;;;;;;;;;;;;;;;;;;;24666:35;;24584:125;;;:::o;24721:294::-;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24803:6:::1;24798:210;24819:8;:15;24815:1;:19;24798:210;;;24875:13;24860:28;;:8;24869:1;24860:11;;;;;;;;:::i;:::-;;;;;;;;:28;;;;:71;;;;;24915:15;24892:39;;:8;24901:1;24892:11;;;;;;;;:::i;:::-;;;;;;;;:39;;;;24860:71;24856:141;;;24977:4;24952:9;:22;24962:8;24971:1;24962:11;;;;;;;;:::i;:::-;;;;;;;;24952:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24856:141;24836:3;;;;;:::i;:::-;;;;24798:210;;;;24721:294:::0;:::o;24419:157::-;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24526:9:::1;;;;;;;;;;;24498:38;;24515:9;24498:38;;;;;;;;;;;;24559:9;24547;;:21;;;;;;;;;;;;;;;;;;24419:157:::0;:::o;23130:310::-;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23246:12:::1;23227:16;:31;;;;23288:12;23269:16;:31;;;;23345:16;;23326;;:35;;;;:::i;:::-;23311:12;:50;;;;23396:2;23380:12;;:18;;23372:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23130:310:::0;;:::o;18439:28::-;;;;:::o;5413:127::-;5487:7;5514:9;:18;5524:7;5514:18;;;;;;;;;;;;;;;;5507:25;;5413:127;;;:::o;10932:148::-;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11039:1:::1;11002:40;;11023:6;;;;;;;;;;;11002:40;;;;;;;;;;;;11070:1;11053:6;;:19;;;;;;;;;;;;;;;;;;10932:148::o:0;21725:121::-;21777:4;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21811:5:::1;21794:14;;:22;;;;;;;;;;;;;;;;;;21834:4;21827:11;;21725:121:::0;:::o;22974:144::-;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23106:4:::1;23064:31;:39;23096:6;23064:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22974:144:::0;;:::o;25027:184::-;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25109:6:::1;25104:100;25125:8;:15;25121:1;:19;25104:100;;;25187:5;25162:9;:22;25172:8;25181:1;25172:11;;;;;;;;:::i;:::-;;;;;;;;25162:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;25142:3;;;;;:::i;:::-;;;;25104:100;;;;25027:184:::0;:::o;21546:123::-;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21617:4:::1;21601:13;;:20;;;;;;;;;;;;;;;;;;21646:15;21632:11;:29;;;;21546:123::o:0;10718:79::-;10756:7;10783:6;;;;;;;;;;;10776:13;;10718:79;:::o;5085:104::-;5141:13;5174:7;5167:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5085:104;:::o;23967:244::-;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24074:13:::1;24066:21;;:4;:21;;;;24058:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24162:41;24191:4;24197:5;24162:28;:41::i;:::-;23967:244:::0;;:::o;6656:269::-;6749:4;6766:129;6775:12;:10;:12::i;:::-;6789:7;6798:96;6837:15;6798:96;;;;;;;;;;;;;;;;;:11;:25;6810:12;:10;:12::i;:::-;6798:25;;;;;;;;;;;;;;;:34;6824:7;6798:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6766:8;:129::i;:::-;6913:4;6906:11;;6656:269;;;;:::o;5548:175::-;5634:4;5651:42;5661:12;:10;:12::i;:::-;5675:9;5686:6;5651:9;:42::i;:::-;5711:4;5704:11;;5548:175;;;;:::o;18985:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18057:25::-;;;;;;;;;;;;;:::o;23777:182::-;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23893:8:::1;23862:19;:28;23882:7;23862:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23933:7;23917:34;;;23942:8;23917:34;;;;;;:::i;:::-;;;;;;;;23777:182:::0;;:::o;22753:209::-;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22875:3:::1;22869:4;22865:1;22849:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22848:30;;;;:::i;:::-;22838:6;:40;;22830:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;22951:3;22942:6;:12;;;;:::i;:::-;22930:9;:24;;;;22753:209:::0;:::o;18273:39::-;;;;;;;;;;;;;:::o;17894:35::-;;;;:::o;22121:382::-;22202:4;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22259:6:::1;22255:1;22239:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;22226:9;:39;;22218:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22374:4;22370:1;22354:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22341:9;:37;;22333:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22466:9;22445:18;:30;;;;22492:4;22485:11;;22121:382:::0;;;:::o;18321:27::-;;;;:::o;5731:151::-;5820:7;5847:11;:18;5859:5;5847:18;;;;;;;;;;;;;;;:27;5866:7;5847:27;;;;;;;;;;;;;;;;5840:34;;5731:151;;;;:::o;17936:33::-;;;;:::o;21911:135::-;21971:4;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22011:5:::1;21988:20;;:28;;;;;;;;;;;;;;;;;;22034:4;22027:11;;21911:135:::0;:::o;17857:24::-;;;;;;;;;;;;;:::o;11088:244::-;10855:12;:10;:12::i;:::-;10845:22;;:6;;;;;;;;;;;:22;;;10837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11197:1:::1;11177:22;;:8;:22;;;;11169:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11287:8;11258:38;;11279:6;;;;;;;;;;;11258:38;;;;;;;;;;;;11316:8;11307:6;;:17;;;;;;;;;;;;;;;;;;11088:244:::0;:::o;17976:24::-;;;;:::o;8870:181::-;8928:7;8948:9;8964:1;8960;:5;;;;:::i;:::-;8948:17;;8989:1;8984;:6;;8976:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9042:1;9035:8;;;8870:181;;;;:::o;146:98::-;199:7;226:10;219:17;;146:98;:::o;8326:380::-;8479:1;8462:19;;:5;:19;;;;8454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8560:1;8541:21;;:7;:21;;;;8533:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8644:6;8614:11;:18;8626:5;8614:18;;;;;;;;;;;;;;;:27;8633:7;8614:27;;;;;;;;;;;;;;;:36;;;;8682:7;8666:32;;8675:5;8666:32;;;8691:6;8666:32;;;;;;:::i;:::-;;;;;;;;8326:380;;;:::o;25331:4131::-;25479:1;25463:18;;:4;:18;;;;25455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25556:1;25542:16;;:2;:16;;;;25534:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25618:9;:15;25628:4;25618:15;;;;;;;;;;;;;;;;;;;;;;;;;25617:16;25609:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;25751:1;25741:6;:11;25737:93;;;25769:28;25785:4;25791:2;25795:1;25769:15;:28::i;:::-;25812:7;;25737:93;25873:11;;25854:15;:30;25850:56;;;25902:4;25886:9;:13;25896:2;25886:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;25850:56;25931:14;;;;;;;;;;;25927:1838;;;25992:7;:5;:7::i;:::-;25984:15;;:4;:15;;;;:49;;;;;26026:7;:5;:7::i;:::-;26020:13;;:2;:13;;;;25984:49;:86;;;;;26068:1;26054:16;;:2;:16;;;;25984:86;:128;;;;;26105:6;26091:21;;:2;:21;;;;25984:128;:159;;;;;26134:9;;;;;;;;;;;26133:10;25984:159;25962:1792;;;26183:13;;;;;;;;;;;26178:150;;26229:19;:25;26249:4;26229:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26258:19;:23;26278:2;26258:23;;;;;;;;;;;;;;;;;;;;;;;;;26229:52;26221:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26178:150;26486:20;;;;;;;;;;;26482:423;;;26540:7;:5;:7::i;:::-;26534:13;;:2;:13;;;;:47;;;;;26565:15;26551:30;;:2;:30;;;;26534:47;:79;;;;;26599:13;26585:28;;:2;:28;;;;26534:79;26530:356;;;26691:12;26649:28;:39;26678:9;26649:39;;;;;;;;;;;;;;;;:54;26641:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26850:12;26808:28;:39;26837:9;26808:39;;;;;;;;;;;;;;;:54;;;;26530:356;26482:423;26975:25;:31;27001:4;26975:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27011:31;:35;27043:2;27011:35;;;;;;;;;;;;;;;;;;;;;;;;;27010:36;26975:71;26971:768;;;27089:20;;27079:6;:30;;27071:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27224:9;;27207:13;27217:2;27207:9;:13::i;:::-;27198:6;:22;;;;:::i;:::-;:35;;27190:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26971:768;;;27352:25;:29;27378:2;27352:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27386:31;:37;27418:4;27386:37;;;;;;;;;;;;;;;;;;;;;;;;;27385:38;27352:71;27348:391;;;27466:20;;27456:6;:30;;27448:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;27348:391;;;27593:31;:35;27625:2;27593:35;;;;;;;;;;;;;;;;;;;;;;;;;27588:151;;27686:9;;27669:13;27679:2;27669:9;:13::i;:::-;27660:6;:22;;;;:::i;:::-;:35;;27652:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27588:151;27348:391;26971:768;25962:1792;25927:1838;27779:28;27810:24;27828:4;27810:9;:24::i;:::-;27779:55;;27845:12;27884:18;;27860:20;:42;;27845:57;;27931:7;:34;;;;;27956:9;;;;;;;;;;;27955:10;27931:34;:83;;;;;27983:25;:31;28009:4;27983:31;;;;;;;;;;;;;;;;;;;;;;;;;27982:32;27931:83;:126;;;;;28032:19;:25;28052:4;28032:25;;;;;;;;;;;;;;;;;;;;;;;;;28031:26;27931:126;:167;;;;;28075:19;:23;28095:2;28075:23;;;;;;;;;;;;;;;;;;;;;;;;;28074:24;27931:167;27913:297;;;28137:4;28125:9;;:16;;;;;;;;;;;;;;;;;;28156:10;:8;:10::i;:::-;28193:5;28181:9;;:17;;;;;;;;;;;;;;;;;;27913:297;28222:12;28238:9;;;;;;;;;;;28237:10;28222:25;;28349:19;:25;28369:4;28349:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28378:19;:23;28398:2;28378:23;;;;;;;;;;;;;;;;;;;;;;;;;28349:52;28345:100;;;28428:5;28418:15;;28345:100;28465:12;28570:7;28566:843;;;28622:25;:29;28648:2;28622:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28671:1;28655:13;;:17;28622:50;28618:624;;;28700:34;28730:3;28700:25;28711:13;;28700:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28693:41;;28803:13;;28783:17;;28776:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;28753:19;;:63;;;;;;;:::i;:::-;;;;;;;;28885:13;;28865:17;;28858:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;28835:19;;:63;;;;;;;:::i;:::-;;;;;;;;28618:624;;;28960:25;:31;28986:4;28960:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29010:1;28995:12;;:16;28960:51;28956:286;;;29036:33;29065:3;29036:24;29047:12;;29036:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29029:40;;29134:12;;29115:16;;29108:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;29085:19;;:61;;;;;;;:::i;:::-;;;;;;;;29214:12;;29195:16;;29188:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;29165:19;;:61;;;;;;;:::i;:::-;;;;;;;;28956:286;28618:624;29281:1;29274:4;:8;29270:91;;;29303:42;29319:4;29333;29340;29303:15;:42::i;:::-;29270:91;29393:4;29383:14;;;;;:::i;:::-;;;28566:843;29421:33;29437:4;29443:2;29447:6;29421:15;:33::i;:::-;25444:4018;;;;25331:4131;;;;:::o;9203:192::-;9289:7;9322:1;9317;:6;;9325:12;9309:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9349:9;9365:1;9361;:5;;;;:::i;:::-;9349:17;;9386:1;9379:8;;;9203:192;;;;;:::o;24219:188::-;24336:5;24302:25;:31;24328:4;24302:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24393:5;24359:40;;24387:4;24359:40;;;;;;;;;;;;24219:188;;:::o;6933:573::-;7091:1;7073:20;;:6;:20;;;;7065:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7175:1;7154:23;;:9;:23;;;;7146:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7230:47;7251:6;7259:9;7270:6;7230:20;:47::i;:::-;7310:71;7332:6;7310:71;;;;;;;;;;;;;;;;;:9;:17;7320:6;7310:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7290:9;:17;7300:6;7290:17;;;;;;;;;;;;;;;:91;;;;7415:32;7440:6;7415:9;:20;7425:9;7415:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7392:9;:20;7402:9;7392:20;;;;;;;;;;;;;;;:55;;;;7480:9;7463:35;;7472:6;7463:35;;;7491:6;7463:35;;;;;;:::i;:::-;;;;;;;;6933:573;;;:::o;30594:1299::-;30633:23;30659:24;30677:4;30659:9;:24::i;:::-;30633:50;;30694:25;30744:19;;30722;;:41;;;;:::i;:::-;30694:69;;30807:1;30788:15;:20;:46;;;;30833:1;30812:17;:22;30788:46;30784:59;;;30836:7;;;;30784:59;30896:2;30875:18;;:23;;;;:::i;:::-;30857:15;:41;30853:113;;;30952:2;30931:18;;:23;;;;:::i;:::-;30913:41;;30853:113;31035:23;31121:1;31101:17;31079:19;;31061:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;31035:87;;31133:26;31162:36;31182:15;31162;:19;;:36;;;;:::i;:::-;31133:65;;31219:25;31247:21;31219:49;;31281:37;31299:18;31281:17;:37::i;:::-;31340:18;31361:44;31387:17;31361:21;:25;;:44;;;;:::i;:::-;31340:65;;31416:23;31442:58;31482:17;31442:35;31457:19;;31442:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;31416:84;;31511:23;31550:15;31537:10;:28;;;;:::i;:::-;31511:54;;31608:1;31586:19;:23;;;;31642:1;31620:19;:23;;;;31694:1;31676:15;:19;:42;;;;;31717:1;31699:15;:19;31676:42;31672:214;;;31735:47;31749:15;31766;31735:13;:47::i;:::-;31802:72;31817:18;31837:15;31854:19;;31802:72;;;;;;;;:::i;:::-;;;;;;;;31672:214;30622:1271;;;;;;;;30594:1299;:::o;9403:250::-;9461:7;9490:1;9485;:6;9481:47;;;9515:1;9508:8;;;;9481:47;9540:9;9556:1;9552;:5;;;;:::i;:::-;9540:17;;9585:1;9580;9576;:5;;;;:::i;:::-;:10;9568:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9644:1;9637:8;;;9403:250;;;;;:::o;9661:132::-;9719:7;9746:39;9750:1;9753;9746:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9739:46;;9661:132;;;;:::o;8714:125::-;;;;:::o;9059:136::-;9117:7;9144:43;9148:1;9151;9144:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9137:50;;9059:136;;;;:::o;29470:590::-;29597:21;29635:1;29621:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29597:40;;29666:4;29648;29653:1;29648:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29692:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29682:4;29687:1;29682:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29727:62;29744:4;29759:15;29777:11;29727:8;:62::i;:::-;29828:15;:66;;;29909:11;29935:1;29979:4;30006;30026:15;29828:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29526:534;29470:590;:::o;30072:514::-;30221:62;30238:4;30253:15;30271:11;30221:8;:62::i;:::-;30326:15;:31;;;30365:9;30398:4;30418:11;30444:1;30487;30530:7;:5;:7::i;:::-;30552:15;30326:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30072:514;;:::o;9801:278::-;9887:7;9919:1;9915;:5;9922:12;9907:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9946:9;9962:1;9958;:5;;;;:::i;:::-;9946:17;;10070:1;10063:8;;;9801:278;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:329::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:86::-;6634:7;6674:4;6667:5;6663:16;6652:27;;6599:86;;;:::o;6691:112::-;6774:22;6790:5;6774:22;:::i;:::-;6769:3;6762:35;6691:112;;:::o;6809:214::-;6898:4;6936:2;6925:9;6921:18;6913:26;;6949:67;7013:1;7002:9;6998:17;6989:6;6949:67;:::i;:::-;6809:214;;;;:::o;7029:118::-;7116:24;7134:5;7116:24;:::i;:::-;7111:3;7104:37;7029:118;;:::o;7153:222::-;7246:4;7284:2;7273:9;7269:18;7261:26;;7297:71;7365:1;7354:9;7350:17;7341:6;7297:71;:::i;:::-;7153:222;;;;:::o;7381:117::-;7490:1;7487;7480:12;7504:180;7552:77;7549:1;7542:88;7649:4;7646:1;7639:15;7673:4;7670:1;7663:15;7690:281;7773:27;7795:4;7773:27;:::i;:::-;7765:6;7761:40;7903:6;7891:10;7888:22;7867:18;7855:10;7852:34;7849:62;7846:88;;;7914:18;;:::i;:::-;7846:88;7954:10;7950:2;7943:22;7733:238;7690:281;;:::o;7977:129::-;8011:6;8038:20;;:::i;:::-;8028:30;;8067:33;8095:4;8087:6;8067:33;:::i;:::-;7977:129;;;:::o;8112:311::-;8189:4;8279:18;8271:6;8268:30;8265:56;;;8301:18;;:::i;:::-;8265:56;8351:4;8343:6;8339:17;8331:25;;8411:4;8405;8401:15;8393:23;;8112:311;;;:::o;8429:117::-;8538:1;8535;8528:12;8569:710;8665:5;8690:81;8706:64;8763:6;8706:64;:::i;:::-;8690:81;:::i;:::-;8681:90;;8791:5;8820:6;8813:5;8806:21;8854:4;8847:5;8843:16;8836:23;;8907:4;8899:6;8895:17;8887:6;8883:30;8936:3;8928:6;8925:15;8922:122;;;8955:79;;:::i;:::-;8922:122;9070:6;9053:220;9087:6;9082:3;9079:15;9053:220;;;9162:3;9191:37;9224:3;9212:10;9191:37;:::i;:::-;9186:3;9179:50;9258:4;9253:3;9249:14;9242:21;;9129:144;9113:4;9108:3;9104:14;9097:21;;9053:220;;;9057:21;8671:608;;8569:710;;;;;:::o;9302:370::-;9373:5;9422:3;9415:4;9407:6;9403:17;9399:27;9389:122;;9430:79;;:::i;:::-;9389:122;9547:6;9534:20;9572:94;9662:3;9654:6;9647:4;9639:6;9635:17;9572:94;:::i;:::-;9563:103;;9379:293;9302:370;;;;:::o;9678:539::-;9762:6;9811:2;9799:9;9790:7;9786:23;9782:32;9779:119;;;9817:79;;:::i;:::-;9779:119;9965:1;9954:9;9950:17;9937:31;9995:18;9987:6;9984:30;9981:117;;;10017:79;;:::i;:::-;9981:117;10122:78;10192:7;10183:6;10172:9;10168:22;10122:78;:::i;:::-;10112:88;;9908:302;9678:539;;;;:::o;10223:116::-;10293:21;10308:5;10293:21;:::i;:::-;10286:5;10283:32;10273:60;;10329:1;10326;10319:12;10273:60;10223:116;:::o;10345:133::-;10388:5;10426:6;10413:20;10404:29;;10442:30;10466:5;10442:30;:::i;:::-;10345:133;;;;:::o;10484:468::-;10549:6;10557;10606:2;10594:9;10585:7;10581:23;10577:32;10574:119;;;10612:79;;:::i;:::-;10574:119;10732:1;10757:53;10802:7;10793:6;10782:9;10778:22;10757:53;:::i;:::-;10747:63;;10703:117;10859:2;10885:50;10927:7;10918:6;10907:9;10903:22;10885:50;:::i;:::-;10875:60;;10830:115;10484:468;;;;;:::o;10958:474::-;11026:6;11034;11083:2;11071:9;11062:7;11058:23;11054:32;11051:119;;;11089:79;;:::i;:::-;11051:119;11209:1;11234:53;11279:7;11270:6;11259:9;11255:22;11234:53;:::i;:::-;11224:63;;11180:117;11336:2;11362:53;11407:7;11398:6;11387:9;11383:22;11362:53;:::i;:::-;11352:63;;11307:118;10958:474;;;;;:::o;11438:182::-;11578:34;11574:1;11566:6;11562:14;11555:58;11438:182;:::o;11626:366::-;11768:3;11789:67;11853:2;11848:3;11789:67;:::i;:::-;11782:74;;11865:93;11954:3;11865:93;:::i;:::-;11983:2;11978:3;11974:12;11967:19;;11626:366;;;:::o;11998:419::-;12164:4;12202:2;12191:9;12187:18;12179:26;;12251:9;12245:4;12241:20;12237:1;12226:9;12222:17;12215:47;12279:131;12405:4;12279:131;:::i;:::-;12271:139;;11998:419;;;:::o;12423:180::-;12471:77;12468:1;12461:88;12568:4;12565:1;12558:15;12592:4;12589:1;12582:15;12609:305;12649:3;12668:20;12686:1;12668:20;:::i;:::-;12663:25;;12702:20;12720:1;12702:20;:::i;:::-;12697:25;;12856:1;12788:66;12784:74;12781:1;12778:81;12775:107;;;12862:18;;:::i;:::-;12775:107;12906:1;12903;12899:9;12892:16;;12609:305;;;;:::o;12920:179::-;13060:31;13056:1;13048:6;13044:14;13037:55;12920:179;:::o;13105:366::-;13247:3;13268:67;13332:2;13327:3;13268:67;:::i;:::-;13261:74;;13344:93;13433:3;13344:93;:::i;:::-;13462:2;13457:3;13453:12;13446:19;;13105:366;;;:::o;13477:419::-;13643:4;13681:2;13670:9;13666:18;13658:26;;13730:9;13724:4;13720:20;13716:1;13705:9;13701:17;13694:47;13758:131;13884:4;13758:131;:::i;:::-;13750:139;;13477:419;;;:::o;13902:180::-;13950:77;13947:1;13940:88;14047:4;14044:1;14037:15;14071:4;14068:1;14061:15;14088:320;14132:6;14169:1;14163:4;14159:12;14149:22;;14216:1;14210:4;14206:12;14237:18;14227:81;;14293:4;14285:6;14281:17;14271:27;;14227:81;14355:2;14347:6;14344:14;14324:18;14321:38;14318:84;;;14374:18;;:::i;:::-;14318:84;14139:269;14088:320;;;:::o;14414:348::-;14454:7;14477:20;14495:1;14477:20;:::i;:::-;14472:25;;14511:20;14529:1;14511:20;:::i;:::-;14506:25;;14699:1;14631:66;14627:74;14624:1;14621:81;14616:1;14609:9;14602:17;14598:105;14595:131;;;14706:18;;:::i;:::-;14595:131;14754:1;14751;14747:9;14736:20;;14414:348;;;;:::o;14768:180::-;14816:77;14813:1;14806:88;14913:4;14910:1;14903:15;14937:4;14934:1;14927:15;14954:185;14994:1;15011:20;15029:1;15011:20;:::i;:::-;15006:25;;15045:20;15063:1;15045:20;:::i;:::-;15040:25;;15084:1;15074:35;;15089:18;;:::i;:::-;15074:35;15131:1;15128;15124:9;15119:14;;14954:185;;;;:::o;15145:234::-;15285:34;15281:1;15273:6;15269:14;15262:58;15354:17;15349:2;15341:6;15337:15;15330:42;15145:234;:::o;15385:366::-;15527:3;15548:67;15612:2;15607:3;15548:67;:::i;:::-;15541:74;;15624:93;15713:3;15624:93;:::i;:::-;15742:2;15737:3;15733:12;15726:19;;15385:366;;;:::o;15757:419::-;15923:4;15961:2;15950:9;15946:18;15938:26;;16010:9;16004:4;16000:20;15996:1;15985:9;15981:17;15974:47;16038:131;16164:4;16038:131;:::i;:::-;16030:139;;15757:419;;;:::o;16182:180::-;16230:77;16227:1;16220:88;16327:4;16324:1;16317:15;16351:4;16348:1;16341:15;16368:233;16407:3;16430:24;16448:5;16430:24;:::i;:::-;16421:33;;16476:66;16469:5;16466:77;16463:103;;;16546:18;;:::i;:::-;16463:103;16593:1;16586:5;16582:13;16575:20;;16368:233;;;:::o;16607:179::-;16747:31;16743:1;16735:6;16731:14;16724:55;16607:179;:::o;16792:366::-;16934:3;16955:67;17019:2;17014:3;16955:67;:::i;:::-;16948:74;;17031:93;17120:3;17031:93;:::i;:::-;17149:2;17144:3;17140:12;17133:19;;16792:366;;;:::o;17164:419::-;17330:4;17368:2;17357:9;17353:18;17345:26;;17417:9;17411:4;17407:20;17403:1;17392:9;17388:17;17381:47;17445:131;17571:4;17445:131;:::i;:::-;17437:139;;17164:419;;;:::o;17589:244::-;17729:34;17725:1;17717:6;17713:14;17706:58;17798:27;17793:2;17785:6;17781:15;17774:52;17589:244;:::o;17839:366::-;17981:3;18002:67;18066:2;18061:3;18002:67;:::i;:::-;17995:74;;18078:93;18167:3;18078:93;:::i;:::-;18196:2;18191:3;18187:12;18180:19;;17839:366;;;:::o;18211:419::-;18377:4;18415:2;18404:9;18400:18;18392:26;;18464:9;18458:4;18454:20;18450:1;18439:9;18435:17;18428:47;18492:131;18618:4;18492:131;:::i;:::-;18484:139;;18211:419;;;:::o;18636:223::-;18776:34;18772:1;18764:6;18760:14;18753:58;18845:6;18840:2;18832:6;18828:15;18821:31;18636:223;:::o;18865:366::-;19007:3;19028:67;19092:2;19087:3;19028:67;:::i;:::-;19021:74;;19104:93;19193:3;19104:93;:::i;:::-;19222:2;19217:3;19213:12;19206:19;;18865:366;;;:::o;19237:419::-;19403:4;19441:2;19430:9;19426:18;19418:26;;19490:9;19484:4;19480:20;19476:1;19465:9;19461:17;19454:47;19518:131;19644:4;19518:131;:::i;:::-;19510:139;;19237:419;;;:::o;19662:240::-;19802:34;19798:1;19790:6;19786:14;19779:58;19871:23;19866:2;19858:6;19854:15;19847:48;19662:240;:::o;19908:366::-;20050:3;20071:67;20135:2;20130:3;20071:67;:::i;:::-;20064:74;;20147:93;20236:3;20147:93;:::i;:::-;20265:2;20260:3;20256:12;20249:19;;19908:366;;;:::o;20280:419::-;20446:4;20484:2;20473:9;20469:18;20461:26;;20533:9;20527:4;20523:20;20519:1;20508:9;20504:17;20497:47;20561:131;20687:4;20561:131;:::i;:::-;20553:139;;20280:419;;;:::o;20705:239::-;20845:34;20841:1;20833:6;20829:14;20822:58;20914:22;20909:2;20901:6;20897:15;20890:47;20705:239;:::o;20950:366::-;21092:3;21113:67;21177:2;21172:3;21113:67;:::i;:::-;21106:74;;21189:93;21278:3;21189:93;:::i;:::-;21307:2;21302:3;21298:12;21291:19;;20950:366;;;:::o;21322:419::-;21488:4;21526:2;21515:9;21511:18;21503:26;;21575:9;21569:4;21565:20;21561:1;21550:9;21546:17;21539:47;21603:131;21729:4;21603:131;:::i;:::-;21595:139;;21322:419;;;:::o;21747:225::-;21887:34;21883:1;21875:6;21871:14;21864:58;21956:8;21951:2;21943:6;21939:15;21932:33;21747:225;:::o;21978:366::-;22120:3;22141:67;22205:2;22200:3;22141:67;:::i;:::-;22134:74;;22217:93;22306:3;22217:93;:::i;:::-;22335:2;22330:3;22326:12;22319:19;;21978:366;;;:::o;22350:419::-;22516:4;22554:2;22543:9;22539:18;22531:26;;22603:9;22597:4;22593:20;22589:1;22578:9;22574:17;22567:47;22631:131;22757:4;22631:131;:::i;:::-;22623:139;;22350:419;;;:::o;22775:177::-;22915:29;22911:1;22903:6;22899:14;22892:53;22775:177;:::o;22958:366::-;23100:3;23121:67;23185:2;23180:3;23121:67;:::i;:::-;23114:74;;23197:93;23286:3;23197:93;:::i;:::-;23315:2;23310:3;23306:12;23299:19;;22958:366;;;:::o;23330:419::-;23496:4;23534:2;23523:9;23519:18;23511:26;;23583:9;23577:4;23573:20;23569:1;23558:9;23554:17;23547:47;23611:131;23737:4;23611:131;:::i;:::-;23603:139;;23330:419;;;:::o;23755:223::-;23895:34;23891:1;23883:6;23879:14;23872:58;23964:6;23959:2;23951:6;23947:15;23940:31;23755:223;:::o;23984:366::-;24126:3;24147:67;24211:2;24206:3;24147:67;:::i;:::-;24140:74;;24223:93;24312:3;24223:93;:::i;:::-;24341:2;24336:3;24332:12;24325:19;;23984:366;;;:::o;24356:419::-;24522:4;24560:2;24549:9;24545:18;24537:26;;24609:9;24603:4;24599:20;24595:1;24584:9;24580:17;24573:47;24637:131;24763:4;24637:131;:::i;:::-;24629:139;;24356:419;;;:::o;24781:221::-;24921:34;24917:1;24909:6;24905:14;24898:58;24990:4;24985:2;24977:6;24973:15;24966:29;24781:221;:::o;25008:366::-;25150:3;25171:67;25235:2;25230:3;25171:67;:::i;:::-;25164:74;;25247:93;25336:3;25247:93;:::i;:::-;25365:2;25360:3;25356:12;25349:19;;25008:366;;;:::o;25380:419::-;25546:4;25584:2;25573:9;25569:18;25561:26;;25633:9;25627:4;25623:20;25619:1;25608:9;25604:17;25597:47;25661:131;25787:4;25661:131;:::i;:::-;25653:139;;25380:419;;;:::o;25805:224::-;25945:34;25941:1;25933:6;25929:14;25922:58;26014:7;26009:2;26001:6;25997:15;25990:32;25805:224;:::o;26035:366::-;26177:3;26198:67;26262:2;26257:3;26198:67;:::i;:::-;26191:74;;26274:93;26363:3;26274:93;:::i;:::-;26392:2;26387:3;26383:12;26376:19;;26035:366;;;:::o;26407:419::-;26573:4;26611:2;26600:9;26596:18;26588:26;;26660:9;26654:4;26650:20;26646:1;26635:9;26631:17;26624:47;26688:131;26814:4;26688:131;:::i;:::-;26680:139;;26407:419;;;:::o;26832:222::-;26972:34;26968:1;26960:6;26956:14;26949:58;27041:5;27036:2;27028:6;27024:15;27017:30;26832:222;:::o;27060:366::-;27202:3;27223:67;27287:2;27282:3;27223:67;:::i;:::-;27216:74;;27299:93;27388:3;27299:93;:::i;:::-;27417:2;27412:3;27408:12;27401:19;;27060:366;;;:::o;27432:419::-;27598:4;27636:2;27625:9;27621:18;27613:26;;27685:9;27679:4;27675:20;27671:1;27660:9;27656:17;27649:47;27713:131;27839:4;27713:131;:::i;:::-;27705:139;;27432:419;;;:::o;27857:301::-;27997:34;27993:1;27985:6;27981:14;27974:58;28066:34;28061:2;28053:6;28049:15;28042:59;28135:15;28130:2;28122:6;28118:15;28111:40;27857:301;:::o;28164:366::-;28306:3;28327:67;28391:2;28386:3;28327:67;:::i;:::-;28320:74;;28403:93;28492:3;28403:93;:::i;:::-;28521:2;28516:3;28512:12;28505:19;;28164:366;;;:::o;28536:419::-;28702:4;28740:2;28729:9;28725:18;28717:26;;28789:9;28783:4;28779:20;28775:1;28764:9;28760:17;28753:47;28817:131;28943:4;28817:131;:::i;:::-;28809:139;;28536:419;;;:::o;28961:172::-;29101:24;29097:1;29089:6;29085:14;29078:48;28961:172;:::o;29139:366::-;29281:3;29302:67;29366:2;29361:3;29302:67;:::i;:::-;29295:74;;29378:93;29467:3;29378:93;:::i;:::-;29496:2;29491:3;29487:12;29480:19;;29139:366;;;:::o;29511:419::-;29677:4;29715:2;29704:9;29700:18;29692:26;;29764:9;29758:4;29754:20;29750:1;29739:9;29735:17;29728:47;29792:131;29918:4;29792:131;:::i;:::-;29784:139;;29511:419;;;:::o;29936:297::-;30076:34;30072:1;30064:6;30060:14;30053:58;30145:34;30140:2;30132:6;30128:15;30121:59;30214:11;30209:2;30201:6;30197:15;30190:36;29936:297;:::o;30239:366::-;30381:3;30402:67;30466:2;30461:3;30402:67;:::i;:::-;30395:74;;30478:93;30567:3;30478:93;:::i;:::-;30596:2;30591:3;30587:12;30580:19;;30239:366;;;:::o;30611:419::-;30777:4;30815:2;30804:9;30800:18;30792:26;;30864:9;30858:4;30854:20;30850:1;30839:9;30835:17;30828:47;30892:131;31018:4;30892:131;:::i;:::-;30884:139;;30611:419;;;:::o;31036:240::-;31176:34;31172:1;31164:6;31160:14;31153:58;31245:23;31240:2;31232:6;31228:15;31221:48;31036:240;:::o;31282:366::-;31424:3;31445:67;31509:2;31504:3;31445:67;:::i;:::-;31438:74;;31521:93;31610:3;31521:93;:::i;:::-;31639:2;31634:3;31630:12;31623:19;;31282:366;;;:::o;31654:419::-;31820:4;31858:2;31847:9;31843:18;31835:26;;31907:9;31901:4;31897:20;31893:1;31882:9;31878:17;31871:47;31935:131;32061:4;31935:131;:::i;:::-;31927:139;;31654:419;;;:::o;32079:169::-;32219:21;32215:1;32207:6;32203:14;32196:45;32079:169;:::o;32254:366::-;32396:3;32417:67;32481:2;32476:3;32417:67;:::i;:::-;32410:74;;32493:93;32582:3;32493:93;:::i;:::-;32611:2;32606:3;32602:12;32595:19;;32254:366;;;:::o;32626:419::-;32792:4;32830:2;32819:9;32815:18;32807:26;;32879:9;32873:4;32869:20;32865:1;32854:9;32850:17;32843:47;32907:131;33033:4;32907:131;:::i;:::-;32899:139;;32626:419;;;:::o;33051:241::-;33191:34;33187:1;33179:6;33175:14;33168:58;33260:24;33255:2;33247:6;33243:15;33236:49;33051:241;:::o;33298:366::-;33440:3;33461:67;33525:2;33520:3;33461:67;:::i;:::-;33454:74;;33537:93;33626:3;33537:93;:::i;:::-;33655:2;33650:3;33646:12;33639:19;;33298:366;;;:::o;33670:419::-;33836:4;33874:2;33863:9;33859:18;33851:26;;33923:9;33917:4;33913:20;33909:1;33898:9;33894:17;33887:47;33951:131;34077:4;33951:131;:::i;:::-;33943:139;;33670:419;;;:::o;34095:191::-;34135:4;34155:20;34173:1;34155:20;:::i;:::-;34150:25;;34189:20;34207:1;34189:20;:::i;:::-;34184:25;;34228:1;34225;34222:8;34219:34;;;34233:18;;:::i;:::-;34219:34;34278:1;34275;34271:9;34263:17;;34095:191;;;;:::o;34292:442::-;34441:4;34479:2;34468:9;34464:18;34456:26;;34492:71;34560:1;34549:9;34545:17;34536:6;34492:71;:::i;:::-;34573:72;34641:2;34630:9;34626:18;34617:6;34573:72;:::i;:::-;34655;34723:2;34712:9;34708:18;34699:6;34655:72;:::i;:::-;34292:442;;;;;;:::o;34740:220::-;34880:34;34876:1;34868:6;34864:14;34857:58;34949:3;34944:2;34936:6;34932:15;34925:28;34740:220;:::o;34966:366::-;35108:3;35129:67;35193:2;35188:3;35129:67;:::i;:::-;35122:74;;35205:93;35294:3;35205:93;:::i;:::-;35323:2;35318:3;35314:12;35307:19;;34966:366;;;:::o;35338:419::-;35504:4;35542:2;35531:9;35527:18;35519:26;;35591:9;35585:4;35581:20;35577:1;35566:9;35562:17;35555:47;35619:131;35745:4;35619:131;:::i;:::-;35611:139;;35338:419;;;:::o;35763:143::-;35820:5;35851:6;35845:13;35836:22;;35867:33;35894:5;35867:33;:::i;:::-;35763:143;;;;:::o;35912:351::-;35982:6;36031:2;36019:9;36010:7;36006:23;36002:32;35999:119;;;36037:79;;:::i;:::-;35999:119;36157:1;36182:64;36238:7;36229:6;36218:9;36214:22;36182:64;:::i;:::-;36172:74;;36128:128;35912:351;;;;:::o;36269:85::-;36314:7;36343:5;36332:16;;36269:85;;;:::o;36360:158::-;36418:9;36451:61;36469:42;36478:32;36504:5;36478:32;:::i;:::-;36469:42;:::i;:::-;36451:61;:::i;:::-;36438:74;;36360:158;;;:::o;36524:147::-;36619:45;36658:5;36619:45;:::i;:::-;36614:3;36607:58;36524:147;;:::o;36677:114::-;36744:6;36778:5;36772:12;36762:22;;36677:114;;;:::o;36797:184::-;36896:11;36930:6;36925:3;36918:19;36970:4;36965:3;36961:14;36946:29;;36797:184;;;;:::o;36987:132::-;37054:4;37077:3;37069:11;;37107:4;37102:3;37098:14;37090:22;;36987:132;;;:::o;37125:108::-;37202:24;37220:5;37202:24;:::i;:::-;37197:3;37190:37;37125:108;;:::o;37239:179::-;37308:10;37329:46;37371:3;37363:6;37329:46;:::i;:::-;37407:4;37402:3;37398:14;37384:28;;37239:179;;;;:::o;37424:113::-;37494:4;37526;37521:3;37517:14;37509:22;;37424:113;;;:::o;37573:732::-;37692:3;37721:54;37769:5;37721:54;:::i;:::-;37791:86;37870:6;37865:3;37791:86;:::i;:::-;37784:93;;37901:56;37951:5;37901:56;:::i;:::-;37980:7;38011:1;37996:284;38021:6;38018:1;38015:13;37996:284;;;38097:6;38091:13;38124:63;38183:3;38168:13;38124:63;:::i;:::-;38117:70;;38210:60;38263:6;38210:60;:::i;:::-;38200:70;;38056:224;38043:1;38040;38036:9;38031:14;;37996:284;;;38000:14;38296:3;38289:10;;37697:608;;;37573:732;;;;:::o;38311:831::-;38574:4;38612:3;38601:9;38597:19;38589:27;;38626:71;38694:1;38683:9;38679:17;38670:6;38626:71;:::i;:::-;38707:80;38783:2;38772:9;38768:18;38759:6;38707:80;:::i;:::-;38834:9;38828:4;38824:20;38819:2;38808:9;38804:18;38797:48;38862:108;38965:4;38956:6;38862:108;:::i;:::-;38854:116;;38980:72;39048:2;39037:9;39033:18;39024:6;38980:72;:::i;:::-;39062:73;39130:3;39119:9;39115:19;39106:6;39062:73;:::i;:::-;38311:831;;;;;;;;:::o;39148:807::-;39397:4;39435:3;39424:9;39420:19;39412:27;;39449:71;39517:1;39506:9;39502:17;39493:6;39449:71;:::i;:::-;39530:72;39598:2;39587:9;39583:18;39574:6;39530:72;:::i;:::-;39612:80;39688:2;39677:9;39673:18;39664:6;39612:80;:::i;:::-;39702;39778:2;39767:9;39763:18;39754:6;39702:80;:::i;:::-;39792:73;39860:3;39849:9;39845:19;39836:6;39792:73;:::i;:::-;39875;39943:3;39932:9;39928:19;39919:6;39875:73;:::i;:::-;39148:807;;;;;;;;;:::o;39961:143::-;40018:5;40049:6;40043:13;40034:22;;40065:33;40092:5;40065:33;:::i;:::-;39961:143;;;;:::o;40110:663::-;40198:6;40206;40214;40263:2;40251:9;40242:7;40238:23;40234:32;40231:119;;;40269:79;;:::i;:::-;40231:119;40389:1;40414:64;40470:7;40461:6;40450:9;40446:22;40414:64;:::i;:::-;40404:74;;40360:128;40527:2;40553:64;40609:7;40600:6;40589:9;40585:22;40553:64;:::i;:::-;40543:74;;40498:129;40666:2;40692:64;40748:7;40739:6;40728:9;40724:22;40692:64;:::i;:::-;40682:74;;40637:129;40110:663;;;;;:::o

Swarm Source

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