ETH Price: $3,469.99 (+2.33%)
Gas: 9 Gwei

Token

Husky Inu ($HI)
 

Overview

Max Total Supply

100,000,000,000 $HI

Holders

268

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
meltman.eth
Balance
31,829,299.144583746 $HI

Value
$0.00
0x1CFa525a42FfBC574F45eABE4A75F7886C607dEb
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:
HuskyInu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-19
*/

/**

*/
// The Shiba Inu / DogeCoin killer is arrived! Husky Inu is finally here!

// Telegram: @HuskyInuETH - t.me/huskyinueth

// Follow us on Twitter for updates: twitter.com/HuskyInu_ETH

// More information on website: www.huskyinueth.com

// ~ READY FOR A MOON MISSION? ~

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.7;

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);
}

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;
        return c;
    }

}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    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);
    }

}  

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

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 IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract HuskyInu is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping(address => bool) private _isSniper;
    address[] private _confirmedSnipers;

    address payable public _marketingAddress = payable(0x53fAe6f9F59738317d15C564896787aC67F358b7);

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100 * 10**9 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Husky Inu";
    string private _symbol = "$HI";
    uint8 private _decimals = 9;

    uint256 public _taxFee = 3;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _marketingFee = 7;
    uint256 private _previousmarketingFee = _marketingFee;

    uint256 launchTime;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool tradingOpen = false;

    uint256 public _maxTxAmount = 20 * 10**9 * 10**9;

    // Liquify when 400m tokens are stored
    uint256 private numTokensSellToLiquify = 400 * 10**6 * 10**9;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );
    event TransferToMarketing(uint256 ethTransferred);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a uniswap pair for token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingAddress] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function openTrading() external onlyOwner {
        tradingOpen = true;
        launchTime = block.timestamp;
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setmarketingFeePercent(uint256 marketingFee) external onlyOwner() {
        _marketingFee = marketingFee;
    }

    function setTaxFeePercent(uint256 taxFee) external onlyOwner {
        _taxFee = taxFee;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    //to receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculatemarketingFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculatemarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_marketingFee).div(
            10**2
        );
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _marketingFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousmarketingFee = _marketingFee;

        _taxFee = 0;
        _marketingFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousmarketingFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[to], 'You have no power here!');
        require(!_isSniper[msg.sender], 'You have no power here!');
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        // buy
        if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
            require(tradingOpen, 'Trading not yet enabled.');

            //antibot
            if (block.timestamp == launchTime) {
                _isSniper[to] = true;
                _confirmedSnipers.push(to);
            }
        }

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToLiquify;
        if (
            overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToLiquify;
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        
        uint256 marketingTokenBalance = contractTokenBalance;

        // capture the contract's current eth balance.
        // this is so that we can capture exactly the amount of eth that the
        // swap creates, and not make the liquidity event include any eth that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for eth
        swapTokensForEth(marketingTokenBalance);

        // Total eth that has been swapped
        uint256 ethSwapped = address(this).balance.sub(initialBalance);

        emit SwapAndLiquify(marketingTokenBalance, ethSwapped);

        // The remaining eth balance is to be Transferred to the marketing wallet
        uint256 marketingethToTransfer = ethSwapped;

        // Transfer the eth to the marketing wallet
        _marketingAddress.transfer(marketingethToTransfer);
        emit TransferToMarketing(marketingethToTransfer);
    }

    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
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function isRemovedSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function _removeSniper(address account) external onlyOwner {
        require(
            account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,
            'We can not blacklist Uniswap'
        );
        require(!_isSniper[account], 'Account is already blacklisted');
        _isSniper[account] = true;
        _confirmedSnipers.push(account);
    }

    function _amnestySniper(address account) external onlyOwner {
        require(_isSniper[account], 'Account is not blacklisted');
        for (uint256 i = 0; i < _confirmedSnipers.length; i++) {
            if (_confirmedSnipers[i] == account) {
                _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1];
                _isSniper[account] = false;
                _confirmedSnipers.pop();
                break;
            }
        }
    }
}

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":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":false,"internalType":"uint256","name":"ethTransferred","type":"uint256"}],"name":"TransferToMarketing","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_amnestySniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isRemovedSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setmarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"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"},{"stateMutability":"payable","type":"receive"}]

