ETH Price: $2,414.10 (-0.38%)

Token

Snorp (SNORP)
 

Overview

Max Total Supply

1,000,000 SNORP

Holders

147

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
magico72.eth
Balance
6,140.122736432 SNORP

Value
$0.00
0x3f1ab5e90d44fa44fd4dfde1b8db53282c7127b6
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Snorp

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 2023-11-04
*/

/*
 .----------------.  .-----------------. .----------------.  .----------------.  .----------------. 
| .--------------. || .--------------. || .--------------. || .--------------. || .--------------. |
| |    _______   | || | ____  _____  | || |     ____     | || |  _______     | || |   ______     | |
| |   /  ___  |  | || ||_   \|_   _| | || |   .'    `.   | || | |_   __ \    | || |  |_   __ \   | |
| |  |  (__ \_|  | || |  |   \ | |   | || |  /  .--.  \  | || |   | |__) |   | || |    | |__) |  | |
| |   '.___`-.   | || |  | |\ \| |   | || |  | |    | |  | || |   |  __ /    | || |    |  ___/   | |
| |  |`\____) |  | || | _| |_\   |_  | || |  \  `--'  /  | || |  _| |  \ \_  | || |   _| |_      | |
| |  |_______.'  | || ||_____|\____| | || |   `.____.'   | || | |____| |___| | || |  |_____|     | |
| |              | || |              | || |              | || |              | || |              | |
| '--------------' || '--------------' || '--------------' || '--------------' || '--------------' |
 '----------------'  '----------------'  '----------------'  '----------------'  '----------------' 

Hi! I'm Snorp
I used to be a sculpture in a hospital waiting room, but now I'm the crypto world's favorite meme, thanks to my fren vitalik. 
I'm all about fun and laughter, not your typical PND shitcoins. While those other coins are busy getting ETH Trending and attracting Shit Callers with botted channels, 
I'm here calculating how many memes I can generate in a day. I've got a Ph.D. in memeology, you see. 
So, hop on board, and let's release your inner degen in full force. Ape into $SNORP now mfs!

Website: https://snorp.lol
Telegram: https://t.me/SnorpOfficial
X / Twitter: https://twitter.com/snorp_eth
https://knowyourmeme.com/memes/zhdun-snorp
*/

// 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 Snorp is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

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

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

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event feeWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event AutoNukeLP();
    event ManualNukeLP();

    constructor() ERC20(unicode"Snorp", unicode"SNORP") {
        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 buyDevFee = 20;
        uint256 buyLiquidityFee = 0;

        uint256 sellDevFee = 30;
        uint256 sellLiquidityFee = 0;
        
        uint256 totalSupply = 1e6 * 1e9;
        
        maxTransactionAmount = totalSupply * 1 / 100;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 20 / 10000;

        _buyDevFee = buyDevFee;
        _buyLiquidityFee = buyLiquidityFee;
        buyTotalFees = _buyDevFee + _buyLiquidityFee;
        
        _sellDevFee = sellDevFee;
        _sellLiquidityFee = sellLiquidityFee;
        sellTotalFees = _sellDevFee + _sellLiquidityFee;
        
        feeWallet = address(owner()); // set as fee wallet

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

    // once enabled, can never be turned off
    function triggerLaunch() external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeMaxLimits() 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 / 1000, "Swap amount cannot be lower than 0.1% total supply.");
  	    require(newAmount <= totalSupply() * 10 / 1000, "Swap amount cannot be higher than 1% 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() * 1 / 1000)/1e9, "Cannot set maxWallet lower than 0.1%");
        maxWallet = newNum * 1e9;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function adjustTax(uint256 devFeeOnBuy, uint256 devFeeOnSell, uint256 liquidityFeeOnBuy, uint256 liquidityFeeOnSell) external onlyOwner {
        _buyDevFee = devFeeOnBuy;
        _buyLiquidityFee = liquidityFeeOnBuy;
        buyTotalFees = _buyDevFee + _buyLiquidityFee;
        require(buyTotalFees <= 70, "Must keep fees at 70% or less");

        _sellDevFee = devFeeOnSell;
        _sellLiquidityFee = liquidityFeeOnSell;
        sellTotalFees = _sellDevFee + _sellLiquidityFee;
    }

    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;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    _tokensForLiquidity += fees * _buyLiquidityFee / buyTotalFees;
                _tokensForDev += fees * _buyDevFee / 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 + _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 ethForDev = ethBalance.mul(_tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
        
        _tokensForLiquidity = 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":"uint256","name":"devFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"devFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeOnSell","type":"uint256"}],"name":"adjustTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[{"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":"removeMaxLimits","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":"triggerLaunch","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":"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":"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"}]

