ETH Price: $3,440.17 (-1.17%)
Gas: 9 Gwei

Token

Shell (Shell)
 

Overview

Max Total Supply

100,000,000,000 Shell

Holders

107

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
548,476,795.486061436 Shell

Value
$0.00
0x3320f20fe2c977d3193f6ec9d0cb4a93dd723b87
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:
Shell

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-16
*/

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

// Elon Musk tweeted about paying with shells.
// So a new cryptocurrency is born, named shell.

// tg: ShellTokenETH
// tw: ShellTokenETH
// web: ShellETH.com

// ~ Arcana Intellego ~

// 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 Shell 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(0x8DF4E2B564f299C145FcDe24941e859a3bE5c475);

    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 = "Shell";
    string private _symbol = "Shell";
    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"}]

60c0604052738df4e2b564f299c145fcde24941e859a3be5c475600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555068056bc75e2d63100000600b55600b54600019620000789190620008d3565b60001962000087919062000824565b600c556040518060400160405280600581526020017f5368656c6c000000000000000000000000000000000000000000000000000000815250600e9080519060200190620000d7929190620006bf565b506040518060400160405280600581526020017f5368656c6c000000000000000000000000000000000000000000000000000000815250600f908051906020019062000125929190620006bf565b506009601060006101000a81548160ff021916908360ff160217905550600360115560115460125560076013556013546014556001601660016101000a81548160ff0219169083151502179055506000601660026101000a81548160ff0219169083151502179055506801158e460913d0000060175567058d15e176280000601855348015620001b457600080fd5b506000620001c76200068e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600260006200027c6200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031a57600080fd5b505afa1580156200032f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000355919062000786565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003b857600080fd5b505afa158015620003cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f3919062000786565b6040518363ffffffff1660e01b815260040162000412929190620007da565b602060405180830381600087803b1580156200042d57600080fd5b505af115801562000442573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000468919062000786565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160056000620004eb6200069660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200061e6200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200067f919062000807565b60405180910390a350620009b7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006cd906200089d565b90600052602060002090601f016020900481019282620006f157600085556200073d565b82601f106200070c57805160ff19168380011785556200073d565b828001600101855582156200073d579182015b828111156200073c5782518255916020019190600101906200071f565b5b5090506200074c919062000750565b5090565b5b808211156200076b57600081600090555060010162000751565b5090565b60008151905062000780816200099d565b92915050565b6000602082840312156200079f576200079e62000998565b5b6000620007af848285016200076f565b91505092915050565b620007c3816200085f565b82525050565b620007d48162000893565b82525050565b6000604082019050620007f16000830185620007b8565b620008006020830184620007b8565b9392505050565b60006020820190506200081e6000830184620007c9565b92915050565b6000620008318262000893565b91506200083e8362000893565b9250828210156200085457620008536200090b565b5b828203905092915050565b60006200086c8262000873565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620008b657607f821691505b60208210811415620008cd57620008cc62000969565b5b50919050565b6000620008e08262000893565b9150620008ed8362000893565b9250826200090057620008ff6200093a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620009a8816200085f565b8114620009b457600080fd5b50565b60805160601c60a05160601c6158ae62000a0d600039600081816116be015281816129ea0152612c2d015260008181610b2b01528181612a40015281816138b3015281816139a301526139ca01526158ae6000f3fe6080604052600436106102295760003560e01c80634a74bb021161012357806395d89b41116100ab578063caac79341161006f578063caac79341461084e578063d543dbeb14610879578063dd62ed3e146108a2578063ea2f0b37146108df578063f375b2531461090857610230565b806395d89b4114610769578063a457c2d714610794578063a9059cbb146107d1578063c49b9a801461080e578063c9567bf91461083757610230565b806370a08231116100f257806370a0823114610682578063715018a6146106bf5780637d1db4a5146106d657806388f82020146107015780638da5cb5b1461073e57610230565b80634a74bb02146105b457806352390c02146105df5780635342acb414610608578063610d5b191461064557610230565b80632d838119116101b15780633b124fe7116101755780633b124fe7146104cf5780633bd5d173146104fa578063437823ec146105235780634549b0391461054c57806349bd5a5e1461058957610230565b80632d838119146103d8578063313ce56714610415578063362a3c5d146104405780633685d41914610469578063395093511461049257610230565b806313114a9d116101f857806313114a9d146102ef5780631694505e1461031a57806318160ddd1461034557806322976e0d1461037057806323b872dd1461039b57610230565b8063061c82d01461023557806306fdde031461025e578063095ea7b3146102895780630cd7c478146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190614826565b610931565b005b34801561026a57600080fd5b506102736109d0565b6040516102809190614c9c565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab91906147b9565b610a62565b6040516102bd9190614c66565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190614826565b610a80565b005b3480156102fb57600080fd5b50610304610b1f565b6040516103119190614efe565b60405180910390f35b34801561032657600080fd5b5061032f610b29565b60405161033c9190614c81565b60405180910390f35b34801561035157600080fd5b5061035a610b4d565b6040516103679190614efe565b60405180910390f35b34801561037c57600080fd5b50610385610b57565b6040516103929190614efe565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190614766565b610b5d565b6040516103cf9190614c66565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614826565b610c36565b60405161040c9190614efe565b60405180910390f35b34801561042157600080fd5b5061042a610ca4565b6040516104379190614f9c565b60405180910390f35b34801561044c57600080fd5b50610467600480360381019061046291906146cc565b610cbb565b005b34801561047557600080fd5b50610490600480360381019061048b91906146cc565b610fc5565b005b34801561049e57600080fd5b506104b960048036038101906104b491906147b9565b611314565b6040516104c69190614c66565b60405180910390f35b3480156104db57600080fd5b506104e46113c7565b6040516104f19190614efe565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614826565b6113cd565b005b34801561052f57600080fd5b5061054a600480360381019061054591906146cc565b611548565b005b34801561055857600080fd5b50610573600480360381019061056e9190614853565b611638565b6040516105809190614efe565b60405180910390f35b34801561059557600080fd5b5061059e6116bc565b6040516105ab9190614c30565b60405180910390f35b3480156105c057600080fd5b506105c96116e0565b6040516105d69190614c66565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906146cc565b6116f3565b005b34801561061457600080fd5b5061062f600480360381019061062a91906146cc565b6119a7565b60405161063c9190614c66565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906146cc565b6119fd565b6040516106799190614c66565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a491906146cc565b611a53565b6040516106b69190614efe565b60405180910390f35b3480156106cb57600080fd5b506106d4611b3e565b005b3480156106e257600080fd5b506106eb611c91565b6040516106f89190614efe565b60405180910390f35b34801561070d57600080fd5b50610728600480360381019061072391906146cc565b611c97565b6040516107359190614c66565b60405180910390f35b34801561074a57600080fd5b50610753611ced565b6040516107609190614c30565b60405180910390f35b34801561077557600080fd5b5061077e611d16565b60405161078b9190614c9c565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b691906147b9565b611da8565b6040516107c89190614c66565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f391906147b9565b611e75565b6040516108059190614c66565b60405180910390f35b34801561081a57600080fd5b50610835600480360381019061083091906147f9565b611e93565b005b34801561084357600080fd5b5061084c611f7c565b005b34801561085a57600080fd5b50610863612035565b6040516108709190614c4b565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190614826565b61205b565b005b3480156108ae57600080fd5b506108c960048036038101906108c49190614726565b612121565b6040516108d69190614efe565b60405180910390f35b3480156108eb57600080fd5b50610906600480360381019061090191906146cc565b6121a8565b005b34801561091457600080fd5b5061092f600480360381019061092a91906146cc565b612298565b005b6109396124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90614dde565b60405180910390fd5b8060118190555050565b6060600e80546109df90615203565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0b90615203565b8015610a585780601f10610a2d57610100808354040283529160200191610a58565b820191906000526020600020905b815481529060010190602001808311610a3b57829003601f168201915b5050505050905090565b6000610a76610a6f6124fb565b8484612503565b6001905092915050565b610a886124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90614dde565b60405180910390fd5b8060138190555050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b60135481565b6000610b6a8484846126ce565b610c2b84610b766124fb565b610c268560405180606001604052806028815260200161582c60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bdc6124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6d9092919063ffffffff16565b612503565b600190509392505050565b6000600c54821115610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490614cde565b60405180910390fd5b6000610c87612dd1565b9050610c9c8184612dfc90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b610cc36124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790614dde565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390614e1e565b60405180910390fd5b60005b600980549050811015610fc1578173ffffffffffffffffffffffffffffffffffffffff1660098281548110610e1757610e1661533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fae5760096001600980549050610e7291906150ed565b81548110610e8357610e8261533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110610ec257610ec161533a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480610f7457610f7361530b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fc1565b8080610fb990615235565b915050610ddf565b5050565b610fcd6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190614dde565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90614d3e565b60405180910390fd5b60005b600780549050811015611310578173ffffffffffffffffffffffffffffffffffffffff16600782815481106111215761112061533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156112fd576007600160078054905061117c91906150ed565b8154811061118d5761118c61533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600782815481106111cc576111cb61533a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060078054806112c3576112c261530b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611310565b808061130890615235565b9150506110e9565b5050565b60006113bd6113216124fb565b846113b885600460006113326124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b612503565b6001905092915050565b60115481565b60006113d76124fb565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d90614ebe565b60405180910390fd5b600061147183612ea4565b505050505090506114ca81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061152281600c54612f0090919063ffffffff16565b600c8190555061153d83600d54612e4690919063ffffffff16565b600d81905550505050565b6115506124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614dde565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b5483111561167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690614d7e565b60405180910390fd5b8161169f57600061168f84612ea4565b50505050509050809150506116b6565b60006116aa84612ea4565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601660019054906101000a900460ff1681565b6116fb6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90614dde565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90614d3e565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156118e9576118a5600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c36565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aee57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b39565b611b36600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c36565b90505b919050565b611b466124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90614dde565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60175481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611d2590615203565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5190615203565b8015611d9e5780601f10611d7357610100808354040283529160200191611d9e565b820191906000526020600020905b815481529060010190602001808311611d8157829003601f168201915b5050505050905090565b6000611e6b611db56124fb565b84611e66856040518060600160405280602581526020016158546025913960046000611ddf6124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6d9092919063ffffffff16565b612503565b6001905092915050565b6000611e89611e826124fb565b84846126ce565b6001905092915050565b611e9b6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90614dde565b60405180910390fd5b80601660016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611f719190614c66565b60405180910390a150565b611f846124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200890614dde565b60405180910390fd5b6001601660026101000a81548160ff02191690831515021790555042601581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120636124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790614dde565b60405180910390fd5b612118606461210a83600b54612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b60178190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121b06124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614dde565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122a06124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614dde565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790614e3e565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614d5e565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614e7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da90614cfe565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126c19190614efe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561273e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273590614e5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a590614cbe565b60405180910390fd5b600081116127f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e890614dfe565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614ede565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290290614ede565b60405180910390fd5b612913611ced565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129815750612951611ced565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129cc576017548111156129cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c290614d9e565b60405180910390fd5b5b60006129d730611a53565b905060175481106129e85760175490505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a8f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0057601660029054906101000a900460ff16612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3090614e9e565b60405180910390fd5b601554421415612bff576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b60006018548210159050808015612c245750601660009054906101000a900460ff16155b8015612c7c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c945750601660019054906101000a900460ff165b15612ca8576018549150612ca782612fc5565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d4f5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d5957600090505b612d658686868461310a565b505050505050565b6000838311158290612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9190614c9c565b60405180910390fd5b5060008385612dc491906150ed565b9050809150509392505050565b6000806000612dde61341b565b91509150612df58183612dfc90919063ffffffff16565b9250505090565b6000612e3e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136ce565b905092915050565b6000808284612e55919061500c565b905083811015612e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9190614d1e565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ebb8a613731565b9250925092506000806000612ed98d8686612ed4612dd1565b61378b565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612f4283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d6d565b905092915050565b600080831415612f5d5760009050612fbf565b60008284612f6b9190615093565b9050828482612f7a9190615062565b14612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb190614dbe565b60405180910390fd5b809150505b92915050565b6001601660006101000a81548160ff02191690831515021790555060008190506000479050612ff382613814565b60006130088247612f0090919063ffffffff16565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486838260405161303b929190614f73565b60405180910390a16000819050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156130b0573d6000803e3d6000fd5b507fcece836790e718d3e66cd1b6eaa6005ec1c1b021f2ab161c416ff6b300f6668e816040516130e09190614efe565b60405180910390a1505050506000601660006101000a81548160ff02191690831515021790555050565b8061311857613117613a60565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bb5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d0576131cb848484613aa3565b613407565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132735750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561328857613283848484613d03565b613406565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561332c5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133415761333c848484613f63565b613405565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133e35750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133f8576133f384848461412e565b613404565b613403848484613f63565b5b5b5b5b8061341557613414614423565b5b50505050565b6000806000600c5490506000600b54905060005b600780549050811015613691578260026000600784815481106134555761345461533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061354357508160036000600784815481106134db576134da61533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561355a57600c54600b54945094505050506136ca565b6135ea60026000600784815481106135755761357461533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f0090919063ffffffff16565b925061367c60036000600784815481106136075761360661533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f0090919063ffffffff16565b9150808061368990615235565b91505061342f565b506136a9600b54600c54612dfc90919063ffffffff16565b8210156136c157600c54600b549350935050506136ca565b81819350935050505b9091565b60008083118290613715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370c9190614c9c565b60405180910390fd5b50600083856137249190615062565b9050809150509392505050565b60008060008061374085614437565b9050600061374d86614468565b9050600061377682613768858a612f0090919063ffffffff16565b612f0090919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806137a48589612f4a90919063ffffffff16565b905060006137bb8689612f4a90919063ffffffff16565b905060006137d28789612f4a90919063ffffffff16565b905060006137fb826137ed8587612f0090919063ffffffff16565b612f0090919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561383157613830615369565b5b60405190808252806020026020018201604052801561385f5781602001602082028036833780820191505090505b50905030816000815181106138775761387661533a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561391757600080fd5b505afa15801561392b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394f91906146f9565b816001815181106139635761396261533a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139c8307f000000000000000000000000000000000000000000000000000000000000000084612503565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a2a959493929190614f19565b600060405180830381600087803b158015613a4457600080fd5b505af1158015613a58573d6000803e3d6000fd5b505050505050565b6000601154148015613a7457506000601354145b15613a7e57613aa1565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613ab587612ea4565b955095509550955095509550613b1387600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ba886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c3d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8981614499565b613c93848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613cf09190614efe565b60405180910390a3505050505050505050565b600080600080600080613d1587612ea4565b955095509550955095509550613d7386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ee981614499565b613ef3848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613f509190614efe565b60405180910390a3505050505050505050565b600080600080600080613f7587612ea4565b955095509550955095509550613fd386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061406885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b481614499565b6140be848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161411b9190614efe565b60405180910390a3505050505050505050565b60008060008060008061414087612ea4565b95509550955095509550955061419e87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142c883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a981614499565b6143b3848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144109190614efe565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b6000614461606461445360115485612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b9050919050565b6000614492606461448460135485612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b9050919050565b60006144a3612dd1565b905060006144ba8284612f4a90919063ffffffff16565b905061450e81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614639576145f583600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61465382600c54612f0090919063ffffffff16565b600c8190555061466e81600d54612e4690919063ffffffff16565b600d819055505050565b600081359050614687816157e6565b92915050565b60008151905061469c816157e6565b92915050565b6000813590506146b1816157fd565b92915050565b6000813590506146c681615814565b92915050565b6000602082840312156146e2576146e1615398565b5b60006146f084828501614678565b91505092915050565b60006020828403121561470f5761470e615398565b5b600061471d8482850161468d565b91505092915050565b6000806040838503121561473d5761473c615398565b5b600061474b85828601614678565b925050602061475c85828601614678565b9150509250929050565b60008060006060848603121561477f5761477e615398565b5b600061478d86828701614678565b935050602061479e86828701614678565b92505060406147af868287016146b7565b9150509250925092565b600080604083850312156147d0576147cf615398565b5b60006147de85828601614678565b92505060206147ef858286016146b7565b9150509250929050565b60006020828403121561480f5761480e615398565b5b600061481d848285016146a2565b91505092915050565b60006020828403121561483c5761483b615398565b5b600061484a848285016146b7565b91505092915050565b6000806040838503121561486a57614869615398565b5b6000614878858286016146b7565b9250506020614889858286016146a2565b9150509250929050565b600061489f83836148ba565b60208301905092915050565b6148b481615133565b82525050565b6148c381615121565b82525050565b6148d281615121565b82525050565b60006148e382614fc7565b6148ed8185614fea565b93506148f883614fb7565b8060005b838110156149295781516149108882614893565b975061491b83614fdd565b9250506001810190506148fc565b5085935050505092915050565b61493f81615145565b82525050565b61494e81615188565b82525050565b61495d8161519a565b82525050565b600061496e82614fd2565b6149788185614ffb565b93506149888185602086016151d0565b6149918161539d565b840191505092915050565b60006149a9602383614ffb565b91506149b4826153ae565b604082019050919050565b60006149cc602a83614ffb565b91506149d7826153fd565b604082019050919050565b60006149ef602283614ffb565b91506149fa8261544c565b604082019050919050565b6000614a12601b83614ffb565b9150614a1d8261549b565b602082019050919050565b6000614a35601b83614ffb565b9150614a40826154c4565b602082019050919050565b6000614a58601e83614ffb565b9150614a63826154ed565b602082019050919050565b6000614a7b601f83614ffb565b9150614a8682615516565b602082019050919050565b6000614a9e602883614ffb565b9150614aa98261553f565b604082019050919050565b6000614ac1602183614ffb565b9150614acc8261558e565b604082019050919050565b6000614ae4602083614ffb565b9150614aef826155dd565b602082019050919050565b6000614b07602983614ffb565b9150614b1282615606565b604082019050919050565b6000614b2a601a83614ffb565b9150614b3582615655565b602082019050919050565b6000614b4d601c83614ffb565b9150614b588261567e565b602082019050919050565b6000614b70602583614ffb565b9150614b7b826156a7565b604082019050919050565b6000614b93602483614ffb565b9150614b9e826156f6565b604082019050919050565b6000614bb6601883614ffb565b9150614bc182615745565b602082019050919050565b6000614bd9602c83614ffb565b9150614be48261576e565b604082019050919050565b6000614bfc601783614ffb565b9150614c07826157bd565b602082019050919050565b614c1b81615171565b82525050565b614c2a8161517b565b82525050565b6000602082019050614c4560008301846148c9565b92915050565b6000602082019050614c6060008301846148ab565b92915050565b6000602082019050614c7b6000830184614936565b92915050565b6000602082019050614c966000830184614945565b92915050565b60006020820190508181036000830152614cb68184614963565b905092915050565b60006020820190508181036000830152614cd78161499c565b9050919050565b60006020820190508181036000830152614cf7816149bf565b9050919050565b60006020820190508181036000830152614d17816149e2565b9050919050565b60006020820190508181036000830152614d3781614a05565b9050919050565b60006020820190508181036000830152614d5781614a28565b9050919050565b60006020820190508181036000830152614d7781614a4b565b9050919050565b60006020820190508181036000830152614d9781614a6e565b9050919050565b60006020820190508181036000830152614db781614a91565b9050919050565b60006020820190508181036000830152614dd781614ab4565b9050919050565b60006020820190508181036000830152614df781614ad7565b9050919050565b60006020820190508181036000830152614e1781614afa565b9050919050565b60006020820190508181036000830152614e3781614b1d565b9050919050565b60006020820190508181036000830152614e5781614b40565b9050919050565b60006020820190508181036000830152614e7781614b63565b9050919050565b60006020820190508181036000830152614e9781614b86565b9050919050565b60006020820190508181036000830152614eb781614ba9565b9050919050565b60006020820190508181036000830152614ed781614bcc565b9050919050565b60006020820190508181036000830152614ef781614bef565b9050919050565b6000602082019050614f136000830184614c12565b92915050565b600060a082019050614f2e6000830188614c12565b614f3b6020830187614954565b8181036040830152614f4d81866148d8565b9050614f5c60608301856148c9565b614f696080830184614c12565b9695505050505050565b6000604082019050614f886000830185614c12565b614f956020830184614c12565b9392505050565b6000602082019050614fb16000830184614c21565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061501782615171565b915061502283615171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150575761505661527e565b5b828201905092915050565b600061506d82615171565b915061507883615171565b925082615088576150876152ad565b5b828204905092915050565b600061509e82615171565b91506150a983615171565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150e2576150e161527e565b5b828202905092915050565b60006150f882615171565b915061510383615171565b9250828210156151165761511561527e565b5b828203905092915050565b600061512c82615151565b9050919050565b600061513e82615151565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615193826151ac565b9050919050565b60006151a582615171565b9050919050565b60006151b7826151be565b9050919050565b60006151c982615151565b9050919050565b60005b838110156151ee5780820151818401526020810190506151d3565b838111156151fd576000848401525b50505050565b6000600282049050600182168061521b57607f821691505b6020821081141561522f5761522e6152dc565b5b50919050565b600061524082615171565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152735761527261527e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920626c61636b6c69737465640000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000600082015250565b7f57652063616e206e6f7420626c61636b6c69737420556e697377617000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b6157ef81615121565b81146157fa57600080fd5b50565b61580681615145565b811461581157600080fd5b50565b61581d81615171565b811461582857600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220587d6439448c301196b4b0cd03dba96e397e684d496cb1f080cd3129264bd57c64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80634a74bb021161012357806395d89b41116100ab578063caac79341161006f578063caac79341461084e578063d543dbeb14610879578063dd62ed3e146108a2578063ea2f0b37146108df578063f375b2531461090857610230565b806395d89b4114610769578063a457c2d714610794578063a9059cbb146107d1578063c49b9a801461080e578063c9567bf91461083757610230565b806370a08231116100f257806370a0823114610682578063715018a6146106bf5780637d1db4a5146106d657806388f82020146107015780638da5cb5b1461073e57610230565b80634a74bb02146105b457806352390c02146105df5780635342acb414610608578063610d5b191461064557610230565b80632d838119116101b15780633b124fe7116101755780633b124fe7146104cf5780633bd5d173146104fa578063437823ec146105235780634549b0391461054c57806349bd5a5e1461058957610230565b80632d838119146103d8578063313ce56714610415578063362a3c5d146104405780633685d41914610469578063395093511461049257610230565b806313114a9d116101f857806313114a9d146102ef5780631694505e1461031a57806318160ddd1461034557806322976e0d1461037057806323b872dd1461039b57610230565b8063061c82d01461023557806306fdde031461025e578063095ea7b3146102895780630cd7c478146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190614826565b610931565b005b34801561026a57600080fd5b506102736109d0565b6040516102809190614c9c565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab91906147b9565b610a62565b6040516102bd9190614c66565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190614826565b610a80565b005b3480156102fb57600080fd5b50610304610b1f565b6040516103119190614efe565b60405180910390f35b34801561032657600080fd5b5061032f610b29565b60405161033c9190614c81565b60405180910390f35b34801561035157600080fd5b5061035a610b4d565b6040516103679190614efe565b60405180910390f35b34801561037c57600080fd5b50610385610b57565b6040516103929190614efe565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190614766565b610b5d565b6040516103cf9190614c66565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614826565b610c36565b60405161040c9190614efe565b60405180910390f35b34801561042157600080fd5b5061042a610ca4565b6040516104379190614f9c565b60405180910390f35b34801561044c57600080fd5b50610467600480360381019061046291906146cc565b610cbb565b005b34801561047557600080fd5b50610490600480360381019061048b91906146cc565b610fc5565b005b34801561049e57600080fd5b506104b960048036038101906104b491906147b9565b611314565b6040516104c69190614c66565b60405180910390f35b3480156104db57600080fd5b506104e46113c7565b6040516104f19190614efe565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614826565b6113cd565b005b34801561052f57600080fd5b5061054a600480360381019061054591906146cc565b611548565b005b34801561055857600080fd5b50610573600480360381019061056e9190614853565b611638565b6040516105809190614efe565b60405180910390f35b34801561059557600080fd5b5061059e6116bc565b6040516105ab9190614c30565b60405180910390f35b3480156105c057600080fd5b506105c96116e0565b6040516105d69190614c66565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906146cc565b6116f3565b005b34801561061457600080fd5b5061062f600480360381019061062a91906146cc565b6119a7565b60405161063c9190614c66565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906146cc565b6119fd565b6040516106799190614c66565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a491906146cc565b611a53565b6040516106b69190614efe565b60405180910390f35b3480156106cb57600080fd5b506106d4611b3e565b005b3480156106e257600080fd5b506106eb611c91565b6040516106f89190614efe565b60405180910390f35b34801561070d57600080fd5b50610728600480360381019061072391906146cc565b611c97565b6040516107359190614c66565b60405180910390f35b34801561074a57600080fd5b50610753611ced565b6040516107609190614c30565b60405180910390f35b34801561077557600080fd5b5061077e611d16565b60405161078b9190614c9c565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b691906147b9565b611da8565b6040516107c89190614c66565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f391906147b9565b611e75565b6040516108059190614c66565b60405180910390f35b34801561081a57600080fd5b50610835600480360381019061083091906147f9565b611e93565b005b34801561084357600080fd5b5061084c611f7c565b005b34801561085a57600080fd5b50610863612035565b6040516108709190614c4b565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190614826565b61205b565b005b3480156108ae57600080fd5b506108c960048036038101906108c49190614726565b612121565b6040516108d69190614efe565b60405180910390f35b3480156108eb57600080fd5b50610906600480360381019061090191906146cc565b6121a8565b005b34801561091457600080fd5b5061092f600480360381019061092a91906146cc565b612298565b005b6109396124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90614dde565b60405180910390fd5b8060118190555050565b6060600e80546109df90615203565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0b90615203565b8015610a585780601f10610a2d57610100808354040283529160200191610a58565b820191906000526020600020905b815481529060010190602001808311610a3b57829003601f168201915b5050505050905090565b6000610a76610a6f6124fb565b8484612503565b6001905092915050565b610a886124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90614dde565b60405180910390fd5b8060138190555050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b60135481565b6000610b6a8484846126ce565b610c2b84610b766124fb565b610c268560405180606001604052806028815260200161582c60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bdc6124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6d9092919063ffffffff16565b612503565b600190509392505050565b6000600c54821115610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490614cde565b60405180910390fd5b6000610c87612dd1565b9050610c9c8184612dfc90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b610cc36124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790614dde565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390614e1e565b60405180910390fd5b60005b600980549050811015610fc1578173ffffffffffffffffffffffffffffffffffffffff1660098281548110610e1757610e1661533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fae5760096001600980549050610e7291906150ed565b81548110610e8357610e8261533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110610ec257610ec161533a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480610f7457610f7361530b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fc1565b8080610fb990615235565b915050610ddf565b5050565b610fcd6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190614dde565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90614d3e565b60405180910390fd5b60005b600780549050811015611310578173ffffffffffffffffffffffffffffffffffffffff16600782815481106111215761112061533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156112fd576007600160078054905061117c91906150ed565b8154811061118d5761118c61533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600782815481106111cc576111cb61533a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060078054806112c3576112c261530b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611310565b808061130890615235565b9150506110e9565b5050565b60006113bd6113216124fb565b846113b885600460006113326124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b612503565b6001905092915050565b60115481565b60006113d76124fb565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d90614ebe565b60405180910390fd5b600061147183612ea4565b505050505090506114ca81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061152281600c54612f0090919063ffffffff16565b600c8190555061153d83600d54612e4690919063ffffffff16565b600d81905550505050565b6115506124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614dde565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b5483111561167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690614d7e565b60405180910390fd5b8161169f57600061168f84612ea4565b50505050509050809150506116b6565b60006116aa84612ea4565b50505050915050809150505b92915050565b7f0000000000000000000000007e666dec650bc348a9457752f6bf697cec578b0181565b601660019054906101000a900460ff1681565b6116fb6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90614dde565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90614d3e565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156118e9576118a5600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c36565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aee57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b39565b611b36600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c36565b90505b919050565b611b466124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90614dde565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60175481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611d2590615203565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5190615203565b8015611d9e5780601f10611d7357610100808354040283529160200191611d9e565b820191906000526020600020905b815481529060010190602001808311611d8157829003601f168201915b5050505050905090565b6000611e6b611db56124fb565b84611e66856040518060600160405280602581526020016158546025913960046000611ddf6124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6d9092919063ffffffff16565b612503565b6001905092915050565b6000611e89611e826124fb565b84846126ce565b6001905092915050565b611e9b6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90614dde565b60405180910390fd5b80601660016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611f719190614c66565b60405180910390a150565b611f846124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200890614dde565b60405180910390fd5b6001601660026101000a81548160ff02191690831515021790555042601581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120636124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790614dde565b60405180910390fd5b612118606461210a83600b54612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b60178190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121b06124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614dde565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122a06124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614dde565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790614e3e565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614d5e565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614e7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da90614cfe565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126c19190614efe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561273e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273590614e5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a590614cbe565b60405180910390fd5b600081116127f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e890614dfe565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614ede565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290290614ede565b60405180910390fd5b612913611ced565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129815750612951611ced565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129cc576017548111156129cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c290614d9e565b60405180910390fd5b5b60006129d730611a53565b905060175481106129e85760175490505b7f0000000000000000000000007e666dec650bc348a9457752f6bf697cec578b0173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a8f57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0057601660029054906101000a900460ff16612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3090614e9e565b60405180910390fd5b601554421415612bff576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b60006018548210159050808015612c245750601660009054906101000a900460ff16155b8015612c7c57507f0000000000000000000000007e666dec650bc348a9457752f6bf697cec578b0173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c945750601660019054906101000a900460ff165b15612ca8576018549150612ca782612fc5565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d4f5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d5957600090505b612d658686868461310a565b505050505050565b6000838311158290612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9190614c9c565b60405180910390fd5b5060008385612dc491906150ed565b9050809150509392505050565b6000806000612dde61341b565b91509150612df58183612dfc90919063ffffffff16565b9250505090565b6000612e3e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136ce565b905092915050565b6000808284612e55919061500c565b905083811015612e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9190614d1e565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ebb8a613731565b9250925092506000806000612ed98d8686612ed4612dd1565b61378b565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612f4283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d6d565b905092915050565b600080831415612f5d5760009050612fbf565b60008284612f6b9190615093565b9050828482612f7a9190615062565b14612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb190614dbe565b60405180910390fd5b809150505b92915050565b6001601660006101000a81548160ff02191690831515021790555060008190506000479050612ff382613814565b60006130088247612f0090919063ffffffff16565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486838260405161303b929190614f73565b60405180910390a16000819050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156130b0573d6000803e3d6000fd5b507fcece836790e718d3e66cd1b6eaa6005ec1c1b021f2ab161c416ff6b300f6668e816040516130e09190614efe565b60405180910390a1505050506000601660006101000a81548160ff02191690831515021790555050565b8061311857613117613a60565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bb5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d0576131cb848484613aa3565b613407565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132735750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561328857613283848484613d03565b613406565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561332c5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133415761333c848484613f63565b613405565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133e35750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133f8576133f384848461412e565b613404565b613403848484613f63565b5b5b5b5b8061341557613414614423565b5b50505050565b6000806000600c5490506000600b54905060005b600780549050811015613691578260026000600784815481106134555761345461533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061354357508160036000600784815481106134db576134da61533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561355a57600c54600b54945094505050506136ca565b6135ea60026000600784815481106135755761357461533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f0090919063ffffffff16565b925061367c60036000600784815481106136075761360661533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f0090919063ffffffff16565b9150808061368990615235565b91505061342f565b506136a9600b54600c54612dfc90919063ffffffff16565b8210156136c157600c54600b549350935050506136ca565b81819350935050505b9091565b60008083118290613715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370c9190614c9c565b60405180910390fd5b50600083856137249190615062565b9050809150509392505050565b60008060008061374085614437565b9050600061374d86614468565b9050600061377682613768858a612f0090919063ffffffff16565b612f0090919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806137a48589612f4a90919063ffffffff16565b905060006137bb8689612f4a90919063ffffffff16565b905060006137d28789612f4a90919063ffffffff16565b905060006137fb826137ed8587612f0090919063ffffffff16565b612f0090919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561383157613830615369565b5b60405190808252806020026020018201604052801561385f5781602001602082028036833780820191505090505b50905030816000815181106138775761387661533a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561391757600080fd5b505afa15801561392b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394f91906146f9565b816001815181106139635761396261533a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139c8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612503565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a2a959493929190614f19565b600060405180830381600087803b158015613a4457600080fd5b505af1158015613a58573d6000803e3d6000fd5b505050505050565b6000601154148015613a7457506000601354145b15613a7e57613aa1565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613ab587612ea4565b955095509550955095509550613b1387600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ba886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c3d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8981614499565b613c93848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613cf09190614efe565b60405180910390a3505050505050505050565b600080600080600080613d1587612ea4565b955095509550955095509550613d7386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ee981614499565b613ef3848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613f509190614efe565b60405180910390a3505050505050505050565b600080600080600080613f7587612ea4565b955095509550955095509550613fd386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061406885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b481614499565b6140be848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161411b9190614efe565b60405180910390a3505050505050505050565b60008060008060008061414087612ea4565b95509550955095509550955061419e87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142c883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a981614499565b6143b3848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144109190614efe565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b6000614461606461445360115485612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b9050919050565b6000614492606461448460135485612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b9050919050565b60006144a3612dd1565b905060006144ba8284612f4a90919063ffffffff16565b905061450e81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614639576145f583600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61465382600c54612f0090919063ffffffff16565b600c8190555061466e81600d54612e4690919063ffffffff16565b600d819055505050565b600081359050614687816157e6565b92915050565b60008151905061469c816157e6565b92915050565b6000813590506146b1816157fd565b92915050565b6000813590506146c681615814565b92915050565b6000602082840312156146e2576146e1615398565b5b60006146f084828501614678565b91505092915050565b60006020828403121561470f5761470e615398565b5b600061471d8482850161468d565b91505092915050565b6000806040838503121561473d5761473c615398565b5b600061474b85828601614678565b925050602061475c85828601614678565b9150509250929050565b60008060006060848603121561477f5761477e615398565b5b600061478d86828701614678565b935050602061479e86828701614678565b92505060406147af868287016146b7565b9150509250925092565b600080604083850312156147d0576147cf615398565b5b60006147de85828601614678565b92505060206147ef858286016146b7565b9150509250929050565b60006020828403121561480f5761480e615398565b5b600061481d848285016146a2565b91505092915050565b60006020828403121561483c5761483b615398565b5b600061484a848285016146b7565b91505092915050565b6000806040838503121561486a57614869615398565b5b6000614878858286016146b7565b9250506020614889858286016146a2565b9150509250929050565b600061489f83836148ba565b60208301905092915050565b6148b481615133565b82525050565b6148c381615121565b82525050565b6148d281615121565b82525050565b60006148e382614fc7565b6148ed8185614fea565b93506148f883614fb7565b8060005b838110156149295781516149108882614893565b975061491b83614fdd565b9250506001810190506148fc565b5085935050505092915050565b61493f81615145565b82525050565b61494e81615188565b82525050565b61495d8161519a565b82525050565b600061496e82614fd2565b6149788185614ffb565b93506149888185602086016151d0565b6149918161539d565b840191505092915050565b60006149a9602383614ffb565b91506149b4826153ae565b604082019050919050565b60006149cc602a83614ffb565b91506149d7826153fd565b604082019050919050565b60006149ef602283614ffb565b91506149fa8261544c565b604082019050919050565b6000614a12601b83614ffb565b9150614a1d8261549b565b602082019050919050565b6000614a35601b83614ffb565b9150614a40826154c4565b602082019050919050565b6000614a58601e83614ffb565b9150614a63826154ed565b602082019050919050565b6000614a7b601f83614ffb565b9150614a8682615516565b602082019050919050565b6000614a9e602883614ffb565b9150614aa98261553f565b604082019050919050565b6000614ac1602183614ffb565b9150614acc8261558e565b604082019050919050565b6000614ae4602083614ffb565b9150614aef826155dd565b602082019050919050565b6000614b07602983614ffb565b9150614b1282615606565b604082019050919050565b6000614b2a601a83614ffb565b9150614b3582615655565b602082019050919050565b6000614b4d601c83614ffb565b9150614b588261567e565b602082019050919050565b6000614b70602583614ffb565b9150614b7b826156a7565b604082019050919050565b6000614b93602483614ffb565b9150614b9e826156f6565b604082019050919050565b6000614bb6601883614ffb565b9150614bc182615745565b602082019050919050565b6000614bd9602c83614ffb565b9150614be48261576e565b604082019050919050565b6000614bfc601783614ffb565b9150614c07826157bd565b602082019050919050565b614c1b81615171565b82525050565b614c2a8161517b565b82525050565b6000602082019050614c4560008301846148c9565b92915050565b6000602082019050614c6060008301846148ab565b92915050565b6000602082019050614c7b6000830184614936565b92915050565b6000602082019050614c966000830184614945565b92915050565b60006020820190508181036000830152614cb68184614963565b905092915050565b60006020820190508181036000830152614cd78161499c565b9050919050565b60006020820190508181036000830152614cf7816149bf565b9050919050565b60006020820190508181036000830152614d17816149e2565b9050919050565b60006020820190508181036000830152614d3781614a05565b9050919050565b60006020820190508181036000830152614d5781614a28565b9050919050565b60006020820190508181036000830152614d7781614a4b565b9050919050565b60006020820190508181036000830152614d9781614a6e565b9050919050565b60006020820190508181036000830152614db781614a91565b9050919050565b60006020820190508181036000830152614dd781614ab4565b9050919050565b60006020820190508181036000830152614df781614ad7565b9050919050565b60006020820190508181036000830152614e1781614afa565b9050919050565b60006020820190508181036000830152614e3781614b1d565b9050919050565b60006020820190508181036000830152614e5781614b40565b9050919050565b60006020820190508181036000830152614e7781614b63565b9050919050565b60006020820190508181036000830152614e9781614b86565b9050919050565b60006020820190508181036000830152614eb781614ba9565b9050919050565b60006020820190508181036000830152614ed781614bcc565b9050919050565b60006020820190508181036000830152614ef781614bef565b9050919050565b6000602082019050614f136000830184614c12565b92915050565b600060a082019050614f2e6000830188614c12565b614f3b6020830187614954565b8181036040830152614f4d81866148d8565b9050614f5c60608301856148c9565b614f696080830184614c12565b9695505050505050565b6000604082019050614f886000830185614c12565b614f956020830184614c12565b9392505050565b6000602082019050614fb16000830184614c21565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061501782615171565b915061502283615171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150575761505661527e565b5b828201905092915050565b600061506d82615171565b915061507883615171565b925082615088576150876152ad565b5b828204905092915050565b600061509e82615171565b91506150a983615171565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150e2576150e161527e565b5b828202905092915050565b60006150f882615171565b915061510383615171565b9250828210156151165761511561527e565b5b828203905092915050565b600061512c82615151565b9050919050565b600061513e82615151565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615193826151ac565b9050919050565b60006151a582615171565b9050919050565b60006151b7826151be565b9050919050565b60006151c982615151565b9050919050565b60005b838110156151ee5780820151818401526020810190506151d3565b838111156151fd576000848401525b50505050565b6000600282049050600182168061521b57607f821691505b6020821081141561522f5761522e6152dc565b5b50919050565b600061524082615171565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152735761527261527e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920626c61636b6c69737465640000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000600082015250565b7f57652063616e206e6f7420626c61636b6c69737420556e697377617000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b6157ef81615121565b81146157fa57600080fd5b50565b61580681615145565b811461581157600080fd5b50565b61581d81615171565b811461582857600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220587d6439448c301196b4b0cd03dba96e397e684d496cb1f080cd3129264bd57c64736f6c63430008070033