60c06040527353fae6f9f59738317d15c564896787ac67f358b7600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555068056bc75e2d63100000600b55600b54600019620000789190620008d3565b60001962000087919062000824565b600c556040518060400160405280600981526020017f4875736b7920496e750000000000000000000000000000000000000000000000815250600e9080519060200190620000d7929190620006bf565b506040518060400160405280600381526020017f2448490000000000000000000000000000000000000000000000000000000000815250600f908051906020019062000125929190620006bf565b506009601060006101000a81548160ff021916908360ff160217905550600360115560115460125560076013556013546014556001601660016101000a81548160ff0219169083151502179055506000601660026101000a81548160ff0219169083151502179055506801158e460913d0000060175567058d15e176280000601855348015620001b457600080fd5b506000620001c76200068e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600260006200027c6200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031a57600080fd5b505afa1580156200032f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000355919062000786565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003b857600080fd5b505afa158015620003cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f3919062000786565b6040518363ffffffff1660e01b815260040162000412929190620007da565b602060405180830381600087803b1580156200042d57600080fd5b505af115801562000442573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000468919062000786565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160056000620004eb6200069660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200061e6200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200067f919062000807565b60405180910390a350620009b7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006cd906200089d565b90600052602060002090601f016020900481019282620006f157600085556200073d565b82601f106200070c57805160ff19168380011785556200073d565b828001600101855582156200073d579182015b828111156200073c5782518255916020019190600101906200071f565b5b5090506200074c919062000750565b5090565b5b808211156200076b57600081600090555060010162000751565b5090565b60008151905062000780816200099d565b92915050565b6000602082840312156200079f576200079e62000998565b5b6000620007af848285016200076f565b91505092915050565b620007c3816200085f565b82525050565b620007d48162000893565b82525050565b6000604082019050620007f16000830185620007b8565b620008006020830184620007b8565b9392505050565b60006020820190506200081e6000830184620007c9565b92915050565b6000620008318262000893565b91506200083e8362000893565b9250828210156200085457620008536200090b565b5b828203905092915050565b60006200086c8262000873565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620008b657607f821691505b60208210811415620008cd57620008cc62000969565b5b50919050565b6000620008e08262000893565b9150620008ed8362000893565b9250826200090057620008ff6200093a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620009a8816200085f565b8114620009b457600080fd5b50565b60805160601c60a05160601c6158ae62000a0d600039600081816116be015281816129ea0152612c2d015260008181610b2b01528181612a40015281816138b3015281816139a301526139ca01526158ae6000f3fe6080604052600436106102295760003560e01c80634a74bb021161012357806395d89b41116100ab578063caac79341161006f578063caac79341461084e578063d543dbeb14610879578063dd62ed3e146108a2578063ea2f0b37146108df578063f375b2531461090857610230565b806395d89b4114610769578063a457c2d714610794578063a9059cbb146107d1578063c49b9a801461080e578063c9567bf91461083757610230565b806370a08231116100f257806370a0823114610682578063715018a6146106bf5780637d1db4a5146106d657806388f82020146107015780638da5cb5b1461073e57610230565b80634a74bb02146105b457806352390c02146105df5780635342acb414610608578063610d5b191461064557610230565b80632d838119116101b15780633b124fe7116101755780633b124fe7146104cf5780633bd5d173146104fa578063437823ec146105235780634549b0391461054c57806349bd5a5e1461058957610230565b80632d838119146103d8578063313ce56714610415578063362a3c5d146104405780633685d41914610469578063395093511461049257610230565b806313114a9d116101f857806313114a9d146102ef5780631694505e1461031a57806318160ddd1461034557806322976e0d1461037057806323b872dd1461039b57610230565b8063061c82d01461023557806306fdde031461025e578063095ea7b3146102895780630cd7c478146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190614826565b610931565b005b34801561026a57600080fd5b506102736109d0565b6040516102809190614c9c565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab91906147b9565b610a62565b6040516102bd9190614c66565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190614826565b610a80565b005b3480156102fb57600080fd5b50610304610b1f565b6040516103119190614efe565b60405180910390f35b34801561032657600080fd5b5061032f610b29565b60405161033c9190614c81565b60405180910390f35b34801561035157600080fd5b5061035a610b4d565b6040516103679190614efe565b60405180910390f35b34801561037c57600080fd5b50610385610b57565b6040516103929190614efe565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190614766565b610b5d565b6040516103cf9190614c66565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614826565b610c36565b60405161040c9190614efe565b60405180910390f35b34801561042157600080fd5b5061042a610ca4565b6040516104379190614f9c565b60405180910390f35b34801561044c57600080fd5b50610467600480360381019061046291906146cc565b610cbb565b005b34801561047557600080fd5b50610490600480360381019061048b91906146cc565b610fc5565b005b34801561049e57600080fd5b506104b960048036038101906104b491906147b9565b611314565b6040516104c69190614c66565b60405180910390f35b3480156104db57600080fd5b506104e46113c7565b6040516104f19190614efe565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614826565b6113cd565b005b34801561052f57600080fd5b5061054a600480360381019061054591906146cc565b611548565b005b34801561055857600080fd5b50610573600480360381019061056e9190614853565b611638565b6040516105809190614efe565b60405180910390f35b34801561059557600080fd5b5061059e6116bc565b6040516105ab9190614c30565b60405180910390f35b3480156105c057600080fd5b506105c96116e0565b6040516105d69190614c66565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906146cc565b6116f3565b005b34801561061457600080fd5b5061062f600480360381019061062a91906146cc565b6119a7565b60405161063c9190614c66565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906146cc565b6119fd565b6040516106799190614c66565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a491906146cc565b611a53565b6040516106b69190614efe565b60405180910390f35b3480156106cb57600080fd5b506106d4611b3e565b005b3480156106e257600080fd5b506106eb611c91565b6040516106f89190614efe565b60405180910390f35b34801561070d57600080fd5b50610728600480360381019061072391906146cc565b611c97565b6040516107359190614c66565b60405180910390f35b34801561074a57600080fd5b50610753611ced565b6040516107609190614c30565b60405180910390f35b34801561077557600080fd5b5061077e611d16565b60405161078b9190614c9c565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b691906147b9565b611da8565b6040516107c89190614c66565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f391906147b9565b611e75565b6040516108059190614c66565b60405180910390f35b34801561081a57600080fd5b50610835600480360381019061083091906147f9565b611e93565b005b34801561084357600080fd5b5061084c611f7c565b005b34801561085a57600080fd5b50610863612035565b6040516108709190614c4b565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190614826565b61205b565b005b3480156108ae57600080fd5b506108c960048036038101906108c49190614726565b612121565b6040516108d69190614efe565b60405180910390f35b3480156108eb57600080fd5b50610906600480360381019061090191906146cc565b6121a8565b005b34801561091457600080fd5b5061092f600480360381019061092a91906146cc565b612298565b005b6109396124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90614dde565b60405180910390fd5b8060118190555050565b6060600e80546109df90615203565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0b90615203565b8015610a585780601f10610a2d57610100808354040283529160200191610a58565b820191906000526020600020905b815481529060010190602001808311610a3b57829003601f168201915b5050505050905090565b6000610a76610a6f6124fb565b8484612503565b6001905092915050565b610a886124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90614dde565b60405180910390fd5b8060138190555050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b60135481565b6000610b6a8484846126ce565b610c2b84610b766124fb565b610c268560405180606001604052806028815260200161582c60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bdc6124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6d9092919063ffffffff16565b612503565b600190509392505050565b6000600c54821115610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490614cde565b60405180910390fd5b6000610c87612dd1565b9050610c9c8184612dfc90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b610cc36124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790614dde565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390614e1e565b60405180910390fd5b60005b600980549050811015610fc1578173ffffffffffffffffffffffffffffffffffffffff1660098281548110610e1757610e1661533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fae5760096001600980549050610e7291906150ed565b81548110610e8357610e8261533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110610ec257610ec161533a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480610f7457610f7361530b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fc1565b8080610fb990615235565b915050610ddf565b5050565b610fcd6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190614dde565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90614d3e565b60405180910390fd5b60005b600780549050811015611310578173ffffffffffffffffffffffffffffffffffffffff16600782815481106111215761112061533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156112fd576007600160078054905061117c91906150ed565b8154811061118d5761118c61533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600782815481106111cc576111cb61533a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060078054806112c3576112c261530b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611310565b808061130890615235565b9150506110e9565b5050565b60006113bd6113216124fb565b846113b885600460006113326124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b612503565b6001905092915050565b60115481565b60006113d76124fb565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d90614ebe565b60405180910390fd5b600061147183612ea4565b505050505090506114ca81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061152281600c54612f0090919063ffffffff16565b600c8190555061153d83600d54612e4690919063ffffffff16565b600d81905550505050565b6115506124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614dde565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b5483111561167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690614d7e565b60405180910390fd5b8161169f57600061168f84612ea4565b50505050509050809150506116b6565b60006116aa84612ea4565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601660019054906101000a900460ff1681565b6116fb6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90614dde565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90614d3e565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156118e9576118a5600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c36565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aee57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b39565b611b36600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c36565b90505b919050565b611b466124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90614dde565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60175481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611d2590615203565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5190615203565b8015611d9e5780601f10611d7357610100808354040283529160200191611d9e565b820191906000526020600020905b815481529060010190602001808311611d8157829003601f168201915b5050505050905090565b6000611e6b611db56124fb565b84611e66856040518060600160405280602581526020016158546025913960046000611ddf6124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6d9092919063ffffffff16565b612503565b6001905092915050565b6000611e89611e826124fb565b84846126ce565b6001905092915050565b611e9b6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90614dde565b60405180910390fd5b80601660016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611f719190614c66565b60405180910390a150565b611f846124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200890614dde565b60405180910390fd5b6001601660026101000a81548160ff02191690831515021790555042601581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120636124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790614dde565b60405180910390fd5b612118606461210a83600b54612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b60178190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121b06124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614dde565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122a06124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614dde565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790614e3e565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614d5e565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614e7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da90614cfe565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126c19190614efe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561273e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273590614e5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a590614cbe565b60405180910390fd5b600081116127f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e890614dfe565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614ede565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290290614ede565b60405180910390fd5b612913611ced565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129815750612951611ced565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129cc576017548111156129cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c290614d9e565b60405180910390fd5b5b60006129d730611a53565b905060175481106129e85760175490505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a8f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0057601660029054906101000a900460ff16612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3090614e9e565b60405180910390fd5b601554421415612bff576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b60006018548210159050808015612c245750601660009054906101000a900460ff16155b8015612c7c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c945750601660019054906101000a900460ff165b15612ca8576018549150612ca782612fc5565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d4f5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d5957600090505b612d658686868461310a565b505050505050565b6000838311158290612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9190614c9c565b60405180910390fd5b5060008385612dc491906150ed565b9050809150509392505050565b6000806000612dde61341b565b91509150612df58183612dfc90919063ffffffff16565b9250505090565b6000612e3e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136ce565b905092915050565b6000808284612e55919061500c565b905083811015612e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9190614d1e565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ebb8a613731565b9250925092506000806000612ed98d8686612ed4612dd1565b61378b565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612f4283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d6d565b905092915050565b600080831415612f5d5760009050612fbf565b60008284612f6b9190615093565b9050828482612f7a9190615062565b14612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb190614dbe565b60405180910390fd5b809150505b92915050565b6001601660006101000a81548160ff02191690831515021790555060008190506000479050612ff382613814565b60006130088247612f0090919063ffffffff16565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486838260405161303b929190614f73565b60405180910390a16000819050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156130b0573d6000803e3d6000fd5b507fcece836790e718d3e66cd1b6eaa6005ec1c1b021f2ab161c416ff6b300f6668e816040516130e09190614efe565b60405180910390a1505050506000601660006101000a81548160ff02191690831515021790555050565b8061311857613117613a60565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bb5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d0576131cb848484613aa3565b613407565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132735750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561328857613283848484613d03565b613406565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561332c5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133415761333c848484613f63565b613405565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133e35750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133f8576133f384848461412e565b613404565b613403848484613f63565b5b5b5b5b8061341557613414614423565b5b50505050565b6000806000600c5490506000600b54905060005b600780549050811015613691578260026000600784815481106134555761345461533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061354357508160036000600784815481106134db576134da61533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561355a57600c54600b54945094505050506136ca565b6135ea60026000600784815481106135755761357461533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f0090919063ffffffff16565b925061367c60036000600784815481106136075761360661533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f0090919063ffffffff16565b9150808061368990615235565b91505061342f565b506136a9600b54600c54612dfc90919063ffffffff16565b8210156136c157600c54600b549350935050506136ca565b81819350935050505b9091565b60008083118290613715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370c9190614c9c565b60405180910390fd5b50600083856137249190615062565b9050809150509392505050565b60008060008061374085614437565b9050600061374d86614468565b9050600061377682613768858a612f0090919063ffffffff16565b612f0090919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806137a48589612f4a90919063ffffffff16565b905060006137bb8689612f4a90919063ffffffff16565b905060006137d28789612f4a90919063ffffffff16565b905060006137fb826137ed8587612f0090919063ffffffff16565b612f0090919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561383157613830615369565b5b60405190808252806020026020018201604052801561385f5781602001602082028036833780820191505090505b50905030816000815181106138775761387661533a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561391757600080fd5b505afa15801561392b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394f91906146f9565b816001815181106139635761396261533a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139c8307f000000000000000000000000000000000000000000000000000000000000000084612503565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a2a959493929190614f19565b600060405180830381600087803b158015613a4457600080fd5b505af1158015613a58573d6000803e3d6000fd5b505050505050565b6000601154148015613a7457506000601354145b15613a7e57613aa1565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613ab587612ea4565b955095509550955095509550613b1387600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ba886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c3d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8981614499565b613c93848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613cf09190614efe565b60405180910390a3505050505050505050565b600080600080600080613d1587612ea4565b955095509550955095509550613d7386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ee981614499565b613ef3848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613f509190614efe565b60405180910390a3505050505050505050565b600080600080600080613f7587612ea4565b955095509550955095509550613fd386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061406885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b481614499565b6140be848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161411b9190614efe565b60405180910390a3505050505050505050565b60008060008060008061414087612ea4565b95509550955095509550955061419e87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142c883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a981614499565b6143b3848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144109190614efe565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b6000614461606461445360115485612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b9050919050565b6000614492606461448460135485612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b9050919050565b60006144a3612dd1565b905060006144ba8284612f4a90919063ffffffff16565b905061450e81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614639576145f583600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61465382600c54612f0090919063ffffffff16565b600c8190555061466e81600d54612e4690919063ffffffff16565b600d819055505050565b600081359050614687816157e6565b92915050565b60008151905061469c816157e6565b92915050565b6000813590506146b1816157fd565b92915050565b6000813590506146c681615814565b92915050565b6000602082840312156146e2576146e1615398565b5b60006146f084828501614678565b91505092915050565b60006020828403121561470f5761470e615398565b5b600061471d8482850161468d565b91505092915050565b6000806040838503121561473d5761473c615398565b5b600061474b85828601614678565b925050602061475c85828601614678565b9150509250929050565b60008060006060848603121561477f5761477e615398565b5b600061478d86828701614678565b935050602061479e86828701614678565b92505060406147af868287016146b7565b9150509250925092565b600080604083850312156147d0576147cf615398565b5b60006147de85828601614678565b92505060206147ef858286016146b7565b9150509250929050565b60006020828403121561480f5761480e615398565b5b600061481d848285016146a2565b91505092915050565b60006020828403121561483c5761483b615398565b5b600061484a848285016146b7565b91505092915050565b6000806040838503121561486a57614869615398565b5b6000614878858286016146b7565b9250506020614889858286016146a2565b9150509250929050565b600061489f83836148ba565b60208301905092915050565b6148b481615133565b82525050565b6148c381615121565b82525050565b6148d281615121565b82525050565b60006148e382614fc7565b6148ed8185614fea565b93506148f883614fb7565b8060005b838110156149295781516149108882614893565b975061491b83614fdd565b9250506001810190506148fc565b5085935050505092915050565b61493f81615145565b82525050565b61494e81615188565b82525050565b61495d8161519a565b82525050565b600061496e82614fd2565b6149788185614ffb565b93506149888185602086016151d0565b6149918161539d565b840191505092915050565b60006149a9602383614ffb565b91506149b4826153ae565b604082019050919050565b60006149cc602a83614ffb565b91506149d7826153fd565b604082019050919050565b60006149ef602283614ffb565b91506149fa8261544c565b604082019050919050565b6000614a12601b83614ffb565b9150614a1d8261549b565b602082019050919050565b6000614a35601b83614ffb565b9150614a40826154c4565b602082019050919050565b6000614a58601e83614ffb565b9150614a63826154ed565b602082019050919050565b6000614a7b601f83614ffb565b9150614a8682615516565b602082019050919050565b6000614a9e602883614ffb565b9150614aa98261553f565b604082019050919050565b6000614ac1602183614ffb565b9150614acc8261558e565b604082019050919050565b6000614ae4602083614ffb565b9150614aef826155dd565b602082019050919050565b6000614b07602983614ffb565b9150614b1282615606565b604082019050919050565b6000614b2a601a83614ffb565b9150614b3582615655565b602082019050919050565b6000614b4d601c83614ffb565b9150614b588261567e565b602082019050919050565b6000614b70602583614ffb565b9150614b7b826156a7565b604082019050919050565b6000614b93602483614ffb565b9150614b9e826156f6565b604082019050919050565b6000614bb6601883614ffb565b9150614bc182615745565b602082019050919050565b6000614bd9602c83614ffb565b9150614be48261576e565b604082019050919050565b6000614bfc601783614ffb565b9150614c07826157bd565b602082019050919050565b614c1b81615171565b82525050565b614c2a8161517b565b82525050565b6000602082019050614c4560008301846148c9565b92915050565b6000602082019050614c6060008301846148ab565b92915050565b6000602082019050614c7b6000830184614936565b92915050565b6000602082019050614c966000830184614945565b92915050565b60006020820190508181036000830152614cb68184614963565b905092915050565b60006020820190508181036000830152614cd78161499c565b9050919050565b60006020820190508181036000830152614cf7816149bf565b9050919050565b60006020820190508181036000830152614d17816149e2565b9050919050565b60006020820190508181036000830152614d3781614a05565b9050919050565b60006020820190508181036000830152614d5781614a28565b9050919050565b60006020820190508181036000830152614d7781614a4b565b9050919050565b60006020820190508181036000830152614d9781614a6e565b9050919050565b60006020820190508181036000830152614db781614a91565b9050919050565b60006020820190508181036000830152614dd781614ab4565b9050919050565b60006020820190508181036000830152614df781614ad7565b9050919050565b60006020820190508181036000830152614e1781614afa565b9050919050565b60006020820190508181036000830152614e3781614b1d565b9050919050565b60006020820190508181036000830152614e5781614b40565b9050919050565b60006020820190508181036000830152614e7781614b63565b9050919050565b60006020820190508181036000830152614e9781614b86565b9050919050565b60006020820190508181036000830152614eb781614ba9565b9050919050565b60006020820190508181036000830152614ed781614bcc565b9050919050565b60006020820190508181036000830152614ef781614bef565b9050919050565b6000602082019050614f136000830184614c12565b92915050565b600060a082019050614f2e6000830188614c12565b614f3b6020830187614954565b8181036040830152614f4d81866148d8565b9050614f5c60608301856148c9565b614f696080830184614c12565b9695505050505050565b6000604082019050614f886000830185614c12565b614f956020830184614c12565b9392505050565b6000602082019050614fb16000830184614c21565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061501782615171565b915061502283615171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150575761505661527e565b5b828201905092915050565b600061506d82615171565b915061507883615171565b925082615088576150876152ad565b5b828204905092915050565b600061509e82615171565b91506150a983615171565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150e2576150e161527e565b5b828202905092915050565b60006150f882615171565b915061510383615171565b9250828210156151165761511561527e565b5b828203905092915050565b600061512c82615151565b9050919050565b600061513e82615151565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615193826151ac565b9050919050565b60006151a582615171565b9050919050565b60006151b7826151be565b9050919050565b60006151c982615151565b9050919050565b60005b838110156151ee5780820151818401526020810190506151d3565b838111156151fd576000848401525b50505050565b6000600282049050600182168061521b57607f821691505b6020821081141561522f5761522e6152dc565b5b50919050565b600061524082615171565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152735761527261527e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920626c61636b6c69737465640000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000600082015250565b7f57652063616e206e6f7420626c61636b6c69737420556e697377617000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b6157ef81615121565b81146157fa57600080fd5b50565b61580681615145565b811461581157600080fd5b50565b61581d81615171565b811461582857600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122006b9be69cbcdddcfc055a84c2db0f961ec1abe6b0623fa8bc3b55a69d82d912b64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80634a74bb021161012357806395d89b41116100ab578063caac79341161006f578063caac79341461084e578063d543dbeb14610879578063dd62ed3e146108a2578063ea2f0b37146108df578063f375b2531461090857610230565b806395d89b4114610769578063a457c2d714610794578063a9059cbb146107d1578063c49b9a801461080e578063c9567bf91461083757610230565b806370a08231116100f257806370a0823114610682578063715018a6146106bf5780637d1db4a5146106d657806388f82020146107015780638da5cb5b1461073e57610230565b80634a74bb02146105b457806352390c02146105df5780635342acb414610608578063610d5b191461064557610230565b80632d838119116101b15780633b124fe7116101755780633b124fe7146104cf5780633bd5d173146104fa578063437823ec146105235780634549b0391461054c57806349bd5a5e1461058957610230565b80632d838119146103d8578063313ce56714610415578063362a3c5d146104405780633685d41914610469578063395093511461049257610230565b806313114a9d116101f857806313114a9d146102ef5780631694505e1461031a57806318160ddd1461034557806322976e0d1461037057806323b872dd1461039b57610230565b8063061c82d01461023557806306fdde031461025e578063095ea7b3146102895780630cd7c478146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190614826565b610931565b005b34801561026a57600080fd5b506102736109d0565b6040516102809190614c9c565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab91906147b9565b610a62565b6040516102bd9190614c66565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190614826565b610a80565b005b3480156102fb57600080fd5b50610304610b1f565b6040516103119190614efe565b60405180910390f35b34801561032657600080fd5b5061032f610b29565b60405161033c9190614c81565b60405180910390f35b34801561035157600080fd5b5061035a610b4d565b6040516103679190614efe565b60405180910390f35b34801561037c57600080fd5b50610385610b57565b6040516103929190614efe565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190614766565b610b5d565b6040516103cf9190614c66565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614826565b610c36565b60405161040c9190614efe565b60405180910390f35b34801561042157600080fd5b5061042a610ca4565b6040516104379190614f9c565b60405180910390f35b34801561044c57600080fd5b50610467600480360381019061046291906146cc565b610cbb565b005b34801561047557600080fd5b50610490600480360381019061048b91906146cc565b610fc5565b005b34801561049e57600080fd5b506104b960048036038101906104b491906147b9565b611314565b6040516104c69190614c66565b60405180910390f35b3480156104db57600080fd5b506104e46113c7565b6040516104f19190614efe565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614826565b6113cd565b005b34801561052f57600080fd5b5061054a600480360381019061054591906146cc565b611548565b005b34801561055857600080fd5b50610573600480360381019061056e9190614853565b611638565b6040516105809190614efe565b60405180910390f35b34801561059557600080fd5b5061059e6116bc565b6040516105ab9190614c30565b60405180910390f35b3480156105c057600080fd5b506105c96116e0565b6040516105d69190614c66565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906146cc565b6116f3565b005b34801561061457600080fd5b5061062f600480360381019061062a91906146cc565b6119a7565b60405161063c9190614c66565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906146cc565b6119fd565b6040516106799190614c66565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a491906146cc565b611a53565b6040516106b69190614efe565b60405180910390f35b3480156106cb57600080fd5b506106d4611b3e565b005b3480156106e257600080fd5b506106eb611c91565b6040516106f89190614efe565b60405180910390f35b34801561070d57600080fd5b50610728600480360381019061072391906146cc565b611c97565b6040516107359190614c66565b60405180910390f35b34801561074a57600080fd5b50610753611ced565b6040516107609190614c30565b60405180910390f35b34801561077557600080fd5b5061077e611d16565b60405161078b9190614c9c565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b691906147b9565b611da8565b6040516107c89190614c66565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f391906147b9565b611e75565b6040516108059190614c66565b60405180910390f35b34801561081a57600080fd5b50610835600480360381019061083091906147f9565b611e93565b005b34801561084357600080fd5b5061084c611f7c565b005b34801561085a57600080fd5b50610863612035565b6040516108709190614c4b565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190614826565b61205b565b005b3480156108ae57600080fd5b506108c960048036038101906108c49190614726565b612121565b6040516108d69190614efe565b60405180910390f35b3480156108eb57600080fd5b50610906600480360381019061090191906146cc565b6121a8565b005b34801561091457600080fd5b5061092f600480360381019061092a91906146cc565b612298565b005b6109396124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90614dde565b60405180910390fd5b8060118190555050565b6060600e80546109df90615203565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0b90615203565b8015610a585780601f10610a2d57610100808354040283529160200191610a58565b820191906000526020600020905b815481529060010190602001808311610a3b57829003601f168201915b5050505050905090565b6000610a76610a6f6124fb565b8484612503565b6001905092915050565b610a886124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90614dde565b60405180910390fd5b8060138190555050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b60135481565b6000610b6a8484846126ce565b610c2b84610b766124fb565b610c268560405180606001604052806028815260200161582c60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bdc6124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6d9092919063ffffffff16565b612503565b600190509392505050565b6000600c54821115610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490614cde565b60405180910390fd5b6000610c87612dd1565b9050610c9c8184612dfc90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b610cc36124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790614dde565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390614e1e565b60405180910390fd5b60005b600980549050811015610fc1578173ffffffffffffffffffffffffffffffffffffffff1660098281548110610e1757610e1661533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fae5760096001600980549050610e7291906150ed565b81548110610e8357610e8261533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110610ec257610ec161533a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480610f7457610f7361530b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fc1565b8080610fb990615235565b915050610ddf565b5050565b610fcd6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190614dde565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90614d3e565b60405180910390fd5b60005b600780549050811015611310578173ffffffffffffffffffffffffffffffffffffffff16600782815481106111215761112061533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156112fd576007600160078054905061117c91906150ed565b8154811061118d5761118c61533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600782815481106111cc576111cb61533a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060078054806112c3576112c261530b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611310565b808061130890615235565b9150506110e9565b5050565b60006113bd6113216124fb565b846113b885600460006113326124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b612503565b6001905092915050565b60115481565b60006113d76124fb565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d90614ebe565b60405180910390fd5b600061147183612ea4565b505050505090506114ca81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061152281600c54612f0090919063ffffffff16565b600c8190555061153d83600d54612e4690919063ffffffff16565b600d81905550505050565b6115506124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614dde565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b5483111561167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690614d7e565b60405180910390fd5b8161169f57600061168f84612ea4565b50505050509050809150506116b6565b60006116aa84612ea4565b50505050915050809150505b92915050565b7f0000000000000000000000002f09dc29a8abf2f37c65eb36ec09d95e508b662e81565b601660019054906101000a900460ff1681565b6116fb6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90614dde565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90614d3e565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156118e9576118a5600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c36565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aee57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b39565b611b36600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c36565b90505b919050565b611b466124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90614dde565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60175481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611d2590615203565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5190615203565b8015611d9e5780601f10611d7357610100808354040283529160200191611d9e565b820191906000526020600020905b815481529060010190602001808311611d8157829003601f168201915b5050505050905090565b6000611e6b611db56124fb565b84611e66856040518060600160405280602581526020016158546025913960046000611ddf6124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6d9092919063ffffffff16565b612503565b6001905092915050565b6000611e89611e826124fb565b84846126ce565b6001905092915050565b611e9b6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90614dde565b60405180910390fd5b80601660016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611f719190614c66565b60405180910390a150565b611f846124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200890614dde565b60405180910390fd5b6001601660026101000a81548160ff02191690831515021790555042601581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120636124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790614dde565b60405180910390fd5b612118606461210a83600b54612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b60178190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121b06124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614dde565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122a06124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614dde565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790614e3e565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614d5e565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614e7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da90614cfe565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126c19190614efe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561273e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273590614e5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a590614cbe565b60405180910390fd5b600081116127f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e890614dfe565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614ede565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290290614ede565b60405180910390fd5b612913611ced565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129815750612951611ced565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129cc576017548111156129cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c290614d9e565b60405180910390fd5b5b60006129d730611a53565b905060175481106129e85760175490505b7f0000000000000000000000002f09dc29a8abf2f37c65eb36ec09d95e508b662e73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a8f57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0057601660029054906101000a900460ff16612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3090614e9e565b60405180910390fd5b601554421415612bff576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b60006018548210159050808015612c245750601660009054906101000a900460ff16155b8015612c7c57507f0000000000000000000000002f09dc29a8abf2f37c65eb36ec09d95e508b662e73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c945750601660019054906101000a900460ff165b15612ca8576018549150612ca782612fc5565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d4f5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d5957600090505b612d658686868461310a565b505050505050565b6000838311158290612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9190614c9c565b60405180910390fd5b5060008385612dc491906150ed565b9050809150509392505050565b6000806000612dde61341b565b91509150612df58183612dfc90919063ffffffff16565b9250505090565b6000612e3e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136ce565b905092915050565b6000808284612e55919061500c565b905083811015612e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9190614d1e565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ebb8a613731565b9250925092506000806000612ed98d8686612ed4612dd1565b61378b565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612f4283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d6d565b905092915050565b600080831415612f5d5760009050612fbf565b60008284612f6b9190615093565b9050828482612f7a9190615062565b14612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb190614dbe565b60405180910390fd5b809150505b92915050565b6001601660006101000a81548160ff02191690831515021790555060008190506000479050612ff382613814565b60006130088247612f0090919063ffffffff16565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486838260405161303b929190614f73565b60405180910390a16000819050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156130b0573d6000803e3d6000fd5b507fcece836790e718d3e66cd1b6eaa6005ec1c1b021f2ab161c416ff6b300f6668e816040516130e09190614efe565b60405180910390a1505050506000601660006101000a81548160ff02191690831515021790555050565b8061311857613117613a60565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bb5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d0576131cb848484613aa3565b613407565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132735750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561328857613283848484613d03565b613406565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561332c5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133415761333c848484613f63565b613405565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133e35750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133f8576133f384848461412e565b613404565b613403848484613f63565b5b5b5b5b8061341557613414614423565b5b50505050565b6000806000600c5490506000600b54905060005b600780549050811015613691578260026000600784815481106134555761345461533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061354357508160036000600784815481106134db576134da61533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561355a57600c54600b54945094505050506136ca565b6135ea60026000600784815481106135755761357461533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f0090919063ffffffff16565b925061367c60036000600784815481106136075761360661533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f0090919063ffffffff16565b9150808061368990615235565b91505061342f565b506136a9600b54600c54612dfc90919063ffffffff16565b8210156136c157600c54600b549350935050506136ca565b81819350935050505b9091565b60008083118290613715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370c9190614c9c565b60405180910390fd5b50600083856137249190615062565b9050809150509392505050565b60008060008061374085614437565b9050600061374d86614468565b9050600061377682613768858a612f0090919063ffffffff16565b612f0090919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806137a48589612f4a90919063ffffffff16565b905060006137bb8689612f4a90919063ffffffff16565b905060006137d28789612f4a90919063ffffffff16565b905060006137fb826137ed8587612f0090919063ffffffff16565b612f0090919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561383157613830615369565b5b60405190808252806020026020018201604052801561385f5781602001602082028036833780820191505090505b50905030816000815181106138775761387661533a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561391757600080fd5b505afa15801561392b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394f91906146f9565b816001815181106139635761396261533a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139c8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612503565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a2a959493929190614f19565b600060405180830381600087803b158015613a4457600080fd5b505af1158015613a58573d6000803e3d6000fd5b505050505050565b6000601154148015613a7457506000601354145b15613a7e57613aa1565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613ab587612ea4565b955095509550955095509550613b1387600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ba886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c3d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8981614499565b613c93848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613cf09190614efe565b60405180910390a3505050505050505050565b600080600080600080613d1587612ea4565b955095509550955095509550613d7386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ee981614499565b613ef3848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613f509190614efe565b60405180910390a3505050505050505050565b600080600080600080613f7587612ea4565b955095509550955095509550613fd386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061406885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b481614499565b6140be848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161411b9190614efe565b60405180910390a3505050505050505050565b60008060008060008061414087612ea4565b95509550955095509550955061419e87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142c883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a981614499565b6143b3848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144109190614efe565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b6000614461606461445360115485612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b9050919050565b6000614492606461448460135485612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b9050919050565b60006144a3612dd1565b905060006144ba8284612f4a90919063ffffffff16565b905061450e81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614639576145f583600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61465382600c54612f0090919063ffffffff16565b600c8190555061466e81600d54612e4690919063ffffffff16565b600d819055505050565b600081359050614687816157e6565b92915050565b60008151905061469c816157e6565b92915050565b6000813590506146b1816157fd565b92915050565b6000813590506146c681615814565b92915050565b6000602082840312156146e2576146e1615398565b5b60006146f084828501614678565b91505092915050565b60006020828403121561470f5761470e615398565b5b600061471d8482850161468d565b91505092915050565b6000806040838503121561473d5761473c615398565b5b600061474b85828601614678565b925050602061475c85828601614678565b9150509250929050565b60008060006060848603121561477f5761477e615398565b5b600061478d86828701614678565b935050602061479e86828701614678565b92505060406147af868287016146b7565b9150509250925092565b600080604083850312156147d0576147cf615398565b5b60006147de85828601614678565b92505060206147ef858286016146b7565b9150509250929050565b60006020828403121561480f5761480e615398565b5b600061481d848285016146a2565b91505092915050565b60006020828403121561483c5761483b615398565b5b600061484a848285016146b7565b91505092915050565b6000806040838503121561486a57614869615398565b5b6000614878858286016146b7565b9250506020614889858286016146a2565b9150509250929050565b600061489f83836148ba565b60208301905092915050565b6148b481615133565b82525050565b6148c381615121565b82525050565b6148d281615121565b82525050565b60006148e382614fc7565b6148ed8185614fea565b93506148f883614fb7565b8060005b838110156149295781516149108882614893565b975061491b83614fdd565b9250506001810190506148fc565b5085935050505092915050565b61493f81615145565b82525050565b61494e81615188565b82525050565b61495d8161519a565b82525050565b600061496e82614fd2565b6149788185614ffb565b93506149888185602086016151d0565b6149918161539d565b840191505092915050565b60006149a9602383614ffb565b91506149b4826153ae565b604082019050919050565b60006149cc602a83614ffb565b91506149d7826153fd565b604082019050919050565b60006149ef602283614ffb565b91506149fa8261544c565b604082019050919050565b6000614a12601b83614ffb565b9150614a1d8261549b565b602082019050919050565b6000614a35601b83614ffb565b9150614a40826154c4565b602082019050919050565b6000614a58601e83614ffb565b9150614a63826154ed565b602082019050919050565b6000614a7b601f83614ffb565b9150614a8682615516565b602082019050919050565b6000614a9e602883614ffb565b9150614aa98261553f565b604082019050919050565b6000614ac1602183614ffb565b9150614acc8261558e565b604082019050919050565b6000614ae4602083614ffb565b9150614aef826155dd565b602082019050919050565b6000614b07602983614ffb565b9150614b1282615606565b604082019050919050565b6000614b2a601a83614ffb565b9150614b3582615655565b602082019050919050565b6000614b4d601c83614ffb565b9150614b588261567e565b602082019050919050565b6000614b70602583614ffb565b9150614b7b826156a7565b604082019050919050565b6000614b93602483614ffb565b9150614b9e826156f6565b604082019050919050565b6000614bb6601883614ffb565b9150614bc182615745565b602082019050919050565b6000614bd9602c83614ffb565b9150614be48261576e565b604082019050919050565b6000614bfc601783614ffb565b9150614c07826157bd565b602082019050919050565b614c1b81615171565b82525050565b614c2a8161517b565b82525050565b6000602082019050614c4560008301846148c9565b92915050565b6000602082019050614c6060008301846148ab565b92915050565b6000602082019050614c7b6000830184614936565b92915050565b6000602082019050614c966000830184614945565b92915050565b60006020820190508181036000830152614cb68184614963565b905092915050565b60006020820190508181036000830152614cd78161499c565b9050919050565b60006020820190508181036000830152614cf7816149bf565b9050919050565b60006020820190508181036000830152614d17816149e2565b9050919050565b60006020820190508181036000830152614d3781614a05565b9050919050565b60006020820190508181036000830152614d5781614a28565b9050919050565b60006020820190508181036000830152614d7781614a4b565b9050919050565b60006020820190508181036000830152614d9781614a6e565b9050919050565b60006020820190508181036000830152614db781614a91565b9050919050565b60006020820190508181036000830152614dd781614ab4565b9050919050565b60006020820190508181036000830152614df781614ad7565b9050919050565b60006020820190508181036000830152614e1781614afa565b9050919050565b60006020820190508181036000830152614e3781614b1d565b9050919050565b60006020820190508181036000830152614e5781614b40565b9050919050565b60006020820190508181036000830152614e7781614b63565b9050919050565b60006020820190508181036000830152614e9781614b86565b9050919050565b60006020820190508181036000830152614eb781614ba9565b9050919050565b60006020820190508181036000830152614ed781614bcc565b9050919050565b60006020820190508181036000830152614ef781614bef565b9050919050565b6000602082019050614f136000830184614c12565b92915050565b600060a082019050614f2e6000830188614c12565b614f3b6020830187614954565b8181036040830152614f4d81866148d8565b9050614f5c60608301856148c9565b614f696080830184614c12565b9695505050505050565b6000604082019050614f886000830185614c12565b614f956020830184614c12565b9392505050565b6000602082019050614fb16000830184614c21565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061501782615171565b915061502283615171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150575761505661527e565b5b828201905092915050565b600061506d82615171565b915061507883615171565b925082615088576150876152ad565b5b828204905092915050565b600061509e82615171565b91506150a983615171565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150e2576150e161527e565b5b828202905092915050565b60006150f882615171565b915061510383615171565b9250828210156151165761511561527e565b5b828203905092915050565b600061512c82615151565b9050919050565b600061513e82615151565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615193826151ac565b9050919050565b60006151a582615171565b9050919050565b60006151b7826151be565b9050919050565b60006151c982615151565b9050919050565b60005b838110156151ee5780820151818401526020810190506151d3565b838111156151fd576000848401525b50505050565b6000600282049050600182168061521b57607f821691505b6020821081141561522f5761522e6152dc565b5b50919050565b600061524082615171565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152735761527261527e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920626c61636b6c69737465640000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000600082015250565b7f57652063616e206e6f7420626c61636b6c69737420556e697377617000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b6157ef81615121565b81146157fa57600080fd5b50565b61580681615145565b811461581157600080fd5b50565b61581d81615171565b811461582857600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122006b9be69cbcdddcfc055a84c2db0f961ec1abe6b0623fa8bc3b55a69d82d912b64736f6c63430008070033