60c06040526001600d60006101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600581526020017f536e6f72700000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f534e4f52500000000000000000000000000000000000000000000000000000008152508160039080519060200190620000cc92919062000ac1565b508060049080519060200190620000e592919062000ac1565b5050506000620000fa6200058d60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001c58160016200059560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026b919062000bdb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000bdb565b6040518363ffffffff1660e01b81526004016200031892919062000c1e565b6020604051808303816000875af115801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e919062000bdb565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003a660a05160016200059560201b60201c565b620003bb60a05160016200069260201b60201c565b600060149050600080601e905060008066038d7ea4c6800090506064600182620003e6919062000c84565b620003f2919062000d14565b600a81905550606460018262000409919062000c84565b62000415919062000d14565b600c819055506127106014826200042d919062000c84565b62000439919062000d14565b600b8190555084601181905550836012819055506012546011546200045f919062000d4c565b601081905550826014819055508160158190555060155460145462000485919062000d4c565b6013819055506200049b6200073360201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004fd620004ef6200073360201b60201c565b60016200075d60201b60201c565b620005103060016200075d60201b60201c565b6200052561dead60016200075d60201b60201c565b62000547620005396200073360201b60201c565b60016200059560201b60201c565b6200055a3060016200059560201b60201c565b6200056f61dead60016200059560201b60201c565b620005813382620008aa60201b60201c565b50505050505062000fdd565b600033905090565b620005a56200058d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000637576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062e9062000e0a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200076d6200058d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f69062000e0a565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200089e919062000e49565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200091d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009149062000eb6565b60405180910390fd5b620009316000838362000a5960201b60201c565b6200094d8160025462000a5e60201b620023331790919060201c565b600281905550620009ab816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a5e60201b620023331790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a4d919062000ee9565b60405180910390a35050565b505050565b600080828462000a6f919062000d4c565b90508381101562000ab7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aae9062000f56565b60405180910390fd5b8091505092915050565b82805462000acf9062000fa7565b90600052602060002090601f01602090048101928262000af3576000855562000b3f565b82601f1062000b0e57805160ff191683800117855562000b3f565b8280016001018555821562000b3f579182015b8281111562000b3e57825182559160200191906001019062000b21565b5b50905062000b4e919062000b52565b5090565b5b8082111562000b6d57600081600090555060010162000b53565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ba38262000b76565b9050919050565b62000bb58162000b96565b811462000bc157600080fd5b50565b60008151905062000bd58162000baa565b92915050565b60006020828403121562000bf45762000bf362000b71565b5b600062000c048482850162000bc4565b91505092915050565b62000c188162000b96565b82525050565b600060408201905062000c35600083018562000c0d565b62000c44602083018462000c0d565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c918262000c4b565b915062000c9e8362000c4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cda5762000cd962000c55565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d218262000c4b565b915062000d2e8362000c4b565b92508262000d415762000d4062000ce5565b5b828204905092915050565b600062000d598262000c4b565b915062000d668362000c4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d9e5762000d9d62000c55565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000df260208362000da9565b915062000dff8262000dba565b602082019050919050565b6000602082019050818103600083015262000e258162000de3565b9050919050565b60008115159050919050565b62000e438162000e2c565b82525050565b600060208201905062000e60600083018462000e38565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e9e601f8362000da9565b915062000eab8262000e66565b602082019050919050565b6000602082019050818103600083015262000ed18162000e8f565b9050919050565b62000ee38162000c4b565b82525050565b600060208201905062000f00600083018462000ed8565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f3e601b8362000da9565b915062000f4b8262000f06565b602082019050919050565b6000602082019050818103600083015262000f718162000f2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fc057607f821691505b6020821081141562000fd75762000fd662000f78565b5b50919050565b60805160a0516152ca6200104960003960008181610fd001528181611100015281816119940152612a0c015260008181610b5501528181611171015281816129b40152818161393901528181613a1a01528181613a4101528181613add0152613b0401526152ca6000f3fe6080604052600436106102605760003560e01c80637c4e9aac11610144578063c876d0b9116100b6578063e2f456051161007a578063e2f456051461092d578063e884f26014610958578063f25f4b5614610983578063f2fde38b146109ae578063f6a78e17146109d7578063f8b45b0514610a0257610267565b8063c876d0b914610832578063c8c8ebe41461085d578063d257b34f14610888578063d85ba063146108c5578063dd62ed3e146108f057610267565b8063a457c2d711610108578063a457c2d7146106fe578063a9059cbb1461073b578063b62496f514610778578063bbc0c742146107b5578063c0246668146107e0578063c18bc1951461080957610267565b80637c4e9aac1461063f578063892ba408146106565780638da5cb5b1461067f57806395d89b41146106aa5780639a7a23d6146106d557610267565b806340746523116101dd5780635e80148e116101a15780635e80148e14610545578063667185241461056e5780636a486a8e1461059757806370a08231146105c2578063715018a6146105ff5780637571336a1461061657610267565b80634074652314610472578063476343ee1461049b57806349bd5a5e146104b25780634a62bb65146104dd5780634fbee1931461050857610267565b806318160ddd1161022457806318160ddd14610379578063203e727e146103a457806323b872dd146103cd578063313ce5671461040a578063395093511461043557610267565b806306fdde031461026c578063095ea7b3146102975780630f3a325f146102d457806310d5de53146103115780631694505e1461034e57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a2d565b60405161028e9190613cb4565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613d7e565b610abf565b6040516102cb9190613dd9565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613df4565b610add565b6040516103089190613dd9565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613df4565b610b33565b6040516103459190613dd9565b60405180910390f35b34801561035a57600080fd5b50610363610b53565b6040516103709190613e80565b60405180910390f35b34801561038557600080fd5b5061038e610b77565b60405161039b9190613eaa565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c69190613ec5565b610b81565b005b3480156103d957600080fd5b506103f460048036038101906103ef9190613ef2565b610ca3565b6040516104019190613dd9565b60405180910390f35b34801561041657600080fd5b5061041f610d7c565b60405161042c9190613f61565b60405180910390f35b34801561044157600080fd5b5061045c60048036038101906104579190613d7e565b610d85565b6040516104699190613dd9565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613f7c565b610e38565b005b3480156104a757600080fd5b506104b0610f63565b005b3480156104be57600080fd5b506104c7610fce565b6040516104d49190613ff2565b60405180910390f35b3480156104e957600080fd5b506104f2610ff2565b6040516104ff9190613dd9565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a9190613df4565b611005565b60405161053c9190613dd9565b60405180910390f35b34801561055157600080fd5b5061056c60048036038101906105679190614155565b61105b565b005b34801561057a57600080fd5b5061059560048036038101906105909190613df4565b611269565b005b3480156105a357600080fd5b506105ac6113c0565b6040516105b99190613eaa565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190613df4565b6113c6565b6040516105f69190613eaa565b60405180910390f35b34801561060b57600080fd5b5061061461140e565b005b34801561062257600080fd5b5061063d600480360381019061063891906141ca565b611566565b005b34801561064b57600080fd5b50610654611658565b005b34801561066257600080fd5b5061067d60048036038101906106789190614155565b611713565b005b34801561068b57600080fd5b5061069461183f565b6040516106a19190613ff2565b60405180910390f35b3480156106b657600080fd5b506106bf611869565b6040516106cc9190613cb4565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f791906141ca565b6118fb565b005b34801561070a57600080fd5b5061072560048036038101906107209190613d7e565b611a2f565b6040516107329190613dd9565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613d7e565b611afc565b60405161076f9190613dd9565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a9190613df4565b611b1a565b6040516107ac9190613dd9565b60405180910390f35b3480156107c157600080fd5b506107ca611b3a565b6040516107d79190613dd9565b60405180910390f35b3480156107ec57600080fd5b50610807600480360381019061080291906141ca565b611b4d565b005b34801561081557600080fd5b50610830600480360381019061082b9190613ec5565b611c8d565b005b34801561083e57600080fd5b50610847611daf565b6040516108549190613dd9565b60405180910390f35b34801561086957600080fd5b50610872611dc2565b60405161087f9190613eaa565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa9190613ec5565b611dc8565b6040516108bc9190613dd9565b60405180910390f35b3480156108d157600080fd5b506108da611f37565b6040516108e79190613eaa565b60405180910390f35b3480156108fc57600080fd5b506109176004803603810190610912919061420a565b611f3d565b6040516109249190613eaa565b60405180910390f35b34801561093957600080fd5b50610942611fc4565b60405161094f9190613eaa565b60405180910390f35b34801561096457600080fd5b5061096d611fca565b60405161097a9190613dd9565b60405180910390f35b34801561098f57600080fd5b50610998612085565b6040516109a59190613ff2565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190613df4565b6120ab565b005b3480156109e357600080fd5b506109ec612272565b6040516109f99190613dd9565b60405180910390f35b348015610a0e57600080fd5b50610a1761232d565b604051610a249190613eaa565b60405180910390f35b606060038054610a3c90614279565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6890614279565b8015610ab55780601f10610a8a57610100808354040283529160200191610ab5565b820191906000526020600020905b815481529060010190602001808311610a9857829003601f168201915b5050505050905090565b6000610ad3610acc612391565b8484612399565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610b89612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f906142f7565b60405180910390fd5b633b9aca006103e86001610c2a610b77565b610c349190614346565b610c3e91906143cf565b610c4891906143cf565b811015610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190614472565b60405180910390fd5b633b9aca0081610c9a9190614346565b600a8190555050565b6000610cb0848484612564565b610d7184610cbc612391565b610d6c8560405180606001604052806028815260200161524860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d22612391565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132709092919063ffffffff16565b612399565b600190509392505050565b60006009905090565b6000610e2e610d92612391565b84610e298560016000610da3612391565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233390919063ffffffff16565b612399565b6001905092915050565b610e40612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec6906142f7565b60405180910390fd5b8360118190555081601281905550601254601154610eed9190614492565b60108190555060466010541115610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090614534565b60405180910390fd5b8260148190555080601581905550601554601454610f579190614492565b60138190555050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fcb573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611063612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e9906142f7565b60405180910390fd5b60005b8151811015611265577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1682828151811061114857611147614554565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156111da57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168282815181106111b9576111b8614554565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15611252576001600660008484815181106111f8576111f7614554565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061125d90614583565b9150506110f5565b5050565b611271612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f7906142f7565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611416612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c906142f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61156e612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f4906142f7565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611660612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e6906142f7565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b61171b612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a1906142f7565b60405180910390fd5b60005b815181101561183b576000600660008484815181106117cf576117ce614554565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061183390614583565b9150506117ad565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461187890614279565b80601f01602080910402602001604051908101604052809291908181526020018280546118a490614279565b80156118f15780601f106118c6576101008083540402835291602001916118f1565b820191906000526020600020905b8154815290600101906020018083116118d457829003601f168201915b5050505050905090565b611903612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611989906142f7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a189061463e565b60405180910390fd5b611a2b82826132d4565b5050565b6000611af2611a3c612391565b84611aed856040518060600160405280602581526020016152706025913960016000611a66612391565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132709092919063ffffffff16565b612399565b6001905092915050565b6000611b10611b09612391565b8484612564565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611b55612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb906142f7565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c819190613dd9565b60405180910390a25050565b611c95612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b906142f7565b60405180910390fd5b633b9aca006103e86001611d36610b77565b611d409190614346565b611d4a91906143cf565b611d5491906143cf565b811015611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d906146d0565b60405180910390fd5b633b9aca0081611da69190614346565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611dd2612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e58906142f7565b60405180910390fd5b6103e86001611e6e610b77565b611e789190614346565b611e8291906143cf565b821015611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb90614762565b60405180910390fd5b6103e8600a611ed1610b77565b611edb9190614346565b611ee591906143cf565b821115611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e906147f4565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000611fd4612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906142f7565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120b3612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612142576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612139906142f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a990614886565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061227c612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612302906142f7565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b600c5481565b60008082846123429190614492565b905083811015612387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e906148f2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240090614984565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090614a16565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125579190613eaa565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b90614b3a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c890614bf2565b60405180910390fd5b60008114156126eb576126e683836000613375565b61326b565b60085442141561274e576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612e115761276b61183f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127d957506127a961183f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128125750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561284c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128655750600760009054906101000a900460ff16155b15612e1057600d60019054906101000a900460ff1661295f57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061291f5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61295e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295590614c5e565b60405180910390fd5b5b600f60009054906101000a900460ff1615612b275761297c61183f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a0357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a5b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b265743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad890614d16565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bca5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7157600a54811115612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b90614da8565b60405180910390fd5b600c54612c20836113c6565b82612c2b9190614492565b1115612c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6390614e14565b60405180910390fd5b612e0f565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d145750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6357600a54811115612d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5590614ea6565b60405180910390fd5b612e0e565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e0d57600c54612dc0836113c6565b82612dcb9190614492565b1115612e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0390614e14565b60405180910390fd5b5b5b5b5b5b6000612e1c306113c6565b90506000600b548210159050808015612e425750600760009054906101000a900460ff16155b8015612e985750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612eee5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f445750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f88576001600760006101000a81548160ff021916908315150217905550612f6c61360a565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061303e5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561304857600090505b6000811561325b57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130ab57506000601354115b15613145576130d860646130ca6013548861378690919063ffffffff16565b61380190919063ffffffff16565b9050601354601554826130eb9190614346565b6130f591906143cf565b601760008282546131069190614492565b925050819055506013546014548261311e9190614346565b61312891906143cf565b601660008282546131399190614492565b92505081905550613237565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131a057506000601054115b15613236576131cd60646131bf6010548861378690919063ffffffff16565b61380190919063ffffffff16565b9050601054601254826131e09190614346565b6131ea91906143cf565b601760008282546131fb9190614492565b92505081905550601054601154826132139190614346565b61321d91906143cf565b6016600082825461322e9190614492565b925050819055505b5b600081111561324c5761324b873083613375565b5b80856132589190614ec6565b94505b613266878787613375565b505050505b505050565b60008383111582906132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af9190613cb4565b60405180910390fd5b50600083856132c79190614ec6565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dc90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344c90614b3a565b60405180910390fd5b61346083838361384b565b6134cb81604051806060016040528060268152602001615222602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132709092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061355e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135fd9190613eaa565b60405180910390a3505050565b6000613615306113c6565b905060006016546017546136299190614492565b9050600082148061363a5750600081145b15613646575050613784565b6014600b546136559190614346565b82111561366e576014600b5461366b9190614346565b91505b6000600282601754856136819190614346565b61368b91906143cf565b61369591906143cf565b905060006136ac828561385090919063ffffffff16565b905060004790506136bc8261389a565b60006136d1824761385090919063ffffffff16565b905060006136fc866136ee6016548561378690919063ffffffff16565b61380190919063ffffffff16565b90506000818361370c9190614ec6565b90506000601781905550600060168190555060008611801561372e5750600081115b1561377b5761373d8682613ad7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260175460405161377293929190614efa565b60405180910390a15b50505050505050505b565b60008083141561379957600090506137fb565b600082846137a79190614346565b90508284826137b691906143cf565b146137f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ed90614fa3565b60405180910390fd5b809150505b92915050565b600061384383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bb8565b905092915050565b505050565b600061389283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613270565b905092915050565b6000600267ffffffffffffffff8111156138b7576138b6614012565b5b6040519080825280602002602001820160405280156138e55781602001602082028036833780820191505090505b50905030816000815181106138fd576138fc614554565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c69190614fd8565b816001815181106139da576139d9614554565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a3f307f000000000000000000000000000000000000000000000000000000000000000084612399565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613aa19594939291906150fe565b600060405180830381600087803b158015613abb57600080fd5b505af1158015613acf573d6000803e3d6000fd5b505050505050565b613b02307f000000000000000000000000000000000000000000000000000000000000000084612399565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b4c61183f565b426040518863ffffffff1660e01b8152600401613b6e96959493929190615158565b60606040518083038185885af1158015613b8c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bb191906151ce565b5050505050565b60008083118290613bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf69190613cb4565b60405180910390fd5b5060008385613c0e91906143cf565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c55578082015181840152602081019050613c3a565b83811115613c64576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c8682613c1b565b613c908185613c26565b9350613ca0818560208601613c37565b613ca981613c6a565b840191505092915050565b60006020820190508181036000830152613cce8184613c7b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d1582613cea565b9050919050565b613d2581613d0a565b8114613d3057600080fd5b50565b600081359050613d4281613d1c565b92915050565b6000819050919050565b613d5b81613d48565b8114613d6657600080fd5b50565b600081359050613d7881613d52565b92915050565b60008060408385031215613d9557613d94613ce0565b5b6000613da385828601613d33565b9250506020613db485828601613d69565b9150509250929050565b60008115159050919050565b613dd381613dbe565b82525050565b6000602082019050613dee6000830184613dca565b92915050565b600060208284031215613e0a57613e09613ce0565b5b6000613e1884828501613d33565b91505092915050565b6000819050919050565b6000613e46613e41613e3c84613cea565b613e21565b613cea565b9050919050565b6000613e5882613e2b565b9050919050565b6000613e6a82613e4d565b9050919050565b613e7a81613e5f565b82525050565b6000602082019050613e956000830184613e71565b92915050565b613ea481613d48565b82525050565b6000602082019050613ebf6000830184613e9b565b92915050565b600060208284031215613edb57613eda613ce0565b5b6000613ee984828501613d69565b91505092915050565b600080600060608486031215613f0b57613f0a613ce0565b5b6000613f1986828701613d33565b9350506020613f2a86828701613d33565b9250506040613f3b86828701613d69565b9150509250925092565b600060ff82169050919050565b613f5b81613f45565b82525050565b6000602082019050613f766000830184613f52565b92915050565b60008060008060808587031215613f9657613f95613ce0565b5b6000613fa487828801613d69565b9450506020613fb587828801613d69565b9350506040613fc687828801613d69565b9250506060613fd787828801613d69565b91505092959194509250565b613fec81613d0a565b82525050565b60006020820190506140076000830184613fe3565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61404a82613c6a565b810181811067ffffffffffffffff8211171561406957614068614012565b5b80604052505050565b600061407c613cd6565b90506140888282614041565b919050565b600067ffffffffffffffff8211156140a8576140a7614012565b5b602082029050602081019050919050565b600080fd5b60006140d16140cc8461408d565b614072565b905080838252602082019050602084028301858111156140f4576140f36140b9565b5b835b8181101561411d57806141098882613d33565b8452602084019350506020810190506140f6565b5050509392505050565b600082601f83011261413c5761413b61400d565b5b813561414c8482602086016140be565b91505092915050565b60006020828403121561416b5761416a613ce0565b5b600082013567ffffffffffffffff81111561418957614188613ce5565b5b61419584828501614127565b91505092915050565b6141a781613dbe565b81146141b257600080fd5b50565b6000813590506141c48161419e565b92915050565b600080604083850312156141e1576141e0613ce0565b5b60006141ef85828601613d33565b9250506020614200858286016141b5565b9150509250929050565b6000806040838503121561422157614220613ce0565b5b600061422f85828601613d33565b925050602061424085828601613d33565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061429157607f821691505b602082108114156142a5576142a461424a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142e1602083613c26565b91506142ec826142ab565b602082019050919050565b60006020820190508181036000830152614310816142d4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061435182613d48565b915061435c83613d48565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561439557614394614317565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143da82613d48565b91506143e583613d48565b9250826143f5576143f46143a0565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061445c602f83613c26565b915061446782614400565b604082019050919050565b6000602082019050818103600083015261448b8161444f565b9050919050565b600061449d82613d48565b91506144a883613d48565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144dd576144dc614317565b5b828201905092915050565b7f4d757374206b656570206665657320617420373025206f72206c657373000000600082015250565b600061451e601d83613c26565b9150614529826144e8565b602082019050919050565b6000602082019050818103600083015261454d81614511565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061458e82613d48565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145c1576145c0614317565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614628603983613c26565b9150614633826145cc565b604082019050919050565b600060208201905081810360008301526146578161461b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e312500000000000000000000000000000000000000000000000000000000602082015250565b60006146ba602483613c26565b91506146c58261465e565b604082019050919050565b600060208201905081810360008301526146e9816146ad565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e312520746f74616c20737570706c792e00000000000000000000000000602082015250565b600061474c603383613c26565b9150614757826146f0565b604082019050919050565b6000602082019050818103600083015261477b8161473f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b60006147de603283613c26565b91506147e982614782565b604082019050919050565b6000602082019050818103600083015261480d816147d1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614870602683613c26565b915061487b82614814565b604082019050919050565b6000602082019050818103600083015261489f81614863565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006148dc601b83613c26565b91506148e7826148a6565b602082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496e602483613c26565b915061497982614912565b604082019050919050565b6000602082019050818103600083015261499d81614961565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a00602283613c26565b9150614a0b826149a4565b604082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a92602583613c26565b9150614a9d82614a36565b604082019050919050565b60006020820190508181036000830152614ac181614a85565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b24602383613c26565b9150614b2f82614ac8565b604082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614bdc604d83613c26565b9150614be782614b5a565b606082019050919050565b60006020820190508181036000830152614c0b81614bcf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c48601683613c26565b9150614c5382614c12565b602082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614d00604983613c26565b9150614d0b82614c7e565b606082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d92603583613c26565b9150614d9d82614d36565b604082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614dfe601383613c26565b9150614e0982614dc8565b602082019050919050565b60006020820190508181036000830152614e2d81614df1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e90603683613c26565b9150614e9b82614e34565b604082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b6000614ed182613d48565b9150614edc83613d48565b925082821015614eef57614eee614317565b5b828203905092915050565b6000606082019050614f0f6000830186613e9b565b614f1c6020830185613e9b565b614f296040830184613e9b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f8d602183613c26565b9150614f9882614f31565b604082019050919050565b60006020820190508181036000830152614fbc81614f80565b9050919050565b600081519050614fd281613d1c565b92915050565b600060208284031215614fee57614fed613ce0565b5b6000614ffc84828501614fc3565b91505092915050565b6000819050919050565b600061502a61502561502084615005565b613e21565b613d48565b9050919050565b61503a8161500f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61507581613d0a565b82525050565b6000615087838361506c565b60208301905092915050565b6000602082019050919050565b60006150ab82615040565b6150b5818561504b565b93506150c08361505c565b8060005b838110156150f15781516150d8888261507b565b97506150e383615093565b9250506001810190506150c4565b5085935050505092915050565b600060a0820190506151136000830188613e9b565b6151206020830187615031565b818103604083015261513281866150a0565b90506151416060830185613fe3565b61514e6080830184613e9b565b9695505050505050565b600060c08201905061516d6000830189613fe3565b61517a6020830188613e9b565b6151876040830187615031565b6151946060830186615031565b6151a16080830185613fe3565b6151ae60a0830184613e9b565b979650505050505050565b6000815190506151c881613d52565b92915050565b6000806000606084860312156151e7576151e6613ce0565b5b60006151f5868287016151b9565b9350506020615206868287016151b9565b9250506040615217868287016151b9565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200d817ee02bccb25e6da527207c4a2d3d3aee88355942f5aa20d05eb99c9c422564736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80637c4e9aac11610144578063c876d0b9116100b6578063e2f456051161007a578063e2f456051461092d578063e884f26014610958578063f25f4b5614610983578063f2fde38b146109ae578063f6a78e17146109d7578063f8b45b0514610a0257610267565b8063c876d0b914610832578063c8c8ebe41461085d578063d257b34f14610888578063d85ba063146108c5578063dd62ed3e146108f057610267565b8063a457c2d711610108578063a457c2d7146106fe578063a9059cbb1461073b578063b62496f514610778578063bbc0c742146107b5578063c0246668146107e0578063c18bc1951461080957610267565b80637c4e9aac1461063f578063892ba408146106565780638da5cb5b1461067f57806395d89b41146106aa5780639a7a23d6146106d557610267565b806340746523116101dd5780635e80148e116101a15780635e80148e14610545578063667185241461056e5780636a486a8e1461059757806370a08231146105c2578063715018a6146105ff5780637571336a1461061657610267565b80634074652314610472578063476343ee1461049b57806349bd5a5e146104b25780634a62bb65146104dd5780634fbee1931461050857610267565b806318160ddd1161022457806318160ddd14610379578063203e727e146103a457806323b872dd146103cd578063313ce5671461040a578063395093511461043557610267565b806306fdde031461026c578063095ea7b3146102975780630f3a325f146102d457806310d5de53146103115780631694505e1461034e57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a2d565b60405161028e9190613cb4565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613d7e565b610abf565b6040516102cb9190613dd9565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613df4565b610add565b6040516103089190613dd9565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613df4565b610b33565b6040516103459190613dd9565b60405180910390f35b34801561035a57600080fd5b50610363610b53565b6040516103709190613e80565b60405180910390f35b34801561038557600080fd5b5061038e610b77565b60405161039b9190613eaa565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c69190613ec5565b610b81565b005b3480156103d957600080fd5b506103f460048036038101906103ef9190613ef2565b610ca3565b6040516104019190613dd9565b60405180910390f35b34801561041657600080fd5b5061041f610d7c565b60405161042c9190613f61565b60405180910390f35b34801561044157600080fd5b5061045c60048036038101906104579190613d7e565b610d85565b6040516104699190613dd9565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613f7c565b610e38565b005b3480156104a757600080fd5b506104b0610f63565b005b3480156104be57600080fd5b506104c7610fce565b6040516104d49190613ff2565b60405180910390f35b3480156104e957600080fd5b506104f2610ff2565b6040516104ff9190613dd9565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a9190613df4565b611005565b60405161053c9190613dd9565b60405180910390f35b34801561055157600080fd5b5061056c60048036038101906105679190614155565b61105b565b005b34801561057a57600080fd5b5061059560048036038101906105909190613df4565b611269565b005b3480156105a357600080fd5b506105ac6113c0565b6040516105b99190613eaa565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190613df4565b6113c6565b6040516105f69190613eaa565b60405180910390f35b34801561060b57600080fd5b5061061461140e565b005b34801561062257600080fd5b5061063d600480360381019061063891906141ca565b611566565b005b34801561064b57600080fd5b50610654611658565b005b34801561066257600080fd5b5061067d60048036038101906106789190614155565b611713565b005b34801561068b57600080fd5b5061069461183f565b6040516106a19190613ff2565b60405180910390f35b3480156106b657600080fd5b506106bf611869565b6040516106cc9190613cb4565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f791906141ca565b6118fb565b005b34801561070a57600080fd5b5061072560048036038101906107209190613d7e565b611a2f565b6040516107329190613dd9565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613d7e565b611afc565b60405161076f9190613dd9565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a9190613df4565b611b1a565b6040516107ac9190613dd9565b60405180910390f35b3480156107c157600080fd5b506107ca611b3a565b6040516107d79190613dd9565b60405180910390f35b3480156107ec57600080fd5b50610807600480360381019061080291906141ca565b611b4d565b005b34801561081557600080fd5b50610830600480360381019061082b9190613ec5565b611c8d565b005b34801561083e57600080fd5b50610847611daf565b6040516108549190613dd9565b60405180910390f35b34801561086957600080fd5b50610872611dc2565b60405161087f9190613eaa565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa9190613ec5565b611dc8565b6040516108bc9190613dd9565b60405180910390f35b3480156108d157600080fd5b506108da611f37565b6040516108e79190613eaa565b60405180910390f35b3480156108fc57600080fd5b506109176004803603810190610912919061420a565b611f3d565b6040516109249190613eaa565b60405180910390f35b34801561093957600080fd5b50610942611fc4565b60405161094f9190613eaa565b60405180910390f35b34801561096457600080fd5b5061096d611fca565b60405161097a9190613dd9565b60405180910390f35b34801561098f57600080fd5b50610998612085565b6040516109a59190613ff2565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190613df4565b6120ab565b005b3480156109e357600080fd5b506109ec612272565b6040516109f99190613dd9565b60405180910390f35b348015610a0e57600080fd5b50610a1761232d565b604051610a249190613eaa565b60405180910390f35b606060038054610a3c90614279565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6890614279565b8015610ab55780601f10610a8a57610100808354040283529160200191610ab5565b820191906000526020600020905b815481529060010190602001808311610a9857829003601f168201915b5050505050905090565b6000610ad3610acc612391565b8484612399565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610b89612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f906142f7565b60405180910390fd5b633b9aca006103e86001610c2a610b77565b610c349190614346565b610c3e91906143cf565b610c4891906143cf565b811015610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190614472565b60405180910390fd5b633b9aca0081610c9a9190614346565b600a8190555050565b6000610cb0848484612564565b610d7184610cbc612391565b610d6c8560405180606001604052806028815260200161524860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d22612391565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132709092919063ffffffff16565b612399565b600190509392505050565b60006009905090565b6000610e2e610d92612391565b84610e298560016000610da3612391565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233390919063ffffffff16565b612399565b6001905092915050565b610e40612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec6906142f7565b60405180910390fd5b8360118190555081601281905550601254601154610eed9190614492565b60108190555060466010541115610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090614534565b60405180910390fd5b8260148190555080601581905550601554601454610f579190614492565b60138190555050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fcb573d6000803e3d6000fd5b50565b7f0000000000000000000000003863428b4086b668a66f117c98c5abfd88903a3381565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611063612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e9906142f7565b60405180910390fd5b60005b8151811015611265577f0000000000000000000000003863428b4086b668a66f117c98c5abfd88903a3373ffffffffffffffffffffffffffffffffffffffff1682828151811061114857611147614554565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156111da57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168282815181106111b9576111b8614554565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15611252576001600660008484815181106111f8576111f7614554565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061125d90614583565b9150506110f5565b5050565b611271612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f7906142f7565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611416612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c906142f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61156e612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f4906142f7565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611660612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e6906142f7565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b61171b612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a1906142f7565b60405180910390fd5b60005b815181101561183b576000600660008484815181106117cf576117ce614554565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061183390614583565b9150506117ad565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461187890614279565b80601f01602080910402602001604051908101604052809291908181526020018280546118a490614279565b80156118f15780601f106118c6576101008083540402835291602001916118f1565b820191906000526020600020905b8154815290600101906020018083116118d457829003601f168201915b5050505050905090565b611903612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611989906142f7565b60405180910390fd5b7f0000000000000000000000003863428b4086b668a66f117c98c5abfd88903a3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a189061463e565b60405180910390fd5b611a2b82826132d4565b5050565b6000611af2611a3c612391565b84611aed856040518060600160405280602581526020016152706025913960016000611a66612391565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132709092919063ffffffff16565b612399565b6001905092915050565b6000611b10611b09612391565b8484612564565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611b55612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb906142f7565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c819190613dd9565b60405180910390a25050565b611c95612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b906142f7565b60405180910390fd5b633b9aca006103e86001611d36610b77565b611d409190614346565b611d4a91906143cf565b611d5491906143cf565b811015611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d906146d0565b60405180910390fd5b633b9aca0081611da69190614346565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611dd2612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e58906142f7565b60405180910390fd5b6103e86001611e6e610b77565b611e789190614346565b611e8291906143cf565b821015611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb90614762565b60405180910390fd5b6103e8600a611ed1610b77565b611edb9190614346565b611ee591906143cf565b821115611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e906147f4565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000611fd4612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906142f7565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120b3612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612142576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612139906142f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a990614886565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061227c612391565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612302906142f7565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b600c5481565b60008082846123429190614492565b905083811015612387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e906148f2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240090614984565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090614a16565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125579190613eaa565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b90614b3a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c890614bf2565b60405180910390fd5b60008114156126eb576126e683836000613375565b61326b565b60085442141561274e576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612e115761276b61183f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127d957506127a961183f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128125750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561284c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128655750600760009054906101000a900460ff16155b15612e1057600d60019054906101000a900460ff1661295f57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061291f5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61295e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295590614c5e565b60405180910390fd5b5b600f60009054906101000a900460ff1615612b275761297c61183f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a0357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a5b57507f0000000000000000000000003863428b4086b668a66f117c98c5abfd88903a3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b265743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad890614d16565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bca5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7157600a54811115612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b90614da8565b60405180910390fd5b600c54612c20836113c6565b82612c2b9190614492565b1115612c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6390614e14565b60405180910390fd5b612e0f565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d145750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6357600a54811115612d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5590614ea6565b60405180910390fd5b612e0e565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e0d57600c54612dc0836113c6565b82612dcb9190614492565b1115612e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0390614e14565b60405180910390fd5b5b5b5b5b5b6000612e1c306113c6565b90506000600b548210159050808015612e425750600760009054906101000a900460ff16155b8015612e985750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612eee5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f445750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f88576001600760006101000a81548160ff021916908315150217905550612f6c61360a565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061303e5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561304857600090505b6000811561325b57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130ab57506000601354115b15613145576130d860646130ca6013548861378690919063ffffffff16565b61380190919063ffffffff16565b9050601354601554826130eb9190614346565b6130f591906143cf565b601760008282546131069190614492565b925050819055506013546014548261311e9190614346565b61312891906143cf565b601660008282546131399190614492565b92505081905550613237565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131a057506000601054115b15613236576131cd60646131bf6010548861378690919063ffffffff16565b61380190919063ffffffff16565b9050601054601254826131e09190614346565b6131ea91906143cf565b601760008282546131fb9190614492565b92505081905550601054601154826132139190614346565b61321d91906143cf565b6016600082825461322e9190614492565b925050819055505b5b600081111561324c5761324b873083613375565b5b80856132589190614ec6565b94505b613266878787613375565b505050505b505050565b60008383111582906132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af9190613cb4565b60405180910390fd5b50600083856132c79190614ec6565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dc90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344c90614b3a565b60405180910390fd5b61346083838361384b565b6134cb81604051806060016040528060268152602001615222602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132709092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061355e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135fd9190613eaa565b60405180910390a3505050565b6000613615306113c6565b905060006016546017546136299190614492565b9050600082148061363a5750600081145b15613646575050613784565b6014600b546136559190614346565b82111561366e576014600b5461366b9190614346565b91505b6000600282601754856136819190614346565b61368b91906143cf565b61369591906143cf565b905060006136ac828561385090919063ffffffff16565b905060004790506136bc8261389a565b60006136d1824761385090919063ffffffff16565b905060006136fc866136ee6016548561378690919063ffffffff16565b61380190919063ffffffff16565b90506000818361370c9190614ec6565b90506000601781905550600060168190555060008611801561372e5750600081115b1561377b5761373d8682613ad7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260175460405161377293929190614efa565b60405180910390a15b50505050505050505b565b60008083141561379957600090506137fb565b600082846137a79190614346565b90508284826137b691906143cf565b146137f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ed90614fa3565b60405180910390fd5b809150505b92915050565b600061384383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bb8565b905092915050565b505050565b600061389283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613270565b905092915050565b6000600267ffffffffffffffff8111156138b7576138b6614012565b5b6040519080825280602002602001820160405280156138e55781602001602082028036833780820191505090505b50905030816000815181106138fd576138fc614554565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c69190614fd8565b816001815181106139da576139d9614554565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a3f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612399565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613aa19594939291906150fe565b600060405180830381600087803b158015613abb57600080fd5b505af1158015613acf573d6000803e3d6000fd5b505050505050565b613b02307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612399565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b4c61183f565b426040518863ffffffff1660e01b8152600401613b6e96959493929190615158565b60606040518083038185885af1158015613b8c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bb191906151ce565b5050505050565b60008083118290613bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf69190613cb4565b60405180910390fd5b5060008385613c0e91906143cf565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c55578082015181840152602081019050613c3a565b83811115613c64576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c8682613c1b565b613c908185613c26565b9350613ca0818560208601613c37565b613ca981613c6a565b840191505092915050565b60006020820190508181036000830152613cce8184613c7b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d1582613cea565b9050919050565b613d2581613d0a565b8114613d3057600080fd5b50565b600081359050613d4281613d1c565b92915050565b6000819050919050565b613d5b81613d48565b8114613d6657600080fd5b50565b600081359050613d7881613d52565b92915050565b60008060408385031215613d9557613d94613ce0565b5b6000613da385828601613d33565b9250506020613db485828601613d69565b9150509250929050565b60008115159050919050565b613dd381613dbe565b82525050565b6000602082019050613dee6000830184613dca565b92915050565b600060208284031215613e0a57613e09613ce0565b5b6000613e1884828501613d33565b91505092915050565b6000819050919050565b6000613e46613e41613e3c84613cea565b613e21565b613cea565b9050919050565b6000613e5882613e2b565b9050919050565b6000613e6a82613e4d565b9050919050565b613e7a81613e5f565b82525050565b6000602082019050613e956000830184613e71565b92915050565b613ea481613d48565b82525050565b6000602082019050613ebf6000830184613e9b565b92915050565b600060208284031215613edb57613eda613ce0565b5b6000613ee984828501613d69565b91505092915050565b600080600060608486031215613f0b57613f0a613ce0565b5b6000613f1986828701613d33565b9350506020613f2a86828701613d33565b9250506040613f3b86828701613d69565b9150509250925092565b600060ff82169050919050565b613f5b81613f45565b82525050565b6000602082019050613f766000830184613f52565b92915050565b60008060008060808587031215613f9657613f95613ce0565b5b6000613fa487828801613d69565b9450506020613fb587828801613d69565b9350506040613fc687828801613d69565b9250506060613fd787828801613d69565b91505092959194509250565b613fec81613d0a565b82525050565b60006020820190506140076000830184613fe3565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61404a82613c6a565b810181811067ffffffffffffffff8211171561406957614068614012565b5b80604052505050565b600061407c613cd6565b90506140888282614041565b919050565b600067ffffffffffffffff8211156140a8576140a7614012565b5b602082029050602081019050919050565b600080fd5b60006140d16140cc8461408d565b614072565b905080838252602082019050602084028301858111156140f4576140f36140b9565b5b835b8181101561411d57806141098882613d33565b8452602084019350506020810190506140f6565b5050509392505050565b600082601f83011261413c5761413b61400d565b5b813561414c8482602086016140be565b91505092915050565b60006020828403121561416b5761416a613ce0565b5b600082013567ffffffffffffffff81111561418957614188613ce5565b5b61419584828501614127565b91505092915050565b6141a781613dbe565b81146141b257600080fd5b50565b6000813590506141c48161419e565b92915050565b600080604083850312156141e1576141e0613ce0565b5b60006141ef85828601613d33565b9250506020614200858286016141b5565b9150509250929050565b6000806040838503121561422157614220613ce0565b5b600061422f85828601613d33565b925050602061424085828601613d33565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061429157607f821691505b602082108114156142a5576142a461424a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142e1602083613c26565b91506142ec826142ab565b602082019050919050565b60006020820190508181036000830152614310816142d4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061435182613d48565b915061435c83613d48565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561439557614394614317565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143da82613d48565b91506143e583613d48565b9250826143f5576143f46143a0565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061445c602f83613c26565b915061446782614400565b604082019050919050565b6000602082019050818103600083015261448b8161444f565b9050919050565b600061449d82613d48565b91506144a883613d48565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144dd576144dc614317565b5b828201905092915050565b7f4d757374206b656570206665657320617420373025206f72206c657373000000600082015250565b600061451e601d83613c26565b9150614529826144e8565b602082019050919050565b6000602082019050818103600083015261454d81614511565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061458e82613d48565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145c1576145c0614317565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614628603983613c26565b9150614633826145cc565b604082019050919050565b600060208201905081810360008301526146578161461b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e312500000000000000000000000000000000000000000000000000000000602082015250565b60006146ba602483613c26565b91506146c58261465e565b604082019050919050565b600060208201905081810360008301526146e9816146ad565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e312520746f74616c20737570706c792e00000000000000000000000000602082015250565b600061474c603383613c26565b9150614757826146f0565b604082019050919050565b6000602082019050818103600083015261477b8161473f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b60006147de603283613c26565b91506147e982614782565b604082019050919050565b6000602082019050818103600083015261480d816147d1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614870602683613c26565b915061487b82614814565b604082019050919050565b6000602082019050818103600083015261489f81614863565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006148dc601b83613c26565b91506148e7826148a6565b602082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496e602483613c26565b915061497982614912565b604082019050919050565b6000602082019050818103600083015261499d81614961565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a00602283613c26565b9150614a0b826149a4565b604082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a92602583613c26565b9150614a9d82614a36565b604082019050919050565b60006020820190508181036000830152614ac181614a85565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b24602383613c26565b9150614b2f82614ac8565b604082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614bdc604d83613c26565b9150614be782614b5a565b606082019050919050565b60006020820190508181036000830152614c0b81614bcf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c48601683613c26565b9150614c5382614c12565b602082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614d00604983613c26565b9150614d0b82614c7e565b606082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d92603583613c26565b9150614d9d82614d36565b604082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614dfe601383613c26565b9150614e0982614dc8565b602082019050919050565b60006020820190508181036000830152614e2d81614df1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e90603683613c26565b9150614e9b82614e34565b604082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b6000614ed182613d48565b9150614edc83613d48565b925082821015614eef57614eee614317565b5b828203905092915050565b6000606082019050614f0f6000830186613e9b565b614f1c6020830185613e9b565b614f296040830184613e9b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f8d602183613c26565b9150614f9882614f31565b604082019050919050565b60006020820190508181036000830152614fbc81614f80565b9050919050565b600081519050614fd281613d1c565b92915050565b600060208284031215614fee57614fed613ce0565b5b6000614ffc84828501614fc3565b91505092915050565b6000819050919050565b600061502a61502561502084615005565b613e21565b613d48565b9050919050565b61503a8161500f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61507581613d0a565b82525050565b6000615087838361506c565b60208301905092915050565b6000602082019050919050565b60006150ab82615040565b6150b5818561504b565b93506150c08361505c565b8060005b838110156150f15781516150d8888261507b565b97506150e383615093565b9250506001810190506150c4565b5085935050505092915050565b600060a0820190506151136000830188613e9b565b6151206020830187615031565b818103604083015261513281866150a0565b90506151416060830185613fe3565b61514e6080830184613e9b565b9695505050505050565b600060c08201905061516d6000830189613fe3565b61517a6020830188613e9b565b6151876040830187615031565b6151946060830186615031565b6151a16080830185613fe3565b6151ae60a0830184613e9b565b979650505050505050565b6000815190506151c881613d52565b92915050565b6000806000606084860312156151e7576151e6613ce0565b5b60006151f5868287016151b9565b9350506020615206868287016151b9565b9250506040615217868287016151b9565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200d817ee02bccb25e6da527207c4a2d3d3aee88355942f5aa20d05eb99c9c422564736f6c634300080b0033

