ETH Price: $2,977.63 (+0.23%)
Gas: 8 Gwei

Token

Cujo Inu (CUJO)
 

Overview

Max Total Supply

1,000,000,000,000,000,000 CUJO

Holders

891 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
16,360,636,000,000.920148313 CUJO

Value
$0.00
0xbb75d960bfe9f57b15bb459130a5dd7a08ef8a03
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

CUJO - CujoSwap is the next generation of DeFi Social Experiments v2.0, Staking, Swapping, and Locking.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CUJOINU

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 2021-12-28
*/

// 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 CUJOINU 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 = false;
    
    // 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 private _buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 private _sellMarketingFee;
    uint256 private _sellLiquidityFee;
    uint256 private _sellDevFee;
    
    uint256 private _tokensForMarketing;
    uint256 private _tokensForLiquidity;
    uint256 private _tokensForDev;
    
    /******************/

    // exlcude 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("Cujo Inu", "CUJO") {
        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 = 3;
        uint256 buyLiquidityFee = 3;
        uint256 buyDevFee = 2;

        uint256 sellMarketingFee = 3;
        uint256 sellLiquidityFee = 4;
        uint256 sellDevFee = 2;
        
        uint256 totalSupply = 1e18 * 1e9;
        
        maxTransactionAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 3 / 100; // 3% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        _buyMarketingFee = buyMarketingFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyDevFee = buyDevFee;
        buyTotalFees = _buyMarketingFee + _buyLiquidityFee + _buyDevFee;
        
        _sellMarketingFee = sellMarketingFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellDevFee = sellDevFee;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee + _sellDevFee;
        
        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, uint256 devFee) external onlyOwner {
        _buyMarketingFee = marketingFee;
        _buyLiquidityFee = liquidityFee;
        _buyDevFee = devFee;
        buyTotalFees = _buyMarketingFee + _buyLiquidityFee + _buyDevFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }
    
    function updateSellFees(uint256 marketingFee, uint256 liquidityFee, uint256 devFee) external onlyOwner {
        _sellMarketingFee = marketingFee;
        _sellLiquidityFee = liquidityFee;
        _sellDevFee = devFee;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee + _sellDevFee;
        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;
                _tokensForDev += fees * _sellDevFee / sellTotalFees;
                _tokensForMarketing += fees * _sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    _tokensForLiquidity += fees * _buyLiquidityFee / buyTotalFees;
                _tokensForDev += fees * _buyDevFee / 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 + _tokensForDev;
        
        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 ethForDev = ethBalance.mul(_tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDev = 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"},{"internalType":"uint256","name":"devFee","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"},{"internalType":"uint256","name":"devFee","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"}]

60c06040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600881526020017f43756a6f20496e750000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43554a4f000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000b25565b5080600490805190602001906200010092919062000b25565b505050600062000115620005f160201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001e0816001620005f960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000260573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000286919062000c3f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000314919062000c3f565b6040518363ffffffff1660e01b81526004016200033392919062000c82565b6020604051808303816000875af115801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000c3f565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003c160a0516001620005f960201b60201c565b620003d660a0516001620006f660201b60201c565b60006003905060006003905060006002905060006003905060006004905060006002905060006b033b2e3c9fd0803ce8000000905060646001826200041c919062000ce8565b62000428919062000d78565b600a8190555060646003826200043f919062000ce8565b6200044b919062000d78565b600c8190555061271060058262000463919062000ce8565b6200046f919062000d78565b600b819055508660118190555085601281905550846013819055506013546012546011546200049f919062000db0565b620004ab919062000db0565b601081905550836015819055508260168190555081601781905550601754601654601554620004db919062000db0565b620004e7919062000db0565b601481905550620004fd6200079760201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200055f620005516200079760201b60201c565b6001620007c160201b60201c565b62000572306001620007c160201b60201c565b6200058761dead6001620007c160201b60201c565b620005a96200059b6200079760201b60201c565b6001620005f960201b60201c565b620005bc306001620005f960201b60201c565b620005d161dead6001620005f960201b60201c565b620005e333826200090e60201b60201c565b505050505050505062001041565b600033905090565b62000609620005f160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200069b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006929062000e6e565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007d1620005f160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085a9062000e6e565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000902919062000ead565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009789062000f1a565b60405180910390fd5b620009956000838362000abd60201b60201c565b620009b18160025462000ac260201b620024711790919060201c565b60028190555062000a0f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ac260201b620024711790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ab1919062000f4d565b60405180910390a35050565b505050565b600080828462000ad3919062000db0565b90508381101562000b1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b129062000fba565b60405180910390fd5b8091505092915050565b82805462000b33906200100b565b90600052602060002090601f01602090048101928262000b57576000855562000ba3565b82601f1062000b7257805160ff191683800117855562000ba3565b8280016001018555821562000ba3579182015b8281111562000ba257825182559160200191906001019062000b85565b5b50905062000bb2919062000bb6565b5090565b5b8082111562000bd157600081600090555060010162000bb7565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c078262000bda565b9050919050565b62000c198162000bfa565b811462000c2557600080fd5b50565b60008151905062000c398162000c0e565b92915050565b60006020828403121562000c585762000c5762000bd5565b5b600062000c688482850162000c28565b91505092915050565b62000c7c8162000bfa565b82525050565b600060408201905062000c99600083018562000c71565b62000ca8602083018462000c71565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cf58262000caf565b915062000d028362000caf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d3e5762000d3d62000cb9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d858262000caf565b915062000d928362000caf565b92508262000da55762000da462000d49565b5b828204905092915050565b600062000dbd8262000caf565b915062000dca8362000caf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e025762000e0162000cb9565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e5660208362000e0d565b915062000e638262000e1e565b602082019050919050565b6000602082019050818103600083015262000e898162000e47565b9050919050565b60008115159050919050565b62000ea78162000e90565b82525050565b600060208201905062000ec4600083018462000e9c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f02601f8362000e0d565b915062000f0f8262000eca565b602082019050919050565b6000602082019050818103600083015262000f358162000ef3565b9050919050565b62000f478162000caf565b82525050565b600060208201905062000f64600083018462000f3c565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000fa2601b8362000e0d565b915062000faf8262000f6a565b602082019050919050565b6000602082019050818103600083015262000fd58162000f93565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200102457607f821691505b602082108114156200103b576200103a62000fdc565b5b50919050565b60805160a051615512620010ad60003960008181610ed90152818161100901528181611a720152612b4a015260008181610b890152818161107a01528181612af201528181613b2901528181613c0a01528181613c3101528181613ccd0152613cf401526155126000f3fe60806040526004361061026b5760003560e01c8063892ba40811610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b8063a457c2d711610108578063a457c2d714610734578063a9059cbb14610771578063b62496f5146107ae578063bbc0c742146107eb578063c024666814610816578063c17b5b8c1461083f57610272565b8063892ba408146106755780638a8c523c1461069e5780638da5cb5b146106b557806395d89b41146106e05780639a7a23d61461070b57610272565b806349bd5a5e116101dd5780636a486a8e116101a15780636a486a8e1461057957806370a08231146105a4578063715018a6146105e1578063751039fc146105f85780637571336a146106235780638095d5641461064c57610272565b806349bd5a5e146104945780634a62bb65146104bf5780634fbee193146104ea5780635e80148e14610527578063667185241461055057610272565b806318160ddd1161022f57806318160ddd14610384578063203e727e146103af57806323b872dd146103d8578063313ce567146104155780633950935114610440578063476343ee1461047d57610272565b806306fdde0314610277578063095ea7b3146102a25780630f3a325f146102df57806310d5de531461031c5780631694505e1461035957610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a61565b6040516102999190613ea4565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190613f6e565b610af3565b6040516102d69190613fc9565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613fe4565b610b11565b6040516103139190613fc9565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613fe4565b610b67565b6040516103509190613fc9565b60405180910390f35b34801561036557600080fd5b5061036e610b87565b60405161037b9190614070565b60405180910390f35b34801561039057600080fd5b50610399610bab565b6040516103a6919061409a565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d191906140b5565b610bb5565b005b3480156103e457600080fd5b506103ff60048036038101906103fa91906140e2565b610cd7565b60405161040c9190613fc9565b60405180910390f35b34801561042157600080fd5b5061042a610db0565b6040516104379190614151565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613f6e565b610db9565b6040516104749190613fc9565b60405180910390f35b34801561048957600080fd5b50610492610e6c565b005b3480156104a057600080fd5b506104a9610ed7565b6040516104b6919061417b565b60405180910390f35b3480156104cb57600080fd5b506104d4610efb565b6040516104e19190613fc9565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613fe4565b610f0e565b60405161051e9190613fc9565b60405180910390f35b34801561053357600080fd5b5061054e600480360381019061054991906142de565b610f64565b005b34801561055c57600080fd5b5061057760048036038101906105729190613fe4565b611172565b005b34801561058557600080fd5b5061058e6112c9565b60405161059b919061409a565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613fe4565b6112cf565b6040516105d8919061409a565b60405180910390f35b3480156105ed57600080fd5b506105f6611317565b005b34801561060457600080fd5b5061060d61146f565b60405161061a9190613fc9565b60405180910390f35b34801561062f57600080fd5b5061064a60048036038101906106459190614353565b61152a565b005b34801561065857600080fd5b50610673600480360381019061066e9190614393565b61161c565b005b34801561068157600080fd5b5061069c600480360381019061069791906142de565b611736565b005b3480156106aa57600080fd5b506106b3611862565b005b3480156106c157600080fd5b506106ca61191d565b6040516106d7919061417b565b60405180910390f35b3480156106ec57600080fd5b506106f5611947565b6040516107029190613ea4565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d9190614353565b6119d9565b005b34801561074057600080fd5b5061075b60048036038101906107569190613f6e565b611b0d565b6040516107689190613fc9565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190613f6e565b611bda565b6040516107a59190613fc9565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613fe4565b611bf8565b6040516107e29190613fc9565b60405180910390f35b3480156107f757600080fd5b50610800611c18565b60405161080d9190613fc9565b60405180910390f35b34801561082257600080fd5b5061083d60048036038101906108389190614353565b611c2b565b005b34801561084b57600080fd5b5061086660048036038101906108619190614393565b611d6b565b005b34801561087457600080fd5b5061088f600480360381019061088a91906140b5565b611e85565b005b34801561089d57600080fd5b506108a6611fa7565b6040516108b39190613fc9565b60405180910390f35b3480156108c857600080fd5b506108d1611fba565b6040516108de919061409a565b60405180910390f35b3480156108f357600080fd5b5061090e600480360381019061090991906140b5565b611fc0565b60405161091b9190613fc9565b60405180910390f35b34801561093057600080fd5b50610939612130565b604051610946919061409a565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906143e6565b612136565b604051610983919061409a565b60405180910390f35b34801561099857600080fd5b506109a16121bd565b6040516109ae919061409a565b60405180910390f35b3480156109c357600080fd5b506109cc6121c3565b6040516109d99190613fc9565b60405180910390f35b3480156109ee57600080fd5b506109f761227e565b604051610a04919061417b565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613fe4565b6122a4565b005b348015610a4257600080fd5b50610a4b61246b565b604051610a58919061409a565b60405180910390f35b606060038054610a7090614455565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9c90614455565b8015610ae95780601f10610abe57610100808354040283529160200191610ae9565b820191906000526020600020905b815481529060010190602001808311610acc57829003601f168201915b5050505050905090565b6000610b07610b006124cf565b84846124d7565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610bbd6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c43906144d3565b60405180910390fd5b633b9aca006103e86001610c5e610bab565b610c689190614522565b610c7291906145ab565b610c7c91906145ab565b811015610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb59061464e565b60405180910390fd5b633b9aca0081610cce9190614522565b600a8190555050565b6000610ce48484846126a2565b610da584610cf06124cf565b610da08560405180606001604052806028815260200161549060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d566124cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134149092919063ffffffff16565b6124d7565b600190509392505050565b60006009905090565b6000610e62610dc66124cf565b84610e5d8560016000610dd76124cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247190919063ffffffff16565b6124d7565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ed4573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f6c6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff2906144d3565b60405180910390fd5b60005b815181101561116e577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168282815181106110515761105061466e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156110e357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168282815181106110c2576110c161466e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b1561115b576001600660008484815181106111015761110061466e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80806111669061469d565b915050610ffe565b5050565b61117a6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611200906144d3565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61131f6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a5906144d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114796124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff906144d3565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b6115326124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b8906144d3565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6116246124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa906144d3565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546116db91906146e6565b6116e591906146e6565b601081905550600a6010541115611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890614788565b60405180910390fd5b505050565b61173e6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c4906144d3565b60405180910390fd5b60005b815181101561185e576000600660008484815181106117f2576117f161466e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118569061469d565b9150506117d0565b5050565b61186a6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f0906144d3565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461195690614455565b80601f016020809104026020016040519081016040528092919081815260200182805461198290614455565b80156119cf5780601f106119a4576101008083540402835291602001916119cf565b820191906000526020600020905b8154815290600101906020018083116119b257829003601f168201915b5050505050905090565b6119e16124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a67906144d3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af69061481a565b60405180910390fd5b611b098282613478565b5050565b6000611bd0611b1a6124cf565b84611bcb856040518060600160405280602581526020016154b86025913960016000611b446124cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134149092919063ffffffff16565b6124d7565b6001905092915050565b6000611bee611be76124cf565b84846126a2565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611c336124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb9906144d3565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d5f9190613fc9565b60405180910390a25050565b611d736124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df9906144d3565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611e2a91906146e6565b611e3491906146e6565b601481905550600f6014541115611e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7790614886565b60405180910390fd5b505050565b611e8d6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f13906144d3565b60405180910390fd5b633b9aca006103e86005611f2e610bab565b611f389190614522565b611f4291906145ab565b611f4c91906145ab565b811015611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8590614918565b60405180910390fd5b633b9aca0081611f9e9190614522565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611fca6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612059576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612050906144d3565b60405180910390fd5b620186a06001612067610bab565b6120719190614522565b61207b91906145ab565b8210156120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b4906149aa565b60405180910390fd5b6103e860056120ca610bab565b6120d49190614522565b6120de91906145ab565b821115612120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211790614a3c565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006121cd6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612253906144d3565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122ac6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612332906144d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a290614ace565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461248091906146e6565b9050838110156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90614b3a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253e90614bcc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90614c5e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612695919061409a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270990614cf0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614d82565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690614e3a565b60405180910390fd5b60008114156128295761282483836000613519565b61340f565b60085442141561288c576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f4f576128a961191d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291757506128e761191d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129505750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561298a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129a35750600760009054906101000a900460ff16155b15612f4e57600d60019054906101000a900460ff16612a9d57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a5d5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9390614ea6565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c6557612aba61191d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b4157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b9957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c645743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1690614f5e565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d085750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612daf57600a54811115612d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4990614ff0565b60405180910390fd5b600c54612d5e836112cf565b82612d6991906146e6565b1115612daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da19061505c565b60405180910390fd5b612f4d565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e525750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ea157600a54811115612e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e93906150ee565b60405180910390fd5b612f4c565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f4b57600c54612efe836112cf565b82612f0991906146e6565b1115612f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f419061505c565b60405180910390fd5b5b5b5b5b5b6000612f5a306112cf565b90506000600b548210159050808015612f805750600760009054906101000a900460ff16155b8015612fd65750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561302c5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130825750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130c6576001600760006101000a81548160ff0219169083151502179055506130aa6137ae565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061317c5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561318657600090505b600081156133ff57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131e957506000601454115b156132b65761321660646132086014548861397690919063ffffffff16565b6139f190919063ffffffff16565b9050601454601654826132299190614522565b61323391906145ab565b6019600082825461324491906146e6565b925050819055506014546017548261325c9190614522565b61326691906145ab565b601a600082825461327791906146e6565b925050819055506014546015548261328f9190614522565b61329991906145ab565b601860008282546132aa91906146e6565b925050819055506133db565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561331157506000601054115b156133da5761333e60646133306010548861397690919063ffffffff16565b6139f190919063ffffffff16565b9050601054601254826133519190614522565b61335b91906145ab565b6019600082825461336c91906146e6565b92505081905550601054601354826133849190614522565b61338e91906145ab565b601a600082825461339f91906146e6565b92505081905550601054601154826133b79190614522565b6133c191906145ab565b601860008282546133d291906146e6565b925050819055505b5b60008111156133f0576133ef873083613519565b5b80856133fc919061510e565b94505b61340a878787613519565b505050505b505050565b600083831115829061345c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134539190613ea4565b60405180910390fd5b506000838561346b919061510e565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358090614cf0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f090614d82565b60405180910390fd5b613604838383613a3b565b61366f8160405180606001604052806026815260200161546a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134149092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613702816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137a1919061409a565b60405180910390a3505050565b60006137b9306112cf565b90506000601a546018546019546137d091906146e6565b6137da91906146e6565b905060008214806137eb5750600081145b156137f7575050613974565b6014600b546138069190614522565b82111561381f576014600b5461381c9190614522565b91505b6000600282601954856138329190614522565b61383c91906145ab565b61384691906145ab565b9050600061385d8285613a4090919063ffffffff16565b9050600047905061386d82613a8a565b60006138828247613a4090919063ffffffff16565b905060006138ad8661389f6018548561397690919063ffffffff16565b6139f190919063ffffffff16565b905060006138d8876138ca601a548661397690919063ffffffff16565b6139f190919063ffffffff16565b905060008183856138e9919061510e565b6138f3919061510e565b9050600060198190555060006018819055506000601a8190555060008711801561391d5750600081115b1561396a5761392c8782613cc7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260195460405161396193929190615142565b60405180910390a15b5050505050505050505b565b60008083141561398957600090506139eb565b600082846139979190614522565b90508284826139a691906145ab565b146139e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139dd906151eb565b60405180910390fd5b809150505b92915050565b6000613a3383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613da8565b905092915050565b505050565b6000613a8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613414565b905092915050565b6000600267ffffffffffffffff811115613aa757613aa661419b565b5b604051908082528060200260200182016040528015613ad55781602001602082028036833780820191505090505b5090503081600081518110613aed57613aec61466e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb69190615220565b81600181518110613bca57613bc961466e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c2f307f0000000000000000000000000000000000000000000000000000000000000000846124d7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c91959493929190615346565b600060405180830381600087803b158015613cab57600080fd5b505af1158015613cbf573d6000803e3d6000fd5b505050505050565b613cf2307f0000000000000000000000000000000000000000000000000000000000000000846124d7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613d3c61191d565b426040518863ffffffff1660e01b8152600401613d5e969594939291906153a0565b60606040518083038185885af1158015613d7c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613da19190615416565b5050505050565b60008083118290613def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613de69190613ea4565b60405180910390fd5b5060008385613dfe91906145ab565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e45578082015181840152602081019050613e2a565b83811115613e54576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e7682613e0b565b613e808185613e16565b9350613e90818560208601613e27565b613e9981613e5a565b840191505092915050565b60006020820190508181036000830152613ebe8184613e6b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f0582613eda565b9050919050565b613f1581613efa565b8114613f2057600080fd5b50565b600081359050613f3281613f0c565b92915050565b6000819050919050565b613f4b81613f38565b8114613f5657600080fd5b50565b600081359050613f6881613f42565b92915050565b60008060408385031215613f8557613f84613ed0565b5b6000613f9385828601613f23565b9250506020613fa485828601613f59565b9150509250929050565b60008115159050919050565b613fc381613fae565b82525050565b6000602082019050613fde6000830184613fba565b92915050565b600060208284031215613ffa57613ff9613ed0565b5b600061400884828501613f23565b91505092915050565b6000819050919050565b600061403661403161402c84613eda565b614011565b613eda565b9050919050565b60006140488261401b565b9050919050565b600061405a8261403d565b9050919050565b61406a8161404f565b82525050565b60006020820190506140856000830184614061565b92915050565b61409481613f38565b82525050565b60006020820190506140af600083018461408b565b92915050565b6000602082840312156140cb576140ca613ed0565b5b60006140d984828501613f59565b91505092915050565b6000806000606084860312156140fb576140fa613ed0565b5b600061410986828701613f23565b935050602061411a86828701613f23565b925050604061412b86828701613f59565b9150509250925092565b600060ff82169050919050565b61414b81614135565b82525050565b60006020820190506141666000830184614142565b92915050565b61417581613efa565b82525050565b6000602082019050614190600083018461416c565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141d382613e5a565b810181811067ffffffffffffffff821117156141f2576141f161419b565b5b80604052505050565b6000614205613ec6565b905061421182826141ca565b919050565b600067ffffffffffffffff8211156142315761423061419b565b5b602082029050602081019050919050565b600080fd5b600061425a61425584614216565b6141fb565b9050808382526020820190506020840283018581111561427d5761427c614242565b5b835b818110156142a657806142928882613f23565b84526020840193505060208101905061427f565b5050509392505050565b600082601f8301126142c5576142c4614196565b5b81356142d5848260208601614247565b91505092915050565b6000602082840312156142f4576142f3613ed0565b5b600082013567ffffffffffffffff81111561431257614311613ed5565b5b61431e848285016142b0565b91505092915050565b61433081613fae565b811461433b57600080fd5b50565b60008135905061434d81614327565b92915050565b6000806040838503121561436a57614369613ed0565b5b600061437885828601613f23565b92505060206143898582860161433e565b9150509250929050565b6000806000606084860312156143ac576143ab613ed0565b5b60006143ba86828701613f59565b93505060206143cb86828701613f59565b92505060406143dc86828701613f59565b9150509250925092565b600080604083850312156143fd576143fc613ed0565b5b600061440b85828601613f23565b925050602061441c85828601613f23565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061446d57607f821691505b6020821081141561448157614480614426565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144bd602083613e16565b91506144c882614487565b602082019050919050565b600060208201905081810360008301526144ec816144b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061452d82613f38565b915061453883613f38565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614571576145706144f3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145b682613f38565b91506145c183613f38565b9250826145d1576145d061457c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614638602f83613e16565b9150614643826145dc565b604082019050919050565b600060208201905081810360008301526146678161462b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006146a882613f38565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146db576146da6144f3565b5b600182019050919050565b60006146f182613f38565b91506146fc83613f38565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614731576147306144f3565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000614772601d83613e16565b915061477d8261473c565b602082019050919050565b600060208201905081810360008301526147a181614765565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614804603983613e16565b915061480f826147a8565b604082019050919050565b60006020820190508181036000830152614833816147f7565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000614870601d83613e16565b915061487b8261483a565b602082019050919050565b6000602082019050818103600083015261489f81614863565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614902602483613e16565b915061490d826148a6565b604082019050919050565b60006020820190508181036000830152614931816148f5565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614994603583613e16565b915061499f82614938565b604082019050919050565b600060208201905081810360008301526149c381614987565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a26603483613e16565b9150614a31826149ca565b604082019050919050565b60006020820190508181036000830152614a5581614a19565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ab8602683613e16565b9150614ac382614a5c565b604082019050919050565b60006020820190508181036000830152614ae781614aab565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b24601b83613e16565b9150614b2f82614aee565b602082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bb6602483613e16565b9150614bc182614b5a565b604082019050919050565b60006020820190508181036000830152614be581614ba9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c48602283613e16565b9150614c5382614bec565b604082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cda602583613e16565b9150614ce582614c7e565b604082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d6c602383613e16565b9150614d7782614d10565b604082019050919050565b60006020820190508181036000830152614d9b81614d5f565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614e24604d83613e16565b9150614e2f82614da2565b606082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614e90601683613e16565b9150614e9b82614e5a565b602082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f48604983613e16565b9150614f5382614ec6565b606082019050919050565b60006020820190508181036000830152614f7781614f3b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614fda603583613e16565b9150614fe582614f7e565b604082019050919050565b6000602082019050818103600083015261500981614fcd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615046601383613e16565b915061505182615010565b602082019050919050565b6000602082019050818103600083015261507581615039565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006150d8603683613e16565b91506150e38261507c565b604082019050919050565b60006020820190508181036000830152615107816150cb565b9050919050565b600061511982613f38565b915061512483613f38565b925082821015615137576151366144f3565b5b828203905092915050565b6000606082019050615157600083018661408b565b615164602083018561408b565b615171604083018461408b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006151d5602183613e16565b91506151e082615179565b604082019050919050565b60006020820190508181036000830152615204816151c8565b9050919050565b60008151905061521a81613f0c565b92915050565b60006020828403121561523657615235613ed0565b5b60006152448482850161520b565b91505092915050565b6000819050919050565b600061527261526d6152688461524d565b614011565b613f38565b9050919050565b61528281615257565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152bd81613efa565b82525050565b60006152cf83836152b4565b60208301905092915050565b6000602082019050919050565b60006152f382615288565b6152fd8185615293565b9350615308836152a4565b8060005b8381101561533957815161532088826152c3565b975061532b836152db565b92505060018101905061530c565b5085935050505092915050565b600060a08201905061535b600083018861408b565b6153686020830187615279565b818103604083015261537a81866152e8565b9050615389606083018561416c565b615396608083018461408b565b9695505050505050565b600060c0820190506153b5600083018961416c565b6153c2602083018861408b565b6153cf6040830187615279565b6153dc6060830186615279565b6153e9608083018561416c565b6153f660a083018461408b565b979650505050505050565b60008151905061541081613f42565b92915050565b60008060006060848603121561542f5761542e613ed0565b5b600061543d86828701615401565b935050602061544e86828701615401565b925050604061545f86828701615401565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e5f232c4bfede7caa33eb73fa72f6ff69a36d70c92050329317d53fb8d7dc67d64736f6c634300080b0033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c8063892ba40811610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b8063a457c2d711610108578063a457c2d714610734578063a9059cbb14610771578063b62496f5146107ae578063bbc0c742146107eb578063c024666814610816578063c17b5b8c1461083f57610272565b8063892ba408146106755780638a8c523c1461069e5780638da5cb5b146106b557806395d89b41146106e05780639a7a23d61461070b57610272565b806349bd5a5e116101dd5780636a486a8e116101a15780636a486a8e1461057957806370a08231146105a4578063715018a6146105e1578063751039fc146105f85780637571336a146106235780638095d5641461064c57610272565b806349bd5a5e146104945780634a62bb65146104bf5780634fbee193146104ea5780635e80148e14610527578063667185241461055057610272565b806318160ddd1161022f57806318160ddd14610384578063203e727e146103af57806323b872dd146103d8578063313ce567146104155780633950935114610440578063476343ee1461047d57610272565b806306fdde0314610277578063095ea7b3146102a25780630f3a325f146102df57806310d5de531461031c5780631694505e1461035957610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a61565b6040516102999190613ea4565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190613f6e565b610af3565b6040516102d69190613fc9565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613fe4565b610b11565b6040516103139190613fc9565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613fe4565b610b67565b6040516103509190613fc9565b60405180910390f35b34801561036557600080fd5b5061036e610b87565b60405161037b9190614070565b60405180910390f35b34801561039057600080fd5b50610399610bab565b6040516103a6919061409a565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d191906140b5565b610bb5565b005b3480156103e457600080fd5b506103ff60048036038101906103fa91906140e2565b610cd7565b60405161040c9190613fc9565b60405180910390f35b34801561042157600080fd5b5061042a610db0565b6040516104379190614151565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613f6e565b610db9565b6040516104749190613fc9565b60405180910390f35b34801561048957600080fd5b50610492610e6c565b005b3480156104a057600080fd5b506104a9610ed7565b6040516104b6919061417b565b60405180910390f35b3480156104cb57600080fd5b506104d4610efb565b6040516104e19190613fc9565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613fe4565b610f0e565b60405161051e9190613fc9565b60405180910390f35b34801561053357600080fd5b5061054e600480360381019061054991906142de565b610f64565b005b34801561055c57600080fd5b5061057760048036038101906105729190613fe4565b611172565b005b34801561058557600080fd5b5061058e6112c9565b60405161059b919061409a565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613fe4565b6112cf565b6040516105d8919061409a565b60405180910390f35b3480156105ed57600080fd5b506105f6611317565b005b34801561060457600080fd5b5061060d61146f565b60405161061a9190613fc9565b60405180910390f35b34801561062f57600080fd5b5061064a60048036038101906106459190614353565b61152a565b005b34801561065857600080fd5b50610673600480360381019061066e9190614393565b61161c565b005b34801561068157600080fd5b5061069c600480360381019061069791906142de565b611736565b005b3480156106aa57600080fd5b506106b3611862565b005b3480156106c157600080fd5b506106ca61191d565b6040516106d7919061417b565b60405180910390f35b3480156106ec57600080fd5b506106f5611947565b6040516107029190613ea4565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d9190614353565b6119d9565b005b34801561074057600080fd5b5061075b60048036038101906107569190613f6e565b611b0d565b6040516107689190613fc9565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190613f6e565b611bda565b6040516107a59190613fc9565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613fe4565b611bf8565b6040516107e29190613fc9565b60405180910390f35b3480156107f757600080fd5b50610800611c18565b60405161080d9190613fc9565b60405180910390f35b34801561082257600080fd5b5061083d60048036038101906108389190614353565b611c2b565b005b34801561084b57600080fd5b5061086660048036038101906108619190614393565b611d6b565b005b34801561087457600080fd5b5061088f600480360381019061088a91906140b5565b611e85565b005b34801561089d57600080fd5b506108a6611fa7565b6040516108b39190613fc9565b60405180910390f35b3480156108c857600080fd5b506108d1611fba565b6040516108de919061409a565b60405180910390f35b3480156108f357600080fd5b5061090e600480360381019061090991906140b5565b611fc0565b60405161091b9190613fc9565b60405180910390f35b34801561093057600080fd5b50610939612130565b604051610946919061409a565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906143e6565b612136565b604051610983919061409a565b60405180910390f35b34801561099857600080fd5b506109a16121bd565b6040516109ae919061409a565b60405180910390f35b3480156109c357600080fd5b506109cc6121c3565b6040516109d99190613fc9565b60405180910390f35b3480156109ee57600080fd5b506109f761227e565b604051610a04919061417b565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613fe4565b6122a4565b005b348015610a4257600080fd5b50610a4b61246b565b604051610a58919061409a565b60405180910390f35b606060038054610a7090614455565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9c90614455565b8015610ae95780601f10610abe57610100808354040283529160200191610ae9565b820191906000526020600020905b815481529060010190602001808311610acc57829003601f168201915b5050505050905090565b6000610b07610b006124cf565b84846124d7565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610bbd6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c43906144d3565b60405180910390fd5b633b9aca006103e86001610c5e610bab565b610c689190614522565b610c7291906145ab565b610c7c91906145ab565b811015610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb59061464e565b60405180910390fd5b633b9aca0081610cce9190614522565b600a8190555050565b6000610ce48484846126a2565b610da584610cf06124cf565b610da08560405180606001604052806028815260200161549060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d566124cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134149092919063ffffffff16565b6124d7565b600190509392505050565b60006009905090565b6000610e62610dc66124cf565b84610e5d8560016000610dd76124cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247190919063ffffffff16565b6124d7565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ed4573d6000803e3d6000fd5b50565b7f000000000000000000000000a54a75da2dbfc491a87560a0675672ce30b52de781565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f6c6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff2906144d3565b60405180910390fd5b60005b815181101561116e577f000000000000000000000000a54a75da2dbfc491a87560a0675672ce30b52de773ffffffffffffffffffffffffffffffffffffffff168282815181106110515761105061466e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156110e357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168282815181106110c2576110c161466e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b1561115b576001600660008484815181106111015761110061466e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80806111669061469d565b915050610ffe565b5050565b61117a6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611200906144d3565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61131f6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a5906144d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114796124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff906144d3565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b6115326124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b8906144d3565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6116246124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa906144d3565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546116db91906146e6565b6116e591906146e6565b601081905550600a6010541115611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890614788565b60405180910390fd5b505050565b61173e6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c4906144d3565b60405180910390fd5b60005b815181101561185e576000600660008484815181106117f2576117f161466e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118569061469d565b9150506117d0565b5050565b61186a6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f0906144d3565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461195690614455565b80601f016020809104026020016040519081016040528092919081815260200182805461198290614455565b80156119cf5780601f106119a4576101008083540402835291602001916119cf565b820191906000526020600020905b8154815290600101906020018083116119b257829003601f168201915b5050505050905090565b6119e16124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a67906144d3565b60405180910390fd5b7f000000000000000000000000a54a75da2dbfc491a87560a0675672ce30b52de773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af69061481a565b60405180910390fd5b611b098282613478565b5050565b6000611bd0611b1a6124cf565b84611bcb856040518060600160405280602581526020016154b86025913960016000611b446124cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134149092919063ffffffff16565b6124d7565b6001905092915050565b6000611bee611be76124cf565b84846126a2565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611c336124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb9906144d3565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d5f9190613fc9565b60405180910390a25050565b611d736124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df9906144d3565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611e2a91906146e6565b611e3491906146e6565b601481905550600f6014541115611e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7790614886565b60405180910390fd5b505050565b611e8d6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f13906144d3565b60405180910390fd5b633b9aca006103e86005611f2e610bab565b611f389190614522565b611f4291906145ab565b611f4c91906145ab565b811015611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8590614918565b60405180910390fd5b633b9aca0081611f9e9190614522565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611fca6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612059576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612050906144d3565b60405180910390fd5b620186a06001612067610bab565b6120719190614522565b61207b91906145ab565b8210156120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b4906149aa565b60405180910390fd5b6103e860056120ca610bab565b6120d49190614522565b6120de91906145ab565b821115612120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211790614a3c565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006121cd6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612253906144d3565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122ac6124cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612332906144d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a290614ace565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461248091906146e6565b9050838110156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90614b3a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253e90614bcc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90614c5e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612695919061409a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270990614cf0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614d82565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690614e3a565b60405180910390fd5b60008114156128295761282483836000613519565b61340f565b60085442141561288c576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f4f576128a961191d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291757506128e761191d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129505750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561298a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129a35750600760009054906101000a900460ff16155b15612f4e57600d60019054906101000a900460ff16612a9d57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a5d5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9390614ea6565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c6557612aba61191d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b4157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b9957507f000000000000000000000000a54a75da2dbfc491a87560a0675672ce30b52de773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c645743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1690614f5e565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d085750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612daf57600a54811115612d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4990614ff0565b60405180910390fd5b600c54612d5e836112cf565b82612d6991906146e6565b1115612daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da19061505c565b60405180910390fd5b612f4d565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e525750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ea157600a54811115612e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e93906150ee565b60405180910390fd5b612f4c565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f4b57600c54612efe836112cf565b82612f0991906146e6565b1115612f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f419061505c565b60405180910390fd5b5b5b5b5b5b6000612f5a306112cf565b90506000600b548210159050808015612f805750600760009054906101000a900460ff16155b8015612fd65750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561302c5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130825750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130c6576001600760006101000a81548160ff0219169083151502179055506130aa6137ae565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061317c5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561318657600090505b600081156133ff57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131e957506000601454115b156132b65761321660646132086014548861397690919063ffffffff16565b6139f190919063ffffffff16565b9050601454601654826132299190614522565b61323391906145ab565b6019600082825461324491906146e6565b925050819055506014546017548261325c9190614522565b61326691906145ab565b601a600082825461327791906146e6565b925050819055506014546015548261328f9190614522565b61329991906145ab565b601860008282546132aa91906146e6565b925050819055506133db565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561331157506000601054115b156133da5761333e60646133306010548861397690919063ffffffff16565b6139f190919063ffffffff16565b9050601054601254826133519190614522565b61335b91906145ab565b6019600082825461336c91906146e6565b92505081905550601054601354826133849190614522565b61338e91906145ab565b601a600082825461339f91906146e6565b92505081905550601054601154826133b79190614522565b6133c191906145ab565b601860008282546133d291906146e6565b925050819055505b5b60008111156133f0576133ef873083613519565b5b80856133fc919061510e565b94505b61340a878787613519565b505050505b505050565b600083831115829061345c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134539190613ea4565b60405180910390fd5b506000838561346b919061510e565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358090614cf0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f090614d82565b60405180910390fd5b613604838383613a3b565b61366f8160405180606001604052806026815260200161546a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134149092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613702816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137a1919061409a565b60405180910390a3505050565b60006137b9306112cf565b90506000601a546018546019546137d091906146e6565b6137da91906146e6565b905060008214806137eb5750600081145b156137f7575050613974565b6014600b546138069190614522565b82111561381f576014600b5461381c9190614522565b91505b6000600282601954856138329190614522565b61383c91906145ab565b61384691906145ab565b9050600061385d8285613a4090919063ffffffff16565b9050600047905061386d82613a8a565b60006138828247613a4090919063ffffffff16565b905060006138ad8661389f6018548561397690919063ffffffff16565b6139f190919063ffffffff16565b905060006138d8876138ca601a548661397690919063ffffffff16565b6139f190919063ffffffff16565b905060008183856138e9919061510e565b6138f3919061510e565b9050600060198190555060006018819055506000601a8190555060008711801561391d5750600081115b1561396a5761392c8782613cc7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260195460405161396193929190615142565b60405180910390a15b5050505050505050505b565b60008083141561398957600090506139eb565b600082846139979190614522565b90508284826139a691906145ab565b146139e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139dd906151eb565b60405180910390fd5b809150505b92915050565b6000613a3383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613da8565b905092915050565b505050565b6000613a8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613414565b905092915050565b6000600267ffffffffffffffff811115613aa757613aa661419b565b5b604051908082528060200260200182016040528015613ad55781602001602082028036833780820191505090505b5090503081600081518110613aed57613aec61466e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb69190615220565b81600181518110613bca57613bc961466e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c2f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124d7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c91959493929190615346565b600060405180830381600087803b158015613cab57600080fd5b505af1158015613cbf573d6000803e3d6000fd5b505050505050565b613cf2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124d7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613d3c61191d565b426040518863ffffffff1660e01b8152600401613d5e969594939291906153a0565b60606040518083038185885af1158015613d7c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613da19190615416565b5050505050565b60008083118290613def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613de69190613ea4565b60405180910390fd5b5060008385613dfe91906145ab565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e45578082015181840152602081019050613e2a565b83811115613e54576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e7682613e0b565b613e808185613e16565b9350613e90818560208601613e27565b613e9981613e5a565b840191505092915050565b60006020820190508181036000830152613ebe8184613e6b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f0582613eda565b9050919050565b613f1581613efa565b8114613f2057600080fd5b50565b600081359050613f3281613f0c565b92915050565b6000819050919050565b613f4b81613f38565b8114613f5657600080fd5b50565b600081359050613f6881613f42565b92915050565b60008060408385031215613f8557613f84613ed0565b5b6000613f9385828601613f23565b9250506020613fa485828601613f59565b9150509250929050565b60008115159050919050565b613fc381613fae565b82525050565b6000602082019050613fde6000830184613fba565b92915050565b600060208284031215613ffa57613ff9613ed0565b5b600061400884828501613f23565b91505092915050565b6000819050919050565b600061403661403161402c84613eda565b614011565b613eda565b9050919050565b60006140488261401b565b9050919050565b600061405a8261403d565b9050919050565b61406a8161404f565b82525050565b60006020820190506140856000830184614061565b92915050565b61409481613f38565b82525050565b60006020820190506140af600083018461408b565b92915050565b6000602082840312156140cb576140ca613ed0565b5b60006140d984828501613f59565b91505092915050565b6000806000606084860312156140fb576140fa613ed0565b5b600061410986828701613f23565b935050602061411a86828701613f23565b925050604061412b86828701613f59565b9150509250925092565b600060ff82169050919050565b61414b81614135565b82525050565b60006020820190506141666000830184614142565b92915050565b61417581613efa565b82525050565b6000602082019050614190600083018461416c565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141d382613e5a565b810181811067ffffffffffffffff821117156141f2576141f161419b565b5b80604052505050565b6000614205613ec6565b905061421182826141ca565b919050565b600067ffffffffffffffff8211156142315761423061419b565b5b602082029050602081019050919050565b600080fd5b600061425a61425584614216565b6141fb565b9050808382526020820190506020840283018581111561427d5761427c614242565b5b835b818110156142a657806142928882613f23565b84526020840193505060208101905061427f565b5050509392505050565b600082601f8301126142c5576142c4614196565b5b81356142d5848260208601614247565b91505092915050565b6000602082840312156142f4576142f3613ed0565b5b600082013567ffffffffffffffff81111561431257614311613ed5565b5b61431e848285016142b0565b91505092915050565b61433081613fae565b811461433b57600080fd5b50565b60008135905061434d81614327565b92915050565b6000806040838503121561436a57614369613ed0565b5b600061437885828601613f23565b92505060206143898582860161433e565b9150509250929050565b6000806000606084860312156143ac576143ab613ed0565b5b60006143ba86828701613f59565b93505060206143cb86828701613f59565b92505060406143dc86828701613f59565b9150509250925092565b600080604083850312156143fd576143fc613ed0565b5b600061440b85828601613f23565b925050602061441c85828601613f23565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061446d57607f821691505b6020821081141561448157614480614426565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144bd602083613e16565b91506144c882614487565b602082019050919050565b600060208201905081810360008301526144ec816144b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061452d82613f38565b915061453883613f38565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614571576145706144f3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145b682613f38565b91506145c183613f38565b9250826145d1576145d061457c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614638602f83613e16565b9150614643826145dc565b604082019050919050565b600060208201905081810360008301526146678161462b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006146a882613f38565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146db576146da6144f3565b5b600182019050919050565b60006146f182613f38565b91506146fc83613f38565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614731576147306144f3565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000614772601d83613e16565b915061477d8261473c565b602082019050919050565b600060208201905081810360008301526147a181614765565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614804603983613e16565b915061480f826147a8565b604082019050919050565b60006020820190508181036000830152614833816147f7565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000614870601d83613e16565b915061487b8261483a565b602082019050919050565b6000602082019050818103600083015261489f81614863565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614902602483613e16565b915061490d826148a6565b604082019050919050565b60006020820190508181036000830152614931816148f5565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614994603583613e16565b915061499f82614938565b604082019050919050565b600060208201905081810360008301526149c381614987565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a26603483613e16565b9150614a31826149ca565b604082019050919050565b60006020820190508181036000830152614a5581614a19565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ab8602683613e16565b9150614ac382614a5c565b604082019050919050565b60006020820190508181036000830152614ae781614aab565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b24601b83613e16565b9150614b2f82614aee565b602082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bb6602483613e16565b9150614bc182614b5a565b604082019050919050565b60006020820190508181036000830152614be581614ba9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c48602283613e16565b9150614c5382614bec565b604082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cda602583613e16565b9150614ce582614c7e565b604082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d6c602383613e16565b9150614d7782614d10565b604082019050919050565b60006020820190508181036000830152614d9b81614d5f565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614e24604d83613e16565b9150614e2f82614da2565b606082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614e90601683613e16565b9150614e9b82614e5a565b602082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f48604983613e16565b9150614f5382614ec6565b606082019050919050565b60006020820190508181036000830152614f7781614f3b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614fda603583613e16565b9150614fe582614f7e565b604082019050919050565b6000602082019050818103600083015261500981614fcd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615046601383613e16565b915061505182615010565b602082019050919050565b6000602082019050818103600083015261507581615039565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006150d8603683613e16565b91506150e38261507c565b604082019050919050565b60006020820190508181036000830152615107816150cb565b9050919050565b600061511982613f38565b915061512483613f38565b925082821015615137576151366144f3565b5b828203905092915050565b6000606082019050615157600083018661408b565b615164602083018561408b565b615171604083018461408b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006151d5602183613e16565b91506151e082615179565b604082019050919050565b60006020820190508181036000830152615204816151c8565b9050919050565b60008151905061521a81613f0c565b92915050565b60006020828403121561523657615235613ed0565b5b60006152448482850161520b565b91505092915050565b6000819050919050565b600061527261526d6152688461524d565b614011565b613f38565b9050919050565b61528281615257565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152bd81613efa565b82525050565b60006152cf83836152b4565b60208301905092915050565b6000602082019050919050565b60006152f382615288565b6152fd8185615293565b9350615308836152a4565b8060005b8381101561533957815161532088826152c3565b975061532b836152db565b92505060018101905061530c565b5085935050505092915050565b600060a08201905061535b600083018861408b565b6153686020830187615279565b818103604083015261537a81866152e8565b9050615389606083018561416c565b615396608083018461408b565b9695505050505050565b600060c0820190506153b5600083018961416c565b6153c2602083018861408b565b6153cf6040830187615279565b6153dc6060830186615279565b6153e9608083018561416c565b6153f660a083018461408b565b979650505050505050565b60008151905061541081613f42565b92915050565b60008060006060848603121561542f5761542e613ed0565b5b600061543d86828701615401565b935050602061544e86828701615401565b925050604061545f86828701615401565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e5f232c4bfede7caa33eb73fa72f6ff69a36d70c92050329317d53fb8d7dc67d64736f6c634300080b0033

Deployed Bytecode Sourcemap

17507:15198:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4926:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5839:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25608:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18849:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17584:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5246:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22780:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6016:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5146:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6379:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32563:102;;;;;;;;;;;;;:::i;:::-;;17642:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17964:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24969:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25106:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24804:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18427:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5362:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10881:148;;;;;;;;;;;;;:::i;:::-;;21990:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23239:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23395:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25412:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21811:123;;;;;;;;;;;;;:::i;:::-;;10667:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5034:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24352:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6605:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5497:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19071:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18004:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24162:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23776:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23018:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18228:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17841:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22386:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18276:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5680:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17883:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22176:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17804:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11037:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17923:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4926:100;4980:13;5013:5;5006:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4926:100;:::o;5839:169::-;5922:4;5939:39;5948:12;:10;:12::i;:::-;5962:7;5971:6;5939:8;:39::i;:::-;5996:4;5989:11;;5839:169;;;;:::o;25608:100::-;25661:4;25685:9;:15;25695:4;25685:15;;;;;;;;;;;;;;;;;;;;;;;;;25678:22;;25608:100;;;:::o;18849:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17584:51::-;;;:::o;5246:108::-;5307:7;5334:12;;5327:19;;5246:108;:::o;22780:230::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22901:3:::1;22893:4;22889:1;22873:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22872:32;;;;:::i;:::-;22862:6;:42;;22854:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22999:3;22990:6;:12;;;;:::i;:::-;22967:20;:35;;;;22780:230:::0;:::o;6016:355::-;6156:4;6173:36;6183:6;6191:9;6202:6;6173:9;:36::i;:::-;6220:121;6229:6;6237:12;:10;:12::i;:::-;6251:89;6289:6;6251:89;;;;;;;;;;;;;;;;;:11;:19;6263:6;6251:19;;;;;;;;;;;;;;;:33;6271:12;:10;:12::i;:::-;6251:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6220:8;:121::i;:::-;6359:4;6352:11;;6016:355;;;;;:::o;5146:92::-;5204:5;5229:1;5222:8;;5146:92;:::o;6379:218::-;6467:4;6484:83;6493:12;:10;:12::i;:::-;6507:7;6516:50;6555:10;6516:11;:25;6528:12;:10;:12::i;:::-;6516:25;;;;;;;;;;;;;;;:34;6542:7;6516:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6484:8;:83::i;:::-;6585:4;6578:11;;6379:218;;;;:::o;32563:102::-;32615:9;;;;;;;;;;;32607:27;;:50;32635:21;32607:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32563:102::o;17642:38::-;;;:::o;17964:33::-;;;;;;;;;;;;;:::o;24969:125::-;25034:4;25058:19;:28;25078:7;25058:28;;;;;;;;;;;;;;;;;;;;;;;;;25051:35;;24969:125;;;:::o;25106:294::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25188:6:::1;25183:210;25204:8;:15;25200:1;:19;25183:210;;;25260:13;25245:28;;:8;25254:1;25245:11;;;;;;;;:::i;:::-;;;;;;;;:28;;;;:71;;;;;25300:15;25277:39;;:8;25286:1;25277:11;;;;;;;;:::i;:::-;;;;;;;;:39;;;;25245:71;25241:141;;;25362:4;25337:9;:22;25347:8;25356:1;25347:11;;;;;;;;:::i;:::-;;;;;;;;25337:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25241:141;25221:3;;;;;:::i;:::-;;;;25183:210;;;;25106:294:::0;:::o;24804:157::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24911:9:::1;;;;;;;;;;;24883:38;;24900:9;24883:38;;;;;;;;;;;;24944:9;24932;;:21;;;;;;;;;;;;;;;;;;24804:157:::0;:::o;18427:28::-;;;;:::o;5362:127::-;5436:7;5463:9;:18;5473:7;5463:18;;;;;;;;;;;;;;;;5456:25;;5362:127;;;:::o;10881:148::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10988:1:::1;10951:40;;10972:6;;;;;;;;;;;10951:40;;;;;;;;;;;;11019:1;11002:6;;:19;;;;;;;;;;;;;;;;;;10881:148::o:0;21990:121::-;22042:4;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22076:5:::1;22059:14;;:22;;;;;;;;;;;;;;;;;;22099:4;22092:11;;21990:121:::0;:::o;23239:144::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23371:4:::1;23329:31;:39;23361:6;23329:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23239:144:::0;;:::o;23395:369::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23527:12:::1;23508:16;:31;;;;23569:12;23550:16;:31;;;;23605:6;23592:10;:19;;;;23675:10;;23656:16;;23637;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;23622:12;:63;;;;23720:2;23704:12;;:18;;23696:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23395:369:::0;;;:::o;25412:184::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25494:6:::1;25489:100;25510:8;:15;25506:1;:19;25489:100;;;25572:5;25547:9;:22;25557:8;25566:1;25557:11;;;;;;;;:::i;:::-;;;;;;;;25547:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;25527:3;;;;;:::i;:::-;;;;25489:100;;;;25412:184:::0;:::o;21811:123::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21882:4:::1;21866:13;;:20;;;;;;;;;;;;;;;;;;21911:15;21897:11;:29;;;;21811:123::o:0;10667:79::-;10705:7;10732:6;;;;;;;;;;;10725:13;;10667:79;:::o;5034:104::-;5090:13;5123:7;5116:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5034:104;:::o;24352:244::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24459:13:::1;24451:21;;:4;:21;;;;24443:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24547:41;24576:4;24582:5;24547:28;:41::i;:::-;24352:244:::0;;:::o;6605:269::-;6698:4;6715:129;6724:12;:10;:12::i;:::-;6738:7;6747:96;6786:15;6747:96;;;;;;;;;;;;;;;;;:11;:25;6759:12;:10;:12::i;:::-;6747:25;;;;;;;;;;;;;;;:34;6773:7;6747:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6715:8;:129::i;:::-;6862:4;6855:11;;6605:269;;;;:::o;5497:175::-;5583:4;5600:42;5610:12;:10;:12::i;:::-;5624:9;5635:6;5600:9;:42::i;:::-;5660:4;5653:11;;5497:175;;;;:::o;19071:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18004:33::-;;;;;;;;;;;;;:::o;24162:182::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24278:8:::1;24247:19;:28;24267:7;24247:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24318:7;24302:34;;;24327:8;24302:34;;;;;;:::i;:::-;;;;;;;;24162:182:::0;;:::o;23776:378::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23910:12:::1;23890:17;:32;;;;23953:12;23933:17;:32;;;;23990:6;23976:11;:20;;;;24063:11;;24043:17;;24023;;:37;;;;:::i;:::-;:51;;;;:::i;:::-;24007:13;:67;;;;24110:2;24093:13;;:19;;24085:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23776:378:::0;;;:::o;23018:209::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23140:3:::1;23134:4;23130:1;23114:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23113:30;;;;:::i;:::-;23103:6;:40;;23095:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;23216:3;23207:6;:12;;;;:::i;:::-;23195:9;:24;;;;23018:209:::0;:::o;18228:39::-;;;;;;;;;;;;;:::o;17841:35::-;;;;:::o;22386:382::-;22467:4;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22524:6:::1;22520:1;22504:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;22491:9;:39;;22483:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22639:4;22635:1;22619:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22606:9;:37;;22598:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22731:9;22710:18;:30;;;;22757:4;22750:11;;22386:382:::0;;;:::o;18276:27::-;;;;:::o;5680:151::-;5769:7;5796:11;:18;5808:5;5796:18;;;;;;;;;;;;;;;:27;5815:7;5796:27;;;;;;;;;;;;;;;;5789:34;;5680:151;;;;:::o;17883:33::-;;;;:::o;22176:135::-;22236:4;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22276:5:::1;22253:20;;:28;;;;;;;;;;;;;;;;;;22299:4;22292:11;;22176:135:::0;:::o;17804:24::-;;;;;;;;;;;;;:::o;11037:244::-;10804:12;:10;:12::i;:::-;10794:22;;:6;;;;;;;;;;;:22;;;10786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11146:1:::1;11126:22;;:8;:22;;;;11118:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11236:8;11207:38;;11228:6;;;;;;;;;;;11207:38;;;;;;;;;;;;11265:8;11256:6;;:17;;;;;;;;;;;;;;;;;;11037:244:::0;:::o;17923:24::-;;;;:::o;8819:181::-;8877:7;8897:9;8913:1;8909;:5;;;;:::i;:::-;8897:17;;8938:1;8933;:6;;8925:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8991:1;8984:8;;;8819:181;;;;:::o;95:98::-;148:7;175:10;168:17;;95:98;:::o;8275:380::-;8428:1;8411:19;;:5;:19;;;;8403:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8509:1;8490:21;;:7;:21;;;;8482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8593:6;8563:11;:18;8575:5;8563:18;;;;;;;;;;;;;;;:27;8582:7;8563:27;;;;;;;;;;;;;;;:36;;;;8631:7;8615:32;;8624:5;8615:32;;;8640:6;8615:32;;;;;;:::i;:::-;;;;;;;;8275:380;;;:::o;25716:4269::-;25864:1;25848:18;;:4;:18;;;;25840:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25941:1;25927:16;;:2;:16;;;;25919:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26003:9;:15;26013:4;26003:15;;;;;;;;;;;;;;;;;;;;;;;;;26002:16;25994:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;26136:1;26126:6;:11;26122:93;;;26154:28;26170:4;26176:2;26180:1;26154:15;:28::i;:::-;26197:7;;26122:93;26258:11;;26239:15;:30;26235:56;;;26287:4;26271:9;:13;26281:2;26271:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;26235:56;26316:14;;;;;;;;;;;26312:1838;;;26377:7;:5;:7::i;:::-;26369:15;;:4;:15;;;;:49;;;;;26411:7;:5;:7::i;:::-;26405:13;;:2;:13;;;;26369:49;:86;;;;;26453:1;26439:16;;:2;:16;;;;26369:86;:128;;;;;26490:6;26476:21;;:2;:21;;;;26369:128;:159;;;;;26519:9;;;;;;;;;;;26518:10;26369:159;26347:1792;;;26568:13;;;;;;;;;;;26563:150;;26614:19;:25;26634:4;26614:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26643:19;:23;26663:2;26643:23;;;;;;;;;;;;;;;;;;;;;;;;;26614:52;26606:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26563:150;26871:20;;;;;;;;;;;26867:423;;;26925:7;:5;:7::i;:::-;26919:13;;:2;:13;;;;:47;;;;;26950:15;26936:30;;:2;:30;;;;26919:47;:79;;;;;26984:13;26970:28;;:2;:28;;;;26919:79;26915:356;;;27076:12;27034:28;:39;27063:9;27034:39;;;;;;;;;;;;;;;;:54;27026:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27235:12;27193:28;:39;27222:9;27193:39;;;;;;;;;;;;;;;:54;;;;26915:356;26867:423;27360:25;:31;27386:4;27360:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27396:31;:35;27428:2;27396:35;;;;;;;;;;;;;;;;;;;;;;;;;27395:36;27360:71;27356:768;;;27474:20;;27464:6;:30;;27456:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27609:9;;27592:13;27602:2;27592:9;:13::i;:::-;27583:6;:22;;;;:::i;:::-;:35;;27575:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27356:768;;;27737:25;:29;27763:2;27737:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27771:31;:37;27803:4;27771:37;;;;;;;;;;;;;;;;;;;;;;;;;27770:38;27737:71;27733:391;;;27851:20;;27841:6;:30;;27833:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;27733:391;;;27978:31;:35;28010:2;27978:35;;;;;;;;;;;;;;;;;;;;;;;;;27973:151;;28071:9;;28054:13;28064:2;28054:9;:13::i;:::-;28045:6;:22;;;;:::i;:::-;:35;;28037:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27973:151;27733:391;27356:768;26347:1792;26312:1838;28164:28;28195:24;28213:4;28195:9;:24::i;:::-;28164:55;;28230:12;28269:18;;28245:20;:42;;28230:57;;28316:7;:34;;;;;28341:9;;;;;;;;;;;28340:10;28316:34;:83;;;;;28368:25;:31;28394:4;28368:31;;;;;;;;;;;;;;;;;;;;;;;;;28367:32;28316:83;:126;;;;;28417:19;:25;28437:4;28417:25;;;;;;;;;;;;;;;;;;;;;;;;;28416:26;28316:126;:167;;;;;28460:19;:23;28480:2;28460:23;;;;;;;;;;;;;;;;;;;;;;;;;28459:24;28316:167;28298:297;;;28522:4;28510:9;;:16;;;;;;;;;;;;;;;;;;28541:10;:8;:10::i;:::-;28578:5;28566:9;;:17;;;;;;;;;;;;;;;;;;28298:297;28607:12;28623:9;;;;;;;;;;;28622:10;28607:25;;28734:19;:25;28754:4;28734:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28763:19;:23;28783:2;28763:23;;;;;;;;;;;;;;;;;;;;;;;;;28734:52;28730:100;;;28813:5;28803:15;;28730:100;28850:12;28955:7;28951:981;;;29007:25;:29;29033:2;29007:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29056:1;29040:13;;:17;29007:50;29003:762;;;29085:34;29115:3;29085:25;29096:13;;29085:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29078:41;;29188:13;;29168:17;;29161:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;29138:19;;:63;;;;;;;:::i;:::-;;;;;;;;29258:13;;29244:11;;29237:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;29220:13;;:51;;;;;;;:::i;:::-;;;;;;;;29340:13;;29320:17;;29313:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;29290:19;;:63;;;;;;;:::i;:::-;;;;;;;;29003:762;;;29415:25;:31;29441:4;29415:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29465:1;29450:12;;:16;29415:51;29411:354;;;29491:33;29520:3;29491:24;29502:12;;29491:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29484:40;;29589:12;;29570:16;;29563:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;29540:19;;:61;;;;;;;:::i;:::-;;;;;;;;29657:12;;29644:10;;29637:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;29620:13;;:49;;;;;;;:::i;:::-;;;;;;;;29737:12;;29718:16;;29711:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;29688:19;;:61;;;;;;;:::i;:::-;;;;;;;;29411:354;29003:762;29804:1;29797:4;:8;29793:91;;;29826:42;29842:4;29856;29863;29826:15;:42::i;:::-;29793:91;29916:4;29906:14;;;;;:::i;:::-;;;28951:981;29944:33;29960:4;29966:2;29970:6;29944:15;:33::i;:::-;25829:4156;;;;25716:4269;;;;:::o;9152:192::-;9238:7;9271:1;9266;:6;;9274:12;9258:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9298:9;9314:1;9310;:5;;;;:::i;:::-;9298:17;;9335:1;9328:8;;;9152:192;;;;;:::o;24604:188::-;24721:5;24687:25;:31;24713:4;24687:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24778:5;24744:40;;24772:4;24744:40;;;;;;;;;;;;24604:188;;:::o;6882:573::-;7040:1;7022:20;;:6;:20;;;;7014:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7124:1;7103:23;;:9;:23;;;;7095:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7179:47;7200:6;7208:9;7219:6;7179:20;:47::i;:::-;7259:71;7281:6;7259:71;;;;;;;;;;;;;;;;;:9;:17;7269:6;7259:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7239:9;:17;7249:6;7239:17;;;;;;;;;;;;;;;:91;;;;7364:32;7389:6;7364:9;:20;7374:9;7364:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7341:9;:20;7351:9;7341:20;;;;;;;;;;;;;;;:55;;;;7429:9;7412:35;;7421:6;7412:35;;;7440:6;7412:35;;;;;;:::i;:::-;;;;;;;;6882:573;;;:::o;31117:1438::-;31156:23;31182:24;31200:4;31182:9;:24::i;:::-;31156:50;;31217:25;31289:13;;31267:19;;31245;;:41;;;;:::i;:::-;:57;;;;:::i;:::-;31217:85;;31346:1;31327:15;:20;:46;;;;31372:1;31351:17;:22;31327:46;31323:59;;;31375:7;;;;31323:59;31435:2;31414:18;;:23;;;;:::i;:::-;31396:15;:41;31392:113;;;31491:2;31470:18;;:23;;;;:::i;:::-;31452:41;;31392:113;31574:23;31660:1;31640:17;31618:19;;31600:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;31574:87;;31672:26;31701:36;31721:15;31701;:19;;:36;;;;:::i;:::-;31672:65;;31758:25;31786:21;31758:49;;31820:37;31838:18;31820:17;:37::i;:::-;31879:18;31900:44;31926:17;31900:21;:25;;:44;;;;:::i;:::-;31879:65;;31955:23;31981:58;32021:17;31981:35;31996:19;;31981:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;31955:84;;32050:17;32070:52;32104:17;32070:29;32085:13;;32070:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;32050:72;;32133:23;32190:9;32172:15;32159:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;32133:66;;32242:1;32220:19;:23;;;;32276:1;32254:19;:23;;;;32304:1;32288:13;:17;;;;32356:1;32338:15;:19;:42;;;;;32379:1;32361:15;:19;32338:42;32334:214;;;32397:47;32411:15;32428;32397:13;:47::i;:::-;32464:72;32479:18;32499:15;32516:19;;32464:72;;;;;;;;:::i;:::-;;;;;;;;32334:214;31145:1410;;;;;;;;;31117:1438;:::o;9352:250::-;9410:7;9439:1;9434;:6;9430:47;;;9464:1;9457:8;;;;9430:47;9489:9;9505:1;9501;:5;;;;:::i;:::-;9489:17;;9534:1;9529;9525;:5;;;;:::i;:::-;:10;9517:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9593:1;9586:8;;;9352:250;;;;;:::o;9610:132::-;9668:7;9695:39;9699:1;9702;9695:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9688:46;;9610:132;;;;:::o;8663:125::-;;;;:::o;9008:136::-;9066:7;9093:43;9097:1;9100;9093:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9086:50;;9008:136;;;;:::o;29993:590::-;30120:21;30158:1;30144:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30120:40;;30189:4;30171;30176:1;30171:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30215:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30205:4;30210:1;30205:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30250:62;30267:4;30282:15;30300:11;30250:8;:62::i;:::-;30351:15;:66;;;30432:11;30458:1;30502:4;30529;30549:15;30351:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30049:534;29993:590;:::o;30595:514::-;30744:62;30761:4;30776:15;30794:11;30744:8;:62::i;:::-;30849:15;:31;;;30888:9;30921:4;30941:11;30967:1;31010;31053:7;:5;:7::i;:::-;31075:15;30849:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30595:514;;:::o;9750:278::-;9836:7;9868:1;9864;:5;9871:12;9856:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9895:9;9911:1;9907;:5;;;;:::i;:::-;9895:17;;10019:1;10012:8;;;9750:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:117::-;7010:1;7007;7000:12;7024:180;7072:77;7069:1;7062:88;7169:4;7166:1;7159:15;7193:4;7190:1;7183:15;7210:281;7293:27;7315:4;7293:27;:::i;:::-;7285:6;7281:40;7423:6;7411:10;7408:22;7387:18;7375:10;7372:34;7369:62;7366:88;;;7434:18;;:::i;:::-;7366:88;7474:10;7470:2;7463:22;7253:238;7210:281;;:::o;7497:129::-;7531:6;7558:20;;:::i;:::-;7548:30;;7587:33;7615:4;7607:6;7587:33;:::i;:::-;7497:129;;;:::o;7632:311::-;7709:4;7799:18;7791:6;7788:30;7785:56;;;7821:18;;:::i;:::-;7785:56;7871:4;7863:6;7859:17;7851:25;;7931:4;7925;7921:15;7913:23;;7632:311;;;:::o;7949:117::-;8058:1;8055;8048:12;8089:710;8185:5;8210:81;8226:64;8283:6;8226:64;:::i;:::-;8210:81;:::i;:::-;8201:90;;8311:5;8340:6;8333:5;8326:21;8374:4;8367:5;8363:16;8356:23;;8427:4;8419:6;8415:17;8407:6;8403:30;8456:3;8448:6;8445:15;8442:122;;;8475:79;;:::i;:::-;8442:122;8590:6;8573:220;8607:6;8602:3;8599:15;8573:220;;;8682:3;8711:37;8744:3;8732:10;8711:37;:::i;:::-;8706:3;8699:50;8778:4;8773:3;8769:14;8762:21;;8649:144;8633:4;8628:3;8624:14;8617:21;;8573:220;;;8577:21;8191:608;;8089:710;;;;;:::o;8822:370::-;8893:5;8942:3;8935:4;8927:6;8923:17;8919:27;8909:122;;8950:79;;:::i;:::-;8909:122;9067:6;9054:20;9092:94;9182:3;9174:6;9167:4;9159:6;9155:17;9092:94;:::i;:::-;9083:103;;8899:293;8822:370;;;;:::o;9198:539::-;9282:6;9331:2;9319:9;9310:7;9306:23;9302:32;9299:119;;;9337:79;;:::i;:::-;9299:119;9485:1;9474:9;9470:17;9457:31;9515:18;9507:6;9504:30;9501:117;;;9537:79;;:::i;:::-;9501:117;9642:78;9712:7;9703:6;9692:9;9688:22;9642:78;:::i;:::-;9632:88;;9428:302;9198:539;;;;:::o;9743:116::-;9813:21;9828:5;9813:21;:::i;:::-;9806:5;9803:32;9793:60;;9849:1;9846;9839:12;9793:60;9743:116;:::o;9865:133::-;9908:5;9946:6;9933:20;9924:29;;9962:30;9986:5;9962:30;:::i;:::-;9865:133;;;;:::o;10004:468::-;10069:6;10077;10126:2;10114:9;10105:7;10101:23;10097:32;10094:119;;;10132:79;;:::i;:::-;10094:119;10252:1;10277:53;10322:7;10313:6;10302:9;10298:22;10277:53;:::i;:::-;10267:63;;10223:117;10379:2;10405:50;10447:7;10438:6;10427:9;10423:22;10405:50;:::i;:::-;10395:60;;10350:115;10004:468;;;;;:::o;10478:619::-;10555:6;10563;10571;10620:2;10608:9;10599:7;10595:23;10591:32;10588:119;;;10626:79;;:::i;:::-;10588:119;10746:1;10771:53;10816:7;10807:6;10796:9;10792:22;10771:53;:::i;:::-;10761:63;;10717:117;10873:2;10899:53;10944:7;10935:6;10924:9;10920:22;10899:53;:::i;:::-;10889:63;;10844:118;11001:2;11027:53;11072:7;11063:6;11052:9;11048:22;11027:53;:::i;:::-;11017:63;;10972:118;10478:619;;;;;:::o;11103:474::-;11171:6;11179;11228:2;11216:9;11207:7;11203:23;11199:32;11196:119;;;11234:79;;:::i;:::-;11196:119;11354:1;11379:53;11424:7;11415:6;11404:9;11400:22;11379:53;:::i;:::-;11369:63;;11325:117;11481:2;11507:53;11552:7;11543:6;11532:9;11528:22;11507:53;:::i;:::-;11497:63;;11452:118;11103:474;;;;;:::o;11583:180::-;11631:77;11628:1;11621:88;11728:4;11725:1;11718:15;11752:4;11749:1;11742:15;11769:320;11813:6;11850:1;11844:4;11840:12;11830:22;;11897:1;11891:4;11887:12;11918:18;11908:81;;11974:4;11966:6;11962:17;11952:27;;11908:81;12036:2;12028:6;12025:14;12005:18;12002:38;11999:84;;;12055:18;;:::i;:::-;11999:84;11820:269;11769:320;;;:::o;12095:182::-;12235:34;12231:1;12223:6;12219:14;12212:58;12095:182;:::o;12283:366::-;12425:3;12446:67;12510:2;12505:3;12446:67;:::i;:::-;12439:74;;12522:93;12611:3;12522:93;:::i;:::-;12640:2;12635:3;12631:12;12624:19;;12283:366;;;:::o;12655:419::-;12821:4;12859:2;12848:9;12844:18;12836:26;;12908:9;12902:4;12898:20;12894:1;12883:9;12879:17;12872:47;12936:131;13062:4;12936:131;:::i;:::-;12928:139;;12655:419;;;:::o;13080:180::-;13128:77;13125:1;13118:88;13225:4;13222:1;13215:15;13249:4;13246:1;13239:15;13266:348;13306:7;13329:20;13347:1;13329:20;:::i;:::-;13324:25;;13363:20;13381:1;13363:20;:::i;:::-;13358:25;;13551:1;13483:66;13479:74;13476:1;13473:81;13468:1;13461:9;13454:17;13450:105;13447:131;;;13558:18;;:::i;:::-;13447:131;13606:1;13603;13599:9;13588:20;;13266:348;;;;:::o;13620:180::-;13668:77;13665:1;13658:88;13765:4;13762:1;13755:15;13789:4;13786:1;13779:15;13806:185;13846:1;13863:20;13881:1;13863:20;:::i;:::-;13858:25;;13897:20;13915:1;13897:20;:::i;:::-;13892:25;;13936:1;13926:35;;13941:18;;:::i;:::-;13926:35;13983:1;13980;13976:9;13971:14;;13806:185;;;;:::o;13997:234::-;14137:34;14133:1;14125:6;14121:14;14114:58;14206:17;14201:2;14193:6;14189:15;14182:42;13997:234;:::o;14237:366::-;14379:3;14400:67;14464:2;14459:3;14400:67;:::i;:::-;14393:74;;14476:93;14565:3;14476:93;:::i;:::-;14594:2;14589:3;14585:12;14578:19;;14237:366;;;:::o;14609:419::-;14775:4;14813:2;14802:9;14798:18;14790:26;;14862:9;14856:4;14852:20;14848:1;14837:9;14833:17;14826:47;14890:131;15016:4;14890:131;:::i;:::-;14882:139;;14609:419;;;:::o;15034:180::-;15082:77;15079:1;15072:88;15179:4;15176:1;15169:15;15203:4;15200:1;15193:15;15220:233;15259:3;15282:24;15300:5;15282:24;:::i;:::-;15273:33;;15328:66;15321:5;15318:77;15315:103;;;15398:18;;:::i;:::-;15315:103;15445:1;15438:5;15434:13;15427:20;;15220:233;;;:::o;15459:305::-;15499:3;15518:20;15536:1;15518:20;:::i;:::-;15513:25;;15552:20;15570:1;15552:20;:::i;:::-;15547:25;;15706:1;15638:66;15634:74;15631:1;15628:81;15625:107;;;15712:18;;:::i;:::-;15625:107;15756:1;15753;15749:9;15742:16;;15459:305;;;;:::o;15770:179::-;15910:31;15906:1;15898:6;15894:14;15887:55;15770:179;:::o;15955:366::-;16097:3;16118:67;16182:2;16177:3;16118:67;:::i;:::-;16111:74;;16194:93;16283:3;16194:93;:::i;:::-;16312:2;16307:3;16303:12;16296:19;;15955:366;;;:::o;16327:419::-;16493:4;16531:2;16520:9;16516:18;16508:26;;16580:9;16574:4;16570:20;16566:1;16555:9;16551:17;16544:47;16608:131;16734:4;16608:131;:::i;:::-;16600:139;;16327:419;;;:::o;16752:244::-;16892:34;16888:1;16880:6;16876:14;16869:58;16961:27;16956:2;16948:6;16944:15;16937:52;16752:244;:::o;17002:366::-;17144:3;17165:67;17229:2;17224:3;17165:67;:::i;:::-;17158:74;;17241:93;17330:3;17241:93;:::i;:::-;17359:2;17354:3;17350:12;17343:19;;17002:366;;;:::o;17374:419::-;17540:4;17578:2;17567:9;17563:18;17555:26;;17627:9;17621:4;17617:20;17613:1;17602:9;17598:17;17591:47;17655:131;17781:4;17655:131;:::i;:::-;17647:139;;17374:419;;;:::o;17799:179::-;17939:31;17935:1;17927:6;17923:14;17916:55;17799:179;:::o;17984:366::-;18126:3;18147:67;18211:2;18206:3;18147:67;:::i;:::-;18140:74;;18223:93;18312:3;18223:93;:::i;:::-;18341:2;18336:3;18332:12;18325:19;;17984:366;;;:::o;18356:419::-;18522:4;18560:2;18549:9;18545:18;18537:26;;18609:9;18603:4;18599:20;18595:1;18584:9;18580:17;18573:47;18637:131;18763:4;18637:131;:::i;:::-;18629:139;;18356:419;;;:::o;18781:223::-;18921:34;18917:1;18909:6;18905:14;18898:58;18990:6;18985:2;18977:6;18973:15;18966:31;18781:223;:::o;19010:366::-;19152:3;19173:67;19237:2;19232:3;19173:67;:::i;:::-;19166:74;;19249:93;19338:3;19249:93;:::i;:::-;19367:2;19362:3;19358:12;19351:19;;19010:366;;;:::o;19382:419::-;19548:4;19586:2;19575:9;19571:18;19563:26;;19635:9;19629:4;19625:20;19621:1;19610:9;19606:17;19599:47;19663:131;19789:4;19663:131;:::i;:::-;19655:139;;19382:419;;;:::o;19807:240::-;19947:34;19943:1;19935:6;19931:14;19924:58;20016:23;20011:2;20003:6;19999:15;19992:48;19807:240;:::o;20053:366::-;20195:3;20216:67;20280:2;20275:3;20216:67;:::i;:::-;20209:74;;20292:93;20381:3;20292:93;:::i;:::-;20410:2;20405:3;20401:12;20394:19;;20053:366;;;:::o;20425:419::-;20591:4;20629:2;20618:9;20614:18;20606:26;;20678:9;20672:4;20668:20;20664:1;20653:9;20649:17;20642:47;20706:131;20832:4;20706:131;:::i;:::-;20698:139;;20425:419;;;:::o;20850:239::-;20990:34;20986:1;20978:6;20974:14;20967:58;21059:22;21054:2;21046:6;21042:15;21035:47;20850:239;:::o;21095:366::-;21237:3;21258:67;21322:2;21317:3;21258:67;:::i;:::-;21251:74;;21334:93;21423:3;21334:93;:::i;:::-;21452:2;21447:3;21443:12;21436:19;;21095:366;;;:::o;21467:419::-;21633:4;21671:2;21660:9;21656:18;21648:26;;21720:9;21714:4;21710:20;21706:1;21695:9;21691:17;21684:47;21748:131;21874:4;21748:131;:::i;:::-;21740:139;;21467:419;;;:::o;21892:225::-;22032:34;22028:1;22020:6;22016:14;22009:58;22101:8;22096:2;22088:6;22084:15;22077:33;21892:225;:::o;22123:366::-;22265:3;22286:67;22350:2;22345:3;22286:67;:::i;:::-;22279:74;;22362:93;22451:3;22362:93;:::i;:::-;22480:2;22475:3;22471:12;22464:19;;22123:366;;;:::o;22495:419::-;22661:4;22699:2;22688:9;22684:18;22676:26;;22748:9;22742:4;22738:20;22734:1;22723:9;22719:17;22712:47;22776:131;22902:4;22776:131;:::i;:::-;22768:139;;22495:419;;;:::o;22920:177::-;23060:29;23056:1;23048:6;23044:14;23037:53;22920:177;:::o;23103:366::-;23245:3;23266:67;23330:2;23325:3;23266:67;:::i;:::-;23259:74;;23342:93;23431:3;23342:93;:::i;:::-;23460:2;23455:3;23451:12;23444:19;;23103:366;;;:::o;23475:419::-;23641:4;23679:2;23668:9;23664:18;23656:26;;23728:9;23722:4;23718:20;23714:1;23703:9;23699:17;23692:47;23756:131;23882:4;23756:131;:::i;:::-;23748:139;;23475:419;;;:::o;23900:223::-;24040:34;24036:1;24028:6;24024:14;24017:58;24109:6;24104:2;24096:6;24092:15;24085:31;23900:223;:::o;24129:366::-;24271:3;24292:67;24356:2;24351:3;24292:67;:::i;:::-;24285:74;;24368:93;24457:3;24368:93;:::i;:::-;24486:2;24481:3;24477:12;24470:19;;24129:366;;;:::o;24501:419::-;24667:4;24705:2;24694:9;24690:18;24682:26;;24754:9;24748:4;24744:20;24740:1;24729:9;24725:17;24718:47;24782:131;24908:4;24782:131;:::i;:::-;24774:139;;24501:419;;;:::o;24926:221::-;25066:34;25062:1;25054:6;25050:14;25043:58;25135:4;25130:2;25122:6;25118:15;25111:29;24926:221;:::o;25153:366::-;25295:3;25316:67;25380:2;25375:3;25316:67;:::i;:::-;25309:74;;25392:93;25481:3;25392:93;:::i;:::-;25510:2;25505:3;25501:12;25494:19;;25153:366;;;:::o;25525:419::-;25691:4;25729:2;25718:9;25714:18;25706:26;;25778:9;25772:4;25768:20;25764:1;25753:9;25749:17;25742:47;25806:131;25932:4;25806:131;:::i;:::-;25798:139;;25525:419;;;:::o;25950:224::-;26090:34;26086:1;26078:6;26074:14;26067:58;26159:7;26154:2;26146:6;26142:15;26135:32;25950:224;:::o;26180:366::-;26322:3;26343:67;26407:2;26402:3;26343:67;:::i;:::-;26336:74;;26419:93;26508:3;26419:93;:::i;:::-;26537:2;26532:3;26528:12;26521:19;;26180:366;;;:::o;26552:419::-;26718:4;26756:2;26745:9;26741:18;26733:26;;26805:9;26799:4;26795:20;26791:1;26780:9;26776:17;26769:47;26833:131;26959:4;26833:131;:::i;:::-;26825:139;;26552:419;;;:::o;26977:222::-;27117:34;27113:1;27105:6;27101:14;27094:58;27186:5;27181:2;27173:6;27169:15;27162:30;26977:222;:::o;27205:366::-;27347:3;27368:67;27432:2;27427:3;27368:67;:::i;:::-;27361:74;;27444:93;27533:3;27444:93;:::i;:::-;27562:2;27557:3;27553:12;27546:19;;27205:366;;;:::o;27577:419::-;27743:4;27781:2;27770:9;27766:18;27758:26;;27830:9;27824:4;27820:20;27816:1;27805:9;27801:17;27794:47;27858:131;27984:4;27858:131;:::i;:::-;27850:139;;27577:419;;;:::o;28002:301::-;28142:34;28138:1;28130:6;28126:14;28119:58;28211:34;28206:2;28198:6;28194:15;28187:59;28280:15;28275:2;28267:6;28263:15;28256:40;28002:301;:::o;28309:366::-;28451:3;28472:67;28536:2;28531:3;28472:67;:::i;:::-;28465:74;;28548:93;28637:3;28548:93;:::i;:::-;28666:2;28661:3;28657:12;28650:19;;28309:366;;;:::o;28681:419::-;28847:4;28885:2;28874:9;28870:18;28862:26;;28934:9;28928:4;28924:20;28920:1;28909:9;28905:17;28898:47;28962:131;29088:4;28962:131;:::i;:::-;28954:139;;28681:419;;;:::o;29106:172::-;29246:24;29242:1;29234:6;29230:14;29223:48;29106:172;:::o;29284:366::-;29426:3;29447:67;29511:2;29506:3;29447:67;:::i;:::-;29440:74;;29523:93;29612:3;29523:93;:::i;:::-;29641:2;29636:3;29632:12;29625:19;;29284:366;;;:::o;29656:419::-;29822:4;29860:2;29849:9;29845:18;29837:26;;29909:9;29903:4;29899:20;29895:1;29884:9;29880:17;29873:47;29937:131;30063:4;29937:131;:::i;:::-;29929:139;;29656:419;;;:::o;30081:297::-;30221:34;30217:1;30209:6;30205:14;30198:58;30290:34;30285:2;30277:6;30273:15;30266:59;30359:11;30354:2;30346:6;30342:15;30335:36;30081:297;:::o;30384:366::-;30526:3;30547:67;30611:2;30606:3;30547:67;:::i;:::-;30540:74;;30623:93;30712:3;30623:93;:::i;:::-;30741:2;30736:3;30732:12;30725:19;;30384:366;;;:::o;30756:419::-;30922:4;30960:2;30949:9;30945:18;30937:26;;31009:9;31003:4;30999:20;30995:1;30984:9;30980:17;30973:47;31037:131;31163:4;31037:131;:::i;:::-;31029:139;;30756:419;;;:::o;31181:240::-;31321:34;31317:1;31309:6;31305:14;31298:58;31390:23;31385:2;31377:6;31373:15;31366:48;31181:240;:::o;31427:366::-;31569:3;31590:67;31654:2;31649:3;31590:67;:::i;:::-;31583:74;;31666:93;31755:3;31666:93;:::i;:::-;31784:2;31779:3;31775:12;31768:19;;31427:366;;;:::o;31799:419::-;31965:4;32003:2;31992:9;31988:18;31980:26;;32052:9;32046:4;32042:20;32038:1;32027:9;32023:17;32016:47;32080:131;32206:4;32080:131;:::i;:::-;32072:139;;31799:419;;;:::o;32224:169::-;32364:21;32360:1;32352:6;32348:14;32341:45;32224:169;:::o;32399:366::-;32541:3;32562:67;32626:2;32621:3;32562:67;:::i;:::-;32555:74;;32638:93;32727:3;32638:93;:::i;:::-;32756:2;32751:3;32747:12;32740:19;;32399:366;;;:::o;32771:419::-;32937:4;32975:2;32964:9;32960:18;32952:26;;33024:9;33018:4;33014:20;33010:1;32999:9;32995:17;32988:47;33052:131;33178:4;33052:131;:::i;:::-;33044:139;;32771:419;;;:::o;33196:241::-;33336:34;33332:1;33324:6;33320:14;33313:58;33405:24;33400:2;33392:6;33388:15;33381:49;33196:241;:::o;33443:366::-;33585:3;33606:67;33670:2;33665:3;33606:67;:::i;:::-;33599:74;;33682:93;33771:3;33682:93;:::i;:::-;33800:2;33795:3;33791:12;33784:19;;33443:366;;;:::o;33815:419::-;33981:4;34019:2;34008:9;34004:18;33996:26;;34068:9;34062:4;34058:20;34054:1;34043:9;34039:17;34032:47;34096:131;34222:4;34096:131;:::i;:::-;34088:139;;33815:419;;;:::o;34240:191::-;34280:4;34300:20;34318:1;34300:20;:::i;:::-;34295:25;;34334:20;34352:1;34334:20;:::i;:::-;34329:25;;34373:1;34370;34367:8;34364:34;;;34378:18;;:::i;:::-;34364:34;34423:1;34420;34416:9;34408:17;;34240:191;;;;:::o;34437:442::-;34586:4;34624:2;34613:9;34609:18;34601:26;;34637:71;34705:1;34694:9;34690:17;34681:6;34637:71;:::i;:::-;34718:72;34786:2;34775:9;34771:18;34762:6;34718:72;:::i;:::-;34800;34868:2;34857:9;34853:18;34844:6;34800:72;:::i;:::-;34437:442;;;;;;:::o;34885:220::-;35025:34;35021:1;35013:6;35009:14;35002:58;35094:3;35089:2;35081:6;35077:15;35070:28;34885:220;:::o;35111:366::-;35253:3;35274:67;35338:2;35333:3;35274:67;:::i;:::-;35267:74;;35350:93;35439:3;35350:93;:::i;:::-;35468:2;35463:3;35459:12;35452:19;;35111:366;;;:::o;35483:419::-;35649:4;35687:2;35676:9;35672:18;35664:26;;35736:9;35730:4;35726:20;35722:1;35711:9;35707:17;35700:47;35764:131;35890:4;35764:131;:::i;:::-;35756:139;;35483:419;;;:::o;35908:143::-;35965:5;35996:6;35990:13;35981:22;;36012:33;36039:5;36012:33;:::i;:::-;35908:143;;;;:::o;36057:351::-;36127:6;36176:2;36164:9;36155:7;36151:23;36147:32;36144:119;;;36182:79;;:::i;:::-;36144:119;36302:1;36327:64;36383:7;36374:6;36363:9;36359:22;36327:64;:::i;:::-;36317:74;;36273:128;36057:351;;;;:::o;36414:85::-;36459:7;36488:5;36477:16;;36414:85;;;:::o;36505:158::-;36563:9;36596:61;36614:42;36623:32;36649:5;36623:32;:::i;:::-;36614:42;:::i;:::-;36596:61;:::i;:::-;36583:74;;36505:158;;;:::o;36669:147::-;36764:45;36803:5;36764:45;:::i;:::-;36759:3;36752:58;36669:147;;:::o;36822:114::-;36889:6;36923:5;36917:12;36907:22;;36822:114;;;:::o;36942:184::-;37041:11;37075:6;37070:3;37063:19;37115:4;37110:3;37106:14;37091:29;;36942:184;;;;:::o;37132:132::-;37199:4;37222:3;37214:11;;37252:4;37247:3;37243:14;37235:22;;37132:132;;;:::o;37270:108::-;37347:24;37365:5;37347:24;:::i;:::-;37342:3;37335:37;37270:108;;:::o;37384:179::-;37453:10;37474:46;37516:3;37508:6;37474:46;:::i;:::-;37552:4;37547:3;37543:14;37529:28;;37384:179;;;;:::o;37569:113::-;37639:4;37671;37666:3;37662:14;37654:22;;37569:113;;;:::o;37718:732::-;37837:3;37866:54;37914:5;37866:54;:::i;:::-;37936:86;38015:6;38010:3;37936:86;:::i;:::-;37929:93;;38046:56;38096:5;38046:56;:::i;:::-;38125:7;38156:1;38141:284;38166:6;38163:1;38160:13;38141:284;;;38242:6;38236:13;38269:63;38328:3;38313:13;38269:63;:::i;:::-;38262:70;;38355:60;38408:6;38355:60;:::i;:::-;38345:70;;38201:224;38188:1;38185;38181:9;38176:14;;38141:284;;;38145:14;38441:3;38434:10;;37842:608;;;37718:732;;;;:::o;38456:831::-;38719:4;38757:3;38746:9;38742:19;38734:27;;38771:71;38839:1;38828:9;38824:17;38815:6;38771:71;:::i;:::-;38852:80;38928:2;38917:9;38913:18;38904:6;38852:80;:::i;:::-;38979:9;38973:4;38969:20;38964:2;38953:9;38949:18;38942:48;39007:108;39110:4;39101:6;39007:108;:::i;:::-;38999:116;;39125:72;39193:2;39182:9;39178:18;39169:6;39125:72;:::i;:::-;39207:73;39275:3;39264:9;39260:19;39251:6;39207:73;:::i;:::-;38456:831;;;;;;;;:::o;39293:807::-;39542:4;39580:3;39569:9;39565:19;39557:27;;39594:71;39662:1;39651:9;39647:17;39638:6;39594:71;:::i;:::-;39675:72;39743:2;39732:9;39728:18;39719:6;39675:72;:::i;:::-;39757:80;39833:2;39822:9;39818:18;39809:6;39757:80;:::i;:::-;39847;39923:2;39912:9;39908:18;39899:6;39847:80;:::i;:::-;39937:73;40005:3;39994:9;39990:19;39981:6;39937:73;:::i;:::-;40020;40088:3;40077:9;40073:19;40064:6;40020:73;:::i;:::-;39293:807;;;;;;;;;:::o;40106:143::-;40163:5;40194:6;40188:13;40179:22;;40210:33;40237:5;40210:33;:::i;:::-;40106:143;;;;:::o;40255:663::-;40343:6;40351;40359;40408:2;40396:9;40387:7;40383:23;40379:32;40376:119;;;40414:79;;:::i;:::-;40376:119;40534:1;40559:64;40615:7;40606:6;40595:9;40591:22;40559:64;:::i;:::-;40549:74;;40505:128;40672:2;40698:64;40754:7;40745:6;40734:9;40730:22;40698:64;:::i;:::-;40688:74;;40643:129;40811:2;40837:64;40893:7;40884:6;40873:9;40869:22;40837:64;:::i;:::-;40827:74;;40782:129;40255:663;;;;;:::o

Swarm Source

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