Deployed Bytecode Sourcemap

13037:19528:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20997:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15830:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16742:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20867:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17863:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14199:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16107:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14071:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16911:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18787:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16016:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32082:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19503:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17232:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13988:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17958:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20630:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18343:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14257:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14332:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19048:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24709:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31593:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16210:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9666:148;;;;;;;;;;;;;:::i;:::-;;14412:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17735:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9452:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15921:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17458:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16416:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21271:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15704:118;;;;;;;;;;;;;:::i;:::-;;13579:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21101:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16591:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20749:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31714:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20997:96;9589:12;:10;:12::i;:::-;9579:22;;:6;;;;;;;;;;:22;;;9571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21079:6:::1;21069:7;:16;;;;20997:96:::0;:::o;15830:83::-;15867:13;15900:5;15893:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15830:83;:::o;16742:161::-;16817:4;16834:39;16843:12;:10;:12::i;:::-;16857:7;16866:6;16834:8;:39::i;:::-;16891:4;16884:11;;16742:161;;;;:::o;20867:122::-;9589:12;:10;:12::i;:::-;9579:22;;:6;;;;;;;;;;:22;;;9571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20969:12:::1;20953:13;:28;;;;20867:122:::0;:::o;17863:87::-;17905:7;17932:10;;17925:17;;17863:87;:::o;14199:51::-;;;:::o;16107:95::-;16160:7;16187;;16180:14;;16107:95;:::o;14071:32::-;;;;:::o;16911:313::-;17009:4;17026:36;17036:6;17044:9;17055:6;17026:9;:36::i;:::-;17073:121;17082:6;17090:12;:10;:12::i;:::-;17104:89;17142:6;17104:89;;;;;;;;;;;;;;;;;:11;:19;17116:6;17104:19;;;;;;;;;;;;;;;:33;17124:12;:10;:12::i;:::-;17104:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;17073:8;:121::i;:::-;17212:4;17205:11;;16911:313;;;;;:::o;18787:253::-;18853:7;18892;;18881;:18;;18873:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18957:19;18980:10;:8;:10::i;:::-;18957:33;;19008:24;19020:11;19008:7;:11;;:24;;;;:::i;:::-;19001:31;;;18787:253;;;:::o;16016:83::-;16057:5;16082:9;;;;;;;;;;;16075:16;;16016:83;:::o;32082:480::-;9589:12;:10;:12::i;:::-;9579:22;;:6;;;;;;;;;;:22;;;9571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32161:9:::1;:18;32171:7;32161:18;;;;;;;;;;;;;;;;;;;;;;;;;32153:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32226:9;32221:334;32245:17;:24;;;;32241:1;:28;32221:334;;;32319:7;32295:31;;:17;32313:1;32295:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:31;;;32291:253;;;32370:17;32415:1;32388:17;:24;;;;:28;;;;:::i;:::-;32370:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32347:17;32365:1;32347:20;;;;;;;;:::i;:::-;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;32457:5;32436:9;:18;32446:7;32436:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;32481:17;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;32523:5;;32291:253;32271:3;;;;;:::i;:::-;;;;32221:334;;;;32082:480:::0;:::o;19503:479::-;9589:12;:10;:12::i;:::-;9579:22;;:6;;;;;;;;;;:22;;;9571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19585:11:::1;:20;19597:7;19585:20;;;;;;;;;;;;;;;;;;;;;;;;;19577:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19653:9;19648:327;19672:9;:16;;;;19668:1;:20;19648:327;;;19730:7;19714:23;;:9;19724:1;19714:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;19710:254;;;19773:9;19802:1;19783:9;:16;;;;:20;;;;:::i;:::-;19773:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19758:9;19768:1;19758:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;19842:1;19823:7;:16;19831:7;19823:16;;;;;;;;;;;;;;;:20;;;;19885:5;19862:11;:20;19874:7;19862:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19909:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19943:5;;19710:254;19690:3;;;;;:::i;:::-;;;;19648:327;;;;19503:479:::0;:::o;17232:218::-;17320:4;17337:83;17346:12;:10;:12::i;:::-;17360:7;17369:50;17408:10;17369:11;:25;17381:12;:10;:12::i;:::-;17369:25;;;;;;;;;;;;;;;:34;17395:7;17369:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;17337:8;:83::i;:::-;17438:4;17431:11;;17232:218;;;;:::o;13988:26::-;;;;:::o;17958:377::-;18010:14;18027:12;:10;:12::i;:::-;18010:29;;18059:11;:19;18071:6;18059:19;;;;;;;;;;;;;;;;;;;;;;;;;18058:20;18050:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;18139:15;18163:19;18174:7;18163:10;:19::i;:::-;18138:44;;;;;;;18211:28;18231:7;18211;:15;18219:6;18211:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;18193:7;:15;18201:6;18193:15;;;;;;;;;;;;;;;:46;;;;18260:20;18272:7;18260;;:11;;:20;;;;:::i;:::-;18250:7;:30;;;;18304:23;18319:7;18304:10;;:14;;:23;;;;:::i;:::-;18291:10;:36;;;;17999:336;;17958:377;:::o;20630:111::-;9589:12;:10;:12::i;:::-;9579:22;;:6;;;;;;;;;;:22;;;9571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20729:4:::1;20699:18;:27;20718:7;20699:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20630:111:::0;:::o;18343:436::-;18433:7;18472;;18461;:18;;18453:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18531:17;18526:246;;18566:15;18590:19;18601:7;18590:10;:19::i;:::-;18565:44;;;;;;;18631:7;18624:14;;;;;18526:246;18673:23;18704:19;18715:7;18704:10;:19::i;:::-;18671:52;;;;;;;18745:15;18738:22;;;18343:436;;;;;:::o;14257:38::-;;;:::o;14332:40::-;;;;;;;;;;;;;:::o;19048:447::-;9589:12;:10;:12::i;:::-;9579:22;;:6;;;;;;;;;;:22;;;9571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19245:11:::1;:20;19257:7;19245:20;;;;;;;;;;;;;;;;;;;;;;;;;19244:21;19236:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;19330:1;19311:7;:16;19319:7;19311:16;;;;;;;;;;;;;;;;:20;19308:108;;;19367:37;19387:7;:16;19395:7;19387:16;;;;;;;;;;;;;;;;19367:19;:37::i;:::-;19348:7;:16;19356:7;19348:16;;;;;;;;;;;;;;;:56;;;;19308:108;19449:4;19426:11;:20;19438:7;19426:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;19464:9;19479:7;19464:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19048:447:::0;:::o;24709:123::-;24773:4;24797:18;:27;24816:7;24797:27;;;;;;;;;;;;;;;;;;;;;;;;;24790:34;;24709:123;;;:::o;31593:113::-;31656:4;31680:9;:18;31690:7;31680:18;;;;;;;;;;;;;;;;;;;;;;;;;31673:25;;31593:113;;;:::o;16210:198::-;16276:7;16300:11;:20;16312:7;16300:20;;;;;;;;;;;;;;;;;;;;;;;;;16296:49;;;16329:7;:16;16337:7;16329:16;;;;;;;;;;;;;;;;16322:23;;;;16296:49;16363:37;16383:7;:16;16391:7;16383:16;;;;;;;;;;;;;;;;16363:19;:37::i;:::-;16356:44;;16210:198;;;;:::o;9666:148::-;9589:12;:10;:12::i;:::-;9579:22;;:6;;;;;;;;;;:22;;;9571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9773:1:::1;9736:40;;9757:6;::::0;::::1;;;;;;;;9736:40;;;;;;;;;;;;9804:1;9787:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9666:148::o:0;14412:48::-;;;;:::o;17735:120::-;17803:4;17827:11;:20;17839:7;17827:20;;;;;;;;;;;;;;;;;;;;;;;;;17820:27;;17735:120;;;:::o;9452:79::-;9490:7;9517:6;;;;;;;;;;;9510:13;;9452:79;:::o;15921:87::-;15960:13;15993:7;15986:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15921:87;:::o;17458:269::-;17551:4;17568:129;17577:12;:10;:12::i;:::-;17591:7;17600:96;17639:15;17600:96;;;;;;;;;;;;;;;;;:11;:25;17612:12;:10;:12::i;:::-;17600:25;;;;;;;;;;;;;;;:34;17626:7;17600:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;17568:8;:129::i;:::-;17715:4;17708:11;;17458:269;;;;:::o;16416:167::-;16494:4;16511:42;16521:12;:10;:12::i;:::-;16535:9;16546:6;16511:9;:42::i;:::-;16571:4;16564:11;;16416:167;;;;:::o;21271:171::-;9589:12;:10;:12::i;:::-;9579:22;;:6;;;;;;;;;;:22;;;9571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21372:8:::1;21348:21;;:32;;;;;;;;;;;;;;;;;;21396:38;21425:8;21396:38;;;;;;:::i;:::-;;;;;;;;21271:171:::0;:::o;15704:118::-;9589:12;:10;:12::i;:::-;9579:22;;:6;;;;;;;;;;:22;;;9571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15771:4:::1;15757:11;;:18;;;;;;;;;;;;;;;;;;15799:15;15786:10;:28;;;;15704:118::o:0;13579:94::-;;;;;;;;;;;;;:::o;21101:162::-;9589:12;:10;:12::i;:::-;9579:22;;:6;;;;;;;;;;:22;;;9571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21195:60:::1;21239:5;21195:25;21207:12;21195:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;21180:12;:75;;;;21101:162:::0;:::o;16591:143::-;16672:7;16699:11;:18;16711:5;16699:18;;;;;;;;;;;;;;;:27;16718:7;16699:27;;;;;;;;;;;;;;;;16692:34;;16591:143;;;;:::o;20749:110::-;9589:12;:10;:12::i;:::-;9579:22;;:6;;;;;;;;;;:22;;;9571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20846:5:::1;20816:18;:27;20835:7;20816:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;20749:110:::0;:::o;31714:360::-;9589:12;:10;:12::i;:::-;9579:22;;:6;;;;;;;;;;:22;;;9571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31817:42:::1;31806:53;;:7;:53;;;;31784:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;31935:9;:18;31945:7;31935:18;;;;;;;;;;;;;;;;;;;;;;;;;31934:19;31926:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32020:4;31999:9;:18;32009:7;31999:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;32035:17;32058:7;32035:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31714:360:::0;:::o;2722:98::-;2775:7;2802:10;2795:17;;2722:98;:::o;24840:337::-;24950:1;24933:19;;:5;:19;;;;24925:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25031:1;25012:21;;:7;:21;;;;25004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25115:6;25085:11;:18;25097:5;25085:18;;;;;;;;;;;;;;;:27;25104:7;25085:27;;;;;;;;;;;;;;;:36;;;;25153:7;25137:32;;25146:5;25137:32;;;25162:6;25137:32;;;;;;:::i;:::-;;;;;;;;24840:337;;;:::o;25185:2169::-;25323:1;25307:18;;:4;:18;;;;25299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25400:1;25386:16;;:2;:16;;;;25378:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25470:1;25461:6;:10;25453:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25537:9;:13;25547:2;25537:13;;;;;;;;;;;;;;;;;;;;;;;;;25536:14;25528:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;25598:9;:21;25608:10;25598:21;;;;;;;;;;;;;;;;;;;;;;;;;25597:22;25589:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25669:7;:5;:7::i;:::-;25661:15;;:4;:15;;;;:32;;;;;25686:7;:5;:7::i;:::-;25680:13;;:2;:13;;;;25661:32;25658:125;;;25726:12;;25716:6;:22;;25708:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25658:125;26061:28;26092:24;26110:4;26092:9;:24::i;:::-;26061:55;;26156:12;;26132:20;:36;26129:112;;26217:12;;26194:35;;26129:112;26281:13;26273:21;;:4;:21;;;:55;;;;;26312:15;26298:30;;:2;:30;;;;26273:55;:82;;;;;26333:18;:22;26352:2;26333:22;;;;;;;;;;;;;;;;;;;;;;;;;26332:23;26273:82;26269:337;;;26380:11;;;;;;;;;;;26372:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26483:10;;26464:15;:29;26460:135;;;26530:4;26514:9;:13;26524:2;26514:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;26553:17;26576:2;26553:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26460:135;26269:337;26618:24;26669:22;;26645:20;:46;;26618:73;;26720:19;:40;;;;;26744:16;;;;;;;;;;;26743:17;26720:40;:65;;;;;26772:13;26764:21;;:4;:21;;;;26720:65;:90;;;;;26789:21;;;;;;;;;;;26720:90;26702:243;;;26860:22;;26837:45;;26897:36;26912:20;26897:14;:36::i;:::-;26702:243;27018:12;27033:4;27018:19;;27137:18;:24;27156:4;27137:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;27165:18;:22;27184:2;27165:22;;;;;;;;;;;;;;;;;;;;;;;;;27137:50;27134:96;;;27213:5;27203:15;;27134:96;27308:38;27323:4;27328:2;27331:6;27338:7;27308:14;:38::i;:::-;25288:2066;;;25185:2169;;;:::o;1393:190::-;1479:7;1512:1;1507;:6;;1515:12;1499:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1539:9;1555:1;1551;:5;;;;:::i;:::-;1539:17;;1574:1;1567:8;;;1393:190;;;;;:::o;22901:163::-;22942:7;22963:15;22980;22999:19;:17;:19::i;:::-;22962:56;;;;23036:20;23048:7;23036;:11;;:20;;;;:::i;:::-;23029:27;;;;22901:163;:::o;1845:132::-;1903:7;1930:39;1934:1;1937;1930:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1923:46;;1845:132;;;;:::o;1062:179::-;1120:7;1140:9;1156:1;1152;:5;;;;:::i;:::-;1140:17;;1181:1;1176;:6;;1168:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1232:1;1225:8;;;1062:179;;;;:::o;21699:419::-;21758:7;21767;21776;21785;21794;21803;21824:23;21849:12;21863:18;21885:20;21897:7;21885:11;:20::i;:::-;21823:82;;;;;;21917:15;21934:23;21959:12;21975:50;21987:7;21996:4;22002:10;22014;:8;:10::i;:::-;21975:11;:50::i;:::-;21916:109;;;;;;22044:7;22053:15;22070:4;22076:15;22093:4;22099:10;22036:74;;;;;;;;;;;;;;;;;;21699:419;;;;;;;:::o;1249:136::-;1307:7;1334:43;1338:1;1341;1334:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1327:50;;1249:136;;;;:::o;1591:246::-;1649:7;1678:1;1673;:6;1669:47;;;1703:1;1696:8;;;;1669:47;1726:9;1742:1;1738;:5;;;;:::i;:::-;1726:17;;1771:1;1766;1762;:5;;;;:::i;:::-;:10;1754:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1828:1;1821:8;;;1591:246;;;;;:::o;27362:1063::-;14910:4;14891:16;;:23;;;;;;;;;;;;;;;;;;27457:29:::1;27489:20;27457:52;;27787:22;27812:21;27787:46;;27878:39;27895:21;27878:16;:39::i;:::-;27974:18;27995:41;28021:14;27995:21;:25;;:41;;;;:::i;:::-;27974:62;;28054:49;28069:21;28092:10;28054:49;;;;;;;:::i;:::-;;;;;;;;28199:30;28232:10;28199:43;;28308:17;;;;;;;;;;;:26;;:50;28335:22;28308:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28374:43;28394:22;28374:43;;;;;;:::i;:::-;;;;;;;;27436:989;;;;14956:5:::0;14937:16;;:24;;;;;;;;;;;;;;;;;;27362:1063;:::o;29103:818::-;29214:7;29210:40;;29236:14;:12;:14::i;:::-;29210:40;29267:11;:19;29279:6;29267:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;29291:11;:22;29303:9;29291:22;;;;;;;;;;;;;;;;;;;;;;;;;29290:23;29267:46;29263:597;;;29330:48;29352:6;29360:9;29371:6;29330:21;:48::i;:::-;29263:597;;;29401:11;:19;29413:6;29401:19;;;;;;;;;;;;;;;;;;;;;;;;;29400:20;:46;;;;;29424:11;:22;29436:9;29424:22;;;;;;;;;;;;;;;;;;;;;;;;;29400:46;29396:464;;;29463:46;29483:6;29491:9;29502:6;29463:19;:46::i;:::-;29396:464;;;29532:11;:19;29544:6;29532:19;;;;;;;;;;;;;;;;;;;;;;;;;29531:20;:47;;;;;29556:11;:22;29568:9;29556:22;;;;;;;;;;;;;;;;;;;;;;;;;29555:23;29531:47;29527:333;;;29595:44;29613:6;29621:9;29632:6;29595:17;:44::i;:::-;29527:333;;;29661:11;:19;29673:6;29661:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;29684:11;:22;29696:9;29684:22;;;;;;;;;;;;;;;;;;;;;;;;;29661:45;29657:203;;;29723:48;29745:6;29753:9;29764:6;29723:21;:48::i;:::-;29657:203;;;29804:44;29822:6;29830:9;29841:6;29804:17;:44::i;:::-;29657:203;29527:333;29396:464;29263:597;29876:7;29872:41;;29898:15;:13;:15::i;:::-;29872:41;29103:818;;;;:::o;23072:555::-;23122:7;23131;23151:15;23169:7;;23151:25;;23187:15;23205:7;;23187:25;;23228:9;23223:289;23247:9;:16;;;;23243:1;:20;23223:289;;;23313:7;23289;:21;23297:9;23307:1;23297:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23289:21;;;;;;;;;;;;;;;;:31;:66;;;;23348:7;23324;:21;23332:9;23342:1;23332:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23324:21;;;;;;;;;;;;;;;;:31;23289:66;23285:97;;;23365:7;;23374;;23357:25;;;;;;;;;23285:97;23407:34;23419:7;:21;23427:9;23437:1;23427:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23419:21;;;;;;;;;;;;;;;;23407:7;:11;;:34;;;;:::i;:::-;23397:44;;23466:34;23478:7;:21;23486:9;23496:1;23486:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23478:21;;;;;;;;;;;;;;;;23466:7;:11;;:34;;;;:::i;:::-;23456:44;;23265:3;;;;;:::i;:::-;;;;23223:289;;;;23536:20;23548:7;;23536;;:11;;:20;;;;:::i;:::-;23526:7;:30;23522:61;;;23566:7;;23575;;23558:25;;;;;;;;23522:61;23602:7;23611;23594:25;;;;;;23072:555;;;:::o;1985:189::-;2071:7;2103:1;2099;:5;2106:12;2091:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2130:9;2146:1;2142;:5;;;;:::i;:::-;2130:17;;2165:1;2158:8;;;1985:189;;;;;:::o;22126:330::-;22186:7;22195;22204;22224:12;22239:24;22255:7;22239:15;:24::i;:::-;22224:39;;22274:18;22295:30;22317:7;22295:21;:30::i;:::-;22274:51;;22336:23;22362:33;22384:10;22362:17;22374:4;22362:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;22336:59;;22414:15;22431:4;22437:10;22406:42;;;;;;;;;22126:330;;;;;:::o;22464:429::-;22579:7;22588;22597;22617:15;22635:24;22647:11;22635:7;:11;;:24;;;;:::i;:::-;22617:42;;22670:12;22685:21;22694:11;22685:4;:8;;:21;;;;:::i;:::-;22670:36;;22717:18;22738:27;22753:11;22738:10;:14;;:27;;;;:::i;:::-;22717:48;;22776:23;22802:33;22824:10;22802:17;22814:4;22802:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;22776:59;;22854:7;22863:15;22880:4;22846:39;;;;;;;;;;22464:429;;;;;;;;:::o;28433:589::-;28559:21;28597:1;28583:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28559:40;;28628:4;28610;28615:1;28610:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28654:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28644:4;28649:1;28644:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28689:62;28706:4;28721:15;28739:11;28689:8;:62::i;:::-;28790:15;:66;;;28871:11;28897:1;28941:4;28968;28988:15;28790:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28488:534;28433:589;:::o;24334:234::-;24391:1;24380:7;;:12;:34;;;;;24413:1;24396:13;;:18;24380:34;24377:46;;;24416:7;;24377:46;24453:7;;24435:15;:25;;;;24495:13;;24471:21;:37;;;;24531:1;24521:7;:11;;;;24559:1;24543:13;:17;;;;24334:234;:::o;31022:563::-;31125:15;31142:23;31167:12;31181:23;31206:12;31220:18;31242:19;31253:7;31242:10;:19::i;:::-;31124:137;;;;;;;;;;;;31290:28;31310:7;31290;:15;31298:6;31290:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31272:7;:15;31280:6;31272:15;;;;;;;;;;;;;;;:46;;;;31347:28;31367:7;31347;:15;31355:6;31347:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31329:7;:15;31337:6;31329:15;;;;;;;;;;;;;;;:46;;;;31407:39;31430:15;31407:7;:18;31415:9;31407:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31386:7;:18;31394:9;31386:18;;;;;;;;;;;;;;;:60;;;;31457:26;31472:10;31457:14;:26::i;:::-;31494:23;31506:4;31512;31494:11;:23::i;:::-;31550:9;31533:44;;31542:6;31533:44;;;31561:15;31533:44;;;;;;:::i;:::-;;;;;;;;31113:472;;;;;;31022:563;;;:::o;30439:575::-;30540:15;30557:23;30582:12;30596:23;30621:12;30635:18;30657:19;30668:7;30657:10;:19::i;:::-;30539:137;;;;;;;;;;;;30705:28;30725:7;30705;:15;30713:6;30705:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30687:7;:15;30695:6;30687:15;;;;;;;;;;;;;;;:46;;;;30765:39;30788:15;30765:7;:18;30773:9;30765:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30744:7;:18;30752:9;30744:18;;;;;;;;;;;;;;;:60;;;;30836:39;30859:15;30836:7;:18;30844:9;30836:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30815:7;:18;30823:9;30815:18;;;;;;;;;;;;;;;:60;;;;30886:26;30901:10;30886:14;:26::i;:::-;30923:23;30935:4;30941;30923:11;:23::i;:::-;30979:9;30962:44;;30971:6;30962:44;;;30990:15;30962:44;;;;;;:::i;:::-;;;;;;;;30528:486;;;;;;30439:575;;;:::o;29929:502::-;30028:15;30045:23;30070:12;30084:23;30109:12;30123:18;30145:19;30156:7;30145:10;:19::i;:::-;30027:137;;;;;;;;;;;;30193:28;30213:7;30193;:15;30201:6;30193:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30175:7;:15;30183:6;30175:15;;;;;;;;;;;;;;;:46;;;;30253:39;30276:15;30253:7;:18;30261:9;30253:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30232:7;:18;30240:9;30232:18;;;;;;;;;;;;;;;:60;;;;30303:26;30318:10;30303:14;:26::i;:::-;30340:23;30352:4;30358;30340:11;:23::i;:::-;30396:9;30379:44;;30388:6;30379:44;;;30407:15;30379:44;;;;;;:::i;:::-;;;;;;;;30016:415;;;;;;29929:502;;;:::o;19988:634::-;20091:15;20108:23;20133:12;20147:23;20172:12;20186:18;20208:19;20219:7;20208:10;:19::i;:::-;20090:137;;;;;;;;;;;;20256:28;20276:7;20256;:15;20264:6;20256:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20238:7;:15;20246:6;20238:15;;;;;;;;;;;;;;;:46;;;;20313:28;20333:7;20313;:15;20321:6;20313:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20295:7;:15;20303:6;20295:15;;;;;;;;;;;;;;;:46;;;;20373:39;20396:15;20373:7;:18;20381:9;20373:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;20352:7;:18;20360:9;20352:18;;;;;;;;;;;;;;;:60;;;;20444:39;20467:15;20444:7;:18;20452:9;20444:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;20423:7;:18;20431:9;20423:18;;;;;;;;;;;;;;;:60;;;;20494:26;20509:10;20494:14;:26::i;:::-;20531:23;20543:4;20549;20531:11;:23::i;:::-;20587:9;20570:44;;20579:6;20570:44;;;20598:15;20570:44;;;;;;:::i;:::-;;;;;;;;20079:543;;;;;;19988:634;;;:::o;24576:125::-;24630:15;;24620:7;:25;;;;24672:21;;24656:13;:37;;;;24576:125::o;23998:154::-;24062:7;24089:55;24128:5;24089:20;24101:7;;24089;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;24082:62;;23998:154;;;:::o;24160:166::-;24230:7;24257:61;24302:5;24257:26;24269:13;;24257:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;24250:68;;24160:166;;;:::o;23635:355::-;23698:19;23721:10;:8;:10::i;:::-;23698:33;;23742:18;23763:27;23778:11;23763:10;:14;;:27;;;;:::i;:::-;23742:48;;23826:38;23853:10;23826:7;:22;23842:4;23826:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;23801:7;:22;23817:4;23801:22;;;;;;;;;;;;;;;:63;;;;23878:11;:26;23898:4;23878:26;;;;;;;;;;;;;;;;;;;;;;;;;23875:107;;;23944:38;23971:10;23944:7;:22;23960:4;23944:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;23919:7;:22;23935:4;23919:22;;;;;;;;;;;;;;;:63;;;;23875:107;23687:303;;23635:355;:::o;21544:147::-;21622:17;21634:4;21622:7;;:11;;:17;;;;:::i;:::-;21612:7;:27;;;;21663:20;21678:4;21663:10;;:14;;:20;;;;:::i;:::-;21650:10;:33;;;;21544:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:329::-;644:6;693:2;681:9;672:7;668:23;664:32;661:119;;;699:79;;:::i;:::-;661:119;819:1;844:53;889:7;880:6;869:9;865:22;844:53;:::i;:::-;834:63;;790:117;585:329;;;;:::o;920:351::-;990:6;1039:2;1027:9;1018:7;1014:23;1010:32;1007:119;;;1045:79;;:::i;:::-;1007:119;1165:1;1190:64;1246:7;1237:6;1226:9;1222:22;1190:64;:::i;:::-;1180:74;;1136:128;920:351;;;;:::o;1277:474::-;1345:6;1353;1402:2;1390:9;1381:7;1377:23;1373:32;1370:119;;;1408:79;;:::i;:::-;1370:119;1528:1;1553:53;1598:7;1589:6;1578:9;1574:22;1553:53;:::i;:::-;1543:63;;1499:117;1655:2;1681:53;1726:7;1717:6;1706:9;1702:22;1681:53;:::i;:::-;1671:63;;1626:118;1277:474;;;;;:::o;1757:619::-;1834:6;1842;1850;1899:2;1887:9;1878:7;1874:23;1870:32;1867:119;;;1905:79;;:::i;:::-;1867:119;2025:1;2050:53;2095:7;2086:6;2075:9;2071:22;2050:53;:::i;:::-;2040:63;;1996:117;2152:2;2178:53;2223:7;2214:6;2203:9;2199:22;2178:53;:::i;:::-;2168:63;;2123:118;2280:2;2306:53;2351:7;2342:6;2331:9;2327:22;2306:53;:::i;:::-;2296:63;;2251:118;1757:619;;;;;:::o;2382:474::-;2450:6;2458;2507:2;2495:9;2486:7;2482:23;2478:32;2475:119;;;2513:79;;:::i;:::-;2475:119;2633:1;2658:53;2703:7;2694:6;2683:9;2679:22;2658:53;:::i;:::-;2648:63;;2604:117;2760:2;2786:53;2831:7;2822:6;2811:9;2807:22;2786:53;:::i;:::-;2776:63;;2731:118;2382:474;;;;;:::o;2862:323::-;2918:6;2967:2;2955:9;2946:7;2942:23;2938:32;2935:119;;;2973:79;;:::i;:::-;2935:119;3093:1;3118:50;3160:7;3151:6;3140:9;3136:22;3118:50;:::i;:::-;3108:60;;3064:114;2862:323;;;;:::o;3191:329::-;3250:6;3299:2;3287:9;3278:7;3274:23;3270:32;3267:119;;;3305:79;;:::i;:::-;3267:119;3425:1;3450:53;3495:7;3486:6;3475:9;3471:22;3450:53;:::i;:::-;3440:63;;3396:117;3191:329;;;;:::o;3526:468::-;3591:6;3599;3648:2;3636:9;3627:7;3623:23;3619:32;3616:119;;;3654:79;;:::i;:::-;3616:119;3774:1;3799:53;3844:7;3835:6;3824:9;3820:22;3799:53;:::i;:::-;3789:63;;3745:117;3901:2;3927:50;3969:7;3960:6;3949:9;3945:22;3927:50;:::i;:::-;3917:60;;3872:115;3526:468;;;;;:::o;4000:179::-;4069:10;4090:46;4132:3;4124:6;4090:46;:::i;:::-;4168:4;4163:3;4159:14;4145:28;;4000:179;;;;:::o;4185:142::-;4288:32;4314:5;4288:32;:::i;:::-;4283:3;4276:45;4185:142;;:::o;4333:108::-;4410:24;4428:5;4410:24;:::i;:::-;4405:3;4398:37;4333:108;;:::o;4447:118::-;4534:24;4552:5;4534:24;:::i;:::-;4529:3;4522:37;4447:118;;:::o;4601:732::-;4720:3;4749:54;4797:5;4749:54;:::i;:::-;4819:86;4898:6;4893:3;4819:86;:::i;:::-;4812:93;;4929:56;4979:5;4929:56;:::i;:::-;5008:7;5039:1;5024:284;5049:6;5046:1;5043:13;5024:284;;;5125:6;5119:13;5152:63;5211:3;5196:13;5152:63;:::i;:::-;5145:70;;5238:60;5291:6;5238:60;:::i;:::-;5228:70;;5084:224;5071:1;5068;5064:9;5059:14;;5024:284;;;5028:14;5324:3;5317:10;;4725:608;;;4601:732;;;;:::o;5339:109::-;5420:21;5435:5;5420:21;:::i;:::-;5415:3;5408:34;5339:109;;:::o;5454:183::-;5567:63;5624:5;5567:63;:::i;:::-;5562:3;5555:76;5454:183;;:::o;5643:147::-;5738:45;5777:5;5738:45;:::i;:::-;5733:3;5726:58;5643:147;;:::o;5796:364::-;5884:3;5912:39;5945:5;5912:39;:::i;:::-;5967:71;6031:6;6026:3;5967:71;:::i;:::-;5960:78;;6047:52;6092:6;6087:3;6080:4;6073:5;6069:16;6047:52;:::i;:::-;6124:29;6146:6;6124:29;:::i;:::-;6119:3;6115:39;6108:46;;5888:272;5796:364;;;;:::o;6166:366::-;6308:3;6329:67;6393:2;6388:3;6329:67;:::i;:::-;6322:74;;6405:93;6494:3;6405:93;:::i;:::-;6523:2;6518:3;6514:12;6507:19;;6166:366;;;:::o;6538:::-;6680:3;6701:67;6765:2;6760:3;6701:67;:::i;:::-;6694:74;;6777:93;6866:3;6777:93;:::i;:::-;6895:2;6890:3;6886:12;6879:19;;6538:366;;;:::o;6910:::-;7052:3;7073:67;7137:2;7132:3;7073:67;:::i;:::-;7066:74;;7149:93;7238:3;7149:93;:::i;:::-;7267:2;7262:3;7258:12;7251:19;;6910:366;;;:::o;7282:::-;7424:3;7445:67;7509:2;7504:3;7445:67;:::i;:::-;7438:74;;7521:93;7610:3;7521:93;:::i;:::-;7639:2;7634:3;7630:12;7623:19;;7282:366;;;:::o;7654:::-;7796:3;7817:67;7881:2;7876:3;7817:67;:::i;:::-;7810:74;;7893:93;7982:3;7893:93;:::i;:::-;8011:2;8006:3;8002:12;7995:19;;7654:366;;;:::o;8026:::-;8168:3;8189:67;8253:2;8248:3;8189:67;:::i;:::-;8182:74;;8265:93;8354:3;8265:93;:::i;:::-;8383:2;8378:3;8374:12;8367:19;;8026:366;;;:::o;8398:::-;8540:3;8561:67;8625:2;8620:3;8561:67;:::i;:::-;8554:74;;8637:93;8726:3;8637:93;:::i;:::-;8755:2;8750:3;8746:12;8739:19;;8398:366;;;:::o;8770:::-;8912:3;8933:67;8997:2;8992:3;8933:67;:::i;:::-;8926:74;;9009:93;9098:3;9009:93;:::i;:::-;9127:2;9122:3;9118:12;9111:19;;8770:366;;;:::o;9142:::-;9284:3;9305:67;9369:2;9364:3;9305:67;:::i;:::-;9298:74;;9381:93;9470:3;9381:93;:::i;:::-;9499:2;9494:3;9490:12;9483:19;;9142:366;;;:::o;9514:::-;9656:3;9677:67;9741:2;9736:3;9677:67;:::i;:::-;9670:74;;9753:93;9842:3;9753:93;:::i;:::-;9871:2;9866:3;9862:12;9855:19;;9514:366;;;:::o;9886:::-;10028:3;10049:67;10113:2;10108:3;10049:67;:::i;:::-;10042:74;;10125:93;10214:3;10125:93;:::i;:::-;10243:2;10238:3;10234:12;10227:19;;9886:366;;;:::o;10258:::-;10400:3;10421:67;10485:2;10480:3;10421:67;:::i;:::-;10414:74;;10497:93;10586:3;10497:93;:::i;:::-;10615:2;10610:3;10606:12;10599:19;;10258:366;;;:::o;10630:::-;10772:3;10793:67;10857:2;10852:3;10793:67;:::i;:::-;10786:74;;10869:93;10958:3;10869:93;:::i;:::-;10987:2;10982:3;10978:12;10971:19;;10630:366;;;:::o;11002:::-;11144:3;11165:67;11229:2;11224:3;11165:67;:::i;:::-;11158:74;;11241:93;11330:3;11241:93;:::i;:::-;11359:2;11354:3;11350:12;11343:19;;11002:366;;;:::o;11374:::-;11516:3;11537:67;11601:2;11596:3;11537:67;:::i;:::-;11530:74;;11613:93;11702:3;11613:93;:::i;:::-;11731:2;11726:3;11722:12;11715:19;;11374:366;;;:::o;11746:::-;11888:3;11909:67;11973:2;11968:3;11909:67;:::i;:::-;11902:74;;11985:93;12074:3;11985:93;:::i;:::-;12103:2;12098:3;12094:12;12087:19;;11746:366;;;:::o;12118:::-;12260:3;12281:67;12345:2;12340:3;12281:67;:::i;:::-;12274:74;;12357:93;12446:3;12357:93;:::i;:::-;12475:2;12470:3;12466:12;12459:19;;12118:366;;;:::o;12490:::-;12632:3;12653:67;12717:2;12712:3;12653:67;:::i;:::-;12646:74;;12729:93;12818:3;12729:93;:::i;:::-;12847:2;12842:3;12838:12;12831:19;;12490:366;;;:::o;12862:118::-;12949:24;12967:5;12949:24;:::i;:::-;12944:3;12937:37;12862:118;;:::o;12986:112::-;13069:22;13085:5;13069:22;:::i;:::-;13064:3;13057:35;12986:112;;:::o;13104:222::-;13197:4;13235:2;13224:9;13220:18;13212:26;;13248:71;13316:1;13305:9;13301:17;13292:6;13248:71;:::i;:::-;13104:222;;;;:::o;13332:254::-;13441:4;13479:2;13468:9;13464:18;13456:26;;13492:87;13576:1;13565:9;13561:17;13552:6;13492:87;:::i;:::-;13332:254;;;;:::o;13592:210::-;13679:4;13717:2;13706:9;13702:18;13694:26;;13730:65;13792:1;13781:9;13777:17;13768:6;13730:65;:::i;:::-;13592:210;;;;:::o;13808:274::-;13927:4;13965:2;13954:9;13950:18;13942:26;;13978:97;14072:1;14061:9;14057:17;14048:6;13978:97;:::i;:::-;13808:274;;;;:::o;14088:313::-;14201:4;14239:2;14228:9;14224:18;14216:26;;14288:9;14282:4;14278:20;14274:1;14263:9;14259:17;14252:47;14316:78;14389:4;14380:6;14316:78;:::i;:::-;14308:86;;14088:313;;;;:::o;14407:419::-;14573:4;14611:2;14600:9;14596:18;14588:26;;14660:9;14654:4;14650:20;14646:1;14635:9;14631:17;14624:47;14688:131;14814:4;14688:131;:::i;:::-;14680:139;;14407:419;;;:::o;14832:::-;14998:4;15036:2;15025:9;15021:18;15013:26;;15085:9;15079:4;15075:20;15071:1;15060:9;15056:17;15049:47;15113:131;15239:4;15113:131;:::i;:::-;15105:139;;14832:419;;;:::o;15257:::-;15423:4;15461:2;15450:9;15446:18;15438:26;;15510:9;15504:4;15500:20;15496:1;15485:9;15481:17;15474:47;15538:131;15664:4;15538:131;:::i;:::-;15530:139;;15257:419;;;:::o;15682:::-;15848:4;15886:2;15875:9;15871:18;15863:26;;15935:9;15929:4;15925:20;15921:1;15910:9;15906:17;15899:47;15963:131;16089:4;15963:131;:::i;:::-;15955:139;;15682:419;;;:::o;16107:::-;16273:4;16311:2;16300:9;16296:18;16288:26;;16360:9;16354:4;16350:20;16346:1;16335:9;16331:17;16324:47;16388:131;16514:4;16388:131;:::i;:::-;16380:139;;16107:419;;;:::o;16532:::-;16698:4;16736:2;16725:9;16721:18;16713:26;;16785:9;16779:4;16775:20;16771:1;16760:9;16756:17;16749:47;16813:131;16939:4;16813:131;:::i;:::-;16805:139;;16532:419;;;:::o;16957:::-;17123:4;17161:2;17150:9;17146:18;17138:26;;17210:9;17204:4;17200:20;17196:1;17185:9;17181:17;17174:47;17238:131;17364:4;17238:131;:::i;:::-;17230:139;;16957:419;;;:::o;17382:::-;17548:4;17586:2;17575:9;17571:18;17563:26;;17635:9;17629:4;17625:20;17621:1;17610:9;17606:17;17599:47;17663:131;17789:4;17663:131;:::i;:::-;17655:139;;17382:419;;;:::o;17807:::-;17973:4;18011:2;18000:9;17996:18;17988:26;;18060:9;18054:4;18050:20;18046:1;18035:9;18031:17;18024:47;18088:131;18214:4;18088:131;:::i;:::-;18080:139;;17807:419;;;:::o;18232:::-;18398:4;18436:2;18425:9;18421:18;18413:26;;18485:9;18479:4;18475:20;18471:1;18460:9;18456:17;18449:47;18513:131;18639:4;18513:131;:::i;:::-;18505:139;;18232:419;;;:::o;18657:::-;18823:4;18861:2;18850:9;18846:18;18838:26;;18910:9;18904:4;18900:20;18896:1;18885:9;18881:17;18874:47;18938:131;19064:4;18938:131;:::i;:::-;18930:139;;18657:419;;;:::o;19082:::-;19248:4;19286:2;19275:9;19271:18;19263:26;;19335:9;19329:4;19325:20;19321:1;19310:9;19306:17;19299:47;19363:131;19489:4;19363:131;:::i;:::-;19355:139;;19082:419;;;:::o;19507:::-;19673:4;19711:2;19700:9;19696:18;19688:26;;19760:9;19754:4;19750:20;19746:1;19735:9;19731:17;19724:47;19788:131;19914:4;19788:131;:::i;:::-;19780:139;;19507:419;;;:::o;19932:::-;20098:4;20136:2;20125:9;20121:18;20113:26;;20185:9;20179:4;20175:20;20171:1;20160:9;20156:17;20149:47;20213:131;20339:4;20213:131;:::i;:::-;20205:139;;19932:419;;;:::o;20357:::-;20523:4;20561:2;20550:9;20546:18;20538:26;;20610:9;20604:4;20600:20;20596:1;20585:9;20581:17;20574:47;20638:131;20764:4;20638:131;:::i;:::-;20630:139;;20357:419;;;:::o;20782:::-;20948:4;20986:2;20975:9;20971:18;20963:26;;21035:9;21029:4;21025:20;21021:1;21010:9;21006:17;20999:47;21063:131;21189:4;21063:131;:::i;:::-;21055:139;;20782:419;;;:::o;21207:::-;21373:4;21411:2;21400:9;21396:18;21388:26;;21460:9;21454:4;21450:20;21446:1;21435:9;21431:17;21424:47;21488:131;21614:4;21488:131;:::i;:::-;21480:139;;21207:419;;;:::o;21632:::-;21798:4;21836:2;21825:9;21821:18;21813:26;;21885:9;21879:4;21875:20;21871:1;21860:9;21856:17;21849:47;21913:131;22039:4;21913:131;:::i;:::-;21905:139;;21632:419;;;:::o;22057:222::-;22150:4;22188:2;22177:9;22173:18;22165:26;;22201:71;22269:1;22258:9;22254:17;22245:6;22201:71;:::i;:::-;22057:222;;;;:::o;22285:831::-;22548:4;22586:3;22575:9;22571:19;22563:27;;22600:71;22668:1;22657:9;22653:17;22644:6;22600:71;:::i;:::-;22681:80;22757:2;22746:9;22742:18;22733:6;22681:80;:::i;:::-;22808:9;22802:4;22798:20;22793:2;22782:9;22778:18;22771:48;22836:108;22939:4;22930:6;22836:108;:::i;:::-;22828:116;;22954:72;23022:2;23011:9;23007:18;22998:6;22954:72;:::i;:::-;23036:73;23104:3;23093:9;23089:19;23080:6;23036:73;:::i;:::-;22285:831;;;;;;;;:::o;23122:332::-;23243:4;23281:2;23270:9;23266:18;23258:26;;23294:71;23362:1;23351:9;23347:17;23338:6;23294:71;:::i;:::-;23375:72;23443:2;23432:9;23428:18;23419:6;23375:72;:::i;:::-;23122:332;;;;;:::o;23460:214::-;23549:4;23587:2;23576:9;23572:18;23564:26;;23600:67;23664:1;23653:9;23649:17;23640:6;23600:67;:::i;:::-;23460:214;;;;:::o;23761:132::-;23828:4;23851:3;23843:11;;23881:4;23876:3;23872:14;23864:22;;23761:132;;;:::o;23899:114::-;23966:6;24000:5;23994:12;23984:22;;23899:114;;;:::o;24019:99::-;24071:6;24105:5;24099:12;24089:22;;24019:99;;;:::o;24124:113::-;24194:4;24226;24221:3;24217:14;24209:22;;24124:113;;;:::o;24243:184::-;24342:11;24376:6;24371:3;24364:19;24416:4;24411:3;24407:14;24392:29;;24243:184;;;;:::o;24433:169::-;24517:11;24551:6;24546:3;24539:19;24591:4;24586:3;24582:14;24567:29;;24433:169;;;;:::o;24608:305::-;24648:3;24667:20;24685:1;24667:20;:::i;:::-;24662:25;;24701:20;24719:1;24701:20;:::i;:::-;24696:25;;24855:1;24787:66;24783:74;24780:1;24777:81;24774:107;;;24861:18;;:::i;:::-;24774:107;24905:1;24902;24898:9;24891:16;;24608:305;;;;:::o;24919:185::-;24959:1;24976:20;24994:1;24976:20;:::i;:::-;24971:25;;25010:20;25028:1;25010:20;:::i;:::-;25005:25;;25049:1;25039:35;;25054:18;;:::i;:::-;25039:35;25096:1;25093;25089:9;25084:14;;24919:185;;;;:::o;25110:348::-;25150:7;25173:20;25191:1;25173:20;:::i;:::-;25168:25;;25207:20;25225:1;25207:20;:::i;:::-;25202:25;;25395:1;25327:66;25323:74;25320:1;25317:81;25312:1;25305:9;25298:17;25294:105;25291:131;;;25402:18;;:::i;:::-;25291:131;25450:1;25447;25443:9;25432:20;;25110:348;;;;:::o;25464:191::-;25504:4;25524:20;25542:1;25524:20;:::i;:::-;25519:25;;25558:20;25576:1;25558:20;:::i;:::-;25553:25;;25597:1;25594;25591:8;25588:34;;;25602:18;;:::i;:::-;25588:34;25647:1;25644;25640:9;25632:17;;25464:191;;;;:::o;25661:96::-;25698:7;25727:24;25745:5;25727:24;:::i;:::-;25716:35;;25661:96;;;:::o;25763:104::-;25808:7;25837:24;25855:5;25837:24;:::i;:::-;25826:35;;25763:104;;;:::o;25873:90::-;25907:7;25950:5;25943:13;25936:21;25925:32;;25873:90;;;:::o;25969:126::-;26006:7;26046:42;26039:5;26035:54;26024:65;;25969:126;;;:::o;26101:77::-;26138:7;26167:5;26156:16;;26101:77;;;:::o;26184:86::-;26219:7;26259:4;26252:5;26248:16;26237:27;;26184:86;;;:::o;26276:152::-;26352:9;26385:37;26416:5;26385:37;:::i;:::-;26372:50;;26276:152;;;:::o;26434:121::-;26492:9;26525:24;26543:5;26525:24;:::i;:::-;26512:37;;26434:121;;;:::o;26561:126::-;26611:9;26644:37;26675:5;26644:37;:::i;:::-;26631:50;;26561:126;;;:::o;26693:113::-;26743:9;26776:24;26794:5;26776:24;:::i;:::-;26763:37;;26693:113;;;:::o;26812:307::-;26880:1;26890:113;26904:6;26901:1;26898:13;26890:113;;;26989:1;26984:3;26980:11;26974:18;26970:1;26965:3;26961:11;26954:39;26926:2;26923:1;26919:10;26914:15;;26890:113;;;27021:6;27018:1;27015:13;27012:101;;;27101:1;27092:6;27087:3;27083:16;27076:27;27012:101;26861:258;26812:307;;;:::o;27125:320::-;27169:6;27206:1;27200:4;27196:12;27186:22;;27253:1;27247:4;27243:12;27274:18;27264:81;;27330:4;27322:6;27318:17;27308:27;;27264:81;27392:2;27384:6;27381:14;27361:18;27358:38;27355:84;;;27411:18;;:::i;:::-;27355:84;27176:269;27125:320;;;:::o;27451:233::-;27490:3;27513:24;27531:5;27513:24;:::i;:::-;27504:33;;27559:66;27552:5;27549:77;27546:103;;;27629:18;;:::i;:::-;27546:103;27676:1;27669:5;27665:13;27658:20;;27451:233;;;:::o;27690:180::-;27738:77;27735:1;27728:88;27835:4;27832:1;27825:15;27859:4;27856:1;27849:15;27876:180;27924:77;27921:1;27914:88;28021:4;28018:1;28011:15;28045:4;28042:1;28035:15;28062:180;28110:77;28107:1;28100:88;28207:4;28204:1;28197:15;28231:4;28228:1;28221:15;28248:180;28296:77;28293:1;28286:88;28393:4;28390:1;28383:15;28417:4;28414:1;28407:15;28434:180;28482:77;28479:1;28472:88;28579:4;28576:1;28569:15;28603:4;28600:1;28593:15;28620:180;28668:77;28665:1;28658:88;28765:4;28762:1;28755:15;28789:4;28786:1;28779:15;28929:117;29038:1;29035;29028:12;29052:102;29093:6;29144:2;29140:7;29135:2;29128:5;29124:14;29120:28;29110:38;;29052:102;;;:::o;29160:222::-;29300:34;29296:1;29288:6;29284:14;29277:58;29369:5;29364:2;29356:6;29352:15;29345:30;29160:222;:::o;29388:229::-;29528:34;29524:1;29516:6;29512:14;29505:58;29597:12;29592:2;29584:6;29580:15;29573:37;29388:229;:::o;29623:221::-;29763:34;29759:1;29751:6;29747:14;29740:58;29832:4;29827:2;29819:6;29815:15;29808:29;29623:221;:::o;29850:177::-;29990:29;29986:1;29978:6;29974:14;29967:53;29850:177;:::o;30033:::-;30173:29;30169:1;30161:6;30157:14;30150:53;30033:177;:::o;30216:180::-;30356:32;30352:1;30344:6;30340:14;30333:56;30216:180;:::o;30402:181::-;30542:33;30538:1;30530:6;30526:14;30519:57;30402:181;:::o;30589:227::-;30729:34;30725:1;30717:6;30713:14;30706:58;30798:10;30793:2;30785:6;30781:15;30774:35;30589:227;:::o;30822:220::-;30962:34;30958:1;30950:6;30946:14;30939:58;31031:3;31026:2;31018:6;31014:15;31007:28;30822:220;:::o;31048:182::-;31188:34;31184:1;31176:6;31172:14;31165:58;31048:182;:::o;31236:228::-;31376:34;31372:1;31364:6;31360:14;31353:58;31445:11;31440:2;31432:6;31428:15;31421:36;31236:228;:::o;31470:176::-;31610:28;31606:1;31598:6;31594:14;31587:52;31470:176;:::o;31652:178::-;31792:30;31788:1;31780:6;31776:14;31769:54;31652:178;:::o;31836:224::-;31976:34;31972:1;31964:6;31960:14;31953:58;32045:7;32040:2;32032:6;32028:15;32021:32;31836:224;:::o;32066:223::-;32206:34;32202:1;32194:6;32190:14;32183:58;32275:6;32270:2;32262:6;32258:15;32251:31;32066:223;:::o;32295:174::-;32435:26;32431:1;32423:6;32419:14;32412:50;32295:174;:::o;32475:231::-;32615:34;32611:1;32603:6;32599:14;32592:58;32684:14;32679:2;32671:6;32667:15;32660:39;32475:231;:::o;32712:173::-;32852:25;32848:1;32840:6;32836:14;32829:49;32712:173;:::o;32891:122::-;32964:24;32982:5;32964:24;:::i;:::-;32957:5;32954:35;32944:63;;33003:1;33000;32993:12;32944:63;32891:122;:::o;33019:116::-;33089:21;33104:5;33089:21;:::i;:::-;33082:5;33079:32;33069:60;;33125:1;33122;33115:12;33069:60;33019:116;:::o;33141:122::-;33214:24;33232:5;33214:24;:::i;:::-;33207:5;33204:35;33194:63;;33253:1;33250;33243:12;33194:63;33141:122;:::o

Swarm Source

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