Deployed Bytecode Sourcemap

13011:19523:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20966:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15799:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16711:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20836:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17832:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14168:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16076:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14040:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16880:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18756:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15985:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32051:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19472:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17201:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13957:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17927:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20599:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18312:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14226:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14301:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19017:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24678:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31562:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16179:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9640:148;;;;;;;;;;;;;:::i;:::-;;14381:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17704:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9426:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15890:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17427:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16385:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21240:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15673:118;;;;;;;;;;;;;:::i;:::-;;13550:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21070:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16560:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20718:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31683:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20966:96;9563:12;:10;:12::i;:::-;9553:22;;:6;;;;;;;;;;:22;;;9545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21048:6:::1;21038:7;:16;;;;20966:96:::0;:::o;15799:83::-;15836:13;15869:5;15862:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15799:83;:::o;16711:161::-;16786:4;16803:39;16812:12;:10;:12::i;:::-;16826:7;16835:6;16803:8;:39::i;:::-;16860:4;16853:11;;16711:161;;;;:::o;20836:122::-;9563:12;:10;:12::i;:::-;9553:22;;:6;;;;;;;;;;:22;;;9545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20938:12:::1;20922:13;:28;;;;20836:122:::0;:::o;17832:87::-;17874:7;17901:10;;17894:17;;17832:87;:::o;14168:51::-;;;:::o;16076:95::-;16129:7;16156;;16149:14;;16076:95;:::o;14040:32::-;;;;:::o;16880:313::-;16978:4;16995:36;17005:6;17013:9;17024:6;16995:9;:36::i;:::-;17042:121;17051:6;17059:12;:10;:12::i;:::-;17073:89;17111:6;17073:89;;;;;;;;;;;;;;;;;:11;:19;17085:6;17073:19;;;;;;;;;;;;;;;:33;17093:12;:10;:12::i;:::-;17073:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;17042:8;:121::i;:::-;17181:4;17174:11;;16880:313;;;;;:::o;18756:253::-;18822:7;18861;;18850;:18;;18842:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18926:19;18949:10;:8;:10::i;:::-;18926:33;;18977:24;18989:11;18977:7;:11;;:24;;;;:::i;:::-;18970:31;;;18756:253;;;:::o;15985:83::-;16026:5;16051:9;;;;;;;;;;;16044:16;;15985:83;:::o;32051:480::-;9563:12;:10;:12::i;:::-;9553:22;;:6;;;;;;;;;;:22;;;9545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32130:9:::1;:18;32140:7;32130:18;;;;;;;;;;;;;;;;;;;;;;;;;32122:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32195:9;32190:334;32214:17;:24;;;;32210:1;:28;32190:334;;;32288:7;32264:31;;:17;32282:1;32264:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:31;;;32260:253;;;32339:17;32384:1;32357:17;:24;;;;:28;;;;:::i;:::-;32339:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32316:17;32334:1;32316:20;;;;;;;;:::i;:::-;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;32426:5;32405:9;:18;32415:7;32405:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;32450:17;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;32492:5;;32260:253;32240:3;;;;;:::i;:::-;;;;32190:334;;;;32051:480:::0;:::o;19472:479::-;9563:12;:10;:12::i;:::-;9553:22;;:6;;;;;;;;;;:22;;;9545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19554:11:::1;:20;19566:7;19554:20;;;;;;;;;;;;;;;;;;;;;;;;;19546:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19622:9;19617:327;19641:9;:16;;;;19637:1;:20;19617:327;;;19699:7;19683:23;;:9;19693:1;19683:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;19679:254;;;19742:9;19771:1;19752:9;:16;;;;:20;;;;:::i;:::-;19742:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19727:9;19737:1;19727:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;19811:1;19792:7;:16;19800:7;19792:16;;;;;;;;;;;;;;;:20;;;;19854:5;19831:11;:20;19843:7;19831:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19878:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19912:5;;19679:254;19659:3;;;;;:::i;:::-;;;;19617:327;;;;19472:479:::0;:::o;17201:218::-;17289:4;17306:83;17315:12;:10;:12::i;:::-;17329:7;17338:50;17377:10;17338:11;:25;17350:12;:10;:12::i;:::-;17338:25;;;;;;;;;;;;;;;:34;17364:7;17338:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;17306:8;:83::i;:::-;17407:4;17400:11;;17201:218;;;;:::o;13957:26::-;;;;:::o;17927:377::-;17979:14;17996:12;:10;:12::i;:::-;17979:29;;18028:11;:19;18040:6;18028:19;;;;;;;;;;;;;;;;;;;;;;;;;18027:20;18019:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;18108:15;18132:19;18143:7;18132:10;:19::i;:::-;18107:44;;;;;;;18180:28;18200:7;18180;:15;18188:6;18180:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;18162:7;:15;18170:6;18162:15;;;;;;;;;;;;;;;:46;;;;18229:20;18241:7;18229;;:11;;:20;;;;:::i;:::-;18219:7;:30;;;;18273:23;18288:7;18273:10;;:14;;:23;;;;:::i;:::-;18260:10;:36;;;;17968:336;;17927:377;:::o;20599:111::-;9563:12;:10;:12::i;:::-;9553:22;;:6;;;;;;;;;;:22;;;9545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20698:4:::1;20668:18;:27;20687:7;20668:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20599:111:::0;:::o;18312:436::-;18402:7;18441;;18430;:18;;18422:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18500:17;18495:246;;18535:15;18559:19;18570:7;18559:10;:19::i;:::-;18534:44;;;;;;;18600:7;18593:14;;;;;18495:246;18642:23;18673:19;18684:7;18673:10;:19::i;:::-;18640:52;;;;;;;18714:15;18707:22;;;18312:436;;;;;:::o;14226:38::-;;;:::o;14301:40::-;;;;;;;;;;;;;:::o;19017:447::-;9563:12;:10;:12::i;:::-;9553:22;;:6;;;;;;;;;;:22;;;9545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19214:11:::1;:20;19226:7;19214:20;;;;;;;;;;;;;;;;;;;;;;;;;19213:21;19205:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;19299:1;19280:7;:16;19288:7;19280:16;;;;;;;;;;;;;;;;:20;19277:108;;;19336:37;19356:7;:16;19364:7;19356:16;;;;;;;;;;;;;;;;19336:19;:37::i;:::-;19317:7;:16;19325:7;19317:16;;;;;;;;;;;;;;;:56;;;;19277:108;19418:4;19395:11;:20;19407:7;19395:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;19433:9;19448:7;19433:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19017:447:::0;:::o;24678:123::-;24742:4;24766:18;:27;24785:7;24766:27;;;;;;;;;;;;;;;;;;;;;;;;;24759:34;;24678:123;;;:::o;31562:113::-;31625:4;31649:9;:18;31659:7;31649:18;;;;;;;;;;;;;;;;;;;;;;;;;31642:25;;31562:113;;;:::o;16179:198::-;16245:7;16269:11;:20;16281:7;16269:20;;;;;;;;;;;;;;;;;;;;;;;;;16265:49;;;16298:7;:16;16306:7;16298:16;;;;;;;;;;;;;;;;16291:23;;;;16265:49;16332:37;16352:7;:16;16360:7;16352:16;;;;;;;;;;;;;;;;16332:19;:37::i;:::-;16325:44;;16179:198;;;;:::o;9640:148::-;9563:12;:10;:12::i;:::-;9553:22;;:6;;;;;;;;;;:22;;;9545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9747:1:::1;9710:40;;9731:6;::::0;::::1;;;;;;;;9710:40;;;;;;;;;;;;9778:1;9761:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9640:148::o:0;14381:48::-;;;;:::o;17704:120::-;17772:4;17796:11;:20;17808:7;17796:20;;;;;;;;;;;;;;;;;;;;;;;;;17789:27;;17704:120;;;:::o;9426:79::-;9464:7;9491:6;;;;;;;;;;;9484:13;;9426:79;:::o;15890:87::-;15929:13;15962:7;15955:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15890:87;:::o;17427:269::-;17520:4;17537:129;17546:12;:10;:12::i;:::-;17560:7;17569:96;17608:15;17569:96;;;;;;;;;;;;;;;;;:11;:25;17581:12;:10;:12::i;:::-;17569:25;;;;;;;;;;;;;;;:34;17595:7;17569:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;17537:8;:129::i;:::-;17684:4;17677:11;;17427:269;;;;:::o;16385:167::-;16463:4;16480:42;16490:12;:10;:12::i;:::-;16504:9;16515:6;16480:9;:42::i;:::-;16540:4;16533:11;;16385:167;;;;:::o;21240:171::-;9563:12;:10;:12::i;:::-;9553:22;;:6;;;;;;;;;;:22;;;9545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21341:8:::1;21317:21;;:32;;;;;;;;;;;;;;;;;;21365:38;21394:8;21365:38;;;;;;:::i;:::-;;;;;;;;21240:171:::0;:::o;15673:118::-;9563:12;:10;:12::i;:::-;9553:22;;:6;;;;;;;;;;:22;;;9545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15740:4:::1;15726:11;;:18;;;;;;;;;;;;;;;;;;15768:15;15755:10;:28;;;;15673:118::o:0;13550:94::-;;;;;;;;;;;;;:::o;21070:162::-;9563:12;:10;:12::i;:::-;9553:22;;:6;;;;;;;;;;:22;;;9545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21164:60:::1;21208:5;21164:25;21176:12;21164:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;21149:12;:75;;;;21070:162:::0;:::o;16560:143::-;16641:7;16668:11;:18;16680:5;16668:18;;;;;;;;;;;;;;;:27;16687:7;16668:27;;;;;;;;;;;;;;;;16661:34;;16560:143;;;;:::o;20718:110::-;9563:12;:10;:12::i;:::-;9553:22;;:6;;;;;;;;;;:22;;;9545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20815:5:::1;20785:18;:27;20804:7;20785:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;20718:110:::0;:::o;31683:360::-;9563:12;:10;:12::i;:::-;9553:22;;:6;;;;;;;;;;:22;;;9545:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31786:42:::1;31775:53;;:7;:53;;;;31753:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;31904:9;:18;31914:7;31904:18;;;;;;;;;;;;;;;;;;;;;;;;;31903:19;31895:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31989:4;31968:9;:18;31978:7;31968:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;32004:17;32027:7;32004:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31683:360:::0;:::o;2696:98::-;2749:7;2776:10;2769:17;;2696:98;:::o;24809:337::-;24919:1;24902:19;;:5;:19;;;;24894:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25000:1;24981:21;;:7;:21;;;;24973:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25084:6;25054:11;:18;25066:5;25054:18;;;;;;;;;;;;;;;:27;25073:7;25054:27;;;;;;;;;;;;;;;:36;;;;25122:7;25106:32;;25115:5;25106:32;;;25131:6;25106:32;;;;;;:::i;:::-;;;;;;;;24809:337;;;:::o;25154:2169::-;25292:1;25276:18;;:4;:18;;;;25268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25369:1;25355:16;;:2;:16;;;;25347:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25439:1;25430:6;:10;25422:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25506:9;:13;25516:2;25506:13;;;;;;;;;;;;;;;;;;;;;;;;;25505:14;25497:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;25567:9;:21;25577:10;25567:21;;;;;;;;;;;;;;;;;;;;;;;;;25566:22;25558:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25638:7;:5;:7::i;:::-;25630:15;;:4;:15;;;;:32;;;;;25655:7;:5;:7::i;:::-;25649:13;;:2;:13;;;;25630:32;25627:125;;;25695:12;;25685:6;:22;;25677:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25627:125;26030:28;26061:24;26079:4;26061:9;:24::i;:::-;26030:55;;26125:12;;26101:20;:36;26098:112;;26186:12;;26163:35;;26098:112;26250:13;26242:21;;:4;:21;;;:55;;;;;26281:15;26267:30;;:2;:30;;;;26242:55;:82;;;;;26302:18;:22;26321:2;26302:22;;;;;;;;;;;;;;;;;;;;;;;;;26301:23;26242:82;26238:337;;;26349:11;;;;;;;;;;;26341:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26452:10;;26433:15;:29;26429:135;;;26499:4;26483:9;:13;26493:2;26483:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;26522:17;26545:2;26522:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26429:135;26238:337;26587:24;26638:22;;26614:20;:46;;26587:73;;26689:19;:40;;;;;26713:16;;;;;;;;;;;26712:17;26689:40;:65;;;;;26741:13;26733:21;;:4;:21;;;;26689:65;:90;;;;;26758:21;;;;;;;;;;;26689:90;26671:243;;;26829:22;;26806:45;;26866:36;26881:20;26866:14;:36::i;:::-;26671:243;26987:12;27002:4;26987:19;;27106:18;:24;27125:4;27106:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;27134:18;:22;27153:2;27134:22;;;;;;;;;;;;;;;;;;;;;;;;;27106:50;27103:96;;;27182:5;27172:15;;27103:96;27277:38;27292:4;27297:2;27300:6;27307:7;27277:14;:38::i;:::-;25257:2066;;;25154:2169;;;:::o;1367:190::-;1453:7;1486:1;1481;:6;;1489:12;1473:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1513:9;1529:1;1525;:5;;;;:::i;:::-;1513:17;;1548:1;1541:8;;;1367:190;;;;;:::o;22870:163::-;22911:7;22932:15;22949;22968:19;:17;:19::i;:::-;22931:56;;;;23005:20;23017:7;23005;:11;;:20;;;;:::i;:::-;22998:27;;;;22870:163;:::o;1819:132::-;1877:7;1904:39;1908:1;1911;1904:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1897:46;;1819:132;;;;:::o;1036:179::-;1094:7;1114:9;1130:1;1126;:5;;;;:::i;:::-;1114:17;;1155:1;1150;:6;;1142:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1206:1;1199:8;;;1036:179;;;;:::o;21668:419::-;21727:7;21736;21745;21754;21763;21772;21793:23;21818:12;21832:18;21854:20;21866:7;21854:11;:20::i;:::-;21792:82;;;;;;21886:15;21903:23;21928:12;21944:50;21956:7;21965:4;21971:10;21983;:8;:10::i;:::-;21944:11;:50::i;:::-;21885:109;;;;;;22013:7;22022:15;22039:4;22045:15;22062:4;22068:10;22005:74;;;;;;;;;;;;;;;;;;21668:419;;;;;;;:::o;1223:136::-;1281:7;1308:43;1312:1;1315;1308:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1301:50;;1223:136;;;;:::o;1565:246::-;1623:7;1652:1;1647;:6;1643:47;;;1677:1;1670:8;;;;1643:47;1700:9;1716:1;1712;:5;;;;:::i;:::-;1700:17;;1745:1;1740;1736;:5;;;;:::i;:::-;:10;1728:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1802:1;1795:8;;;1565:246;;;;;:::o;27331:1063::-;14879:4;14860:16;;:23;;;;;;;;;;;;;;;;;;27426:29:::1;27458:20;27426:52;;27756:22;27781:21;27756:46;;27847:39;27864:21;27847:16;:39::i;:::-;27943:18;27964:41;27990:14;27964:21;:25;;:41;;;;:::i;:::-;27943:62;;28023:49;28038:21;28061:10;28023:49;;;;;;;:::i;:::-;;;;;;;;28168:30;28201:10;28168:43;;28277:17;;;;;;;;;;;:26;;:50;28304:22;28277:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28343:43;28363:22;28343:43;;;;;;:::i;:::-;;;;;;;;27405:989;;;;14925:5:::0;14906:16;;:24;;;;;;;;;;;;;;;;;;27331:1063;:::o;29072:818::-;29183:7;29179:40;;29205:14;:12;:14::i;:::-;29179:40;29236:11;:19;29248:6;29236:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;29260:11;:22;29272:9;29260:22;;;;;;;;;;;;;;;;;;;;;;;;;29259:23;29236:46;29232:597;;;29299:48;29321:6;29329:9;29340:6;29299:21;:48::i;:::-;29232:597;;;29370:11;:19;29382:6;29370:19;;;;;;;;;;;;;;;;;;;;;;;;;29369:20;:46;;;;;29393:11;:22;29405:9;29393:22;;;;;;;;;;;;;;;;;;;;;;;;;29369:46;29365:464;;;29432:46;29452:6;29460:9;29471:6;29432:19;:46::i;:::-;29365:464;;;29501:11;:19;29513:6;29501:19;;;;;;;;;;;;;;;;;;;;;;;;;29500:20;:47;;;;;29525:11;:22;29537:9;29525:22;;;;;;;;;;;;;;;;;;;;;;;;;29524:23;29500:47;29496:333;;;29564:44;29582:6;29590:9;29601:6;29564:17;:44::i;:::-;29496:333;;;29630:11;:19;29642:6;29630:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;29653:11;:22;29665:9;29653:22;;;;;;;;;;;;;;;;;;;;;;;;;29630:45;29626:203;;;29692:48;29714:6;29722:9;29733:6;29692:21;:48::i;:::-;29626:203;;;29773:44;29791:6;29799:9;29810:6;29773:17;:44::i;:::-;29626:203;29496:333;29365:464;29232:597;29845:7;29841:41;;29867:15;:13;:15::i;:::-;29841:41;29072:818;;;;:::o;23041:555::-;23091:7;23100;23120:15;23138:7;;23120:25;;23156:15;23174:7;;23156:25;;23197:9;23192:289;23216:9;:16;;;;23212:1;:20;23192:289;;;23282:7;23258;:21;23266:9;23276:1;23266:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23258:21;;;;;;;;;;;;;;;;:31;:66;;;;23317:7;23293;:21;23301:9;23311:1;23301:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23293:21;;;;;;;;;;;;;;;;:31;23258:66;23254:97;;;23334:7;;23343;;23326:25;;;;;;;;;23254:97;23376:34;23388:7;:21;23396:9;23406:1;23396:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23388:21;;;;;;;;;;;;;;;;23376:7;:11;;:34;;;;:::i;:::-;23366:44;;23435:34;23447:7;:21;23455:9;23465:1;23455:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23447:21;;;;;;;;;;;;;;;;23435:7;:11;;:34;;;;:::i;:::-;23425:44;;23234:3;;;;;:::i;:::-;;;;23192:289;;;;23505:20;23517:7;;23505;;:11;;:20;;;;:::i;:::-;23495:7;:30;23491:61;;;23535:7;;23544;;23527:25;;;;;;;;23491:61;23571:7;23580;23563:25;;;;;;23041:555;;;:::o;1959:189::-;2045:7;2077:1;2073;:5;2080:12;2065:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2104:9;2120:1;2116;:5;;;;:::i;:::-;2104:17;;2139:1;2132:8;;;1959:189;;;;;:::o;22095:330::-;22155:7;22164;22173;22193:12;22208:24;22224:7;22208:15;:24::i;:::-;22193:39;;22243:18;22264:30;22286:7;22264:21;:30::i;:::-;22243:51;;22305:23;22331:33;22353:10;22331:17;22343:4;22331:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;22305:59;;22383:15;22400:4;22406:10;22375:42;;;;;;;;;22095:330;;;;;:::o;22433:429::-;22548:7;22557;22566;22586:15;22604:24;22616:11;22604:7;:11;;:24;;;;:::i;:::-;22586:42;;22639:12;22654:21;22663:11;22654:4;:8;;:21;;;;:::i;:::-;22639:36;;22686:18;22707:27;22722:11;22707:10;:14;;:27;;;;:::i;:::-;22686:48;;22745:23;22771:33;22793:10;22771:17;22783:4;22771:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;22745:59;;22823:7;22832:15;22849:4;22815:39;;;;;;;;;;22433:429;;;;;;;;:::o;28402:589::-;28528:21;28566:1;28552:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28528:40;;28597:4;28579;28584:1;28579:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28623:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28613:4;28618:1;28613:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28658:62;28675:4;28690:15;28708:11;28658:8;:62::i;:::-;28759:15;:66;;;28840:11;28866:1;28910:4;28937;28957:15;28759:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28457:534;28402:589;:::o;24303:234::-;24360:1;24349:7;;:12;:34;;;;;24382:1;24365:13;;:18;24349:34;24346:46;;;24385:7;;24346:46;24422:7;;24404:15;:25;;;;24464:13;;24440:21;:37;;;;24500:1;24490:7;:11;;;;24528:1;24512:13;:17;;;;24303:234;:::o;30991:563::-;31094:15;31111:23;31136:12;31150:23;31175:12;31189:18;31211:19;31222:7;31211:10;:19::i;:::-;31093:137;;;;;;;;;;;;31259:28;31279:7;31259;:15;31267:6;31259:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31241:7;:15;31249:6;31241:15;;;;;;;;;;;;;;;:46;;;;31316:28;31336:7;31316;:15;31324:6;31316:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31298:7;:15;31306:6;31298:15;;;;;;;;;;;;;;;:46;;;;31376:39;31399:15;31376:7;:18;31384:9;31376:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31355:7;:18;31363:9;31355:18;;;;;;;;;;;;;;;:60;;;;31426:26;31441:10;31426:14;:26::i;:::-;31463:23;31475:4;31481;31463:11;:23::i;:::-;31519:9;31502:44;;31511:6;31502:44;;;31530:15;31502:44;;;;;;:::i;:::-;;;;;;;;31082:472;;;;;;30991:563;;;:::o;30408:575::-;30509:15;30526:23;30551:12;30565:23;30590:12;30604:18;30626:19;30637:7;30626:10;:19::i;:::-;30508:137;;;;;;;;;;;;30674:28;30694:7;30674;:15;30682:6;30674:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30656:7;:15;30664:6;30656:15;;;;;;;;;;;;;;;:46;;;;30734:39;30757:15;30734:7;:18;30742:9;30734:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30713:7;:18;30721:9;30713:18;;;;;;;;;;;;;;;:60;;;;30805:39;30828:15;30805:7;:18;30813:9;30805:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30784:7;:18;30792:9;30784:18;;;;;;;;;;;;;;;:60;;;;30855:26;30870:10;30855:14;:26::i;:::-;30892:23;30904:4;30910;30892:11;:23::i;:::-;30948:9;30931:44;;30940:6;30931:44;;;30959:15;30931:44;;;;;;:::i;:::-;;;;;;;;30497:486;;;;;;30408:575;;;:::o;29898:502::-;29997:15;30014:23;30039:12;30053:23;30078:12;30092:18;30114:19;30125:7;30114:10;:19::i;:::-;29996:137;;;;;;;;;;;;30162:28;30182:7;30162;:15;30170:6;30162:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30144:7;:15;30152:6;30144:15;;;;;;;;;;;;;;;:46;;;;30222:39;30245:15;30222:7;:18;30230:9;30222:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30201:7;:18;30209:9;30201:18;;;;;;;;;;;;;;;:60;;;;30272:26;30287:10;30272:14;:26::i;:::-;30309:23;30321:4;30327;30309:11;:23::i;:::-;30365:9;30348:44;;30357:6;30348:44;;;30376:15;30348:44;;;;;;:::i;:::-;;;;;;;;29985:415;;;;;;29898:502;;;:::o;19957:634::-;20060:15;20077:23;20102:12;20116:23;20141:12;20155:18;20177:19;20188:7;20177:10;:19::i;:::-;20059:137;;;;;;;;;;;;20225:28;20245:7;20225;:15;20233:6;20225:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20207:7;:15;20215:6;20207:15;;;;;;;;;;;;;;;:46;;;;20282:28;20302:7;20282;:15;20290:6;20282:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20264:7;:15;20272:6;20264:15;;;;;;;;;;;;;;;:46;;;;20342:39;20365:15;20342:7;:18;20350:9;20342:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;20321:7;:18;20329:9;20321:18;;;;;;;;;;;;;;;:60;;;;20413:39;20436:15;20413:7;:18;20421:9;20413:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;20392:7;:18;20400:9;20392:18;;;;;;;;;;;;;;;:60;;;;20463:26;20478:10;20463:14;:26::i;:::-;20500:23;20512:4;20518;20500:11;:23::i;:::-;20556:9;20539:44;;20548:6;20539:44;;;20567:15;20539:44;;;;;;:::i;:::-;;;;;;;;20048:543;;;;;;19957:634;;;:::o;24545:125::-;24599:15;;24589:7;:25;;;;24641:21;;24625:13;:37;;;;24545:125::o;23967:154::-;24031:7;24058:55;24097:5;24058:20;24070:7;;24058;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;24051:62;;23967:154;;;:::o;24129:166::-;24199:7;24226:61;24271:5;24226:26;24238:13;;24226:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;24219:68;;24129:166;;;:::o;23604:355::-;23667:19;23690:10;:8;:10::i;:::-;23667:33;;23711:18;23732:27;23747:11;23732:10;:14;;:27;;;;:::i;:::-;23711:48;;23795:38;23822:10;23795:7;:22;23811:4;23795:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;23770:7;:22;23786:4;23770:22;;;;;;;;;;;;;;;:63;;;;23847:11;:26;23867:4;23847:26;;;;;;;;;;;;;;;;;;;;;;;;;23844:107;;;23913:38;23940:10;23913:7;:22;23929:4;23913:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;23888:7;:22;23904:4;23888:22;;;;;;;;;;;;;;;:63;;;;23844:107;23656:303;;23604:355;:::o;21513:147::-;21591:17;21603:4;21591:7;;:11;;:17;;;;:::i;:::-;21581:7;:27;;;;21632:20;21647:4;21632:10;;:14;;:20;;;;:::i;:::-;21619:10;:33;;;;21513: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://587d6439448c301196b4b0cd03dba96e397e684d496cb1f080cd3129264bd57c
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.