ETH Price: $2,620.72 (-2.03%)

Token

Anime AI Token (ANIMEAI)
 

Overview

Max Total Supply

68,999,444,540,509.88055877 ANIMEAI

Holders

14

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
307,673.421888015 ANIMEAI

Value
$0.00
0x54538ad73477a7302831c3b098190aa9f8e360d3
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:
ANIMEAI

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-23
*/

/*
 
 ANIMEAI - THE FIRST BLOCKCHAIN ANIME TRAINNED AI
 
 https://t.me/animeaitoken
 
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Context {
    //function _msgSender() internal view virtual returns (address payable) {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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);
            }
        }
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface 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 IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IAirdrop {
    function airdrop(address recipient, uint256 amount) external;
}

contract ANIMEAI is Context, IERC20, Ownable {
    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 botWallets;
    bool constant botscantrade = false;

    bool public canTrade = false;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 69000000000000 * 10 ** 9;
    address public constant burningAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    address public marketingWallet;
    address public devWallet;
    address private migrationWallet;

    string private constant _name = "Anime AI Token";
    string private constant _symbol = "ANIMEAI";
    uint8 private constant _decimals = 9;

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

    uint256 public _liquidityFee = 12;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 69000000000000 * 10 ** 9;
    uint256 public numTokensSellToAddToLiquidity = 6900000000 * 10 ** 9;

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

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

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

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // ETH Mainnet Uniswap Router
        // Create a uniswap pair for this new 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;

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

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external view override returns (uint256) {
        uint256 burnedAmount = tokenFromReflection(_rOwned[burningAddress]);
        return _tTotal - burnedAmount;
    }

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        require(amount <= _allowances[sender][_msgSender()], "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        require(subtractedValue <= _allowances[_msgSender()][spender], "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function isExcludedFromReward(address account) external view returns (bool) {
        return _isExcluded[account];
    }

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

    function airdrop(address recipient, uint256 amount) external onlyOwner {
        removeAllFee();
        _transfer(_msgSender(), recipient, amount * 10 ** 9);
        restoreAllFee();
    }

    function airdropInternal(address recipient, uint256 amount) internal {
        removeAllFee();
        _transfer(_msgSender(), recipient, amount);
        restoreAllFee();
    }

    function airdropArray(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner {
        uint256 iterator = 0;
        require(newholders.length == amounts.length, "must be the same length");
        while (iterator < newholders.length) {
            airdropInternal(newholders[iterator], amounts[iterator] * 10 ** 9);
            iterator += 1;
        }
    }

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

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external 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 / currentRate;
    }

    function excludeFromReward(address account) external onlyOwner {
        require(account != burningAddress, "We can not exclude burning address.");
        // 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] -= tAmount;
        _rOwned[sender] -= rAmount;
        _tOwned[recipient] += tTransferAmount;
        _rOwned[recipient] += rTransferAmount;
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

    function setMarketingWallet(address walletAddress) external onlyOwner {
        marketingWallet = walletAddress;
    }

    function setDevWallet(address walletAddress) external onlyOwner {
        devWallet = walletAddress;
    }

    function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner {
        require(SwapThresholdAmount > 69000000, "Swap Threshold Amount cannot be less than 69 Million");
        numTokensSellToAddToLiquidity = SwapThresholdAmount * 10 ** 9;
    }

    function claimTokens() external onlyOwner {
        // make sure we capture all BNB that may or may not be sent to this contract
        payable(devWallet).transfer(address(this).balance);
    }

    function claimOtherTokens(IERC20 tokenAddress, address walletaddress) external onlyOwner {
        tokenAddress.transfer(walletaddress, tokenAddress.balanceOf(address(this)));
    }

    function clearStuckBalance(address payable walletaddress) external onlyOwner {
        walletaddress.transfer(address(this).balance);
    }

    function addBotWallet(address botwallet) external onlyOwner {
        botWallets[botwallet] = true;
    }

    function removeBotWallet(address botwallet) external onlyOwner {
        botWallets[botwallet] = false;
    }

    function getBotWalletStatus(address botwallet) external view returns (bool) {
        return botWallets[botwallet];
    }

    function allowtrading() external onlyOwner {
        canTrade = true;
    }

    function setMigrationWallet(address walletAddress) external onlyOwner {
        migrationWallet = walletAddress;
    }

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

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

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal -= rFee;
        _tFeeTotal += 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 = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount - tFee - tLiquidity;
        return (tTransferAmount, tFee, tLiquidity);
    }

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

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / 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 -= _rOwned[_excluded[i]];
            tSupply -= _tOwned[_excluded[i]];
        }
        if (rSupply < (_rTotal / _tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

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

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

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return (_amount * _liquidityFee) / (10 ** 2);
    }

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

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) external 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");
        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 + liquidity lock?
        // 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;
        }

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            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 {
        // split the contract balance into liquidity, marketing, burn and treasury quotas

        uint256 convertQuota = (contractTokenBalance * 3) / 4;
        uint256 burnQuota = contractTokenBalance / 6;
        uint256 liquHalf = contractTokenBalance - convertQuota - burnQuota;

        // burning tokens
        _transferStandard(address(this), burningAddress, burnQuota);

        // swap tokens for ETH

        swapTokensForEth(convertQuota);

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance;
        uint256 marketingshare = (newBalance * 4) / 9;
        payable(marketingWallet).transfer(marketingshare);
        uint256 afterMarketBalance = newBalance - marketingshare;
        uint256 treasshare = (afterMarketBalance * 4) / 5;
        payable(devWallet).transfer(treasshare);
        uint256 afterDevBalance = afterMarketBalance - treasshare;

        // add liquidity to uniswap
        addLiquidity(liquHalf, afterDevBalance);

        emit SwapAndLiquify(liquHalf, afterDevBalance, liquHalf);
    }

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!canTrade) {
            require(sender == owner() || sender == migrationWallet); // only owner allowed to trade or add liquidity
        }

        if (botWallets[sender] || botWallets[recipient]) {
            require(botscantrade, "bots arent allowed to trade");
        }

        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] -= rAmount;
        _rOwned[recipient] += 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] -= rAmount;
        _tOwned[recipient] += tTransferAmount;
        _rOwned[recipient] += 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] -= tAmount;
        _rOwned[sender] -= rAmount;
        _rOwned[recipient] += rTransferAmount;
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

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"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","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"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","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":"burningAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMigrationWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","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":"pure","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600a60006101000a81548160ff021916908315150217905550690e9c7f5bd655012000006000196200003991906200053f565b600019620000489190620005a6565b600b556003601055601054601155600c6012556012546013556001601460016101000a81548160ff021916908315150217905550690e9c7f5bd65501200000601555675fc1b97136320000601655348015620000a357600080fd5b506000620000b6620004d560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b54600360006200016b620004d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023491906200064b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c291906200064b565b6040518363ffffffff1660e01b8152600401620002e19291906200068e565b6020604051808303816000875af115801562000301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032791906200064b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160066000620003a4620004dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200045d620004d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef690e9c7f5bd65501200000604051620004c69190620006cc565b60405180910390a350620006e9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200054c8262000506565b9150620005598362000506565b9250826200056c576200056b62000510565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620005b38262000506565b9150620005c08362000506565b9250828203905081811115620005db57620005da62000577565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200061382620005e6565b9050919050565b620006258162000606565b81146200063157600080fd5b50565b60008151905062000645816200061a565b92915050565b600060208284031215620006645762000663620005e1565b5b6000620006748482850162000634565b91505092915050565b620006888162000606565b82525050565b6000604082019050620006a560008301856200067d565b620006b460208301846200067d565b9392505050565b620006c68162000506565b82525050565b6000602082019050620006e36000830184620006bb565b92915050565b60805160a051615f2b6200073960003960008181611c3b0152613216015260008181610cca01528181614064015281816141450152818161416c01528181614208015261422f0152615f2b6000f3fe6080604052600436106102b25760003560e01c80634a74bb02116101755780638ba4cc3c116100dc578063a9059cbb11610095578063d4a3883f1161006f578063d4a3883f14610abb578063dd62ed3e14610ae4578063ea2f0b3714610b21578063f2fde38b14610b4a576102b9565b8063a9059cbb14610a2a578063c49b9a8014610a67578063d12a768814610a90576102b9565b80638ba4cc3c1461092c5780638da5cb5b146109555780638ea5220f1461098057806395d89b41146109ab578063a457c2d7146109d6578063a633423114610a13576102b9565b806370a082311161012e57806370a082311461081c578063715018a61461085957806375f0a87414610870578063764d72bf1461089b5780637d1db4a5146108c457806388f82020146108ef576102b9565b80634a74bb02146106fa57806352390c02146107255780635342acb41461074e5780635d098b381461078b57806360d48489146107b45780636bc87c3a146107f1576102b9565b80632f05205c116102195780633bd5d173116101d25780633bd5d173146105fe578063437823ec146106275780634549b03914610650578063481123961461068d57806348c54b9d146106b857806349bd5a5e146106cf576102b9565b80632f05205c146104ee578063313ce567146105195780633685d41914610544578063395093511461056d5780633ae7dc20146105aa5780633b124fe7146105d3576102b9565b80631f53ac021161026b5780631f53ac02146103d057806323b872dd146103f957806329e04b4a146104365780632a3606311461045f5780632a455592146104885780632d838119146104b1576102b9565b80630305caff146102be57806306fdde03146102e7578063095ea7b31461031257806313114a9d1461034f5780631694505e1461037a57806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190614a26565b610b73565b005b3480156102f357600080fd5b506102fc610c63565b6040516103099190614ae3565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190614b3b565b610ca0565b6040516103469190614b96565b60405180910390f35b34801561035b57600080fd5b50610364610cbe565b6040516103719190614bc0565b60405180910390f35b34801561038657600080fd5b5061038f610cc8565b60405161039c9190614c3a565b60405180910390f35b3480156103b157600080fd5b506103ba610cec565b6040516103c79190614bc0565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190614a26565b610d57565b005b34801561040557600080fd5b50610420600480360381019061041b9190614c55565b610e30565b60405161042d9190614b96565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190614ca8565b610fae565b005b34801561046b57600080fd5b5061048660048036038101906104819190614a26565b6110a2565b005b34801561049457600080fd5b506104af60048036038101906104aa9190614a26565b611192565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190614ca8565b61126b565b6040516104e59190614bc0565b60405180910390f35b3480156104fa57600080fd5b506105036112d2565b6040516105109190614b96565b60405180910390f35b34801561052557600080fd5b5061052e6112e5565b60405161053b9190614cf1565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190614a26565b6112ee565b005b34801561057957600080fd5b50610594600480360381019061058f9190614b3b565b61163c565b6040516105a19190614b96565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190614d4a565b6116e8565b005b3480156105df57600080fd5b506105e8611879565b6040516105f59190614bc0565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190614ca8565b61187f565b005b34801561063357600080fd5b5061064e60048036038101906106499190614a26565b6119b7565b005b34801561065c57600080fd5b5061067760048036038101906106729190614db6565b611aa7565b6040516106849190614bc0565b60405180910390f35b34801561069957600080fd5b506106a2611b33565b6040516106af9190614e05565b60405180910390f35b3480156106c457600080fd5b506106cd611b39565b005b3480156106db57600080fd5b506106e4611c39565b6040516106f19190614e05565b60405180910390f35b34801561070657600080fd5b5061070f611c5d565b60405161071c9190614b96565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190614a26565b611c70565b005b34801561075a57600080fd5b5061077560048036038101906107709190614a26565b611f94565b6040516107829190614b96565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad9190614a26565b611fea565b005b3480156107c057600080fd5b506107db60048036038101906107d69190614a26565b6120c3565b6040516107e89190614b96565b60405180910390f35b3480156107fd57600080fd5b50610806612119565b6040516108139190614bc0565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190614a26565b61211f565b6040516108509190614bc0565b60405180910390f35b34801561086557600080fd5b5061086e612248565b005b34801561087c57600080fd5b5061088561239b565b6040516108929190614e05565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190614e5e565b6123c1565b005b3480156108d057600080fd5b506108d96124a0565b6040516108e69190614bc0565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190614a26565b6124a6565b6040516109239190614b96565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614b3b565b6124fc565b005b34801561096157600080fd5b5061096a6125c6565b6040516109779190614e05565b60405180910390f35b34801561098c57600080fd5b506109956125ef565b6040516109a29190614e05565b60405180910390f35b3480156109b757600080fd5b506109c0612615565b6040516109cd9190614ae3565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190614b3b565b612652565b604051610a0a9190614b96565b60405180910390f35b348015610a1f57600080fd5b50610a286127c4565b005b348015610a3657600080fd5b50610a516004803603810190610a4c9190614b3b565b612876565b604051610a5e9190614b96565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a899190614e8b565b612894565b005b348015610a9c57600080fd5b50610aa561297d565b604051610ab29190614bc0565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add9190614f73565b612983565b005b348015610af057600080fd5b50610b0b6004803603810190610b069190614ff4565b612ae2565b604051610b189190614bc0565b60405180910390f35b348015610b2d57600080fd5b50610b486004803603810190610b439190614a26565b612b69565b005b348015610b5657600080fd5b50610b716004803603810190610b6c9190614a26565b612c59565b005b610b7b612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90615080565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600e81526020017f416e696d6520414920546f6b656e000000000000000000000000000000000000815250905090565b6000610cb4610cad612e1a565b8484612e22565b6001905092915050565b6000600c54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610d396003600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126b565b905080690e9c7f5bd65501200000610d5191906150cf565b91505090565b610d5f612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390615080565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610e3d848484612feb565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e86612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa90615175565b60405180910390fd5b610fa384610f0f612e1a565b84600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f59612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f9e91906150cf565b612e22565b600190509392505050565b610fb6612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90615080565b60405180910390fd5b63041cdb408111611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090615207565b60405180910390fd5b633b9aca00816110999190615227565b60168190555050565b6110aa612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90615080565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61119a612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e90615080565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b548211156112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a9906152db565b60405180910390fd5b60006112bc613356565b905080836112ca919061532a565b915050919050565b600a60009054906101000a900460ff1681565b60006009905090565b6112f6612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a90615080565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611406906153a7565b60405180910390fd5b60005b600880549050811015611638578173ffffffffffffffffffffffffffffffffffffffff166008828154811061144a576114496153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361162557600860016008805490506114a491906150cf565b815481106114b5576114b46153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106114f4576114f36153c7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806115eb576115ea6153f6565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611638565b808061163090615425565b915050611412565b5050565b60006116de611649612e1a565b848460056000611657612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116d9919061546d565b612e22565b6001905092915050565b6116f0612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490615080565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117d39190614e05565b602060405180830381865afa1580156117f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181491906154b6565b6040518363ffffffff1660e01b81526004016118319291906154e3565b6020604051808303816000875af1158015611850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118749190615521565b505050565b60105481565b6000611889612e1a565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f906155c0565b60405180910390fd5b60006119238361337a565b5050505050905080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461197991906150cf565b9250508190555080600b600082825461199291906150cf565b9250508190555082600c60008282546119ab919061546d565b92505081905550505050565b6119bf612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4390615080565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000690e9c7f5bd65501200000831115611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed9061562c565b60405180910390fd5b81611b16576000611b068461337a565b5050505050905080915050611b2d565b6000611b218461337a565b50505050915050809150505b92915050565b61dead81565b611b41612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc590615080565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611c36573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b601460019054906101000a900460ff1681565b611c78612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90615080565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c906156be565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df9906153a7565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611ed657611e92600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126b565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611ff2612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461207f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207690615080565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361215f5760009050612243565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121f857600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612243565b612240600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126b565b90505b919050565b612250612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490615080565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123c9612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90615080565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561249c573d6000803e3d6000fd5b5050565b60155481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612504612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258890615080565b60405180910390fd5b6125996133d6565b6125ba6125a4612e1a565b83633b9aca00846125b59190615227565b612feb565b6125c2613413565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600781526020017f414e494d45414900000000000000000000000000000000000000000000000000815250905090565b600060056000612660612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190615750565b60405180910390fd5b6127ba612725612e1a565b848460056000612733612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b591906150cf565b612e22565b6001905092915050565b6127cc612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285090615080565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b600061288a612883612e1a565b8484612feb565b6001905092915050565b61289c612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292090615080565b60405180910390fd5b80601460016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516129729190614b96565b60405180910390a150565b60165481565b61298b612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90615080565b60405180910390fd5b6000828290508585905014612a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a59906157bc565b60405180910390fd5b5b84849050811015612adb57612ac7858583818110612a8457612a836153c7565b5b9050602002016020810190612a999190614a26565b633b9aca00858585818110612ab157612ab06153c7565b5b90506020020135612ac29190615227565b613427565b600181612ad4919061546d565b9050612a63565b5050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612b71612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf590615080565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612c61612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce590615080565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d549061584e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e88906158e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef790615972565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612fde9190614bc0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361305a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305190615a04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c090615a96565b60405180910390fd5b6000811161310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310390615b28565b60405180910390fd5b6131146125c6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561318257506131526125c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131cd576015548111156131cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c390615bba565b60405180910390fd5b5b60006131d83061211f565b905060155481106131e95760155490505b6000601654821015905080801561320d5750601460009054906101000a900460ff16155b801561326557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561327d5750601460019054906101000a900460ff165b156132915760165491506132908261344d565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133385750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561334257600090505b61334e86868684613663565b505050505050565b6000806000613363613b08565b915091508082613373919061532a565b9250505090565b60008060008060008060008060006133918a613dc6565b92509250925060008060006133af8d86866133aa613356565b613e12565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006010541480156133ea57506000601254145b61341157601054601181905550601254601381905550600060108190555060006012819055505b565b601154601081905550601354601281905550565b61342f6133d6565b61344161343a612e1a565b8383612feb565b613449613413565b5050565b6001601460006101000a81548160ff021916908315150217905550600060046003836134799190615227565b613483919061532a565b90506000600683613494919061532a565b905060008183856134a591906150cf565b6134af91906150cf565b90506134be3061dead84613e78565b6134c783613fc5565b6000479050600060096004836134dd9190615227565b6134e7919061532a565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613551573d6000803e3d6000fd5b506000818361356091906150cf565b9050600060056004836135739190615227565b61357d919061532a565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156135e7573d6000803e3d6000fd5b50600081836135f691906150cf565b90506136028682614202565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828860405161363593929190615bda565b60405180910390a150505050505050506000601460006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900460ff1661370f5761367f6125c6565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806137055750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b61370e57600080fd5b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137b05750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137f75760006137f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ed90615c5d565b60405180910390fd5b5b80613805576138046133d6565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138a85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138bd576138b88484846142e3565b613af4565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156139605750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561397557613970848484614486565b613af3565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613a195750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a2e57613a29848484613e78565b613af2565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613ad05750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ae557613ae0848484614629565b613af1565b613af0848484613e78565b5b5b5b5b80613b0257613b01613413565b5b50505050565b6000806000600b5490506000690e9c7f5bd65501200000905060005b600880549050811015613d8057826003600060088481548110613b4a57613b496153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613c385750816004600060088481548110613bd057613bcf6153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613c5757600b54690e9c7f5bd6550120000094509450505050613dc2565b6003600060088381548110613c6f57613c6e6153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613ce091906150cf565b92506004600060088381548110613cfa57613cf96153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613d6b91906150cf565b91508080613d7890615425565b915050613b24565b50690e9c7f5bd65501200000600b54613d99919061532a565b821015613db957600b54690e9c7f5bd65501200000935093505050613dc2565b81819350935050505b9091565b600080600080613dd585614822565b90506000613de286614845565b90506000818388613df391906150cf565b613dfd91906150cf565b90508083839550955095505050509193909250565b6000806000808488613e249190615227565b905060008588613e349190615227565b905060008688613e449190615227565b90506000818385613e5591906150cf565b613e5f91906150cf565b9050838184965096509650505050509450945094915050565b600080600080600080613e8a8761337a565b95509550955095509550955085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ee591906150cf565b9250508190555084600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613f3b919061546d565b92505081905550613f4b81614868565b613f558483614988565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613fb29190614bc0565b60405180910390a3505050505050505050565b6000600267ffffffffffffffff811115613fe257613fe1615c7d565b5b6040519080825280602002602001820160405280156140105781602001602082028036833780820191505090505b5090503081600081518110614028576140276153c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f19190615cc1565b81600181518110614105576141046153c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061416a307f000000000000000000000000000000000000000000000000000000000000000084612e22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141cc959493929190615de7565b600060405180830381600087803b1580156141e657600080fd5b505af11580156141fa573d6000803e3d6000fd5b505050505050565b61422d307f000000000000000000000000000000000000000000000000000000000000000084612e22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806142776125c6565b426040518863ffffffff1660e01b815260040161429996959493929190615e41565b60606040518083038185885af11580156142b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142dc9190615ea2565b5050505050565b6000806000806000806142f58761337a565b95509550955095509550955086600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461435091906150cf565b9250508190555085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546143a691906150cf565b9250508190555084600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546143fc919061546d565b9250508190555061440c81614868565b6144168483614988565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144739190614bc0565b60405180910390a3505050505050505050565b6000806000806000806144988761337a565b95509550955095509550955085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546144f391906150cf565b9250508190555082600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614549919061546d565b9250508190555084600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461459f919061546d565b925050819055506145af81614868565b6145b98483614988565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516146169190614bc0565b60405180910390a3505050505050505050565b60008060008060008061463b8761337a565b95509550955095509550955086600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461469691906150cf565b9250508190555085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546146ec91906150cf565b9250508190555082600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614742919061546d565b9250508190555084600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614798919061546d565b925050819055506147a881614868565b6147b28483614988565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161480f9190614bc0565b60405180910390a3505050505050505050565b60006064601054836148349190615227565b61483e919061532a565b9050919050565b60006064601254836148579190615227565b614861919061532a565b9050919050565b6000614872613356565b9050600081836148829190615227565b905080600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546148d3919061546d565b92505081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156149835782600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461497b919061546d565b925050819055505b505050565b81600b600082825461499a91906150cf565b9250508190555080600c60008282546149b3919061546d565b925050819055505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149f3826149c8565b9050919050565b614a03816149e8565b8114614a0e57600080fd5b50565b600081359050614a20816149fa565b92915050565b600060208284031215614a3c57614a3b6149be565b5b6000614a4a84828501614a11565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614a8d578082015181840152602081019050614a72565b60008484015250505050565b6000601f19601f8301169050919050565b6000614ab582614a53565b614abf8185614a5e565b9350614acf818560208601614a6f565b614ad881614a99565b840191505092915050565b60006020820190508181036000830152614afd8184614aaa565b905092915050565b6000819050919050565b614b1881614b05565b8114614b2357600080fd5b50565b600081359050614b3581614b0f565b92915050565b60008060408385031215614b5257614b516149be565b5b6000614b6085828601614a11565b9250506020614b7185828601614b26565b9150509250929050565b60008115159050919050565b614b9081614b7b565b82525050565b6000602082019050614bab6000830184614b87565b92915050565b614bba81614b05565b82525050565b6000602082019050614bd56000830184614bb1565b92915050565b6000819050919050565b6000614c00614bfb614bf6846149c8565b614bdb565b6149c8565b9050919050565b6000614c1282614be5565b9050919050565b6000614c2482614c07565b9050919050565b614c3481614c19565b82525050565b6000602082019050614c4f6000830184614c2b565b92915050565b600080600060608486031215614c6e57614c6d6149be565b5b6000614c7c86828701614a11565b9350506020614c8d86828701614a11565b9250506040614c9e86828701614b26565b9150509250925092565b600060208284031215614cbe57614cbd6149be565b5b6000614ccc84828501614b26565b91505092915050565b600060ff82169050919050565b614ceb81614cd5565b82525050565b6000602082019050614d066000830184614ce2565b92915050565b6000614d17826149e8565b9050919050565b614d2781614d0c565b8114614d3257600080fd5b50565b600081359050614d4481614d1e565b92915050565b60008060408385031215614d6157614d606149be565b5b6000614d6f85828601614d35565b9250506020614d8085828601614a11565b9150509250929050565b614d9381614b7b565b8114614d9e57600080fd5b50565b600081359050614db081614d8a565b92915050565b60008060408385031215614dcd57614dcc6149be565b5b6000614ddb85828601614b26565b9250506020614dec85828601614da1565b9150509250929050565b614dff816149e8565b82525050565b6000602082019050614e1a6000830184614df6565b92915050565b6000614e2b826149c8565b9050919050565b614e3b81614e20565b8114614e4657600080fd5b50565b600081359050614e5881614e32565b92915050565b600060208284031215614e7457614e736149be565b5b6000614e8284828501614e49565b91505092915050565b600060208284031215614ea157614ea06149be565b5b6000614eaf84828501614da1565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614edd57614edc614eb8565b5b8235905067ffffffffffffffff811115614efa57614ef9614ebd565b5b602083019150836020820283011115614f1657614f15614ec2565b5b9250929050565b60008083601f840112614f3357614f32614eb8565b5b8235905067ffffffffffffffff811115614f5057614f4f614ebd565b5b602083019150836020820283011115614f6c57614f6b614ec2565b5b9250929050565b60008060008060408587031215614f8d57614f8c6149be565b5b600085013567ffffffffffffffff811115614fab57614faa6149c3565b5b614fb787828801614ec7565b9450945050602085013567ffffffffffffffff811115614fda57614fd96149c3565b5b614fe687828801614f1d565b925092505092959194509250565b6000806040838503121561500b5761500a6149be565b5b600061501985828601614a11565b925050602061502a85828601614a11565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061506a602083614a5e565b915061507582615034565b602082019050919050565b600060208201905081810360008301526150998161505d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006150da82614b05565b91506150e583614b05565b92508282039050818111156150fd576150fc6150a0565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061515f602883614a5e565b915061516a82615103565b604082019050919050565b6000602082019050818103600083015261518e81615152565b9050919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b60006151f1603483614a5e565b91506151fc82615195565b604082019050919050565b60006020820190508181036000830152615220816151e4565b9050919050565b600061523282614b05565b915061523d83614b05565b925082820261524b81614b05565b91508282048414831517615262576152616150a0565b5b5092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006152c5602a83614a5e565b91506152d082615269565b604082019050919050565b600060208201905081810360008301526152f4816152b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061533582614b05565b915061534083614b05565b9250826153505761534f6152fb565b5b828204905092915050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000615391601b83614a5e565b915061539c8261535b565b602082019050919050565b600060208201905081810360008301526153c081615384565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061543082614b05565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615462576154616150a0565b5b600182019050919050565b600061547882614b05565b915061548383614b05565b925082820190508082111561549b5761549a6150a0565b5b92915050565b6000815190506154b081614b0f565b92915050565b6000602082840312156154cc576154cb6149be565b5b60006154da848285016154a1565b91505092915050565b60006040820190506154f86000830185614df6565b6155056020830184614bb1565b9392505050565b60008151905061551b81614d8a565b92915050565b600060208284031215615537576155366149be565b5b60006155458482850161550c565b91505092915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b60006155aa602c83614a5e565b91506155b58261554e565b604082019050919050565b600060208201905081810360008301526155d98161559d565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615616601f83614a5e565b9150615621826155e0565b602082019050919050565b6000602082019050818103600083015261564581615609565b9050919050565b7f57652063616e206e6f74206578636c756465206275726e696e6720616464726560008201527f73732e0000000000000000000000000000000000000000000000000000000000602082015250565b60006156a8602383614a5e565b91506156b38261564c565b604082019050919050565b600060208201905081810360008301526156d78161569b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061573a602583614a5e565b9150615745826156de565b604082019050919050565b600060208201905081810360008301526157698161572d565b9050919050565b7f6d757374206265207468652073616d65206c656e677468000000000000000000600082015250565b60006157a6601783614a5e565b91506157b182615770565b602082019050919050565b600060208201905081810360008301526157d581615799565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615838602683614a5e565b9150615843826157dc565b604082019050919050565b600060208201905081810360008301526158678161582b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006158ca602483614a5e565b91506158d58261586e565b604082019050919050565b600060208201905081810360008301526158f9816158bd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061595c602283614a5e565b915061596782615900565b604082019050919050565b6000602082019050818103600083015261598b8161594f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006159ee602583614a5e565b91506159f982615992565b604082019050919050565b60006020820190508181036000830152615a1d816159e1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615a80602383614a5e565b9150615a8b82615a24565b604082019050919050565b60006020820190508181036000830152615aaf81615a73565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615b12602983614a5e565b9150615b1d82615ab6565b604082019050919050565b60006020820190508181036000830152615b4181615b05565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615ba4602883614a5e565b9150615baf82615b48565b604082019050919050565b60006020820190508181036000830152615bd381615b97565b9050919050565b6000606082019050615bef6000830186614bb1565b615bfc6020830185614bb1565b615c096040830184614bb1565b949350505050565b7f626f7473206172656e7420616c6c6f77656420746f2074726164650000000000600082015250565b6000615c47601b83614a5e565b9150615c5282615c11565b602082019050919050565b60006020820190508181036000830152615c7681615c3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615cbb816149fa565b92915050565b600060208284031215615cd757615cd66149be565b5b6000615ce584828501615cac565b91505092915050565b6000819050919050565b6000615d13615d0e615d0984615cee565b614bdb565b614b05565b9050919050565b615d2381615cf8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d5e816149e8565b82525050565b6000615d708383615d55565b60208301905092915050565b6000602082019050919050565b6000615d9482615d29565b615d9e8185615d34565b9350615da983615d45565b8060005b83811015615dda578151615dc18882615d64565b9750615dcc83615d7c565b925050600181019050615dad565b5085935050505092915050565b600060a082019050615dfc6000830188614bb1565b615e096020830187615d1a565b8181036040830152615e1b8186615d89565b9050615e2a6060830185614df6565b615e376080830184614bb1565b9695505050505050565b600060c082019050615e566000830189614df6565b615e636020830188614bb1565b615e706040830187615d1a565b615e7d6060830186615d1a565b615e8a6080830185614df6565b615e9760a0830184614bb1565b979650505050505050565b600080600060608486031215615ebb57615eba6149be565b5b6000615ec9868287016154a1565b9350506020615eda868287016154a1565b9250506040615eeb868287016154a1565b915050925092509256fea264697066735822122026972fc94527a2d5e4d0264c12febbe90246c85cd18bb31bf71a7057d296f29764736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80634a74bb02116101755780638ba4cc3c116100dc578063a9059cbb11610095578063d4a3883f1161006f578063d4a3883f14610abb578063dd62ed3e14610ae4578063ea2f0b3714610b21578063f2fde38b14610b4a576102b9565b8063a9059cbb14610a2a578063c49b9a8014610a67578063d12a768814610a90576102b9565b80638ba4cc3c1461092c5780638da5cb5b146109555780638ea5220f1461098057806395d89b41146109ab578063a457c2d7146109d6578063a633423114610a13576102b9565b806370a082311161012e57806370a082311461081c578063715018a61461085957806375f0a87414610870578063764d72bf1461089b5780637d1db4a5146108c457806388f82020146108ef576102b9565b80634a74bb02146106fa57806352390c02146107255780635342acb41461074e5780635d098b381461078b57806360d48489146107b45780636bc87c3a146107f1576102b9565b80632f05205c116102195780633bd5d173116101d25780633bd5d173146105fe578063437823ec146106275780634549b03914610650578063481123961461068d57806348c54b9d146106b857806349bd5a5e146106cf576102b9565b80632f05205c146104ee578063313ce567146105195780633685d41914610544578063395093511461056d5780633ae7dc20146105aa5780633b124fe7146105d3576102b9565b80631f53ac021161026b5780631f53ac02146103d057806323b872dd146103f957806329e04b4a146104365780632a3606311461045f5780632a455592146104885780632d838119146104b1576102b9565b80630305caff146102be57806306fdde03146102e7578063095ea7b31461031257806313114a9d1461034f5780631694505e1461037a57806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190614a26565b610b73565b005b3480156102f357600080fd5b506102fc610c63565b6040516103099190614ae3565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190614b3b565b610ca0565b6040516103469190614b96565b60405180910390f35b34801561035b57600080fd5b50610364610cbe565b6040516103719190614bc0565b60405180910390f35b34801561038657600080fd5b5061038f610cc8565b60405161039c9190614c3a565b60405180910390f35b3480156103b157600080fd5b506103ba610cec565b6040516103c79190614bc0565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190614a26565b610d57565b005b34801561040557600080fd5b50610420600480360381019061041b9190614c55565b610e30565b60405161042d9190614b96565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190614ca8565b610fae565b005b34801561046b57600080fd5b5061048660048036038101906104819190614a26565b6110a2565b005b34801561049457600080fd5b506104af60048036038101906104aa9190614a26565b611192565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190614ca8565b61126b565b6040516104e59190614bc0565b60405180910390f35b3480156104fa57600080fd5b506105036112d2565b6040516105109190614b96565b60405180910390f35b34801561052557600080fd5b5061052e6112e5565b60405161053b9190614cf1565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190614a26565b6112ee565b005b34801561057957600080fd5b50610594600480360381019061058f9190614b3b565b61163c565b6040516105a19190614b96565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190614d4a565b6116e8565b005b3480156105df57600080fd5b506105e8611879565b6040516105f59190614bc0565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190614ca8565b61187f565b005b34801561063357600080fd5b5061064e60048036038101906106499190614a26565b6119b7565b005b34801561065c57600080fd5b5061067760048036038101906106729190614db6565b611aa7565b6040516106849190614bc0565b60405180910390f35b34801561069957600080fd5b506106a2611b33565b6040516106af9190614e05565b60405180910390f35b3480156106c457600080fd5b506106cd611b39565b005b3480156106db57600080fd5b506106e4611c39565b6040516106f19190614e05565b60405180910390f35b34801561070657600080fd5b5061070f611c5d565b60405161071c9190614b96565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190614a26565b611c70565b005b34801561075a57600080fd5b5061077560048036038101906107709190614a26565b611f94565b6040516107829190614b96565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad9190614a26565b611fea565b005b3480156107c057600080fd5b506107db60048036038101906107d69190614a26565b6120c3565b6040516107e89190614b96565b60405180910390f35b3480156107fd57600080fd5b50610806612119565b6040516108139190614bc0565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190614a26565b61211f565b6040516108509190614bc0565b60405180910390f35b34801561086557600080fd5b5061086e612248565b005b34801561087c57600080fd5b5061088561239b565b6040516108929190614e05565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190614e5e565b6123c1565b005b3480156108d057600080fd5b506108d96124a0565b6040516108e69190614bc0565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190614a26565b6124a6565b6040516109239190614b96565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614b3b565b6124fc565b005b34801561096157600080fd5b5061096a6125c6565b6040516109779190614e05565b60405180910390f35b34801561098c57600080fd5b506109956125ef565b6040516109a29190614e05565b60405180910390f35b3480156109b757600080fd5b506109c0612615565b6040516109cd9190614ae3565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190614b3b565b612652565b604051610a0a9190614b96565b60405180910390f35b348015610a1f57600080fd5b50610a286127c4565b005b348015610a3657600080fd5b50610a516004803603810190610a4c9190614b3b565b612876565b604051610a5e9190614b96565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a899190614e8b565b612894565b005b348015610a9c57600080fd5b50610aa561297d565b604051610ab29190614bc0565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add9190614f73565b612983565b005b348015610af057600080fd5b50610b0b6004803603810190610b069190614ff4565b612ae2565b604051610b189190614bc0565b60405180910390f35b348015610b2d57600080fd5b50610b486004803603810190610b439190614a26565b612b69565b005b348015610b5657600080fd5b50610b716004803603810190610b6c9190614a26565b612c59565b005b610b7b612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90615080565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600e81526020017f416e696d6520414920546f6b656e000000000000000000000000000000000000815250905090565b6000610cb4610cad612e1a565b8484612e22565b6001905092915050565b6000600c54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600080610d396003600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126b565b905080690e9c7f5bd65501200000610d5191906150cf565b91505090565b610d5f612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390615080565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610e3d848484612feb565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e86612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa90615175565b60405180910390fd5b610fa384610f0f612e1a565b84600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f59612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f9e91906150cf565b612e22565b600190509392505050565b610fb6612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90615080565b60405180910390fd5b63041cdb408111611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090615207565b60405180910390fd5b633b9aca00816110999190615227565b60168190555050565b6110aa612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90615080565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61119a612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e90615080565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b548211156112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a9906152db565b60405180910390fd5b60006112bc613356565b905080836112ca919061532a565b915050919050565b600a60009054906101000a900460ff1681565b60006009905090565b6112f6612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a90615080565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611406906153a7565b60405180910390fd5b60005b600880549050811015611638578173ffffffffffffffffffffffffffffffffffffffff166008828154811061144a576114496153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361162557600860016008805490506114a491906150cf565b815481106114b5576114b46153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106114f4576114f36153c7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806115eb576115ea6153f6565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611638565b808061163090615425565b915050611412565b5050565b60006116de611649612e1a565b848460056000611657612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116d9919061546d565b612e22565b6001905092915050565b6116f0612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490615080565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117d39190614e05565b602060405180830381865afa1580156117f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181491906154b6565b6040518363ffffffff1660e01b81526004016118319291906154e3565b6020604051808303816000875af1158015611850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118749190615521565b505050565b60105481565b6000611889612e1a565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f906155c0565b60405180910390fd5b60006119238361337a565b5050505050905080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461197991906150cf565b9250508190555080600b600082825461199291906150cf565b9250508190555082600c60008282546119ab919061546d565b92505081905550505050565b6119bf612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4390615080565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000690e9c7f5bd65501200000831115611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed9061562c565b60405180910390fd5b81611b16576000611b068461337a565b5050505050905080915050611b2d565b6000611b218461337a565b50505050915050809150505b92915050565b61dead81565b611b41612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc590615080565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611c36573d6000803e3d6000fd5b50565b7f0000000000000000000000003a71416a294a1f1bb9f6989c73acb4f73987d77881565b601460019054906101000a900460ff1681565b611c78612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90615080565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c906156be565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df9906153a7565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611ed657611e92600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126b565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611ff2612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461207f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207690615080565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361215f5760009050612243565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121f857600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612243565b612240600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126b565b90505b919050565b612250612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490615080565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123c9612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90615080565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561249c573d6000803e3d6000fd5b5050565b60155481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612504612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258890615080565b60405180910390fd5b6125996133d6565b6125ba6125a4612e1a565b83633b9aca00846125b59190615227565b612feb565b6125c2613413565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600781526020017f414e494d45414900000000000000000000000000000000000000000000000000815250905090565b600060056000612660612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190615750565b60405180910390fd5b6127ba612725612e1a565b848460056000612733612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b591906150cf565b612e22565b6001905092915050565b6127cc612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285090615080565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b600061288a612883612e1a565b8484612feb565b6001905092915050565b61289c612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292090615080565b60405180910390fd5b80601460016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516129729190614b96565b60405180910390a150565b60165481565b61298b612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90615080565b60405180910390fd5b6000828290508585905014612a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a59906157bc565b60405180910390fd5b5b84849050811015612adb57612ac7858583818110612a8457612a836153c7565b5b9050602002016020810190612a999190614a26565b633b9aca00858585818110612ab157612ab06153c7565b5b90506020020135612ac29190615227565b613427565b600181612ad4919061546d565b9050612a63565b5050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612b71612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf590615080565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612c61612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce590615080565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d549061584e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e88906158e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef790615972565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612fde9190614bc0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361305a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305190615a04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c090615a96565b60405180910390fd5b6000811161310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310390615b28565b60405180910390fd5b6131146125c6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561318257506131526125c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131cd576015548111156131cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c390615bba565b60405180910390fd5b5b60006131d83061211f565b905060155481106131e95760155490505b6000601654821015905080801561320d5750601460009054906101000a900460ff16155b801561326557507f0000000000000000000000003a71416a294a1f1bb9f6989c73acb4f73987d77873ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561327d5750601460019054906101000a900460ff165b156132915760165491506132908261344d565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133385750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561334257600090505b61334e86868684613663565b505050505050565b6000806000613363613b08565b915091508082613373919061532a565b9250505090565b60008060008060008060008060006133918a613dc6565b92509250925060008060006133af8d86866133aa613356565b613e12565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006010541480156133ea57506000601254145b61341157601054601181905550601254601381905550600060108190555060006012819055505b565b601154601081905550601354601281905550565b61342f6133d6565b61344161343a612e1a565b8383612feb565b613449613413565b5050565b6001601460006101000a81548160ff021916908315150217905550600060046003836134799190615227565b613483919061532a565b90506000600683613494919061532a565b905060008183856134a591906150cf565b6134af91906150cf565b90506134be3061dead84613e78565b6134c783613fc5565b6000479050600060096004836134dd9190615227565b6134e7919061532a565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613551573d6000803e3d6000fd5b506000818361356091906150cf565b9050600060056004836135739190615227565b61357d919061532a565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156135e7573d6000803e3d6000fd5b50600081836135f691906150cf565b90506136028682614202565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828860405161363593929190615bda565b60405180910390a150505050505050506000601460006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900460ff1661370f5761367f6125c6565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806137055750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b61370e57600080fd5b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137b05750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137f75760006137f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ed90615c5d565b60405180910390fd5b5b80613805576138046133d6565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138a85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138bd576138b88484846142e3565b613af4565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156139605750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561397557613970848484614486565b613af3565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613a195750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a2e57613a29848484613e78565b613af2565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613ad05750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ae557613ae0848484614629565b613af1565b613af0848484613e78565b5b5b5b5b80613b0257613b01613413565b5b50505050565b6000806000600b5490506000690e9c7f5bd65501200000905060005b600880549050811015613d8057826003600060088481548110613b4a57613b496153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613c385750816004600060088481548110613bd057613bcf6153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613c5757600b54690e9c7f5bd6550120000094509450505050613dc2565b6003600060088381548110613c6f57613c6e6153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613ce091906150cf565b92506004600060088381548110613cfa57613cf96153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613d6b91906150cf565b91508080613d7890615425565b915050613b24565b50690e9c7f5bd65501200000600b54613d99919061532a565b821015613db957600b54690e9c7f5bd65501200000935093505050613dc2565b81819350935050505b9091565b600080600080613dd585614822565b90506000613de286614845565b90506000818388613df391906150cf565b613dfd91906150cf565b90508083839550955095505050509193909250565b6000806000808488613e249190615227565b905060008588613e349190615227565b905060008688613e449190615227565b90506000818385613e5591906150cf565b613e5f91906150cf565b9050838184965096509650505050509450945094915050565b600080600080600080613e8a8761337a565b95509550955095509550955085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ee591906150cf565b9250508190555084600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613f3b919061546d565b92505081905550613f4b81614868565b613f558483614988565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613fb29190614bc0565b60405180910390a3505050505050505050565b6000600267ffffffffffffffff811115613fe257613fe1615c7d565b5b6040519080825280602002602001820160405280156140105781602001602082028036833780820191505090505b5090503081600081518110614028576140276153c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f19190615cc1565b81600181518110614105576141046153c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061416a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612e22565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141cc959493929190615de7565b600060405180830381600087803b1580156141e657600080fd5b505af11580156141fa573d6000803e3d6000fd5b505050505050565b61422d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612e22565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806142776125c6565b426040518863ffffffff1660e01b815260040161429996959493929190615e41565b60606040518083038185885af11580156142b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142dc9190615ea2565b5050505050565b6000806000806000806142f58761337a565b95509550955095509550955086600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461435091906150cf565b9250508190555085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546143a691906150cf565b9250508190555084600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546143fc919061546d565b9250508190555061440c81614868565b6144168483614988565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144739190614bc0565b60405180910390a3505050505050505050565b6000806000806000806144988761337a565b95509550955095509550955085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546144f391906150cf565b9250508190555082600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614549919061546d565b9250508190555084600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461459f919061546d565b925050819055506145af81614868565b6145b98483614988565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516146169190614bc0565b60405180910390a3505050505050505050565b60008060008060008061463b8761337a565b95509550955095509550955086600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461469691906150cf565b9250508190555085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546146ec91906150cf565b9250508190555082600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614742919061546d565b9250508190555084600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614798919061546d565b925050819055506147a881614868565b6147b28483614988565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161480f9190614bc0565b60405180910390a3505050505050505050565b60006064601054836148349190615227565b61483e919061532a565b9050919050565b60006064601254836148579190615227565b614861919061532a565b9050919050565b6000614872613356565b9050600081836148829190615227565b905080600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546148d3919061546d565b92505081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156149835782600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461497b919061546d565b925050819055505b505050565b81600b600082825461499a91906150cf565b9250508190555080600c60008282546149b3919061546d565b925050819055505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149f3826149c8565b9050919050565b614a03816149e8565b8114614a0e57600080fd5b50565b600081359050614a20816149fa565b92915050565b600060208284031215614a3c57614a3b6149be565b5b6000614a4a84828501614a11565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614a8d578082015181840152602081019050614a72565b60008484015250505050565b6000601f19601f8301169050919050565b6000614ab582614a53565b614abf8185614a5e565b9350614acf818560208601614a6f565b614ad881614a99565b840191505092915050565b60006020820190508181036000830152614afd8184614aaa565b905092915050565b6000819050919050565b614b1881614b05565b8114614b2357600080fd5b50565b600081359050614b3581614b0f565b92915050565b60008060408385031215614b5257614b516149be565b5b6000614b6085828601614a11565b9250506020614b7185828601614b26565b9150509250929050565b60008115159050919050565b614b9081614b7b565b82525050565b6000602082019050614bab6000830184614b87565b92915050565b614bba81614b05565b82525050565b6000602082019050614bd56000830184614bb1565b92915050565b6000819050919050565b6000614c00614bfb614bf6846149c8565b614bdb565b6149c8565b9050919050565b6000614c1282614be5565b9050919050565b6000614c2482614c07565b9050919050565b614c3481614c19565b82525050565b6000602082019050614c4f6000830184614c2b565b92915050565b600080600060608486031215614c6e57614c6d6149be565b5b6000614c7c86828701614a11565b9350506020614c8d86828701614a11565b9250506040614c9e86828701614b26565b9150509250925092565b600060208284031215614cbe57614cbd6149be565b5b6000614ccc84828501614b26565b91505092915050565b600060ff82169050919050565b614ceb81614cd5565b82525050565b6000602082019050614d066000830184614ce2565b92915050565b6000614d17826149e8565b9050919050565b614d2781614d0c565b8114614d3257600080fd5b50565b600081359050614d4481614d1e565b92915050565b60008060408385031215614d6157614d606149be565b5b6000614d6f85828601614d35565b9250506020614d8085828601614a11565b9150509250929050565b614d9381614b7b565b8114614d9e57600080fd5b50565b600081359050614db081614d8a565b92915050565b60008060408385031215614dcd57614dcc6149be565b5b6000614ddb85828601614b26565b9250506020614dec85828601614da1565b9150509250929050565b614dff816149e8565b82525050565b6000602082019050614e1a6000830184614df6565b92915050565b6000614e2b826149c8565b9050919050565b614e3b81614e20565b8114614e4657600080fd5b50565b600081359050614e5881614e32565b92915050565b600060208284031215614e7457614e736149be565b5b6000614e8284828501614e49565b91505092915050565b600060208284031215614ea157614ea06149be565b5b6000614eaf84828501614da1565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614edd57614edc614eb8565b5b8235905067ffffffffffffffff811115614efa57614ef9614ebd565b5b602083019150836020820283011115614f1657614f15614ec2565b5b9250929050565b60008083601f840112614f3357614f32614eb8565b5b8235905067ffffffffffffffff811115614f5057614f4f614ebd565b5b602083019150836020820283011115614f6c57614f6b614ec2565b5b9250929050565b60008060008060408587031215614f8d57614f8c6149be565b5b600085013567ffffffffffffffff811115614fab57614faa6149c3565b5b614fb787828801614ec7565b9450945050602085013567ffffffffffffffff811115614fda57614fd96149c3565b5b614fe687828801614f1d565b925092505092959194509250565b6000806040838503121561500b5761500a6149be565b5b600061501985828601614a11565b925050602061502a85828601614a11565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061506a602083614a5e565b915061507582615034565b602082019050919050565b600060208201905081810360008301526150998161505d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006150da82614b05565b91506150e583614b05565b92508282039050818111156150fd576150fc6150a0565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061515f602883614a5e565b915061516a82615103565b604082019050919050565b6000602082019050818103600083015261518e81615152565b9050919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b60006151f1603483614a5e565b91506151fc82615195565b604082019050919050565b60006020820190508181036000830152615220816151e4565b9050919050565b600061523282614b05565b915061523d83614b05565b925082820261524b81614b05565b91508282048414831517615262576152616150a0565b5b5092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006152c5602a83614a5e565b91506152d082615269565b604082019050919050565b600060208201905081810360008301526152f4816152b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061533582614b05565b915061534083614b05565b9250826153505761534f6152fb565b5b828204905092915050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000615391601b83614a5e565b915061539c8261535b565b602082019050919050565b600060208201905081810360008301526153c081615384565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061543082614b05565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615462576154616150a0565b5b600182019050919050565b600061547882614b05565b915061548383614b05565b925082820190508082111561549b5761549a6150a0565b5b92915050565b6000815190506154b081614b0f565b92915050565b6000602082840312156154cc576154cb6149be565b5b60006154da848285016154a1565b91505092915050565b60006040820190506154f86000830185614df6565b6155056020830184614bb1565b9392505050565b60008151905061551b81614d8a565b92915050565b600060208284031215615537576155366149be565b5b60006155458482850161550c565b91505092915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b60006155aa602c83614a5e565b91506155b58261554e565b604082019050919050565b600060208201905081810360008301526155d98161559d565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615616601f83614a5e565b9150615621826155e0565b602082019050919050565b6000602082019050818103600083015261564581615609565b9050919050565b7f57652063616e206e6f74206578636c756465206275726e696e6720616464726560008201527f73732e0000000000000000000000000000000000000000000000000000000000602082015250565b60006156a8602383614a5e565b91506156b38261564c565b604082019050919050565b600060208201905081810360008301526156d78161569b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061573a602583614a5e565b9150615745826156de565b604082019050919050565b600060208201905081810360008301526157698161572d565b9050919050565b7f6d757374206265207468652073616d65206c656e677468000000000000000000600082015250565b60006157a6601783614a5e565b91506157b182615770565b602082019050919050565b600060208201905081810360008301526157d581615799565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615838602683614a5e565b9150615843826157dc565b604082019050919050565b600060208201905081810360008301526158678161582b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006158ca602483614a5e565b91506158d58261586e565b604082019050919050565b600060208201905081810360008301526158f9816158bd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061595c602283614a5e565b915061596782615900565b604082019050919050565b6000602082019050818103600083015261598b8161594f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006159ee602583614a5e565b91506159f982615992565b604082019050919050565b60006020820190508181036000830152615a1d816159e1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615a80602383614a5e565b9150615a8b82615a24565b604082019050919050565b60006020820190508181036000830152615aaf81615a73565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615b12602983614a5e565b9150615b1d82615ab6565b604082019050919050565b60006020820190508181036000830152615b4181615b05565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615ba4602883614a5e565b9150615baf82615b48565b604082019050919050565b60006020820190508181036000830152615bd381615b97565b9050919050565b6000606082019050615bef6000830186614bb1565b615bfc6020830185614bb1565b615c096040830184614bb1565b949350505050565b7f626f7473206172656e7420616c6c6f77656420746f2074726164650000000000600082015250565b6000615c47601b83614a5e565b9150615c5282615c11565b602082019050919050565b60006020820190508181036000830152615c7681615c3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615cbb816149fa565b92915050565b600060208284031215615cd757615cd66149be565b5b6000615ce584828501615cac565b91505092915050565b6000819050919050565b6000615d13615d0e615d0984615cee565b614bdb565b614b05565b9050919050565b615d2381615cf8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d5e816149e8565b82525050565b6000615d708383615d55565b60208301905092915050565b6000602082019050919050565b6000615d9482615d29565b615d9e8185615d34565b9350615da983615d45565b8060005b83811015615dda578151615dc18882615d64565b9750615dcc83615d7c565b925050600181019050615dad565b5085935050505092915050565b600060a082019050615dfc6000830188614bb1565b615e096020830187615d1a565b8181036040830152615e1b8186615d89565b9050615e2a6060830185614df6565b615e376080830184614bb1565b9695505050505050565b600060c082019050615e566000830189614df6565b615e636020830188614bb1565b615e706040830187615d1a565b615e7d6060830186615d1a565b615e8a6080830185614df6565b615e9760a0830184614bb1565b979650505050505050565b600080600060608486031215615ebb57615eba6149be565b5b6000615ec9868287016154a1565b9350506020615eda868287016154a1565b9250506040615eeb868287016154a1565b915050925092509256fea264697066735822122026972fc94527a2d5e4d0264c12febbe90246c85cd18bb31bf71a7057d296f29764736f6c63430008120033

Deployed Bytecode Sourcemap

20069:21171:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30103:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22745:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23812:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25070:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21345:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23028:190;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29053:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23983:375;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29169:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29988:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30438:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26756:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20571:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22935:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27554:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24366:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29648:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21160:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25954:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28684:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26299:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20723:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29443:197;;;;;;;;;;;;;:::i;:::-;;21403:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21478:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27014:532;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33857:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28925:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30222:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21243:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23226:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11191:148;;;;;;;;;;;;;:::i;:::-;;20902:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29839:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21527:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24940:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25167:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10549:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20939:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22838:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24591:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30353:77;;;;;;;;;;;;;:::i;:::-;;23482:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30566:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21588:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25557:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23659:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28805:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11494:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30103:111;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30201:5:::1;30177:10;:21;30188:9;30177:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30103:111:::0;:::o;22745:85::-;22784:13;22817:5;;;;;;;;;;;;;;;;;22810:12;;22745:85;:::o;23812:163::-;23889:4;23906:39;23915:12;:10;:12::i;:::-;23929:7;23938:6;23906:8;:39::i;:::-;23963:4;23956:11;;23812:163;;;;:::o;25070:89::-;25114:7;25141:10;;25134:17;;25070:89;:::o;21345:51::-;;;:::o;23028:190::-;23083:7;23103:20;23126:44;23146:7;:23;20764:42;23146:23;;;;;;;;;;;;;;;;23126:19;:44::i;:::-;23103:67;;23198:12;20692:24;23188:22;;;;:::i;:::-;23181:29;;;23028:190;:::o;29053:108::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29140:13:::1;29128:9;;:25;;;;;;;;;;;;;;;;;;29053:108:::0;:::o;23983:375::-;24083:4;24100:36;24110:6;24118:9;24129:6;24100:9;:36::i;:::-;24165:11;:19;24177:6;24165:19;;;;;;;;;;;;;;;:33;24185:12;:10;:12::i;:::-;24165:33;;;;;;;;;;;;;;;;24155:6;:43;;24147:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;24254:74;24263:6;24271:12;:10;:12::i;:::-;24321:6;24285:11;:19;24297:6;24285:19;;;;;;;;;;;;;;;:33;24305:12;:10;:12::i;:::-;24285:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;24254:8;:74::i;:::-;24346:4;24339:11;;23983:375;;;;;:::o;29169:266::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29290:8:::1;29268:19;:30;29260:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;29420:7;29398:19;:29;;;;:::i;:::-;29366;:61;;;;29169:266:::0;:::o;29988:107::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30083:4:::1;30059:10;:21;30070:9;30059:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;29988:107:::0;:::o;30438:120::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30537:13:::1;30519:15;;:31;;;;;;;;;;;;;;;;;;30438:120:::0;:::o;26756:250::-;26823:7;26862;;26851;:18;;26843:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26927:19;26949:10;:8;:10::i;:::-;26927:32;;26987:11;26977:7;:21;;;;:::i;:::-;26970:28;;;26756:250;;;:::o;20571:28::-;;;;;;;;;;;;;:::o;22935:85::-;22978:5;21150:1;22996:16;;22935:85;:::o;27554:477::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27634:11:::1;:20;27646:7;27634:20;;;;;;;;;;;;;;;;;;;;;;;;;27626:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27702:9;27697:327;27721:9;:16;;;;27717:1;:20;27697:327;;;27779:7;27763:23;;:9;27773:1;27763:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;27759:254:::1;;27822:9;27851:1;27832:9;:16;;;;:20;;;;:::i;:::-;27822:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27807:9;27817:1;27807:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27891:1;27872:7;:16;27880:7;27872:16;;;;;;;;;;;;;;;:20;;;;27934:5;27911:11;:20;27923:7;27911:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;27958:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;27992:5;;27759:254;27739:3;;;;;:::i;:::-;;;;27697:327;;;;27554:477:::0;:::o;24366:217::-;24456:4;24473:80;24482:12;:10;:12::i;:::-;24496:7;24542:10;24505:11;:25;24517:12;:10;:12::i;:::-;24505:25;;;;;;;;;;;;;;;:34;24531:7;24505:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;24473:8;:80::i;:::-;24571:4;24564:11;;24366:217;;;;:::o;29648:183::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29748:12:::1;:21;;;29770:13;29785:12;:22;;;29816:4;29785:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29748:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29648:183:::0;;:::o;21160:26::-;;;;:::o;25954:337::-;26008:14;26025:12;:10;:12::i;:::-;26008:29;;26057:11;:19;26069:6;26057:19;;;;;;;;;;;;;;;;;;;;;;;;;26056:20;26048:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;26137:15;26166:19;26177:7;26166:10;:19::i;:::-;26136:49;;;;;;;26215:7;26196;:15;26204:6;26196:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;26244:7;26233;;:18;;;;;;;:::i;:::-;;;;;;;;26276:7;26262:10;;:21;;;;;;;:::i;:::-;;;;;;;;25997:294;;25954:337;:::o;28684:113::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28785:4:::1;28755:18;:27;28774:7;28755:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;28684:113:::0;:::o;26299:449::-;26392:7;20692:24;26420:7;:18;;26412:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26490:17;26485:256;;26525:15;26554:19;26565:7;26554:10;:19::i;:::-;26524:49;;;;;;;26595:7;26588:14;;;;;26485:256;26638:23;26673:19;26684:7;26673:10;:19::i;:::-;26635:57;;;;;;;26714:15;26707:22;;;26299:449;;;;;:::o;20723:83::-;20764:42;20723:83;:::o;29443:197::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29590:9:::1;;;;;;;;;;;29582:27;;:50;29610:21;29582:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29443:197::o:0;21403:38::-;;;:::o;21478:40::-;;;;;;;;;;;;;:::o;27014:532::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20764:42:::1;27096:25;;:7;:25;;::::0;27088:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27295:11;:20;27307:7;27295:20;;;;;;;;;;;;;;;;;;;;;;;;;27294:21;27286:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27381:1;27362:7;:16;27370:7;27362:16;;;;;;;;;;;;;;;;:20;27358:109;;;27418:37;27438:7;:16;27446:7;27438:16;;;;;;;;;;;;;;;;27418:19;:37::i;:::-;27399:7;:16;27407:7;27399:16;;;;;;;;;;;;;;;:56;;;;27358:109;27500:4;27477:11;:20;27489:7;27477:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;27515:9;27530:7;27515:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27014:532:::0;:::o;33857:126::-;33924:4;33948:18;:27;33967:7;33948:27;;;;;;;;;;;;;;;;;;;;;;;;;33941:34;;33857:126;;;:::o;28925:120::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29024:13:::1;29006:15;;:31;;;;;;;;;;;;;;;;;;28925:120:::0;:::o;30222:123::-;30292:4;30316:10;:21;30327:9;30316:21;;;;;;;;;;;;;;;;;;;;;;;;;30309:28;;30222:123;;;:::o;21243:33::-;;;;:::o;23226:248::-;23292:7;20764:42;23316:25;;:7;:25;;;23312:39;;23350:1;23343:8;;;;23312:39;23366:11;:20;23378:7;23366:20;;;;;;;;;;;;;;;;;;;;;;;;;23362:49;;;23395:7;:16;23403:7;23395:16;;;;;;;;;;;;;;;;23388:23;;;;23362:49;23429:37;23449:7;:16;23457:7;23449:16;;;;;;;;;;;;;;;;23429:19;:37::i;:::-;23422:44;;23226:248;;;;:::o;11191:148::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11298:1:::1;11261:40;;11282:6;::::0;::::1;;;;;;;;11261:40;;;;;;;;;;;;11329:1;11312:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;11191:148::o:0;20902:30::-;;;;;;;;;;;;;:::o;29839:141::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29927:13:::1;:22;;:45;29950:21;29927:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29839:141:::0;:::o;21527:54::-;;;;:::o;24940:122::-;25010:4;25034:11;:20;25046:7;25034:20;;;;;;;;;;;;;;;;;;;;;;;;;25027:27;;24940:122;;;:::o;25167:193::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25249:14:::1;:12;:14::i;:::-;25274:52;25284:12;:10;:12::i;:::-;25298:9;25318:7;25309:6;:16;;;;:::i;:::-;25274:9;:52::i;:::-;25337:15;:13;:15::i;:::-;25167:193:::0;;:::o;10549:79::-;10587:7;10614:6;;;;;;;;;;;10607:13;;10549:79;:::o;20939:24::-;;;;;;;;;;;;;:::o;22838:89::-;22879:13;22912:7;;;;;;;;;;;;;;;;;22905:14;;22838:89;:::o;24591:341::-;24686:4;24730:11;:25;24742:12;:10;:12::i;:::-;24730:25;;;;;;;;;;;;;;;:34;24756:7;24730:34;;;;;;;;;;;;;;;;24711:15;:53;;24703:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24817:85;24826:12;:10;:12::i;:::-;24840:7;24886:15;24849:11;:25;24861:12;:10;:12::i;:::-;24849:25;;;;;;;;;;;;;;;:34;24875:7;24849:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;24817:8;:85::i;:::-;24920:4;24913:11;;24591:341;;;;:::o;30353:77::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30418:4:::1;30407:8;;:15;;;;;;;;;;;;;;;;;;30353:77::o:0;23482:169::-;23562:4;23579:42;23589:12;:10;:12::i;:::-;23603:9;23614:6;23579:9;:42::i;:::-;23639:4;23632:11;;23482:169;;;;:::o;30566:173::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30669:8:::1;30645:21;;:32;;;;;;;;;;;;;;;;;;30693:38;30722:8;30693:38;;;;;;:::i;:::-;;;;;;;;30566:173:::0;:::o;21588:67::-;;;;:::o;25557:389::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25668:16:::1;25728:7;;:14;;25707:10;;:17;;:35;25699:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25781:158;25799:10;;:17;;25788:8;:28;25781:158;;;25833:66;25849:10;;25860:8;25849:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25891:7;25871;;25879:8;25871:17;;;;;;;:::i;:::-;;;;;;;;:27;;;;:::i;:::-;25833:15;:66::i;:::-;25926:1;25914:13;;;;;:::i;:::-;;;25781:158;;;25657:289;25557:389:::0;;;;:::o;23659:145::-;23742:7;23769:11;:18;23781:5;23769:18;;;;;;;;;;;;;;;:27;23788:7;23769:27;;;;;;;;;;;;;;;;23762:34;;23659:145;;;;:::o;28805:112::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28904:5:::1;28874:18;:27;28893:7;28874:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;28805:112:::0;:::o;11494:244::-;10771:12;:10;:12::i;:::-;10761:22;;:6;;;;;;;;;;:22;;;10753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11603:1:::1;11583:22;;:8;:22;;::::0;11575:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11693:8;11664:38;;11685:6;::::0;::::1;;;;;;;;11664:38;;;;;;;;;;;;11722:8;11713:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;11494:244:::0;:::o;2837:98::-;2890:7;2917:10;2910:17;;2837:98;:::o;33991:337::-;34101:1;34084:19;;:5;:19;;;34076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34182:1;34163:21;;:7;:21;;;34155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34266:6;34236:11;:18;34248:5;34236:18;;;;;;;;;;;;;;;:27;34255:7;34236:27;;;;;;;;;;;;;;;:36;;;;34304:7;34288:32;;34297:5;34288:32;;;34313:6;34288:32;;;;;;:::i;:::-;;;;;;;;33991:337;;;:::o;34336:1674::-;34440:1;34424:18;;:4;:18;;;34416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34517:1;34503:16;;:2;:16;;;34495:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34587:1;34578:6;:10;34570:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34657:7;:5;:7::i;:::-;34649:15;;:4;:15;;;;:32;;;;;34674:7;:5;:7::i;:::-;34668:13;;:2;:13;;;;34649:32;34645:126;;;34714:12;;34704:6;:22;;34696:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34645:126;35066:28;35097:24;35115:4;35097:9;:24::i;:::-;35066:55;;35162:12;;35138:20;:36;35134:104;;35214:12;;35191:35;;35134:104;35250:24;35301:29;;35277:20;:53;;35250:80;;35345:19;:40;;;;;35369:16;;;;;;;;;;;35368:17;35345:40;:65;;;;;35397:13;35389:21;;:4;:21;;;;35345:65;:90;;;;;35414:21;;;;;;;;;;;35345:90;35341:255;;;35475:29;;35452:52;;35548:36;35563:20;35548:14;:36::i;:::-;35341:255;35669:12;35684:4;35669:19;;35789:18;:24;35808:4;35789:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;35817:18;:22;35836:2;35817:22;;;;;;;;;;;;;;;;;;;;;;;;;35789:50;35785:98;;;35866:5;35856:15;;35785:98;35961:41;35976:4;35982:2;35986:6;35994:7;35961:14;:41::i;:::-;34405:1605;;;34336:1674;;;:::o;32192:161::-;32234:7;32255:15;32272;32291:19;:17;:19::i;:::-;32254:56;;;;32338:7;32328;:17;;;;:::i;:::-;32321:24;;;;32192:161;:::o;30968:419::-;31027:7;31036;31045;31054;31063;31072;31093:23;31118:12;31132:18;31154:20;31166:7;31154:11;:20::i;:::-;31092:82;;;;;;31186:15;31203:23;31228:12;31244:50;31256:7;31265:4;31271:10;31283;:8;:10::i;:::-;31244:11;:50::i;:::-;31185:109;;;;;;31313:7;31322:15;31339:4;31345:15;31362:4;31368:10;31305:74;;;;;;;;;;;;;;;;;;30968:419;;;;;;;:::o;33481:235::-;33539:1;33528:7;;:12;:34;;;;;33561:1;33544:13;;:18;33528:34;33564:7;33524:47;33601:7;;33583:15;:25;;;;33643:13;;33619:21;:37;;;;33679:1;33669:7;:11;;;;33707:1;33691:13;:17;;;;33481:235;:::o;33724:125::-;33778:15;;33768:7;:25;;;;33820:21;;33804:13;:37;;;;33724:125::o;25368:181::-;25448:14;:12;:14::i;:::-;25473:42;25483:12;:10;:12::i;:::-;25497:9;25508:6;25473:9;:42::i;:::-;25526:15;:13;:15::i;:::-;25368:181;;:::o;36018:1169::-;21941:4;21922:16;;:23;;;;;;;;;;;;;;;;;;36196:20:::1;36248:1;36243;36220:20;:24;;;;:::i;:::-;36219:30;;;;:::i;:::-;36196:53;;36260:17;36303:1;36280:20;:24;;;;:::i;:::-;36260:44;;36315:16;36372:9;36357:12;36334:20;:35;;;;:::i;:::-;:47;;;;:::i;:::-;36315:66;;36421:59;36447:4;20764:42;36470:9;36421:17;:59::i;:::-;36527:30;36544:12;36527:16;:30::i;:::-;36618:18;36639:21;36618:42;;36671:22;36715:1;36710;36697:10;:14;;;;:::i;:::-;36696:20;;;;:::i;:::-;36671:45;;36735:15;;;;;;;;;;;36727:33;;:49;36761:14;36727:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36787:26;36829:14;36816:10;:27;;;;:::i;:::-;36787:56;;36854:18;36902:1;36897;36876:18;:22;;;;:::i;:::-;36875:28;;;;:::i;:::-;36854:49;;36922:9;;;;;;;;;;;36914:27;;:39;36942:10;36914:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36964:23;37011:10;36990:18;:31;;;;:::i;:::-;36964:57;;37071:39;37084:8;37094:15;37071:12;:39::i;:::-;37128:51;37143:8;37153:15;37170:8;37128:51;;;;;;;;:::i;:::-;;;;;;;;36092:1095;;;;;;;;21987:5:::0;21968:16;;:24;;;;;;;;;;;;;;;;;;36018:1169;:::o;38386:1092::-;38499:8;;;;;;;;;;;38494:145;;38542:7;:5;:7::i;:::-;38532:17;;:6;:17;;;:46;;;;38563:15;;;;;;;;;;;38553:25;;:6;:25;;;38532:46;38524:55;;;;;;38494:145;38655:10;:18;38666:6;38655:18;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;38677:10;:21;38688:9;38677:21;;;;;;;;;;;;;;;;;;;;;;;;;38655:43;38651:128;;;20557:5;38715:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;38651:128;38796:7;38791:28;;38805:14;:12;:14::i;:::-;38791:28;38836:11;:19;38848:6;38836:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;38860:11;:22;38872:9;38860:22;;;;;;;;;;;;;;;;;;;;;;;;;38859:23;38836:46;38832:597;;;38899:48;38921:6;38929:9;38940:6;38899:21;:48::i;:::-;38832:597;;;38970:11;:19;38982:6;38970:19;;;;;;;;;;;;;;;;;;;;;;;;;38969:20;:46;;;;;38993:11;:22;39005:9;38993:22;;;;;;;;;;;;;;;;;;;;;;;;;38969:46;38965:464;;;39032:46;39052:6;39060:9;39071:6;39032:19;:46::i;:::-;38965:464;;;39101:11;:19;39113:6;39101:19;;;;;;;;;;;;;;;;;;;;;;;;;39100:20;:47;;;;;39125:11;:22;39137:9;39125:22;;;;;;;;;;;;;;;;;;;;;;;;;39124:23;39100:47;39096:333;;;39164:44;39182:6;39190:9;39201:6;39164:17;:44::i;:::-;39096:333;;;39230:11;:19;39242:6;39230:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;39253:11;:22;39265:9;39253:22;;;;;;;;;;;;;;;;;;;;;;;;;39230:45;39226:203;;;39292:48;39314:6;39322:9;39333:6;39292:21;:48::i;:::-;39226:203;;;39373:44;39391:6;39399:9;39410:6;39373:17;:44::i;:::-;39226:203;39096:333;38965:464;38832:597;39446:7;39441:29;;39455:15;:13;:15::i;:::-;39441:29;38386:1092;;;;:::o;32361:531::-;32412:7;32421;32441:15;32459:7;;32441:25;;32477:15;20692:24;32477:25;;32518:9;32513:265;32537:9;:16;;;;32533:1;:20;32513:265;;;32603:7;32579;:21;32587:9;32597:1;32587:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32579:21;;;;;;;;;;;;;;;;:31;:66;;;;32638:7;32614;:21;32622:9;32632:1;32622:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32614:21;;;;;;;;;;;;;;;;:31;32579:66;32575:97;;;32655:7;;20692:24;32647:25;;;;;;;;;32575:97;32698:7;:21;32706:9;32716:1;32706:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32698:21;;;;;;;;;;;;;;;;32687:32;;;;;:::i;:::-;;;32745:7;:21;32753:9;32763:1;32753:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32745:21;;;;;;;;;;;;;;;;32734:32;;;;;:::i;:::-;;;32555:3;;;;;:::i;:::-;;;;32513:265;;;;20692:24;32803:7;;:17;;;;:::i;:::-;32792:7;:29;32788:60;;;32831:7;;20692:24;32823:25;;;;;;;;32788:60;32867:7;32876;32859:25;;;;;;32361:531;;;:::o;31395:324::-;31455:7;31464;31473;31493:12;31508:24;31524:7;31508:15;:24::i;:::-;31493:39;;31543:18;31564:30;31586:7;31564:21;:30::i;:::-;31543:51;;31605:23;31648:10;31641:4;31631:7;:14;;;;:::i;:::-;:27;;;;:::i;:::-;31605:53;;31677:15;31694:4;31700:10;31669:42;;;;;;;;;31395:324;;;;;:::o;31727:457::-;31885:7;31894;31903;31923:15;31951:11;31941:7;:21;;;;:::i;:::-;31923:39;;31973:12;31995:11;31988:4;:18;;;;:::i;:::-;31973:33;;32017:18;32051:11;32038:10;:24;;;;:::i;:::-;32017:45;;32073:23;32116:10;32109:4;32099:7;:14;;;;:::i;:::-;:27;;;;:::i;:::-;32073:53;;32145:7;32154:15;32171:4;32137:39;;;;;;;;;;31727:457;;;;;;;;:::o;39486:548::-;39599:15;39629:23;39667:12;39694:23;39732:12;39759:18;39791:19;39802:7;39791:10;:19::i;:::-;39584:226;;;;;;;;;;;;39840:7;39821;:15;39829:6;39821:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;39880:15;39858:7;:18;39866:9;39858:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;39906:26;39921:10;39906:14;:26::i;:::-;39943:23;39955:4;39961;39943:11;:23::i;:::-;39999:9;39982:44;;39991:6;39982:44;;;40010:15;39982:44;;;;;;:::i;:::-;;;;;;;;39573:461;;;;;;39486:548;;;:::o;37195:589::-;37321:21;37359:1;37345:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37321:40;;37390:4;37372;37377:1;37372:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37416:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37406:4;37411:1;37406:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37451:62;37468:4;37483:15;37501:11;37451:8;:62::i;:::-;37552:15;:66;;;37633:11;37659:1;37703:4;37730;37750:15;37552:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37250:534;37195:589;:::o;37792:513::-;37940:62;37957:4;37972:15;37990:11;37940:8;:62::i;:::-;38045:15;:31;;;38084:9;38117:4;38137:11;38163:1;38206;38249:7;:5;:7::i;:::-;38271:15;38045:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37792:513;;:::o;40648:589::-;40765:15;40795:23;40833:12;40860:23;40898:12;40925:18;40957:19;40968:7;40957:10;:19::i;:::-;40750:226;;;;;;;;;;;;41006:7;40987;:15;40995:6;40987:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;41043:7;41024;:15;41032:6;41024:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;41083:15;41061:7;:18;41069:9;41061:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;41109:26;41124:10;41109:14;:26::i;:::-;41146:23;41158:4;41164;41146:11;:23::i;:::-;41202:9;41185:44;;41194:6;41185:44;;;41213:15;41185:44;;;;;;:::i;:::-;;;;;;;;40739:498;;;;;;40648:589;;;:::o;40042:598::-;40157:15;40187:23;40225:12;40252:23;40290:12;40317:18;40349:19;40360:7;40349:10;:19::i;:::-;40142:226;;;;;;;;;;;;40398:7;40379;:15;40387:6;40379:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;40438:15;40416:7;:18;40424:9;40416:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;40486:15;40464:7;:18;40472:9;40464:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;40512:26;40527:10;40512:14;:26::i;:::-;40549:23;40561:4;40567;40549:11;:23::i;:::-;40605:9;40588:44;;40597:6;40588:44;;;40616:15;40588:44;;;;;;:::i;:::-;;;;;;;;40131:509;;;;;;40042:598;;;:::o;28039:637::-;28156:15;28186:23;28224:12;28251:23;28289:12;28316:18;28348:19;28359:7;28348:10;:19::i;:::-;28141:226;;;;;;;;;;;;28397:7;28378;:15;28386:6;28378:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;28434:7;28415;:15;28423:6;28415:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;28474:15;28452:7;:18;28460:9;28452:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;28522:15;28500:7;:18;28508:9;28500:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;28548:26;28563:10;28548:14;:26::i;:::-;28585:23;28597:4;28603;28585:11;:23::i;:::-;28641:9;28624:44;;28633:6;28624:44;;;28652:15;28624:44;;;;;;:::i;:::-;;;;;;;;28130:546;;;;;;28039:637;;;:::o;33193:130::-;33257:7;33307;33295;;33285;:17;;;;:::i;:::-;33284:31;;;;:::i;:::-;33277:38;;33193:130;;;:::o;33331:142::-;33401:7;33457;33439:13;;33429:7;:23;;;;:::i;:::-;33428:37;;;;:::i;:::-;33421:44;;33331:142;;;:::o;32900:285::-;32963:19;32985:10;:8;:10::i;:::-;32963:32;;33006:18;33040:11;33027:10;:24;;;;:::i;:::-;33006:45;;33088:10;33062:7;:22;33078:4;33062:22;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;33113:11;:26;33133:4;33113:26;;;;;;;;;;;;;;;;;;;;;;;;;33109:68;;;33167:10;33141:7;:22;33157:4;33141:22;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;33109:68;32952:233;;32900:285;:::o;30840:120::-;30919:4;30908:7;;:15;;;;;;;:::i;:::-;;;;;;;;30948:4;30934:10;;:18;;;;;;;:::i;:::-;;;;;;;;30840:120;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:246::-;1537:1;1547:113;1561:6;1558:1;1555:13;1547:113;;;1646:1;1641:3;1637:11;1631:18;1627:1;1622:3;1618:11;1611:39;1583:2;1580:1;1576:10;1571:15;;1547:113;;;1694:1;1685:6;1680:3;1676:16;1669:27;1518:184;1456:246;;;:::o;1708:102::-;1749:6;1800:2;1796:7;1791:2;1784:5;1780:14;1776:28;1766:38;;1708:102;;;:::o;1816:377::-;1904:3;1932:39;1965:5;1932:39;:::i;:::-;1987:71;2051:6;2046:3;1987:71;:::i;:::-;1980:78;;2067:65;2125:6;2120:3;2113:4;2106:5;2102:16;2067:65;:::i;:::-;2157:29;2179:6;2157:29;:::i;:::-;2152:3;2148:39;2141:46;;1908:285;1816:377;;;;:::o;2199:313::-;2312:4;2350:2;2339:9;2335:18;2327:26;;2399:9;2393:4;2389:20;2385:1;2374:9;2370:17;2363:47;2427:78;2500:4;2491:6;2427:78;:::i;:::-;2419:86;;2199:313;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:329::-;5795:6;5844:2;5832:9;5823:7;5819:23;5815:32;5812:119;;;5850:79;;:::i;:::-;5812:119;5970:1;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5941:117;5736:329;;;;:::o;6071:86::-;6106:7;6146:4;6139:5;6135:16;6124:27;;6071:86;;;:::o;6163:112::-;6246:22;6262:5;6246:22;:::i;:::-;6241:3;6234:35;6163:112;;:::o;6281:214::-;6370:4;6408:2;6397:9;6393:18;6385:26;;6421:67;6485:1;6474:9;6470:17;6461:6;6421:67;:::i;:::-;6281:214;;;;:::o;6501:109::-;6551:7;6580:24;6598:5;6580:24;:::i;:::-;6569:35;;6501:109;;;:::o;6616:148::-;6702:37;6733:5;6702:37;:::i;:::-;6695:5;6692:48;6682:76;;6754:1;6751;6744:12;6682:76;6616:148;:::o;6770:165::-;6829:5;6867:6;6854:20;6845:29;;6883:46;6923:5;6883:46;:::i;:::-;6770:165;;;;:::o;6941:500::-;7022:6;7030;7079:2;7067:9;7058:7;7054:23;7050:32;7047:119;;;7085:79;;:::i;:::-;7047:119;7205:1;7230:66;7288:7;7279:6;7268:9;7264:22;7230:66;:::i;:::-;7220:76;;7176:130;7345:2;7371:53;7416:7;7407:6;7396:9;7392:22;7371:53;:::i;:::-;7361:63;;7316:118;6941:500;;;;;:::o;7447:116::-;7517:21;7532:5;7517:21;:::i;:::-;7510:5;7507:32;7497:60;;7553:1;7550;7543:12;7497:60;7447:116;:::o;7569:133::-;7612:5;7650:6;7637:20;7628:29;;7666:30;7690:5;7666:30;:::i;:::-;7569:133;;;;:::o;7708:468::-;7773:6;7781;7830:2;7818:9;7809:7;7805:23;7801:32;7798:119;;;7836:79;;:::i;:::-;7798:119;7956:1;7981:53;8026:7;8017:6;8006:9;8002:22;7981:53;:::i;:::-;7971:63;;7927:117;8083:2;8109:50;8151:7;8142:6;8131:9;8127:22;8109:50;:::i;:::-;8099:60;;8054:115;7708:468;;;;;:::o;8182:118::-;8269:24;8287:5;8269:24;:::i;:::-;8264:3;8257:37;8182:118;;:::o;8306:222::-;8399:4;8437:2;8426:9;8422:18;8414:26;;8450:71;8518:1;8507:9;8503:17;8494:6;8450:71;:::i;:::-;8306:222;;;;:::o;8534:104::-;8579:7;8608:24;8626:5;8608:24;:::i;:::-;8597:35;;8534:104;;;:::o;8644:138::-;8725:32;8751:5;8725:32;:::i;:::-;8718:5;8715:43;8705:71;;8772:1;8769;8762:12;8705:71;8644:138;:::o;8788:155::-;8842:5;8880:6;8867:20;8858:29;;8896:41;8931:5;8896:41;:::i;:::-;8788:155;;;;:::o;8949:345::-;9016:6;9065:2;9053:9;9044:7;9040:23;9036:32;9033:119;;;9071:79;;:::i;:::-;9033:119;9191:1;9216:61;9269:7;9260:6;9249:9;9245:22;9216:61;:::i;:::-;9206:71;;9162:125;8949:345;;;;:::o;9300:323::-;9356:6;9405:2;9393:9;9384:7;9380:23;9376:32;9373:119;;;9411:79;;:::i;:::-;9373:119;9531:1;9556:50;9598:7;9589:6;9578:9;9574:22;9556:50;:::i;:::-;9546:60;;9502:114;9300:323;;;;:::o;9629:117::-;9738:1;9735;9728:12;9752:117;9861:1;9858;9851:12;9875:117;9984:1;9981;9974:12;10015:568;10088:8;10098:6;10148:3;10141:4;10133:6;10129:17;10125:27;10115:122;;10156:79;;:::i;:::-;10115:122;10269:6;10256:20;10246:30;;10299:18;10291:6;10288:30;10285:117;;;10321:79;;:::i;:::-;10285:117;10435:4;10427:6;10423:17;10411:29;;10489:3;10481:4;10473:6;10469:17;10459:8;10455:32;10452:41;10449:128;;;10496:79;;:::i;:::-;10449:128;10015:568;;;;;:::o;10606:::-;10679:8;10689:6;10739:3;10732:4;10724:6;10720:17;10716:27;10706:122;;10747:79;;:::i;:::-;10706:122;10860:6;10847:20;10837:30;;10890:18;10882:6;10879:30;10876:117;;;10912:79;;:::i;:::-;10876:117;11026:4;11018:6;11014:17;11002:29;;11080:3;11072:4;11064:6;11060:17;11050:8;11046:32;11043:41;11040:128;;;11087:79;;:::i;:::-;11040:128;10606:568;;;;;:::o;11180:934::-;11302:6;11310;11318;11326;11375:2;11363:9;11354:7;11350:23;11346:32;11343:119;;;11381:79;;:::i;:::-;11343:119;11529:1;11518:9;11514:17;11501:31;11559:18;11551:6;11548:30;11545:117;;;11581:79;;:::i;:::-;11545:117;11694:80;11766:7;11757:6;11746:9;11742:22;11694:80;:::i;:::-;11676:98;;;;11472:312;11851:2;11840:9;11836:18;11823:32;11882:18;11874:6;11871:30;11868:117;;;11904:79;;:::i;:::-;11868:117;12017:80;12089:7;12080:6;12069:9;12065:22;12017:80;:::i;:::-;11999:98;;;;11794:313;11180:934;;;;;;;:::o;12120:474::-;12188:6;12196;12245:2;12233:9;12224:7;12220:23;12216:32;12213:119;;;12251:79;;:::i;:::-;12213:119;12371:1;12396:53;12441:7;12432:6;12421:9;12417:22;12396:53;:::i;:::-;12386:63;;12342:117;12498:2;12524:53;12569:7;12560:6;12549:9;12545:22;12524:53;:::i;:::-;12514:63;;12469:118;12120:474;;;;;:::o;12600:182::-;12740:34;12736:1;12728:6;12724:14;12717:58;12600:182;:::o;12788:366::-;12930:3;12951:67;13015:2;13010:3;12951:67;:::i;:::-;12944:74;;13027:93;13116:3;13027:93;:::i;:::-;13145:2;13140:3;13136:12;13129:19;;12788:366;;;:::o;13160:419::-;13326:4;13364:2;13353:9;13349:18;13341:26;;13413:9;13407:4;13403:20;13399:1;13388:9;13384:17;13377:47;13441:131;13567:4;13441:131;:::i;:::-;13433:139;;13160:419;;;:::o;13585:180::-;13633:77;13630:1;13623:88;13730:4;13727:1;13720:15;13754:4;13751:1;13744:15;13771:194;13811:4;13831:20;13849:1;13831:20;:::i;:::-;13826:25;;13865:20;13883:1;13865:20;:::i;:::-;13860:25;;13909:1;13906;13902:9;13894:17;;13933:1;13927:4;13924:11;13921:37;;;13938:18;;:::i;:::-;13921:37;13771:194;;;;:::o;13971:227::-;14111:34;14107:1;14099:6;14095:14;14088:58;14180:10;14175:2;14167:6;14163:15;14156:35;13971:227;:::o;14204:366::-;14346:3;14367:67;14431:2;14426:3;14367:67;:::i;:::-;14360:74;;14443:93;14532:3;14443:93;:::i;:::-;14561:2;14556:3;14552:12;14545:19;;14204:366;;;:::o;14576:419::-;14742:4;14780:2;14769:9;14765:18;14757:26;;14829:9;14823:4;14819:20;14815:1;14804:9;14800:17;14793:47;14857:131;14983:4;14857:131;:::i;:::-;14849:139;;14576:419;;;:::o;15001:239::-;15141:34;15137:1;15129:6;15125:14;15118:58;15210:22;15205:2;15197:6;15193:15;15186:47;15001:239;:::o;15246:366::-;15388:3;15409:67;15473:2;15468:3;15409:67;:::i;:::-;15402:74;;15485:93;15574:3;15485:93;:::i;:::-;15603:2;15598:3;15594:12;15587:19;;15246:366;;;:::o;15618:419::-;15784:4;15822:2;15811:9;15807:18;15799:26;;15871:9;15865:4;15861:20;15857:1;15846:9;15842:17;15835:47;15899:131;16025:4;15899:131;:::i;:::-;15891:139;;15618:419;;;:::o;16043:410::-;16083:7;16106:20;16124:1;16106:20;:::i;:::-;16101:25;;16140:20;16158:1;16140:20;:::i;:::-;16135:25;;16195:1;16192;16188:9;16217:30;16235:11;16217:30;:::i;:::-;16206:41;;16396:1;16387:7;16383:15;16380:1;16377:22;16357:1;16350:9;16330:83;16307:139;;16426:18;;:::i;:::-;16307:139;16091:362;16043:410;;;;:::o;16459:229::-;16599:34;16595:1;16587:6;16583:14;16576:58;16668:12;16663:2;16655:6;16651:15;16644:37;16459:229;:::o;16694:366::-;16836:3;16857:67;16921:2;16916:3;16857:67;:::i;:::-;16850:74;;16933:93;17022:3;16933:93;:::i;:::-;17051:2;17046:3;17042:12;17035:19;;16694:366;;;:::o;17066:419::-;17232:4;17270:2;17259:9;17255:18;17247:26;;17319:9;17313:4;17309:20;17305:1;17294:9;17290:17;17283:47;17347:131;17473:4;17347:131;:::i;:::-;17339:139;;17066:419;;;:::o;17491:180::-;17539:77;17536:1;17529:88;17636:4;17633:1;17626:15;17660:4;17657:1;17650:15;17677:185;17717:1;17734:20;17752:1;17734:20;:::i;:::-;17729:25;;17768:20;17786:1;17768:20;:::i;:::-;17763:25;;17807:1;17797:35;;17812:18;;:::i;:::-;17797:35;17854:1;17851;17847:9;17842:14;;17677:185;;;;:::o;17868:177::-;18008:29;18004:1;17996:6;17992:14;17985:53;17868:177;:::o;18051:366::-;18193:3;18214:67;18278:2;18273:3;18214:67;:::i;:::-;18207:74;;18290:93;18379:3;18290:93;:::i;:::-;18408:2;18403:3;18399:12;18392:19;;18051:366;;;:::o;18423:419::-;18589:4;18627:2;18616:9;18612:18;18604:26;;18676:9;18670:4;18666:20;18662:1;18651:9;18647:17;18640:47;18704:131;18830:4;18704:131;:::i;:::-;18696:139;;18423:419;;;:::o;18848:180::-;18896:77;18893:1;18886:88;18993:4;18990:1;18983:15;19017:4;19014:1;19007:15;19034:180;19082:77;19079:1;19072:88;19179:4;19176:1;19169:15;19203:4;19200:1;19193:15;19220:233;19259:3;19282:24;19300:5;19282:24;:::i;:::-;19273:33;;19328:66;19321:5;19318:77;19315:103;;19398:18;;:::i;:::-;19315:103;19445:1;19438:5;19434:13;19427:20;;19220:233;;;:::o;19459:191::-;19499:3;19518:20;19536:1;19518:20;:::i;:::-;19513:25;;19552:20;19570:1;19552:20;:::i;:::-;19547:25;;19595:1;19592;19588:9;19581:16;;19616:3;19613:1;19610:10;19607:36;;;19623:18;;:::i;:::-;19607:36;19459:191;;;;:::o;19656:143::-;19713:5;19744:6;19738:13;19729:22;;19760:33;19787:5;19760:33;:::i;:::-;19656:143;;;;:::o;19805:351::-;19875:6;19924:2;19912:9;19903:7;19899:23;19895:32;19892:119;;;19930:79;;:::i;:::-;19892:119;20050:1;20075:64;20131:7;20122:6;20111:9;20107:22;20075:64;:::i;:::-;20065:74;;20021:128;19805:351;;;;:::o;20162:332::-;20283:4;20321:2;20310:9;20306:18;20298:26;;20334:71;20402:1;20391:9;20387:17;20378:6;20334:71;:::i;:::-;20415:72;20483:2;20472:9;20468:18;20459:6;20415:72;:::i;:::-;20162:332;;;;;:::o;20500:137::-;20554:5;20585:6;20579:13;20570:22;;20601:30;20625:5;20601:30;:::i;:::-;20500:137;;;;:::o;20643:345::-;20710:6;20759:2;20747:9;20738:7;20734:23;20730:32;20727:119;;;20765:79;;:::i;:::-;20727:119;20885:1;20910:61;20963:7;20954:6;20943:9;20939:22;20910:61;:::i;:::-;20900:71;;20856:125;20643:345;;;;:::o;20994:231::-;21134:34;21130:1;21122:6;21118:14;21111:58;21203:14;21198:2;21190:6;21186:15;21179:39;20994:231;:::o;21231:366::-;21373:3;21394:67;21458:2;21453:3;21394:67;:::i;:::-;21387:74;;21470:93;21559:3;21470:93;:::i;:::-;21588:2;21583:3;21579:12;21572:19;;21231:366;;;:::o;21603:419::-;21769:4;21807:2;21796:9;21792:18;21784:26;;21856:9;21850:4;21846:20;21842:1;21831:9;21827:17;21820:47;21884:131;22010:4;21884:131;:::i;:::-;21876:139;;21603:419;;;:::o;22028:181::-;22168:33;22164:1;22156:6;22152:14;22145:57;22028:181;:::o;22215:366::-;22357:3;22378:67;22442:2;22437:3;22378:67;:::i;:::-;22371:74;;22454:93;22543:3;22454:93;:::i;:::-;22572:2;22567:3;22563:12;22556:19;;22215:366;;;:::o;22587:419::-;22753:4;22791:2;22780:9;22776:18;22768:26;;22840:9;22834:4;22830:20;22826:1;22815:9;22811:17;22804:47;22868:131;22994:4;22868:131;:::i;:::-;22860:139;;22587:419;;;:::o;23012:222::-;23152:34;23148:1;23140:6;23136:14;23129:58;23221:5;23216:2;23208:6;23204:15;23197:30;23012:222;:::o;23240:366::-;23382:3;23403:67;23467:2;23462:3;23403:67;:::i;:::-;23396:74;;23479:93;23568:3;23479:93;:::i;:::-;23597:2;23592:3;23588:12;23581:19;;23240:366;;;:::o;23612:419::-;23778:4;23816:2;23805:9;23801:18;23793:26;;23865:9;23859:4;23855:20;23851:1;23840:9;23836:17;23829:47;23893:131;24019:4;23893:131;:::i;:::-;23885:139;;23612:419;;;:::o;24037:224::-;24177:34;24173:1;24165:6;24161:14;24154:58;24246:7;24241:2;24233:6;24229:15;24222:32;24037:224;:::o;24267:366::-;24409:3;24430:67;24494:2;24489:3;24430:67;:::i;:::-;24423:74;;24506:93;24595:3;24506:93;:::i;:::-;24624:2;24619:3;24615:12;24608:19;;24267:366;;;:::o;24639:419::-;24805:4;24843:2;24832:9;24828:18;24820:26;;24892:9;24886:4;24882:20;24878:1;24867:9;24863:17;24856:47;24920:131;25046:4;24920:131;:::i;:::-;24912:139;;24639:419;;;:::o;25064:173::-;25204:25;25200:1;25192:6;25188:14;25181:49;25064:173;:::o;25243:366::-;25385:3;25406:67;25470:2;25465:3;25406:67;:::i;:::-;25399:74;;25482:93;25571:3;25482:93;:::i;:::-;25600:2;25595:3;25591:12;25584:19;;25243:366;;;:::o;25615:419::-;25781:4;25819:2;25808:9;25804:18;25796:26;;25868:9;25862:4;25858:20;25854:1;25843:9;25839:17;25832:47;25896:131;26022:4;25896:131;:::i;:::-;25888:139;;25615:419;;;:::o;26040:225::-;26180:34;26176:1;26168:6;26164:14;26157:58;26249:8;26244:2;26236:6;26232:15;26225:33;26040:225;:::o;26271:366::-;26413:3;26434:67;26498:2;26493:3;26434:67;:::i;:::-;26427:74;;26510:93;26599:3;26510:93;:::i;:::-;26628:2;26623:3;26619:12;26612:19;;26271:366;;;:::o;26643:419::-;26809:4;26847:2;26836:9;26832:18;26824:26;;26896:9;26890:4;26886:20;26882:1;26871:9;26867:17;26860:47;26924:131;27050:4;26924:131;:::i;:::-;26916:139;;26643:419;;;:::o;27068:223::-;27208:34;27204:1;27196:6;27192:14;27185:58;27277:6;27272:2;27264:6;27260:15;27253:31;27068:223;:::o;27297:366::-;27439:3;27460:67;27524:2;27519:3;27460:67;:::i;:::-;27453:74;;27536:93;27625:3;27536:93;:::i;:::-;27654:2;27649:3;27645:12;27638:19;;27297:366;;;:::o;27669:419::-;27835:4;27873:2;27862:9;27858:18;27850:26;;27922:9;27916:4;27912:20;27908:1;27897:9;27893:17;27886:47;27950:131;28076:4;27950:131;:::i;:::-;27942:139;;27669:419;;;:::o;28094:221::-;28234:34;28230:1;28222:6;28218:14;28211:58;28303:4;28298:2;28290:6;28286:15;28279:29;28094:221;:::o;28321:366::-;28463:3;28484:67;28548:2;28543:3;28484:67;:::i;:::-;28477:74;;28560:93;28649:3;28560:93;:::i;:::-;28678:2;28673:3;28669:12;28662:19;;28321:366;;;:::o;28693:419::-;28859:4;28897:2;28886:9;28882:18;28874:26;;28946:9;28940:4;28936:20;28932:1;28921:9;28917:17;28910:47;28974:131;29100:4;28974:131;:::i;:::-;28966:139;;28693:419;;;:::o;29118:224::-;29258:34;29254:1;29246:6;29242:14;29235:58;29327:7;29322:2;29314:6;29310:15;29303:32;29118:224;:::o;29348:366::-;29490:3;29511:67;29575:2;29570:3;29511:67;:::i;:::-;29504:74;;29587:93;29676:3;29587:93;:::i;:::-;29705:2;29700:3;29696:12;29689:19;;29348:366;;;:::o;29720:419::-;29886:4;29924:2;29913:9;29909:18;29901:26;;29973:9;29967:4;29963:20;29959:1;29948:9;29944:17;29937:47;30001:131;30127:4;30001:131;:::i;:::-;29993:139;;29720:419;;;:::o;30145:222::-;30285:34;30281:1;30273:6;30269:14;30262:58;30354:5;30349:2;30341:6;30337:15;30330:30;30145:222;:::o;30373:366::-;30515:3;30536:67;30600:2;30595:3;30536:67;:::i;:::-;30529:74;;30612:93;30701:3;30612:93;:::i;:::-;30730:2;30725:3;30721:12;30714:19;;30373:366;;;:::o;30745:419::-;30911:4;30949:2;30938:9;30934:18;30926:26;;30998:9;30992:4;30988:20;30984:1;30973:9;30969:17;30962:47;31026:131;31152:4;31026:131;:::i;:::-;31018:139;;30745:419;;;:::o;31170:228::-;31310:34;31306:1;31298:6;31294:14;31287:58;31379:11;31374:2;31366:6;31362:15;31355:36;31170:228;:::o;31404:366::-;31546:3;31567:67;31631:2;31626:3;31567:67;:::i;:::-;31560:74;;31643:93;31732:3;31643:93;:::i;:::-;31761:2;31756:3;31752:12;31745:19;;31404:366;;;:::o;31776:419::-;31942:4;31980:2;31969:9;31965:18;31957:26;;32029:9;32023:4;32019:20;32015:1;32004:9;32000:17;31993:47;32057:131;32183:4;32057:131;:::i;:::-;32049:139;;31776:419;;;:::o;32201:227::-;32341:34;32337:1;32329:6;32325:14;32318:58;32410:10;32405:2;32397:6;32393:15;32386:35;32201:227;:::o;32434:366::-;32576:3;32597:67;32661:2;32656:3;32597:67;:::i;:::-;32590:74;;32673:93;32762:3;32673:93;:::i;:::-;32791:2;32786:3;32782:12;32775:19;;32434:366;;;:::o;32806:419::-;32972:4;33010:2;32999:9;32995:18;32987:26;;33059:9;33053:4;33049:20;33045:1;33034:9;33030:17;33023:47;33087:131;33213:4;33087:131;:::i;:::-;33079:139;;32806:419;;;:::o;33231:442::-;33380:4;33418:2;33407:9;33403:18;33395:26;;33431:71;33499:1;33488:9;33484:17;33475:6;33431:71;:::i;:::-;33512:72;33580:2;33569:9;33565:18;33556:6;33512:72;:::i;:::-;33594;33662:2;33651:9;33647:18;33638:6;33594:72;:::i;:::-;33231:442;;;;;;:::o;33679:177::-;33819:29;33815:1;33807:6;33803:14;33796:53;33679:177;:::o;33862:366::-;34004:3;34025:67;34089:2;34084:3;34025:67;:::i;:::-;34018:74;;34101:93;34190:3;34101:93;:::i;:::-;34219:2;34214:3;34210:12;34203:19;;33862:366;;;:::o;34234:419::-;34400:4;34438:2;34427:9;34423:18;34415:26;;34487:9;34481:4;34477:20;34473:1;34462:9;34458:17;34451:47;34515:131;34641:4;34515:131;:::i;:::-;34507:139;;34234:419;;;:::o;34659:180::-;34707:77;34704:1;34697:88;34804:4;34801:1;34794:15;34828:4;34825:1;34818:15;34845:143;34902:5;34933:6;34927:13;34918:22;;34949:33;34976:5;34949:33;:::i;:::-;34845:143;;;;:::o;34994:351::-;35064:6;35113:2;35101:9;35092:7;35088:23;35084:32;35081:119;;;35119:79;;:::i;:::-;35081:119;35239:1;35264:64;35320:7;35311:6;35300:9;35296:22;35264:64;:::i;:::-;35254:74;;35210:128;34994:351;;;;:::o;35351:85::-;35396:7;35425:5;35414:16;;35351:85;;;:::o;35442:158::-;35500:9;35533:61;35551:42;35560:32;35586:5;35560:32;:::i;:::-;35551:42;:::i;:::-;35533:61;:::i;:::-;35520:74;;35442:158;;;:::o;35606:147::-;35701:45;35740:5;35701:45;:::i;:::-;35696:3;35689:58;35606:147;;:::o;35759:114::-;35826:6;35860:5;35854:12;35844:22;;35759:114;;;:::o;35879:184::-;35978:11;36012:6;36007:3;36000:19;36052:4;36047:3;36043:14;36028:29;;35879:184;;;;:::o;36069:132::-;36136:4;36159:3;36151:11;;36189:4;36184:3;36180:14;36172:22;;36069:132;;;:::o;36207:108::-;36284:24;36302:5;36284:24;:::i;:::-;36279:3;36272:37;36207:108;;:::o;36321:179::-;36390:10;36411:46;36453:3;36445:6;36411:46;:::i;:::-;36489:4;36484:3;36480:14;36466:28;;36321:179;;;;:::o;36506:113::-;36576:4;36608;36603:3;36599:14;36591:22;;36506:113;;;:::o;36655:732::-;36774:3;36803:54;36851:5;36803:54;:::i;:::-;36873:86;36952:6;36947:3;36873:86;:::i;:::-;36866:93;;36983:56;37033:5;36983:56;:::i;:::-;37062:7;37093:1;37078:284;37103:6;37100:1;37097:13;37078:284;;;37179:6;37173:13;37206:63;37265:3;37250:13;37206:63;:::i;:::-;37199:70;;37292:60;37345:6;37292:60;:::i;:::-;37282:70;;37138:224;37125:1;37122;37118:9;37113:14;;37078:284;;;37082:14;37378:3;37371:10;;36779:608;;;36655:732;;;;:::o;37393:831::-;37656:4;37694:3;37683:9;37679:19;37671:27;;37708:71;37776:1;37765:9;37761:17;37752:6;37708:71;:::i;:::-;37789:80;37865:2;37854:9;37850:18;37841:6;37789:80;:::i;:::-;37916:9;37910:4;37906:20;37901:2;37890:9;37886:18;37879:48;37944:108;38047:4;38038:6;37944:108;:::i;:::-;37936:116;;38062:72;38130:2;38119:9;38115:18;38106:6;38062:72;:::i;:::-;38144:73;38212:3;38201:9;38197:19;38188:6;38144:73;:::i;:::-;37393:831;;;;;;;;:::o;38230:807::-;38479:4;38517:3;38506:9;38502:19;38494:27;;38531:71;38599:1;38588:9;38584:17;38575:6;38531:71;:::i;:::-;38612:72;38680:2;38669:9;38665:18;38656:6;38612:72;:::i;:::-;38694:80;38770:2;38759:9;38755:18;38746:6;38694:80;:::i;:::-;38784;38860:2;38849:9;38845:18;38836:6;38784:80;:::i;:::-;38874:73;38942:3;38931:9;38927:19;38918:6;38874:73;:::i;:::-;38957;39025:3;39014:9;39010:19;39001:6;38957:73;:::i;:::-;38230:807;;;;;;;;;:::o;39043:663::-;39131:6;39139;39147;39196:2;39184:9;39175:7;39171:23;39167:32;39164:119;;;39202:79;;:::i;:::-;39164:119;39322:1;39347:64;39403:7;39394:6;39383:9;39379:22;39347:64;:::i;:::-;39337:74;;39293:128;39460:2;39486:64;39542:7;39533:6;39522:9;39518:22;39486:64;:::i;:::-;39476:74;;39431:129;39599:2;39625:64;39681:7;39672:6;39661:9;39657:22;39625:64;:::i;:::-;39615:74;;39570:129;39043:663;;;;;:::o

Swarm Source

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