Deployed Bytecode Sourcemap

19305:14180:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6724:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7637:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26719:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20488:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19380:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7044:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24156:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7814:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6944:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8177:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24767:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33343:102;;;;;;;;;;;;;:::i;:::-;;19438:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19760:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26080:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26217:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25915:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20176:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7160:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12679:148;;;;;;;;;;;;;:::i;:::-;;24615:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23189:123;;;;;;;;;;;;;:::i;:::-;;26523:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12465:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6832:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25463:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8403:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7295:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20710:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19800:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25273:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24394:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20016:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19637:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23767:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20064:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7478:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19679:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23557:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19600:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12835:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23368:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19719:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6724:100;6778:13;6811:5;6804:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6724:100;:::o;7637:169::-;7720:4;7737:39;7746:12;:10;:12::i;:::-;7760:7;7769:6;7737:8;:39::i;:::-;7794:4;7787:11;;7637:169;;;;:::o;26719:100::-;26772:4;26796:9;:15;26806:4;26796:15;;;;;;;;;;;;;;;;;;;;;;;;;26789:22;;26719:100;;;:::o;20488:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;19380:51::-;;;:::o;7044:108::-;7105:7;7132:12;;7125:19;;7044:108;:::o;24156:230::-;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24277:3:::1;24269:4;24265:1;24249:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;24248:32;;;;:::i;:::-;24238:6;:42;;24230:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;24375:3;24366:6;:12;;;;:::i;:::-;24343:20;:35;;;;24156:230:::0;:::o;7814:355::-;7954:4;7971:36;7981:6;7989:9;8000:6;7971:9;:36::i;:::-;8018:121;8027:6;8035:12;:10;:12::i;:::-;8049:89;8087:6;8049:89;;;;;;;;;;;;;;;;;:11;:19;8061:6;8049:19;;;;;;;;;;;;;;;:33;8069:12;:10;:12::i;:::-;8049:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;8018:8;:121::i;:::-;8157:4;8150:11;;7814:355;;;;;:::o;6944:92::-;7002:5;7027:1;7020:8;;6944:92;:::o;8177:218::-;8265:4;8282:83;8291:12;:10;:12::i;:::-;8305:7;8314:50;8353:10;8314:11;:25;8326:12;:10;:12::i;:::-;8314:25;;;;;;;;;;;;;;;:34;8340:7;8314:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8282:8;:83::i;:::-;8383:4;8376:11;;8177:218;;;;:::o;24767:498::-;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24927:11:::1;24914:10;:24;;;;24968:17;24949:16;:36;;;;25024:16;;25011:10;;:29;;;;:::i;:::-;24996:12;:44;;;;25075:2;25059:12;;:18;;25051:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25138:12;25124:11;:26;;;;25181:18;25161:17;:38;;;;25240:17;;25226:11;;:31;;;;:::i;:::-;25210:13;:47;;;;24767:498:::0;;;;:::o;33343:102::-;33395:9;;;;;;;;;;;33387:27;;:50;33415:21;33387:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33343:102::o;19438:38::-;;;:::o;19760:33::-;;;;;;;;;;;;;:::o;26080:125::-;26145:4;26169:19;:28;26189:7;26169:28;;;;;;;;;;;;;;;;;;;;;;;;;26162:35;;26080:125;;;:::o;26217:294::-;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26299:6:::1;26294:210;26315:8;:15;26311:1;:19;26294:210;;;26371:13;26356:28;;:8;26365:1;26356:11;;;;;;;;:::i;:::-;;;;;;;;:28;;;;:71;;;;;26411:15;26388:39;;:8;26397:1;26388:11;;;;;;;;:::i;:::-;;;;;;;;:39;;;;26356:71;26352:141;;;26473:4;26448:9;:22;26458:8;26467:1;26458:11;;;;;;;;:::i;:::-;;;;;;;;26448:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26352:141;26332:3;;;;;:::i;:::-;;;;26294:210;;;;26217:294:::0;:::o;25915:157::-;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26022:9:::1;;;;;;;;;;;25994:38;;26011:9;25994:38;;;;;;;;;;;;26055:9;26043;;:21;;;;;;;;;;;;;;;;;;25915:157:::0;:::o;20176:28::-;;;;:::o;7160:127::-;7234:7;7261:9;:18;7271:7;7261:18;;;;;;;;;;;;;;;;7254:25;;7160:127;;;:::o;12679:148::-;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12786:1:::1;12749:40;;12770:6;;;;;;;;;;;12749:40;;;;;;;;;;;;12817:1;12800:6;;:19;;;;;;;;;;;;;;;;;;12679:148::o:0;24615:144::-;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24747:4:::1;24705:31;:39;24737:6;24705:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24615:144:::0;;:::o;23189:123::-;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23260:4:::1;23244:13;;:20;;;;;;;;;;;;;;;;;;23289:15;23275:11;:29;;;;23189:123::o:0;26523:184::-;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26605:6:::1;26600:100;26621:8;:15;26617:1;:19;26600:100;;;26683:5;26658:9;:22;26668:8;26677:1;26668:11;;;;;;;;:::i;:::-;;;;;;;;26658:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;26638:3;;;;;:::i;:::-;;;;26600:100;;;;26523:184:::0;:::o;12465:79::-;12503:7;12530:6;;;;;;;;;;;12523:13;;12465:79;:::o;6832:104::-;6888:13;6921:7;6914:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6832:104;:::o;25463:244::-;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25570:13:::1;25562:21;;:4;:21;;;;25554:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25658:41;25687:4;25693:5;25658:28;:41::i;:::-;25463:244:::0;;:::o;8403:269::-;8496:4;8513:129;8522:12;:10;:12::i;:::-;8536:7;8545:96;8584:15;8545:96;;;;;;;;;;;;;;;;;:11;:25;8557:12;:10;:12::i;:::-;8545:25;;;;;;;;;;;;;;;:34;8571:7;8545:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8513:8;:129::i;:::-;8660:4;8653:11;;8403:269;;;;:::o;7295:175::-;7381:4;7398:42;7408:12;:10;:12::i;:::-;7422:9;7433:6;7398:9;:42::i;:::-;7458:4;7451:11;;7295:175;;;;:::o;20710:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;19800:25::-;;;;;;;;;;;;;:::o;25273:182::-;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25389:8:::1;25358:19;:28;25378:7;25358:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25429:7;25413:34;;;25438:8;25413:34;;;;;;:::i;:::-;;;;;;;;25273:182:::0;;:::o;24394:209::-;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24516:3:::1;24510:4;24506:1;24490:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;24489:30;;;;:::i;:::-;24479:6;:40;;24471:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;24592:3;24583:6;:12;;;;:::i;:::-;24571:9;:24;;;;24394:209:::0;:::o;20016:39::-;;;;;;;;;;;;;:::o;19637:35::-;;;;:::o;23767:377::-;23848:4;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23905:4:::1;23901:1;23885:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23872:9;:37;;23864:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;24017:4;24012:2;23996:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;23983:9;:38;;23975:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;24107:9;24086:18;:30;;;;24133:4;24126:11;;23767:377:::0;;;:::o;20064:27::-;;;;:::o;7478:151::-;7567:7;7594:11;:18;7606:5;7594:18;;;;;;;;;;;;;;;:27;7613:7;7594:27;;;;;;;;;;;;;;;;7587:34;;7478:151;;;;:::o;19679:33::-;;;;:::o;23557:135::-;23617:4;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23657:5:::1;23634:20;;:28;;;;;;;;;;;;;;;;;;23680:4;23673:11;;23557:135:::0;:::o;19600:24::-;;;;;;;;;;;;;:::o;12835:244::-;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12944:1:::1;12924:22;;:8;:22;;;;12916:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13034:8;13005:38;;13026:6;;;;;;;;;;;13005:38;;;;;;;;;;;;13063:8;13054:6;;:17;;;;;;;;;;;;;;;;;;12835:244:::0;:::o;23368:124::-;23423:4;12602:12;:10;:12::i;:::-;12592:22;;:6;;;;;;;;;;;:22;;;12584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23457:5:::1;23440:14;;:22;;;;;;;;;;;;;;;;;;23480:4;23473:11;;23368:124:::0;:::o;19719:24::-;;;;:::o;10617:181::-;10675:7;10695:9;10711:1;10707;:5;;;;:::i;:::-;10695:17;;10736:1;10731;:6;;10723:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;10789:1;10782:8;;;10617:181;;;;:::o;1893:98::-;1946:7;1973:10;1966:17;;1893:98;:::o;10073:380::-;10226:1;10209:19;;:5;:19;;;;10201:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10307:1;10288:21;;:7;:21;;;;10280:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10391:6;10361:11;:18;10373:5;10361:18;;;;;;;;;;;;;;;:27;10380:7;10361:27;;;;;;;;;;;;;;;:36;;;;10429:7;10413:32;;10422:5;10413:32;;;10438:6;10413:32;;;;;;:::i;:::-;;;;;;;;10073:380;;;:::o;26827:4107::-;26975:1;26959:18;;:4;:18;;;;26951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27052:1;27038:16;;:2;:16;;;;27030:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27114:9;:15;27124:4;27114:15;;;;;;;;;;;;;;;;;;;;;;;;;27113:16;27105:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;27247:1;27237:6;:11;27233:93;;;27265:28;27281:4;27287:2;27291:1;27265:15;:28::i;:::-;27308:7;;27233:93;27369:11;;27350:15;:30;27346:56;;;27398:4;27382:9;:13;27392:2;27382:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;27346:56;27427:14;;;;;;;;;;;27423:1838;;;27488:7;:5;:7::i;:::-;27480:15;;:4;:15;;;;:49;;;;;27522:7;:5;:7::i;:::-;27516:13;;:2;:13;;;;27480:49;:86;;;;;27564:1;27550:16;;:2;:16;;;;27480:86;:128;;;;;27601:6;27587:21;;:2;:21;;;;27480:128;:159;;;;;27630:9;;;;;;;;;;;27629:10;27480:159;27458:1792;;;27679:13;;;;;;;;;;;27674:150;;27725:19;:25;27745:4;27725:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27754:19;:23;27774:2;27754:23;;;;;;;;;;;;;;;;;;;;;;;;;27725:52;27717:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;27674:150;27982:20;;;;;;;;;;;27978:423;;;28036:7;:5;:7::i;:::-;28030:13;;:2;:13;;;;:47;;;;;28061:15;28047:30;;:2;:30;;;;28030:47;:79;;;;;28095:13;28081:28;;:2;:28;;;;28030:79;28026:356;;;28187:12;28145:28;:39;28174:9;28145:39;;;;;;;;;;;;;;;;:54;28137:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28346:12;28304:28;:39;28333:9;28304:39;;;;;;;;;;;;;;;:54;;;;28026:356;27978:423;28471:25;:31;28497:4;28471:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28507:31;:35;28539:2;28507:35;;;;;;;;;;;;;;;;;;;;;;;;;28506:36;28471:71;28467:768;;;28585:20;;28575:6;:30;;28567:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28720:9;;28703:13;28713:2;28703:9;:13::i;:::-;28694:6;:22;;;;:::i;:::-;:35;;28686:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28467:768;;;28848:25;:29;28874:2;28848:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28882:31;:37;28914:4;28882:37;;;;;;;;;;;;;;;;;;;;;;;;;28881:38;28848:71;28844:391;;;28962:20;;28952:6;:30;;28944:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;28844:391;;;29089:31;:35;29121:2;29089:35;;;;;;;;;;;;;;;;;;;;;;;;;29084:151;;29182:9;;29165:13;29175:2;29165:9;:13::i;:::-;29156:6;:22;;;;:::i;:::-;:35;;29148:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29084:151;28844:391;28467:768;27458:1792;27423:1838;29275:28;29306:24;29324:4;29306:9;:24::i;:::-;29275:55;;29341:12;29380:18;;29356:20;:42;;29341:57;;29427:7;:34;;;;;29452:9;;;;;;;;;;;29451:10;29427:34;:83;;;;;29479:25;:31;29505:4;29479:31;;;;;;;;;;;;;;;;;;;;;;;;;29478:32;29427:83;:126;;;;;29528:19;:25;29548:4;29528:25;;;;;;;;;;;;;;;;;;;;;;;;;29527:26;29427:126;:167;;;;;29571:19;:23;29591:2;29571:23;;;;;;;;;;;;;;;;;;;;;;;;;29570:24;29427:167;29409:297;;;29633:4;29621:9;;:16;;;;;;;;;;;;;;;;;;29652:10;:8;:10::i;:::-;29689:5;29677:9;;:17;;;;;;;;;;;;;;;;;;29409:297;29718:12;29734:9;;;;;;;;;;;29733:10;29718:25;;29845:19;:25;29865:4;29845:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29874:19;:23;29894:2;29874:23;;;;;;;;;;;;;;;;;;;;;;;;;29845:52;29841:100;;;29924:5;29914:15;;29841:100;29961:12;30066:7;30062:819;;;30118:25;:29;30144:2;30118:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;30167:1;30151:13;;:17;30118:50;30114:600;;;30196:34;30226:3;30196:25;30207:13;;30196:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;30189:41;;30299:13;;30279:17;;30272:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;30249:19;;:63;;;;;;;:::i;:::-;;;;;;;;30369:13;;30355:11;;30348:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;30331:13;;:51;;;;;;;:::i;:::-;;;;;;;;30114:600;;;30444:25;:31;30470:4;30444:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;30494:1;30479:12;;:16;30444:51;30440:274;;;30520:33;30549:3;30520:24;30531:12;;30520:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;30513:40;;30618:12;;30599:16;;30592:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;30569:19;;:61;;;;;;;:::i;:::-;;;;;;;;30686:12;;30673:10;;30666:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;30649:13;;:49;;;;;;;:::i;:::-;;;;;;;;30440:274;30114:600;30753:1;30746:4;:8;30742:91;;;30775:42;30791:4;30805;30812;30775:15;:42::i;:::-;30742:91;30865:4;30855:14;;;;;:::i;:::-;;;30062:819;30893:33;30909:4;30915:2;30919:6;30893:15;:33::i;:::-;26940:3994;;;;26827:4107;;;;:::o;10950:192::-;11036:7;11069:1;11064;:6;;11072:12;11056:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11096:9;11112:1;11108;:5;;;;:::i;:::-;11096:17;;11133:1;11126:8;;;10950:192;;;;;:::o;25715:188::-;25832:5;25798:25;:31;25824:4;25798:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25889:5;25855:40;;25883:4;25855:40;;;;;;;;;;;;25715:188;;:::o;8680:573::-;8838:1;8820:20;;:6;:20;;;;8812:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8922:1;8901:23;;:9;:23;;;;8893:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8977:47;8998:6;9006:9;9017:6;8977:20;:47::i;:::-;9057:71;9079:6;9057:71;;;;;;;;;;;;;;;;;:9;:17;9067:6;9057:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9037:9;:17;9047:6;9037:17;;;;;;;;;;;;;;;:91;;;;9162:32;9187:6;9162:9;:20;9172:9;9162:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9139:9;:20;9149:9;9139:20;;;;;;;;;;;;;;;:55;;;;9227:9;9210:35;;9219:6;9210:35;;;9238:6;9210:35;;;;;;:::i;:::-;;;;;;;;8680:573;;;:::o;32066:1269::-;32105:23;32131:24;32149:4;32131:9;:24::i;:::-;32105:50;;32166:25;32216:13;;32194:19;;:35;;;;:::i;:::-;32166:63;;32273:1;32254:15;:20;:46;;;;32299:1;32278:17;:22;32254:46;32250:59;;;32302:7;;;;32250:59;32362:2;32341:18;;:23;;;;:::i;:::-;32323:15;:41;32319:113;;;32418:2;32397:18;;:23;;;;:::i;:::-;32379:41;;32319:113;32501:23;32587:1;32567:17;32545:19;;32527:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;32501:87;;32599:26;32628:36;32648:15;32628;:19;;:36;;;;:::i;:::-;32599:65;;32685:25;32713:21;32685:49;;32747:37;32765:18;32747:17;:37::i;:::-;32806:18;32827:44;32853:17;32827:21;:25;;:44;;;;:::i;:::-;32806:65;;32882:17;32902:52;32936:17;32902:29;32917:13;;32902:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;32882:72;;32965:23;33004:9;32991:10;:22;;;;:::i;:::-;32965:48;;33056:1;33034:19;:23;;;;33084:1;33068:13;:17;;;;33136:1;33118:15;:19;:42;;;;;33159:1;33141:15;:19;33118:42;33114:214;;;33177:47;33191:15;33208;33177:13;:47::i;:::-;33244:72;33259:18;33279:15;33296:19;;33244:72;;;;;;;;:::i;:::-;;;;;;;;33114:214;32094:1241;;;;;;;;32066:1269;:::o;11150:250::-;11208:7;11237:1;11232;:6;11228:47;;;11262:1;11255:8;;;;11228:47;11287:9;11303:1;11299;:5;;;;:::i;:::-;11287:17;;11332:1;11327;11323;:5;;;;:::i;:::-;:10;11315:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11391:1;11384:8;;;11150:250;;;;;:::o;11408:132::-;11466:7;11493:39;11497:1;11500;11493:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11486:46;;11408:132;;;;:::o;10461:125::-;;;;:::o;10806:136::-;10864:7;10891:43;10895:1;10898;10891:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;10884:50;;10806:136;;;;:::o;30942:590::-;31069:21;31107:1;31093:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31069:40;;31138:4;31120;31125:1;31120:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31164:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31154:4;31159:1;31154:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31199:62;31216:4;31231:15;31249:11;31199:8;:62::i;:::-;31300:15;:66;;;31381:11;31407:1;31451:4;31478;31498:15;31300:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30998:534;30942:590;:::o;31544:514::-;31693:62;31710:4;31725:15;31743:11;31693:8;:62::i;:::-;31798:15;:31;;;31837:9;31870:4;31890:11;31916:1;31959;32002:7;:5;:7::i;:::-;32024:15;31798:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31544:514;;:::o;11548:278::-;11634:7;11666:1;11662;:5;11669:12;11654:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11693:9;11709:1;11705;:5;;;;:::i;:::-;11693:17;;11817:1;11810:8;;;11548: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:765::-;6635:6;6643;6651;6659;6708:3;6696:9;6687:7;6683:23;6679:33;6676:120;;;6715:79;;:::i;:::-;6676:120;6835:1;6860:53;6905:7;6896:6;6885:9;6881:22;6860:53;:::i;:::-;6850:63;;6806:117;6962:2;6988:53;7033:7;7024:6;7013:9;7009:22;6988:53;:::i;:::-;6978:63;;6933:118;7090:2;7116:53;7161:7;7152:6;7141:9;7137:22;7116:53;:::i;:::-;7106:63;;7061:118;7218:2;7244:53;7289:7;7280:6;7269:9;7265:22;7244:53;:::i;:::-;7234:63;;7189:118;6549:765;;;;;;;:::o;7320:118::-;7407:24;7425:5;7407:24;:::i;:::-;7402:3;7395:37;7320:118;;:::o;7444:222::-;7537:4;7575:2;7564:9;7560:18;7552:26;;7588:71;7656:1;7645:9;7641:17;7632:6;7588:71;:::i;:::-;7444:222;;;;:::o;7672:117::-;7781:1;7778;7771:12;7795:180;7843:77;7840:1;7833:88;7940:4;7937:1;7930:15;7964:4;7961:1;7954:15;7981:281;8064:27;8086:4;8064:27;:::i;:::-;8056:6;8052:40;8194:6;8182:10;8179:22;8158:18;8146:10;8143:34;8140:62;8137:88;;;8205:18;;:::i;:::-;8137:88;8245:10;8241:2;8234:22;8024:238;7981:281;;:::o;8268:129::-;8302:6;8329:20;;:::i;:::-;8319:30;;8358:33;8386:4;8378:6;8358:33;:::i;:::-;8268:129;;;:::o;8403:311::-;8480:4;8570:18;8562:6;8559:30;8556:56;;;8592:18;;:::i;:::-;8556:56;8642:4;8634:6;8630:17;8622:25;;8702:4;8696;8692:15;8684:23;;8403:311;;;:::o;8720:117::-;8829:1;8826;8819:12;8860:710;8956:5;8981:81;8997:64;9054:6;8997:64;:::i;:::-;8981:81;:::i;:::-;8972:90;;9082:5;9111:6;9104:5;9097:21;9145:4;9138:5;9134:16;9127:23;;9198:4;9190:6;9186:17;9178:6;9174:30;9227:3;9219:6;9216:15;9213:122;;;9246:79;;:::i;:::-;9213:122;9361:6;9344:220;9378:6;9373:3;9370:15;9344:220;;;9453:3;9482:37;9515:3;9503:10;9482:37;:::i;:::-;9477:3;9470:50;9549:4;9544:3;9540:14;9533:21;;9420:144;9404:4;9399:3;9395:14;9388:21;;9344:220;;;9348:21;8962:608;;8860:710;;;;;:::o;9593:370::-;9664:5;9713:3;9706:4;9698:6;9694:17;9690:27;9680:122;;9721:79;;:::i;:::-;9680:122;9838:6;9825:20;9863:94;9953:3;9945:6;9938:4;9930:6;9926:17;9863:94;:::i;:::-;9854:103;;9670:293;9593:370;;;;:::o;9969:539::-;10053:6;10102:2;10090:9;10081:7;10077:23;10073:32;10070:119;;;10108:79;;:::i;:::-;10070:119;10256:1;10245:9;10241:17;10228:31;10286:18;10278:6;10275:30;10272:117;;;10308:79;;:::i;:::-;10272:117;10413:78;10483:7;10474:6;10463:9;10459:22;10413:78;:::i;:::-;10403:88;;10199:302;9969:539;;;;:::o;10514:116::-;10584:21;10599:5;10584:21;:::i;:::-;10577:5;10574:32;10564:60;;10620:1;10617;10610:12;10564:60;10514:116;:::o;10636:133::-;10679:5;10717:6;10704:20;10695:29;;10733:30;10757:5;10733:30;:::i;:::-;10636:133;;;;:::o;10775:468::-;10840:6;10848;10897:2;10885:9;10876:7;10872:23;10868:32;10865:119;;;10903:79;;:::i;:::-;10865:119;11023:1;11048:53;11093:7;11084:6;11073:9;11069:22;11048:53;:::i;:::-;11038:63;;10994:117;11150:2;11176:50;11218:7;11209:6;11198:9;11194:22;11176:50;:::i;:::-;11166:60;;11121:115;10775:468;;;;;:::o;11249:474::-;11317:6;11325;11374:2;11362:9;11353:7;11349:23;11345:32;11342:119;;;11380:79;;:::i;:::-;11342:119;11500:1;11525:53;11570:7;11561:6;11550:9;11546:22;11525:53;:::i;:::-;11515:63;;11471:117;11627:2;11653:53;11698:7;11689:6;11678:9;11674:22;11653:53;:::i;:::-;11643:63;;11598:118;11249:474;;;;;:::o;11729:180::-;11777:77;11774:1;11767:88;11874:4;11871:1;11864:15;11898:4;11895:1;11888:15;11915:320;11959:6;11996:1;11990:4;11986:12;11976:22;;12043:1;12037:4;12033:12;12064:18;12054:81;;12120:4;12112:6;12108:17;12098:27;;12054:81;12182:2;12174:6;12171:14;12151:18;12148:38;12145:84;;;12201:18;;:::i;:::-;12145:84;11966:269;11915:320;;;:::o;12241:182::-;12381:34;12377:1;12369:6;12365:14;12358:58;12241:182;:::o;12429:366::-;12571:3;12592:67;12656:2;12651:3;12592:67;:::i;:::-;12585:74;;12668:93;12757:3;12668:93;:::i;:::-;12786:2;12781:3;12777:12;12770:19;;12429:366;;;:::o;12801:419::-;12967:4;13005:2;12994:9;12990:18;12982:26;;13054:9;13048:4;13044:20;13040:1;13029:9;13025:17;13018:47;13082:131;13208:4;13082:131;:::i;:::-;13074:139;;12801:419;;;:::o;13226:180::-;13274:77;13271:1;13264:88;13371:4;13368:1;13361:15;13395:4;13392:1;13385:15;13412:348;13452:7;13475:20;13493:1;13475:20;:::i;:::-;13470:25;;13509:20;13527:1;13509:20;:::i;:::-;13504:25;;13697:1;13629:66;13625:74;13622:1;13619:81;13614:1;13607:9;13600:17;13596:105;13593:131;;;13704:18;;:::i;:::-;13593:131;13752:1;13749;13745:9;13734:20;;13412:348;;;;:::o;13766:180::-;13814:77;13811:1;13804:88;13911:4;13908:1;13901:15;13935:4;13932:1;13925:15;13952:185;13992:1;14009:20;14027:1;14009:20;:::i;:::-;14004:25;;14043:20;14061:1;14043:20;:::i;:::-;14038:25;;14082:1;14072:35;;14087:18;;:::i;:::-;14072:35;14129:1;14126;14122:9;14117:14;;13952:185;;;;:::o;14143:234::-;14283:34;14279:1;14271:6;14267:14;14260:58;14352:17;14347:2;14339:6;14335:15;14328:42;14143:234;:::o;14383:366::-;14525:3;14546:67;14610:2;14605:3;14546:67;:::i;:::-;14539:74;;14622:93;14711:3;14622:93;:::i;:::-;14740:2;14735:3;14731:12;14724:19;;14383:366;;;:::o;14755:419::-;14921:4;14959:2;14948:9;14944:18;14936:26;;15008:9;15002:4;14998:20;14994:1;14983:9;14979:17;14972:47;15036:131;15162:4;15036:131;:::i;:::-;15028:139;;14755:419;;;:::o;15180:305::-;15220:3;15239:20;15257:1;15239:20;:::i;:::-;15234:25;;15273:20;15291:1;15273:20;:::i;:::-;15268:25;;15427:1;15359:66;15355:74;15352:1;15349:81;15346:107;;;15433:18;;:::i;:::-;15346:107;15477:1;15474;15470:9;15463:16;;15180:305;;;;:::o;15491:179::-;15631:31;15627:1;15619:6;15615:14;15608:55;15491:179;:::o;15676:366::-;15818:3;15839:67;15903:2;15898:3;15839:67;:::i;:::-;15832:74;;15915:93;16004:3;15915:93;:::i;:::-;16033:2;16028:3;16024:12;16017:19;;15676:366;;;:::o;16048:419::-;16214:4;16252:2;16241:9;16237:18;16229:26;;16301:9;16295:4;16291:20;16287:1;16276:9;16272:17;16265:47;16329:131;16455:4;16329:131;:::i;:::-;16321:139;;16048:419;;;:::o;16473:180::-;16521:77;16518:1;16511:88;16618:4;16615:1;16608:15;16642:4;16639:1;16632:15;16659:233;16698:3;16721:24;16739:5;16721:24;:::i;:::-;16712:33;;16767:66;16760:5;16757:77;16754:103;;;16837:18;;:::i;:::-;16754:103;16884:1;16877:5;16873:13;16866:20;;16659:233;;;:::o;16898:244::-;17038:34;17034:1;17026:6;17022:14;17015:58;17107:27;17102:2;17094:6;17090:15;17083:52;16898:244;:::o;17148:366::-;17290:3;17311:67;17375:2;17370:3;17311:67;:::i;:::-;17304:74;;17387:93;17476:3;17387:93;:::i;:::-;17505:2;17500:3;17496:12;17489:19;;17148:366;;;:::o;17520:419::-;17686:4;17724:2;17713:9;17709:18;17701:26;;17773:9;17767:4;17763:20;17759:1;17748:9;17744:17;17737:47;17801:131;17927:4;17801:131;:::i;:::-;17793:139;;17520:419;;;:::o;17945:223::-;18085:34;18081:1;18073:6;18069:14;18062:58;18154:6;18149:2;18141:6;18137:15;18130:31;17945:223;:::o;18174:366::-;18316:3;18337:67;18401:2;18396:3;18337:67;:::i;:::-;18330:74;;18413:93;18502:3;18413:93;:::i;:::-;18531:2;18526:3;18522:12;18515:19;;18174:366;;;:::o;18546:419::-;18712:4;18750:2;18739:9;18735:18;18727:26;;18799:9;18793:4;18789:20;18785:1;18774:9;18770:17;18763:47;18827:131;18953:4;18827:131;:::i;:::-;18819:139;;18546:419;;;:::o;18971:238::-;19111:34;19107:1;19099:6;19095:14;19088:58;19180:21;19175:2;19167:6;19163:15;19156:46;18971:238;:::o;19215:366::-;19357:3;19378:67;19442:2;19437:3;19378:67;:::i;:::-;19371:74;;19454:93;19543:3;19454:93;:::i;:::-;19572:2;19567:3;19563:12;19556:19;;19215:366;;;:::o;19587:419::-;19753:4;19791:2;19780:9;19776:18;19768:26;;19840:9;19834:4;19830:20;19826:1;19815:9;19811:17;19804:47;19868:131;19994:4;19868:131;:::i;:::-;19860:139;;19587:419;;;:::o;20012:237::-;20152:34;20148:1;20140:6;20136:14;20129:58;20221:20;20216:2;20208:6;20204:15;20197:45;20012:237;:::o;20255:366::-;20397:3;20418:67;20482:2;20477:3;20418:67;:::i;:::-;20411:74;;20494:93;20583:3;20494:93;:::i;:::-;20612:2;20607:3;20603:12;20596:19;;20255:366;;;:::o;20627:419::-;20793:4;20831:2;20820:9;20816:18;20808:26;;20880:9;20874:4;20870:20;20866:1;20855:9;20851:17;20844:47;20908:131;21034:4;20908:131;:::i;:::-;20900:139;;20627:419;;;:::o;21052:225::-;21192:34;21188:1;21180:6;21176:14;21169:58;21261:8;21256:2;21248:6;21244:15;21237:33;21052:225;:::o;21283:366::-;21425:3;21446:67;21510:2;21505:3;21446:67;:::i;:::-;21439:74;;21522:93;21611:3;21522:93;:::i;:::-;21640:2;21635:3;21631:12;21624:19;;21283:366;;;:::o;21655:419::-;21821:4;21859:2;21848:9;21844:18;21836:26;;21908:9;21902:4;21898:20;21894:1;21883:9;21879:17;21872:47;21936:131;22062:4;21936:131;:::i;:::-;21928:139;;21655:419;;;:::o;22080:177::-;22220:29;22216:1;22208:6;22204:14;22197:53;22080:177;:::o;22263:366::-;22405:3;22426:67;22490:2;22485:3;22426:67;:::i;:::-;22419:74;;22502:93;22591:3;22502:93;:::i;:::-;22620:2;22615:3;22611:12;22604:19;;22263:366;;;:::o;22635:419::-;22801:4;22839:2;22828:9;22824:18;22816:26;;22888:9;22882:4;22878:20;22874:1;22863:9;22859:17;22852:47;22916:131;23042:4;22916:131;:::i;:::-;22908:139;;22635:419;;;:::o;23060:223::-;23200:34;23196:1;23188:6;23184:14;23177:58;23269:6;23264:2;23256:6;23252:15;23245:31;23060:223;:::o;23289:366::-;23431:3;23452:67;23516:2;23511:3;23452:67;:::i;:::-;23445:74;;23528:93;23617:3;23528:93;:::i;:::-;23646:2;23641:3;23637:12;23630:19;;23289:366;;;:::o;23661:419::-;23827:4;23865:2;23854:9;23850:18;23842:26;;23914:9;23908:4;23904:20;23900:1;23889:9;23885:17;23878:47;23942:131;24068:4;23942:131;:::i;:::-;23934:139;;23661:419;;;:::o;24086:221::-;24226:34;24222:1;24214:6;24210:14;24203:58;24295:4;24290:2;24282:6;24278:15;24271:29;24086:221;:::o;24313:366::-;24455:3;24476:67;24540:2;24535:3;24476:67;:::i;:::-;24469:74;;24552:93;24641:3;24552:93;:::i;:::-;24670:2;24665:3;24661:12;24654:19;;24313:366;;;:::o;24685:419::-;24851:4;24889:2;24878:9;24874:18;24866:26;;24938:9;24932:4;24928:20;24924:1;24913:9;24909:17;24902:47;24966:131;25092:4;24966:131;:::i;:::-;24958:139;;24685:419;;;:::o;25110:224::-;25250:34;25246:1;25238:6;25234:14;25227:58;25319:7;25314:2;25306:6;25302:15;25295:32;25110:224;:::o;25340:366::-;25482:3;25503:67;25567:2;25562:3;25503:67;:::i;:::-;25496:74;;25579:93;25668:3;25579:93;:::i;:::-;25697:2;25692:3;25688:12;25681:19;;25340:366;;;:::o;25712:419::-;25878:4;25916:2;25905:9;25901:18;25893:26;;25965:9;25959:4;25955:20;25951:1;25940:9;25936:17;25929:47;25993:131;26119:4;25993:131;:::i;:::-;25985:139;;25712:419;;;:::o;26137:222::-;26277:34;26273:1;26265:6;26261:14;26254:58;26346:5;26341:2;26333:6;26329:15;26322:30;26137:222;:::o;26365:366::-;26507:3;26528:67;26592:2;26587:3;26528:67;:::i;:::-;26521:74;;26604:93;26693:3;26604:93;:::i;:::-;26722:2;26717:3;26713:12;26706:19;;26365:366;;;:::o;26737:419::-;26903:4;26941:2;26930:9;26926:18;26918:26;;26990:9;26984:4;26980:20;26976:1;26965:9;26961:17;26954:47;27018:131;27144:4;27018:131;:::i;:::-;27010:139;;26737:419;;;:::o;27162:301::-;27302:34;27298:1;27290:6;27286:14;27279:58;27371:34;27366:2;27358:6;27354:15;27347:59;27440:15;27435:2;27427:6;27423:15;27416:40;27162:301;:::o;27469:366::-;27611:3;27632:67;27696:2;27691:3;27632:67;:::i;:::-;27625:74;;27708:93;27797:3;27708:93;:::i;:::-;27826:2;27821:3;27817:12;27810:19;;27469:366;;;:::o;27841:419::-;28007:4;28045:2;28034:9;28030:18;28022:26;;28094:9;28088:4;28084:20;28080:1;28069:9;28065:17;28058:47;28122:131;28248:4;28122:131;:::i;:::-;28114:139;;27841:419;;;:::o;28266:172::-;28406:24;28402:1;28394:6;28390:14;28383:48;28266:172;:::o;28444:366::-;28586:3;28607:67;28671:2;28666:3;28607:67;:::i;:::-;28600:74;;28683:93;28772:3;28683:93;:::i;:::-;28801:2;28796:3;28792:12;28785:19;;28444:366;;;:::o;28816:419::-;28982:4;29020:2;29009:9;29005:18;28997:26;;29069:9;29063:4;29059:20;29055:1;29044:9;29040:17;29033:47;29097:131;29223:4;29097:131;:::i;:::-;29089:139;;28816:419;;;:::o;29241:297::-;29381:34;29377:1;29369:6;29365:14;29358:58;29450:34;29445:2;29437:6;29433:15;29426:59;29519:11;29514:2;29506:6;29502:15;29495:36;29241:297;:::o;29544:366::-;29686:3;29707:67;29771:2;29766:3;29707:67;:::i;:::-;29700:74;;29783:93;29872:3;29783:93;:::i;:::-;29901:2;29896:3;29892:12;29885:19;;29544:366;;;:::o;29916:419::-;30082:4;30120:2;30109:9;30105:18;30097:26;;30169:9;30163:4;30159:20;30155:1;30144:9;30140:17;30133:47;30197:131;30323:4;30197:131;:::i;:::-;30189:139;;29916:419;;;:::o;30341:240::-;30481:34;30477:1;30469:6;30465:14;30458:58;30550:23;30545:2;30537:6;30533:15;30526:48;30341:240;:::o;30587:366::-;30729:3;30750:67;30814:2;30809:3;30750:67;:::i;:::-;30743:74;;30826:93;30915:3;30826:93;:::i;:::-;30944:2;30939:3;30935:12;30928:19;;30587:366;;;:::o;30959:419::-;31125:4;31163:2;31152:9;31148:18;31140:26;;31212:9;31206:4;31202:20;31198:1;31187:9;31183:17;31176:47;31240:131;31366:4;31240:131;:::i;:::-;31232:139;;30959:419;;;:::o;31384:169::-;31524:21;31520:1;31512:6;31508:14;31501:45;31384:169;:::o;31559:366::-;31701:3;31722:67;31786:2;31781:3;31722:67;:::i;:::-;31715:74;;31798:93;31887:3;31798:93;:::i;:::-;31916:2;31911:3;31907:12;31900:19;;31559:366;;;:::o;31931:419::-;32097:4;32135:2;32124:9;32120:18;32112:26;;32184:9;32178:4;32174:20;32170:1;32159:9;32155:17;32148:47;32212:131;32338:4;32212:131;:::i;:::-;32204:139;;31931:419;;;:::o;32356:241::-;32496:34;32492:1;32484:6;32480:14;32473:58;32565:24;32560:2;32552:6;32548:15;32541:49;32356:241;:::o;32603:366::-;32745:3;32766:67;32830:2;32825:3;32766:67;:::i;:::-;32759:74;;32842:93;32931:3;32842:93;:::i;:::-;32960:2;32955:3;32951:12;32944:19;;32603:366;;;:::o;32975:419::-;33141:4;33179:2;33168:9;33164:18;33156:26;;33228:9;33222:4;33218:20;33214:1;33203:9;33199:17;33192:47;33256:131;33382:4;33256:131;:::i;:::-;33248:139;;32975:419;;;:::o;33400:191::-;33440:4;33460:20;33478:1;33460:20;:::i;:::-;33455:25;;33494:20;33512:1;33494:20;:::i;:::-;33489:25;;33533:1;33530;33527:8;33524:34;;;33538:18;;:::i;:::-;33524:34;33583:1;33580;33576:9;33568:17;;33400:191;;;;:::o;33597:442::-;33746:4;33784:2;33773:9;33769:18;33761:26;;33797:71;33865:1;33854:9;33850:17;33841:6;33797:71;:::i;:::-;33878:72;33946:2;33935:9;33931:18;33922:6;33878:72;:::i;:::-;33960;34028:2;34017:9;34013:18;34004:6;33960:72;:::i;:::-;33597:442;;;;;;:::o;34045:220::-;34185:34;34181:1;34173:6;34169:14;34162:58;34254:3;34249:2;34241:6;34237:15;34230:28;34045:220;:::o;34271:366::-;34413:3;34434:67;34498:2;34493:3;34434:67;:::i;:::-;34427:74;;34510:93;34599:3;34510:93;:::i;:::-;34628:2;34623:3;34619:12;34612:19;;34271:366;;;:::o;34643:419::-;34809:4;34847:2;34836:9;34832:18;34824:26;;34896:9;34890:4;34886:20;34882:1;34871:9;34867:17;34860:47;34924:131;35050:4;34924:131;:::i;:::-;34916:139;;34643:419;;;:::o;35068:143::-;35125:5;35156:6;35150:13;35141:22;;35172:33;35199:5;35172:33;:::i;:::-;35068:143;;;;:::o;35217:351::-;35287:6;35336:2;35324:9;35315:7;35311:23;35307:32;35304:119;;;35342:79;;:::i;:::-;35304:119;35462:1;35487:64;35543:7;35534:6;35523:9;35519:22;35487:64;:::i;:::-;35477:74;;35433:128;35217:351;;;;:::o;35574:85::-;35619:7;35648:5;35637:16;;35574:85;;;:::o;35665:158::-;35723:9;35756:61;35774:42;35783:32;35809:5;35783:32;:::i;:::-;35774:42;:::i;:::-;35756:61;:::i;:::-;35743:74;;35665:158;;;:::o;35829:147::-;35924:45;35963:5;35924:45;:::i;:::-;35919:3;35912:58;35829:147;;:::o;35982:114::-;36049:6;36083:5;36077:12;36067:22;;35982:114;;;:::o;36102:184::-;36201:11;36235:6;36230:3;36223:19;36275:4;36270:3;36266:14;36251:29;;36102:184;;;;:::o;36292:132::-;36359:4;36382:3;36374:11;;36412:4;36407:3;36403:14;36395:22;;36292:132;;;:::o;36430:108::-;36507:24;36525:5;36507:24;:::i;:::-;36502:3;36495:37;36430:108;;:::o;36544:179::-;36613:10;36634:46;36676:3;36668:6;36634:46;:::i;:::-;36712:4;36707:3;36703:14;36689:28;;36544:179;;;;:::o;36729:113::-;36799:4;36831;36826:3;36822:14;36814:22;;36729:113;;;:::o;36878:732::-;36997:3;37026:54;37074:5;37026:54;:::i;:::-;37096:86;37175:6;37170:3;37096:86;:::i;:::-;37089:93;;37206:56;37256:5;37206:56;:::i;:::-;37285:7;37316:1;37301:284;37326:6;37323:1;37320:13;37301:284;;;37402:6;37396:13;37429:63;37488:3;37473:13;37429:63;:::i;:::-;37422:70;;37515:60;37568:6;37515:60;:::i;:::-;37505:70;;37361:224;37348:1;37345;37341:9;37336:14;;37301:284;;;37305:14;37601:3;37594:10;;37002:608;;;36878:732;;;;:::o;37616:831::-;37879:4;37917:3;37906:9;37902:19;37894:27;;37931:71;37999:1;37988:9;37984:17;37975:6;37931:71;:::i;:::-;38012:80;38088:2;38077:9;38073:18;38064:6;38012:80;:::i;:::-;38139:9;38133:4;38129:20;38124:2;38113:9;38109:18;38102:48;38167:108;38270:4;38261:6;38167:108;:::i;:::-;38159:116;;38285:72;38353:2;38342:9;38338:18;38329:6;38285:72;:::i;:::-;38367:73;38435:3;38424:9;38420:19;38411:6;38367:73;:::i;:::-;37616:831;;;;;;;;:::o;38453:807::-;38702:4;38740:3;38729:9;38725:19;38717:27;;38754:71;38822:1;38811:9;38807:17;38798:6;38754:71;:::i;:::-;38835:72;38903:2;38892:9;38888:18;38879:6;38835:72;:::i;:::-;38917:80;38993:2;38982:9;38978:18;38969:6;38917:80;:::i;:::-;39007;39083:2;39072:9;39068:18;39059:6;39007:80;:::i;:::-;39097:73;39165:3;39154:9;39150:19;39141:6;39097:73;:::i;:::-;39180;39248:3;39237:9;39233:19;39224:6;39180:73;:::i;:::-;38453:807;;;;;;;;;:::o;39266:143::-;39323:5;39354:6;39348:13;39339:22;;39370:33;39397:5;39370:33;:::i;:::-;39266:143;;;;:::o;39415:663::-;39503:6;39511;39519;39568:2;39556:9;39547:7;39543:23;39539:32;39536:119;;;39574:79;;:::i;:::-;39536:119;39694:1;39719:64;39775:7;39766:6;39755:9;39751:22;39719:64;:::i;:::-;39709:74;;39665:128;39832:2;39858:64;39914:7;39905:6;39894:9;39890:22;39858:64;:::i;:::-;39848:74;;39803:129;39971:2;39997:64;40053:7;40044:6;40033:9;40029:22;39997:64;:::i;:::-;39987:74;;39942:129;39415:663;;;;;:::o

Swarm Source

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