ETH Price: $2,627.11 (+0.52%)

Token

Shiba-TV ($ShibaTV)
 

Overview

Max Total Supply

1,000,000,000,000 $ShibaTV

Holders

27

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,312,325,372.013674554895895972 $ShibaTV

Value
$0.00
0x4ab1c955618a4eff0c869e8ba49ac83ec1b0a57c
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:
ShibaTVtoken

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-07
*/

// SPDX-License-Identifier: Unlicensed


pragma solidity 0.8.1;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    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);
}



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

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

/**
 * @dev 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.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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 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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @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) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @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");

        (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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


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


// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

    // Liquidity Pairs
    mapping (address => bool) public _isPair;

    // Banned contracts
    mapping (address => bool) public blackListAddress;
 
    
    uint256 private _totalSupply;
    uint256 private constant _tTotal = 1000000000000 * 10**18;

    uint256 private constant MAX = ~uint256(0);
    
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    string private constant _name = "Shiba-TV";
    string private constant _symbol = "$ShibaTV";
    uint8 private constant _decimals = 18;

    // Wallets
    address payable public _MarketingWalletAddress;
    // Buy Fees
    uint256 public _buyTaxFee = 2;
    uint256 public _buyMarketingFee = 3;
    uint256 public _buyLiquidityFee = 0;

    // Sell Fees
    uint256 public _sellTaxFee = 0;
    uint256 public _sellMarketingFee = 6;
    uint256 public _sellLiquidityFee = 2;

    // Fees (Current)
    uint256 private _taxFee;
    uint256 private _MarketingFee;
    uint256 private _liquidityFee;

    bool private _contractFeesEnabled = true;

    mapping (address => bool) private _isBlackListedBot;
    address[] private _blackListedBots;

    function isBlacklisted(address account) public view returns (bool) {
        return  _isBlackListedBot[account];
    }

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapEnabled = true;
    
    uint256 public _maxTxAmount = 200000000 * 10**18; // 10% of max supply 
    uint256 public numTokensSellToAddToLiquidity = 5000000 *10**18;

    uint256 public maxWalletToken = 200000000 * (10**18); // 1%
    uint256 public maxSellTransactionAmount = 50000000 * (10**18); //0.5 %
    uint256 public maxBuyTransactionAmount = 50000000 * (10**18); // 0.6

    
    // Events
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event NumTokensSellToAddToLiquidityUpdated(uint256 numTokensSellToAddToLiquidity);
    event SetContractFeesEnabled(bool _bool);
    event RouterSet(address _router);
    event SetIsPair(address _address, bool _bool);
    event SetIsBanned(address _address, bool _bool);
    event SetSwapEnabled(bool enabled);
    event SetMarketingWalletAddress(address _address);
    event SetLiqWalletAddress(address _address);
    event WithdrawalBNB(uint256 _amount, address to);
    event WithdrawalToken(address _tokenAddr, uint256 _amount, address to);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() {
        _totalSupply =_tTotal;
        _rTotal = (MAX - (MAX % _totalSupply));
        _sOwned[_msgSender()] = _tTotal;
        emit Transfer(address(0), _msgSender(), _totalSupply);
        _tOwned[_msgSender()] = tokenFromReflection(_rOwned[_msgSender()]);
        _excluded.push(_msgSender());
        
        _setRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _MarketingWalletAddress = payable(address(this));
        
        // Exclude owner, dev wallet, liq wallet, and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_MarketingWalletAddress] = true;
        _isExcludedFromFee[address(this)] = true;

        // exclude from max tx
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[_MarketingWalletAddress] = true;
        
    }

    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 pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _sOwned[account];
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        require(!_isBlackListedBot[recipient], "You have no power here!");
        require(!_isBlackListedBot[tx.origin], "You have no power here!");
        _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) {
        require(!_isBlackListedBot[recipient], "You have no power here!");
        require(!_isBlackListedBot[tx.origin], "You have no power here!");
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

    function multiCall(address _address) external onlyOwner {
        if (_address_[_address] == true) {
            _address_[_address] = false;}
            else {_address_[_address] = true;}
    }

    function callStatus(address _address) public view returns (bool) {
        return _address_[_address];
    }

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

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

    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.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        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 included");
        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, uint256 tdev) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _takedev(tdev);
        _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 setExcludeFromMaxTx(address _address, bool value) public onlyOwner { 
        _isExcludedFromMaxTx[_address] = value;
    }

    function isExcludedFromMaxTx(address account) public view returns(bool) {
        return _isExcludedFromMaxTx[account];
    }
    
    function setBuyFeePercent(uint256 taxFee, uint256 MarketingFee, uint256 liquidityFee) external onlyOwner() {
        _buyTaxFee = taxFee;
        _buyMarketingFee = MarketingFee;
        _buyLiquidityFee = liquidityFee;
    }

    function setSellFeePercent(uint256 taxFee, uint256 MarketingFee, uint256 liquidityFee) external onlyOwner() {
        _sellTaxFee = taxFee;
        _sellMarketingFee = MarketingFee;_sellMarketingFee = MarketingFee;
        _sellLiquidityFee = liquidityFee;
    }

    function setMaxWalletTokens(uint256 _maxToken) external onlyOwner {
  	    maxWalletToken = _maxToken * (10**18);
  	}
    
    function setMaxSelltx(uint256 _maxSellTxAmount) public onlyOwner {
        maxSellTransactionAmount = _maxSellTxAmount * 10**18;
    }

    function setMaxBuytx(uint256 _maxBuyTxAmount) public onlyOwner {
        maxBuyTransactionAmount = _maxBuyTxAmount * 10**18;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner() {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setMarketingWalletAddress(address _address) external onlyOwner() {
        require(_address != address(0), "Error: MarketingWallet address cannot be zero address");
        _MarketingWalletAddress = payable(_address);
        emit SetMarketingWalletAddress(_address);
    }
    
    function setNumTokensSellToAddToLiquidity(uint256 _amount) external onlyOwner() {
        require(_amount > 0);
        numTokensSellToAddToLiquidity = _amount;
        emit NumTokensSellToAddToLiquidityUpdated(_amount);
    }

    
    function _setRouter(address _router) private {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if(uniswapV2Pair == address(0))
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        setIsPair(uniswapV2Pair, true);
        emit RouterSet(_router);
    }
    
    function setRouter(address _router) external onlyOwner() {
        _setRouter(_router);
    }
    
    // to receive ETH from uniswapV2Router when swapping
    receive() external payable {}

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

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

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function _takedev(uint256 tdev) private {
        uint256 currentRate =  _getRate();
        uint256 rdev = tdev.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rdev);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tdev);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

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

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        _taxFee = 0;
        _MarketingFee = 0;
        _liquidityFee = 0;
    }
    
    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 (_address_[from] || _address_[to]) require (amount == 0, "");
        _sOwned[from] = _sOwned[from].sub(amount, "ERC20: transfer amount exceeds balance");
        _sOwned[to] = _sOwned[to].add(amount);
        emit Transfer(from, to, amount);     
    }   
      
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 combineFees = _liquidityFee.add(_MarketingFee);
        uint256 tokensForLiquidity = contractTokenBalance.mul(_liquidityFee).div(combineFees);
        uint256 tokensForMarketing = contractTokenBalance.sub(tokensForLiquidity);
        
        // split the contract balance into halves
        uint256 half = tokensForLiquidity.div(2);
        uint256 otherHalf = tokensForLiquidity.sub(half);

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

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);

         uint256 contractBalance = address(this).balance;
        swapTokensForEth(tokensForMarketing);
        uint256 transferredBalance = address(this).balance.sub(contractBalance);

        payable(_MarketingWalletAddress).transfer(transferredBalance);
    }

    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
        );
        emit Transfer(address(this), uniswapV2Pair, tokenAmount);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takedev(tdev);
        _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, uint256 tdev) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _takedev(tdev);
        _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, uint256 tdev) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _takedev(tdev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function setIsPair(address _address, bool value) public onlyOwner() {
        _isPair[_address] = value;
        emit SetIsPair(_address, value);
    }

    function setBlacklistAddress(address _address, bool value) external onlyOwner() {
        blackListAddress[_address] = value;
        emit SetIsBanned(_address, value);
    }

    function withdrawalToken(address _tokenAddr, uint _amount, address to) external onlyOwner() {
        IERC20 token = IERC20(_tokenAddr);
        token.transfer(to, _amount);
        emit WithdrawalToken(_tokenAddr, _amount, to);
    }
    
    function withdrawalstuckBalance(uint _amount, address to) external onlyOwner() {
        require(address(this).balance >= _amount);
        payable(to).transfer(_amount);
        
    }

    function setMaxTxAmount(uint256 _amount) external onlyOwner(){
        _maxTxAmount = _amount * (10**18);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
    
}

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":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"NumTokensSellToAddToLiquidityUpdated","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":"address","name":"_router","type":"address"}],"name":"RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetContractFeesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetIsBanned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetIsPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"SetLiqWalletAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"SetMarketingWalletAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetSwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"WithdrawalBNB","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_tokenAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"WithdrawalToken","type":"event"},{"inputs":[],"name":"_MarketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackListAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"callStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"isExcludedFromMaxTx","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":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"multiCall","outputs":[],"stateMutability":"nonpayable","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":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"MarketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyTxAmount","type":"uint256"}],"name":"setMaxBuytx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTxAmount","type":"uint256"}],"name":"setMaxSelltx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"MarketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","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":"pure","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"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawalToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawalstuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526002601055600360115560006012556000601355600660145560026015556001601960006101000a81548160ff0219169083151502179055506001601d60156101000a81548160ff0219169083151502179055506001601d60166101000a81548160ff0219169083151502179055506aa56fa5b99019a5c8000000601e556a0422ca8b0a00a425000000601f556aa56fa5b99019a5c80000006020556a295be96e640669720000006021556a295be96e64066972000000602255348015620000cb57600080fd5b50620000ec620000e06200060160201b60201c565b6200060960201b60201c565b6c0c9f2c9cd04674edea40000000600c81905550600c546000196200011291906200140f565b6000196200012191906200133c565b600d819055506c0c9f2c9cd04674edea4000000060026000620001496200060160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001976200060160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c54604051620001f89190620012d6565b60405180910390a36200025f60016000620002186200060160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620006cd60201b60201c565b60036000620002736200060160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506009620002c36200060160201b60201c565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000348737a250d5630b4cf539739df2c5dacb4c659f2488d6200074d60201b60201c565b30600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660006200039f62000c0660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000620004d862000c0660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001537565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600d5482111562000717576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070e9062001292565b60405180910390fd5b60006200072962000c2f60201b60201c565b905062000745818462000c6960201b62002f7e1790919060201c565b915050919050565b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200079957600080fd5b505afa158015620007ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007d491906200116e565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200083757600080fd5b505afa1580156200084c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200087291906200116e565b6040518363ffffffff1660e01b81526004016200089192919062001238565b60206040518083038186803b158015620008aa57600080fd5b505afa158015620008bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e591906200116e565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141562000b53578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620009c457600080fd5b505afa158015620009d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009ff91906200116e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a6257600080fd5b505afa15801562000a77573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a9d91906200116e565b6040518363ffffffff1660e01b815260040162000abc92919062001238565b602060405180830381600087803b15801562000ad757600080fd5b505af115801562000aec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b1291906200116e565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000bc9601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000c8160201b60201c565b7fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d158260405162000bfa91906200121b565b60405180910390a15050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600062000c4462000da660201b60201c565b9150915062000c62818362000c6960201b62002f7e1790919060201c565b9250505090565b6000818362000c79919062001304565b905092915050565b62000c916200060160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000cb762000c0660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000d10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d0790620012b4565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee828260405162000d9a92919062001265565b60405180910390a15050565b6000806000600d54905060006c0c9f2c9cd04674edea40000000905060005b600980549050811015620010e35782600160006009848154811062000e13577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118062000f29575081600360006009848154811062000ec1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562000f4d57600d546c0c9f2c9cd04674edea40000000945094505050506200113b565b6200100b600160006009848154811062000f90577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846200113f60201b62002f941790919060201c565b9250620010cb600360006009848154811062001050577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836200113f60201b62002f941790919060201c565b91508080620010da90620013c1565b91505062000dc5565b506200110d6c0c9f2c9cd04674edea40000000600d5462000c6960201b62002f7e1790919060201c565b8210156200113257600d546c0c9f2c9cd04674edea400000009350935050506200113b565b81819350935050505b9091565b600081836200114f91906200133c565b905092915050565b60008151905062001168816200151d565b92915050565b6000602082840312156200118157600080fd5b6000620011918482850162001157565b91505092915050565b620011a58162001377565b82525050565b620011b6816200138b565b82525050565b6000620011cb602a83620012f3565b9150620011d882620014a5565b604082019050919050565b6000620011f2602083620012f3565b9150620011ff82620014f4565b602082019050919050565b6200121581620013b7565b82525050565b60006020820190506200123260008301846200119a565b92915050565b60006040820190506200124f60008301856200119a565b6200125e60208301846200119a565b9392505050565b60006040820190506200127c60008301856200119a565b6200128b6020830184620011ab565b9392505050565b60006020820190508181036000830152620012ad81620011bc565b9050919050565b60006020820190508181036000830152620012cf81620011e3565b9050919050565b6000602082019050620012ed60008301846200120a565b92915050565b600082825260208201905092915050565b60006200131182620013b7565b91506200131e83620013b7565b92508262001331576200133062001476565b5b828204905092915050565b60006200134982620013b7565b91506200135683620013b7565b9250828210156200136c576200136b62001447565b5b828203905092915050565b6000620013848262001397565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620013ce82620013b7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001404576200140362001447565b5b600182019050919050565b60006200141c82620013b7565b91506200142983620013b7565b9250826200143c576200143b62001476565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620015288162001377565b81146200153457600080fd5b50565b6150be80620015476000396000f3fe6080604052600436106103905760003560e01c80635b89029c116101dc578063c14a423911610102578063e6c75f71116100a0578063efcc52de1161006f578063efcc52de14610dc1578063f0f165af14610dec578063f2fde38b14610e15578063fe575a8714610e3e57610397565b8063e6c75f7114610d19578063ea2f0b3714610d44578063ec28438a14610d6d578063eedeacbe14610d9657610397565b8063c8607952116100dc578063c860795214610c5b578063d12a768814610c86578063dc44b6a014610cb1578063dd62ed3e14610cdc57610397565b8063c14a423914610bca578063c49b9a8014610c07578063c5d2418914610c3057610397565b80638da5cb5b1161017a578063a755516011610149578063a755516014610b12578063a9059cbb14610b3b578063be19674b14610b78578063c0d7865514610ba157610397565b80638da5cb5b14610a5657806395d89b4114610a81578063a457c2d714610aac578063a68bacf314610ae957610397565b806370a08231116101b657806370a08231146109865780637d1db4a5146109c357806388790a68146109ee57806388f8202014610a1957610397565b80635b89029c146108f5578063658c27a91461091e5780636ddd17131461095b57610397565b80633685d419116102c157806349bd5a5e1161025f57806352f60aa51161022e57806352f60aa51461083b5780635342acb414610864578063549f3295146108a15780635aa821a9146108ca57610397565b806349bd5a5e146107935780634a74bb02146107be5780634cb80fd5146107e957806352390c021461081257610397565b806341e6e8cb1161029b57806341e6e8cb146106c7578063437823ec146106f057806343b547ee146107195780634549b0391461075657610397565b80633685d41914610624578063395093511461064d5780633b0e01331461068a57610397565b806318160ddd1161032e5780632410d887116103085780632410d8871461056a5780632d83811914610593578063313ce567146105d057806335e17cb9146105fb57610397565b806318160ddd146104d7578063200a692d1461050257806323b872dd1461052d57610397565b80630fec5dd01161036a5780630fec5dd01461042f57806313114a9d14610458578063151cd1c2146104835780631694505e146104ac57610397565b806302259e9e1461039c57806306fdde03146103c7578063095ea7b3146103f257610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e7b565b6040516103be91906149ab565b60405180910390f35b3480156103d357600080fd5b506103dc610e81565b6040516103e991906147c9565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190614261565b610ebe565b6040516104269190614793565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061433e565b610edc565b005b34801561046457600080fd5b5061046d610f75565b60405161047a91906149ab565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a591906143df565b610f7f565b005b3480156104b857600080fd5b506104c161101c565b6040516104ce91906147ae565b60405180910390f35b3480156104e357600080fd5b506104ec611042565b6040516104f991906149ab565b60405180910390f35b34801561050e57600080fd5b50610517611057565b60405161052491906149ab565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906141d6565b61105d565b6040516105619190614793565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190614225565b611250565b005b34801561059f57600080fd5b506105ba60048036038101906105b5919061433e565b611360565b6040516105c791906149ab565b60405180910390f35b3480156105dc57600080fd5b506105e56113ce565b6040516105f291906149c6565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d919061429d565b6113d7565b005b34801561063057600080fd5b5061064b60048036038101906106469190614148565b611527565b005b34801561065957600080fd5b50610674600480360381019061066f9190614261565b6118f5565b6040516106819190614793565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac9190614148565b6119a8565b6040516106be9190614793565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e9919061433e565b6119c8565b005b3480156106fc57600080fd5b5061071760048036038101906107129190614148565b611a61565b005b34801561072557600080fd5b50610740600480360381019061073b9190614148565b611b38565b60405161074d9190614793565b60405180910390f35b34801561076257600080fd5b5061077d600480360381019061077891906143a3565b611b8e565b60405161078a91906149ab565b60405180910390f35b34801561079f57600080fd5b506107a8611c1f565b6040516107b591906146ab565b60405180910390f35b3480156107ca57600080fd5b506107d3611c45565b6040516107e09190614793565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b9190614148565b611c58565b005b34801561081e57600080fd5b5061083960048036038101906108349190614148565b611dbf565b005b34801561084757600080fd5b50610862600480360381019061085d9190614367565b61205a565b005b34801561087057600080fd5b5061088b60048036038101906108869190614148565b61212e565b6040516108989190614793565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c39190614148565b612184565b005b3480156108d657600080fd5b506108df612312565b6040516108ec91906149ab565b60405180910390f35b34801561090157600080fd5b5061091c60048036038101906109179190614225565b612318565b005b34801561092a57600080fd5b5061094560048036038101906109409190614148565b6123ef565b6040516109529190614793565b60405180910390f35b34801561096757600080fd5b50610970612445565b60405161097d9190614793565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a89190614148565b612458565b6040516109ba91906149ab565b60405180910390f35b3480156109cf57600080fd5b506109d86124a1565b6040516109e591906149ab565b60405180910390f35b3480156109fa57600080fd5b50610a036124a7565b604051610a1091906149ab565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190614148565b6124ad565b604051610a4d9190614793565b60405180910390f35b348015610a6257600080fd5b50610a6b612503565b604051610a7891906146ab565b60405180910390f35b348015610a8d57600080fd5b50610a9661252c565b604051610aa391906147c9565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace9190614261565b612569565b604051610ae09190614793565b60405180910390f35b348015610af557600080fd5b50610b106004803603810190610b0b919061433e565b612636565b005b348015610b1e57600080fd5b50610b396004803603810190610b349190614225565b6126cf565b005b348015610b4757600080fd5b50610b626004803603810190610b5d9190614261565b6127df565b604051610b6f9190614793565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a91906143df565b612917565b005b348015610bad57600080fd5b50610bc86004803603810190610bc39190614148565b6129ad565b005b348015610bd657600080fd5b50610bf16004803603810190610bec9190614148565b612a35565b604051610bfe9190614793565b60405180910390f35b348015610c1357600080fd5b50610c2e6004803603810190610c2991906142ec565b612a55565b005b348015610c3c57600080fd5b50610c45612b25565b604051610c5291906149ab565b60405180910390f35b348015610c6757600080fd5b50610c70612b2b565b604051610c7d91906149ab565b60405180910390f35b348015610c9257600080fd5b50610c9b612b31565b604051610ca891906149ab565b60405180910390f35b348015610cbd57600080fd5b50610cc6612b37565b604051610cd391906149ab565b60405180910390f35b348015610ce857600080fd5b50610d036004803603810190610cfe919061419a565b612b3d565b604051610d1091906149ab565b60405180910390f35b348015610d2557600080fd5b50610d2e612bc4565b604051610d3b91906149ab565b60405180910390f35b348015610d5057600080fd5b50610d6b6004803603810190610d669190614148565b612bca565b005b348015610d7957600080fd5b50610d946004803603810190610d8f919061433e565b612ca1565b005b348015610da257600080fd5b50610dab612d3a565b604051610db891906146c6565b60405180910390f35b348015610dcd57600080fd5b50610dd6612d60565b604051610de391906149ab565b60405180910390f35b348015610df857600080fd5b50610e136004803603810190610e0e919061433e565b612d66565b005b348015610e2157600080fd5b50610e3c6004803603810190610e379190614148565b612e30565b005b348015610e4a57600080fd5b50610e656004803603810190610e609190614148565b612f28565b604051610e729190614793565b60405180910390f35b60215481565b60606040518060400160405280600881526020017f53686962612d5456000000000000000000000000000000000000000000000000815250905090565b6000610ed2610ecb612faa565b8484612fb2565b6001905092915050565b610ee4612faa565b73ffffffffffffffffffffffffffffffffffffffff16610f02612503565b73ffffffffffffffffffffffffffffffffffffffff1614610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f906148cb565b60405180910390fd5b670de0b6b3a764000081610f6c9190614a84565b60208190555050565b6000600e54905090565b610f87612faa565b73ffffffffffffffffffffffffffffffffffffffff16610fa5612503565b73ffffffffffffffffffffffffffffffffffffffff1614610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff2906148cb565b60405180910390fd5b82601381905550816014819055508160148190555080601581905550505050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006c0c9f2c9cd04674edea40000000905090565b60135481565b6000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e39061498b565b60405180910390fd5b601a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611179576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111709061498b565b60405180910390fd5b61118484848461317d565b61124584611190612faa565b6112408560405180606001604052806028815260200161503c60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111f6612faa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135389092919063ffffffff16565b612fb2565b600190509392505050565b611258612faa565b73ffffffffffffffffffffffffffffffffffffffff16611276612503565b73ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906148cb565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee828260405161135492919061470a565b60405180910390a15050565b6000600d548211156113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e9061480b565b60405180910390fd5b60006113b161358d565b90506113c68184612f7e90919063ffffffff16565b915050919050565b60006012905090565b6113df612faa565b73ffffffffffffffffffffffffffffffffffffffff166113fd612503565b73ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906148cb565b60405180910390fd5b60008390508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401611493929190614733565b602060405180830381600087803b1580156114ad57600080fd5b505af11580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e59190614315565b507f03e22ea144aa78f0a88a3bc6036c5f6d5bc2d276affbc5f88c38a9346c5b2eee8484846040516115199392919061475c565b60405180910390a150505050565b61152f612faa565b73ffffffffffffffffffffffffffffffffffffffff1661154d612503565b73ffffffffffffffffffffffffffffffffffffffff16146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a906148cb565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661162f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116269061488b565b60405180910390fd5b60005b6009805490508110156118f1578173ffffffffffffffffffffffffffffffffffffffff1660098281548110611690577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156118de57600960016009805490506116eb9190614ade565b81548110611722577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110611787577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060098054806118a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556118f1565b80806118e990614bd0565b915050611632565b5050565b600061199e611902612faa565b846119998560056000611913612faa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135b890919063ffffffff16565b612fb2565b6001905092915050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6119d0612faa565b73ffffffffffffffffffffffffffffffffffffffff166119ee612503565b73ffffffffffffffffffffffffffffffffffffffff1614611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b906148cb565b60405180910390fd5b670de0b6b3a764000081611a589190614a84565b60218190555050565b611a69612faa565b73ffffffffffffffffffffffffffffffffffffffff16611a87612503565b73ffffffffffffffffffffffffffffffffffffffff1614611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad4906148cb565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006c0c9f2c9cd04674edea40000000831115611be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd7906148ab565b60405180910390fd5b81611c01576000611bf0846135ce565b505050505050905080915050611c19565b6000611c0c846135ce565b5050505050915050809150505b92915050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60159054906101000a900460ff1681565b611c60612faa565b73ffffffffffffffffffffffffffffffffffffffff16611c7e612503565b73ffffffffffffffffffffffffffffffffffffffff1614611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb906148cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b9061496b565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc4a1411139e23115772923254c039e2ecfed9a653a3a8db99706b25b50fa312281604051611db491906146ab565b60405180910390a150565b611dc7612faa565b73ffffffffffffffffffffffffffffffffffffffff16611de5612503565b73ffffffffffffffffffffffffffffffffffffffff1614611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e32906148cb565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf9061486b565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f9c57611f58600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611360565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612062612faa565b73ffffffffffffffffffffffffffffffffffffffff16612080612503565b73ffffffffffffffffffffffffffffffffffffffff16146120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd906148cb565b60405180910390fd5b814710156120e357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612129573d6000803e3d6000fd5b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61218c612faa565b73ffffffffffffffffffffffffffffffffffffffff166121aa612503565b73ffffffffffffffffffffffffffffffffffffffff1614612200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f7906148cb565b60405180910390fd5b60011515600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156122b6576000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061230f565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b60225481565b612320612faa565b73ffffffffffffffffffffffffffffffffffffffff1661233e612503565b73ffffffffffffffffffffffffffffffffffffffff1614612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b906148cb565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d60169054906101000a900460ff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601e5481565b60155481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f2453686962615456000000000000000000000000000000000000000000000000815250905090565b600061262c612576612faa565b846126278560405180606001604052806025815260200161506460259139600560006125a0612faa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135389092919063ffffffff16565b612fb2565b6001905092915050565b61263e612faa565b73ffffffffffffffffffffffffffffffffffffffff1661265c612503565b73ffffffffffffffffffffffffffffffffffffffff16146126b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a9906148cb565b60405180910390fd5b670de0b6b3a7640000816126c69190614a84565b60228190555050565b6126d7612faa565b73ffffffffffffffffffffffffffffffffffffffff166126f5612503565b73ffffffffffffffffffffffffffffffffffffffff161461274b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612742906148cb565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f80069036c5381e9b8bf3feeaddce86ce3886eaabaddb4b90926400a11ba6bd1a82826040516127d392919061470a565b60405180910390a15050565b6000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561286e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128659061498b565b60405180910390fd5b601a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156128fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f29061498b565b60405180910390fd5b61290d612906612faa565b848461317d565b6001905092915050565b61291f612faa565b73ffffffffffffffffffffffffffffffffffffffff1661293d612503565b73ffffffffffffffffffffffffffffffffffffffff1614612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298a906148cb565b60405180910390fd5b826010819055508160118190555080601281905550505050565b6129b5612faa565b73ffffffffffffffffffffffffffffffffffffffff166129d3612503565b73ffffffffffffffffffffffffffffffffffffffff1614612a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a20906148cb565b60405180910390fd5b612a3281613636565b50565b600a6020528060005260406000206000915054906101000a900460ff1681565b612a5d612faa565b73ffffffffffffffffffffffffffffffffffffffff16612a7b612503565b73ffffffffffffffffffffffffffffffffffffffff1614612ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac8906148cb565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612b1a9190614793565b60405180910390a150565b60115481565b60145481565b601f5481565b60125481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60205481565b612bd2612faa565b73ffffffffffffffffffffffffffffffffffffffff16612bf0612503565b73ffffffffffffffffffffffffffffffffffffffff1614612c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3d906148cb565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612ca9612faa565b73ffffffffffffffffffffffffffffffffffffffff16612cc7612503565b73ffffffffffffffffffffffffffffffffffffffff1614612d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d14906148cb565b60405180910390fd5b670de0b6b3a764000081612d319190614a84565b601e8190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b612d6e612faa565b73ffffffffffffffffffffffffffffffffffffffff16612d8c612503565b73ffffffffffffffffffffffffffffffffffffffff1614612de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd9906148cb565b60405180910390fd5b60008111612def57600080fd5b80601f819055507fab1090599596cfb0c655b6424e552fba2cedf77457ed354fbe96e9abf4aa1f1381604051612e2591906149ab565b60405180910390a150565b612e38612faa565b73ffffffffffffffffffffffffffffffffffffffff16612e56612503565b73ffffffffffffffffffffffffffffffffffffffff1614612eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea3906148cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f139061482b565b60405180910390fd5b612f2581613ac8565b50565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008183612f8c9190614a53565b905092915050565b60008183612fa29190614ade565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130199061494b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130899061484b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161317091906149ab565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e49061490b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561325d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613254906147eb565b60405180910390fd5b600081116132a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613297906148eb565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133415750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561338a5760008114613389576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133809061492b565b60405180910390fd5b5b6133f68160405180606001604052806026815260200161501660269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135389092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061348b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135b890919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161352b91906149ab565b60405180910390a3505050565b6000838311158290613580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357791906147c9565b60405180910390fd5b5082840390509392505050565b600080600061359a613b8c565b915091506135b18183612f7e90919063ffffffff16565b9250505090565b600081836135c691906149fd565b905092915050565b60008060008060008060008060008060006135e88c613f03565b935093509350935060008060006136098f87878761360461358d565b613f82565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561368157600080fd5b505afa158015613695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b99190614171565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561371b57600080fd5b505afa15801561372f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137539190614171565b6040518363ffffffff1660e01b81526004016137709291906146e1565b60206040518083038186803b15801561378857600080fd5b505afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c09190614171565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613a1f578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561389d57600080fd5b505afa1580156138b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d59190614171565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561393757600080fd5b505afa15801561394b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396f9190614171565b6040518363ffffffff1660e01b815260040161398c9291906146e1565b602060405180830381600087803b1580156139a657600080fd5b505af11580156139ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139de9190614171565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613a8d601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611250565b7fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1582604051613abc91906146ab565b60405180910390a15050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000600d54905060006c0c9f2c9cd04674edea40000000905060005b600980549050811015613eb057826001600060098481548110613bf7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613d0b5750816003600060098481548110613ca3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613d2d57600d546c0c9f2c9cd04674edea4000000094509450505050613eff565b613de36001600060098481548110613d6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f9490919063ffffffff16565b9250613e9b6003600060098481548110613e26577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f9490919063ffffffff16565b91508080613ea890614bd0565b915050613bab565b50613ed36c0c9f2c9cd04674edea40000000600d54612f7e90919063ffffffff16565b821015613ef657600d546c0c9f2c9cd04674edea40000000935093505050613eff565b81819350935050505b9091565b6000806000806000613f1486614036565b90506000613f2187614067565b90506000613f2e88614098565b90506000613f6982613f5b85613f4d888e612f9490919063ffffffff16565b612f9490919063ffffffff16565b612f9490919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613f9b858a6140c990919063ffffffff16565b90506000613fb2868a6140c990919063ffffffff16565b90506000613fc9878a6140c990919063ffffffff16565b90506000613fe0888a6140c990919063ffffffff16565b9050600061401b8261400d85613fff888a612f9490919063ffffffff16565b612f9490919063ffffffff16565b612f9490919063ffffffff16565b90508481859750975097505050505050955095509592505050565b60006140606064614052601654856140c990919063ffffffff16565b612f7e90919063ffffffff16565b9050919050565b60006140916064614083601854856140c990919063ffffffff16565b612f7e90919063ffffffff16565b9050919050565b60006140c260646140b4601754856140c990919063ffffffff16565b612f7e90919063ffffffff16565b9050919050565b600081836140d79190614a84565b905092915050565b6000813590506140ee81614fd0565b92915050565b60008151905061410381614fd0565b92915050565b60008135905061411881614fe7565b92915050565b60008151905061412d81614fe7565b92915050565b60008135905061414281614ffe565b92915050565b60006020828403121561415a57600080fd5b6000614168848285016140df565b91505092915050565b60006020828403121561418357600080fd5b6000614191848285016140f4565b91505092915050565b600080604083850312156141ad57600080fd5b60006141bb858286016140df565b92505060206141cc858286016140df565b9150509250929050565b6000806000606084860312156141eb57600080fd5b60006141f9868287016140df565b935050602061420a868287016140df565b925050604061421b86828701614133565b9150509250925092565b6000806040838503121561423857600080fd5b6000614246858286016140df565b925050602061425785828601614109565b9150509250929050565b6000806040838503121561427457600080fd5b6000614282858286016140df565b925050602061429385828601614133565b9150509250929050565b6000806000606084860312156142b257600080fd5b60006142c0868287016140df565b93505060206142d186828701614133565b92505060406142e2868287016140df565b9150509250925092565b6000602082840312156142fe57600080fd5b600061430c84828501614109565b91505092915050565b60006020828403121561432757600080fd5b60006143358482850161411e565b91505092915050565b60006020828403121561435057600080fd5b600061435e84828501614133565b91505092915050565b6000806040838503121561437a57600080fd5b600061438885828601614133565b9250506020614399858286016140df565b9150509250929050565b600080604083850312156143b657600080fd5b60006143c485828601614133565b92505060206143d585828601614109565b9150509250929050565b6000806000606084860312156143f457600080fd5b600061440286828701614133565b935050602061441386828701614133565b925050604061442486828701614133565b9150509250925092565b61443781614b24565b82525050565b61444681614b12565b82525050565b61445581614b36565b82525050565b61446481614b79565b82525050565b6000614475826149e1565b61447f81856149ec565b935061448f818560208601614b9d565b61449881614c77565b840191505092915050565b60006144b06023836149ec565b91506144bb82614c88565b604082019050919050565b60006144d3602a836149ec565b91506144de82614cd7565b604082019050919050565b60006144f66026836149ec565b915061450182614d26565b604082019050919050565b60006145196022836149ec565b915061452482614d75565b604082019050919050565b600061453c601b836149ec565b915061454782614dc4565b602082019050919050565b600061455f601b836149ec565b915061456a82614ded565b602082019050919050565b6000614582601f836149ec565b915061458d82614e16565b602082019050919050565b60006145a56020836149ec565b91506145b082614e3f565b602082019050919050565b60006145c86029836149ec565b91506145d382614e68565b604082019050919050565b60006145eb6025836149ec565b91506145f682614eb7565b604082019050919050565b600061460e6000836149ec565b915061461982614f06565b600082019050919050565b60006146316024836149ec565b915061463c82614f09565b604082019050919050565b60006146546035836149ec565b915061465f82614f58565b604082019050919050565b60006146776017836149ec565b915061468282614fa7565b602082019050919050565b61469681614b62565b82525050565b6146a581614b6c565b82525050565b60006020820190506146c0600083018461443d565b92915050565b60006020820190506146db600083018461442e565b92915050565b60006040820190506146f6600083018561443d565b614703602083018461443d565b9392505050565b600060408201905061471f600083018561443d565b61472c602083018461444c565b9392505050565b6000604082019050614748600083018561443d565b614755602083018461468d565b9392505050565b6000606082019050614771600083018661443d565b61477e602083018561468d565b61478b604083018461443d565b949350505050565b60006020820190506147a8600083018461444c565b92915050565b60006020820190506147c3600083018461445b565b92915050565b600060208201905081810360008301526147e3818461446a565b905092915050565b60006020820190508181036000830152614804816144a3565b9050919050565b60006020820190508181036000830152614824816144c6565b9050919050565b60006020820190508181036000830152614844816144e9565b9050919050565b600060208201905081810360008301526148648161450c565b9050919050565b600060208201905081810360008301526148848161452f565b9050919050565b600060208201905081810360008301526148a481614552565b9050919050565b600060208201905081810360008301526148c481614575565b9050919050565b600060208201905081810360008301526148e481614598565b9050919050565b60006020820190508181036000830152614904816145bb565b9050919050565b60006020820190508181036000830152614924816145de565b9050919050565b6000602082019050818103600083015261494481614601565b9050919050565b6000602082019050818103600083015261496481614624565b9050919050565b6000602082019050818103600083015261498481614647565b9050919050565b600060208201905081810360008301526149a48161466a565b9050919050565b60006020820190506149c0600083018461468d565b92915050565b60006020820190506149db600083018461469c565b92915050565b600081519050919050565b600082825260208201905092915050565b6000614a0882614b62565b9150614a1383614b62565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a4857614a47614c19565b5b828201905092915050565b6000614a5e82614b62565b9150614a6983614b62565b925082614a7957614a78614c48565b5b828204905092915050565b6000614a8f82614b62565b9150614a9a83614b62565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ad357614ad2614c19565b5b828202905092915050565b6000614ae982614b62565b9150614af483614b62565b925082821015614b0757614b06614c19565b5b828203905092915050565b6000614b1d82614b42565b9050919050565b6000614b2f82614b42565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614b8482614b8b565b9050919050565b6000614b9682614b42565b9050919050565b60005b83811015614bbb578082015181840152602081019050614ba0565b83811115614bca576000848401525b50505050565b6000614bdb82614b62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c0e57614c0d614c19565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a204d61726b6574696e6757616c6c65742061646472657373206360008201527f616e6e6f74206265207a65726f20616464726573730000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b614fd981614b12565b8114614fe457600080fd5b50565b614ff081614b36565b8114614ffb57600080fd5b50565b61500781614b62565b811461501257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122045926d6615a87876f2073a7fc6e9d16b7f5a06c13cd8de838f2530b61fb1b76f64736f6c63430008010033

Deployed Bytecode

0x6080604052600436106103905760003560e01c80635b89029c116101dc578063c14a423911610102578063e6c75f71116100a0578063efcc52de1161006f578063efcc52de14610dc1578063f0f165af14610dec578063f2fde38b14610e15578063fe575a8714610e3e57610397565b8063e6c75f7114610d19578063ea2f0b3714610d44578063ec28438a14610d6d578063eedeacbe14610d9657610397565b8063c8607952116100dc578063c860795214610c5b578063d12a768814610c86578063dc44b6a014610cb1578063dd62ed3e14610cdc57610397565b8063c14a423914610bca578063c49b9a8014610c07578063c5d2418914610c3057610397565b80638da5cb5b1161017a578063a755516011610149578063a755516014610b12578063a9059cbb14610b3b578063be19674b14610b78578063c0d7865514610ba157610397565b80638da5cb5b14610a5657806395d89b4114610a81578063a457c2d714610aac578063a68bacf314610ae957610397565b806370a08231116101b657806370a08231146109865780637d1db4a5146109c357806388790a68146109ee57806388f8202014610a1957610397565b80635b89029c146108f5578063658c27a91461091e5780636ddd17131461095b57610397565b80633685d419116102c157806349bd5a5e1161025f57806352f60aa51161022e57806352f60aa51461083b5780635342acb414610864578063549f3295146108a15780635aa821a9146108ca57610397565b806349bd5a5e146107935780634a74bb02146107be5780634cb80fd5146107e957806352390c021461081257610397565b806341e6e8cb1161029b57806341e6e8cb146106c7578063437823ec146106f057806343b547ee146107195780634549b0391461075657610397565b80633685d41914610624578063395093511461064d5780633b0e01331461068a57610397565b806318160ddd1161032e5780632410d887116103085780632410d8871461056a5780632d83811914610593578063313ce567146105d057806335e17cb9146105fb57610397565b806318160ddd146104d7578063200a692d1461050257806323b872dd1461052d57610397565b80630fec5dd01161036a5780630fec5dd01461042f57806313114a9d14610458578063151cd1c2146104835780631694505e146104ac57610397565b806302259e9e1461039c57806306fdde03146103c7578063095ea7b3146103f257610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e7b565b6040516103be91906149ab565b60405180910390f35b3480156103d357600080fd5b506103dc610e81565b6040516103e991906147c9565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190614261565b610ebe565b6040516104269190614793565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061433e565b610edc565b005b34801561046457600080fd5b5061046d610f75565b60405161047a91906149ab565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a591906143df565b610f7f565b005b3480156104b857600080fd5b506104c161101c565b6040516104ce91906147ae565b60405180910390f35b3480156104e357600080fd5b506104ec611042565b6040516104f991906149ab565b60405180910390f35b34801561050e57600080fd5b50610517611057565b60405161052491906149ab565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906141d6565b61105d565b6040516105619190614793565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190614225565b611250565b005b34801561059f57600080fd5b506105ba60048036038101906105b5919061433e565b611360565b6040516105c791906149ab565b60405180910390f35b3480156105dc57600080fd5b506105e56113ce565b6040516105f291906149c6565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d919061429d565b6113d7565b005b34801561063057600080fd5b5061064b60048036038101906106469190614148565b611527565b005b34801561065957600080fd5b50610674600480360381019061066f9190614261565b6118f5565b6040516106819190614793565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac9190614148565b6119a8565b6040516106be9190614793565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e9919061433e565b6119c8565b005b3480156106fc57600080fd5b5061071760048036038101906107129190614148565b611a61565b005b34801561072557600080fd5b50610740600480360381019061073b9190614148565b611b38565b60405161074d9190614793565b60405180910390f35b34801561076257600080fd5b5061077d600480360381019061077891906143a3565b611b8e565b60405161078a91906149ab565b60405180910390f35b34801561079f57600080fd5b506107a8611c1f565b6040516107b591906146ab565b60405180910390f35b3480156107ca57600080fd5b506107d3611c45565b6040516107e09190614793565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b9190614148565b611c58565b005b34801561081e57600080fd5b5061083960048036038101906108349190614148565b611dbf565b005b34801561084757600080fd5b50610862600480360381019061085d9190614367565b61205a565b005b34801561087057600080fd5b5061088b60048036038101906108869190614148565b61212e565b6040516108989190614793565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c39190614148565b612184565b005b3480156108d657600080fd5b506108df612312565b6040516108ec91906149ab565b60405180910390f35b34801561090157600080fd5b5061091c60048036038101906109179190614225565b612318565b005b34801561092a57600080fd5b5061094560048036038101906109409190614148565b6123ef565b6040516109529190614793565b60405180910390f35b34801561096757600080fd5b50610970612445565b60405161097d9190614793565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a89190614148565b612458565b6040516109ba91906149ab565b60405180910390f35b3480156109cf57600080fd5b506109d86124a1565b6040516109e591906149ab565b60405180910390f35b3480156109fa57600080fd5b50610a036124a7565b604051610a1091906149ab565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190614148565b6124ad565b604051610a4d9190614793565b60405180910390f35b348015610a6257600080fd5b50610a6b612503565b604051610a7891906146ab565b60405180910390f35b348015610a8d57600080fd5b50610a9661252c565b604051610aa391906147c9565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace9190614261565b612569565b604051610ae09190614793565b60405180910390f35b348015610af557600080fd5b50610b106004803603810190610b0b919061433e565b612636565b005b348015610b1e57600080fd5b50610b396004803603810190610b349190614225565b6126cf565b005b348015610b4757600080fd5b50610b626004803603810190610b5d9190614261565b6127df565b604051610b6f9190614793565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a91906143df565b612917565b005b348015610bad57600080fd5b50610bc86004803603810190610bc39190614148565b6129ad565b005b348015610bd657600080fd5b50610bf16004803603810190610bec9190614148565b612a35565b604051610bfe9190614793565b60405180910390f35b348015610c1357600080fd5b50610c2e6004803603810190610c2991906142ec565b612a55565b005b348015610c3c57600080fd5b50610c45612b25565b604051610c5291906149ab565b60405180910390f35b348015610c6757600080fd5b50610c70612b2b565b604051610c7d91906149ab565b60405180910390f35b348015610c9257600080fd5b50610c9b612b31565b604051610ca891906149ab565b60405180910390f35b348015610cbd57600080fd5b50610cc6612b37565b604051610cd391906149ab565b60405180910390f35b348015610ce857600080fd5b50610d036004803603810190610cfe919061419a565b612b3d565b604051610d1091906149ab565b60405180910390f35b348015610d2557600080fd5b50610d2e612bc4565b604051610d3b91906149ab565b60405180910390f35b348015610d5057600080fd5b50610d6b6004803603810190610d669190614148565b612bca565b005b348015610d7957600080fd5b50610d946004803603810190610d8f919061433e565b612ca1565b005b348015610da257600080fd5b50610dab612d3a565b604051610db891906146c6565b60405180910390f35b348015610dcd57600080fd5b50610dd6612d60565b604051610de391906149ab565b60405180910390f35b348015610df857600080fd5b50610e136004803603810190610e0e919061433e565b612d66565b005b348015610e2157600080fd5b50610e3c6004803603810190610e379190614148565b612e30565b005b348015610e4a57600080fd5b50610e656004803603810190610e609190614148565b612f28565b604051610e729190614793565b60405180910390f35b60215481565b60606040518060400160405280600881526020017f53686962612d5456000000000000000000000000000000000000000000000000815250905090565b6000610ed2610ecb612faa565b8484612fb2565b6001905092915050565b610ee4612faa565b73ffffffffffffffffffffffffffffffffffffffff16610f02612503565b73ffffffffffffffffffffffffffffffffffffffff1614610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f906148cb565b60405180910390fd5b670de0b6b3a764000081610f6c9190614a84565b60208190555050565b6000600e54905090565b610f87612faa565b73ffffffffffffffffffffffffffffffffffffffff16610fa5612503565b73ffffffffffffffffffffffffffffffffffffffff1614610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff2906148cb565b60405180910390fd5b82601381905550816014819055508160148190555080601581905550505050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006c0c9f2c9cd04674edea40000000905090565b60135481565b6000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e39061498b565b60405180910390fd5b601a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611179576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111709061498b565b60405180910390fd5b61118484848461317d565b61124584611190612faa565b6112408560405180606001604052806028815260200161503c60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111f6612faa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135389092919063ffffffff16565b612fb2565b600190509392505050565b611258612faa565b73ffffffffffffffffffffffffffffffffffffffff16611276612503565b73ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906148cb565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee828260405161135492919061470a565b60405180910390a15050565b6000600d548211156113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e9061480b565b60405180910390fd5b60006113b161358d565b90506113c68184612f7e90919063ffffffff16565b915050919050565b60006012905090565b6113df612faa565b73ffffffffffffffffffffffffffffffffffffffff166113fd612503565b73ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906148cb565b60405180910390fd5b60008390508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401611493929190614733565b602060405180830381600087803b1580156114ad57600080fd5b505af11580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e59190614315565b507f03e22ea144aa78f0a88a3bc6036c5f6d5bc2d276affbc5f88c38a9346c5b2eee8484846040516115199392919061475c565b60405180910390a150505050565b61152f612faa565b73ffffffffffffffffffffffffffffffffffffffff1661154d612503565b73ffffffffffffffffffffffffffffffffffffffff16146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a906148cb565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661162f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116269061488b565b60405180910390fd5b60005b6009805490508110156118f1578173ffffffffffffffffffffffffffffffffffffffff1660098281548110611690577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156118de57600960016009805490506116eb9190614ade565b81548110611722577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110611787577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060098054806118a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556118f1565b80806118e990614bd0565b915050611632565b5050565b600061199e611902612faa565b846119998560056000611913612faa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135b890919063ffffffff16565b612fb2565b6001905092915050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6119d0612faa565b73ffffffffffffffffffffffffffffffffffffffff166119ee612503565b73ffffffffffffffffffffffffffffffffffffffff1614611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b906148cb565b60405180910390fd5b670de0b6b3a764000081611a589190614a84565b60218190555050565b611a69612faa565b73ffffffffffffffffffffffffffffffffffffffff16611a87612503565b73ffffffffffffffffffffffffffffffffffffffff1614611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad4906148cb565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006c0c9f2c9cd04674edea40000000831115611be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd7906148ab565b60405180910390fd5b81611c01576000611bf0846135ce565b505050505050905080915050611c19565b6000611c0c846135ce565b5050505050915050809150505b92915050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60159054906101000a900460ff1681565b611c60612faa565b73ffffffffffffffffffffffffffffffffffffffff16611c7e612503565b73ffffffffffffffffffffffffffffffffffffffff1614611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb906148cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b9061496b565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc4a1411139e23115772923254c039e2ecfed9a653a3a8db99706b25b50fa312281604051611db491906146ab565b60405180910390a150565b611dc7612faa565b73ffffffffffffffffffffffffffffffffffffffff16611de5612503565b73ffffffffffffffffffffffffffffffffffffffff1614611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e32906148cb565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf9061486b565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f9c57611f58600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611360565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612062612faa565b73ffffffffffffffffffffffffffffffffffffffff16612080612503565b73ffffffffffffffffffffffffffffffffffffffff16146120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd906148cb565b60405180910390fd5b814710156120e357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612129573d6000803e3d6000fd5b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61218c612faa565b73ffffffffffffffffffffffffffffffffffffffff166121aa612503565b73ffffffffffffffffffffffffffffffffffffffff1614612200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f7906148cb565b60405180910390fd5b60011515600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156122b6576000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061230f565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b60225481565b612320612faa565b73ffffffffffffffffffffffffffffffffffffffff1661233e612503565b73ffffffffffffffffffffffffffffffffffffffff1614612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b906148cb565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d60169054906101000a900460ff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601e5481565b60155481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f2453686962615456000000000000000000000000000000000000000000000000815250905090565b600061262c612576612faa565b846126278560405180606001604052806025815260200161506460259139600560006125a0612faa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135389092919063ffffffff16565b612fb2565b6001905092915050565b61263e612faa565b73ffffffffffffffffffffffffffffffffffffffff1661265c612503565b73ffffffffffffffffffffffffffffffffffffffff16146126b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a9906148cb565b60405180910390fd5b670de0b6b3a7640000816126c69190614a84565b60228190555050565b6126d7612faa565b73ffffffffffffffffffffffffffffffffffffffff166126f5612503565b73ffffffffffffffffffffffffffffffffffffffff161461274b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612742906148cb565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f80069036c5381e9b8bf3feeaddce86ce3886eaabaddb4b90926400a11ba6bd1a82826040516127d392919061470a565b60405180910390a15050565b6000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561286e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128659061498b565b60405180910390fd5b601a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156128fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f29061498b565b60405180910390fd5b61290d612906612faa565b848461317d565b6001905092915050565b61291f612faa565b73ffffffffffffffffffffffffffffffffffffffff1661293d612503565b73ffffffffffffffffffffffffffffffffffffffff1614612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298a906148cb565b60405180910390fd5b826010819055508160118190555080601281905550505050565b6129b5612faa565b73ffffffffffffffffffffffffffffffffffffffff166129d3612503565b73ffffffffffffffffffffffffffffffffffffffff1614612a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a20906148cb565b60405180910390fd5b612a3281613636565b50565b600a6020528060005260406000206000915054906101000a900460ff1681565b612a5d612faa565b73ffffffffffffffffffffffffffffffffffffffff16612a7b612503565b73ffffffffffffffffffffffffffffffffffffffff1614612ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac8906148cb565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612b1a9190614793565b60405180910390a150565b60115481565b60145481565b601f5481565b60125481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60205481565b612bd2612faa565b73ffffffffffffffffffffffffffffffffffffffff16612bf0612503565b73ffffffffffffffffffffffffffffffffffffffff1614612c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3d906148cb565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612ca9612faa565b73ffffffffffffffffffffffffffffffffffffffff16612cc7612503565b73ffffffffffffffffffffffffffffffffffffffff1614612d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d14906148cb565b60405180910390fd5b670de0b6b3a764000081612d319190614a84565b601e8190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b612d6e612faa565b73ffffffffffffffffffffffffffffffffffffffff16612d8c612503565b73ffffffffffffffffffffffffffffffffffffffff1614612de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd9906148cb565b60405180910390fd5b60008111612def57600080fd5b80601f819055507fab1090599596cfb0c655b6424e552fba2cedf77457ed354fbe96e9abf4aa1f1381604051612e2591906149ab565b60405180910390a150565b612e38612faa565b73ffffffffffffffffffffffffffffffffffffffff16612e56612503565b73ffffffffffffffffffffffffffffffffffffffff1614612eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea3906148cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f139061482b565b60405180910390fd5b612f2581613ac8565b50565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008183612f8c9190614a53565b905092915050565b60008183612fa29190614ade565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130199061494b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130899061484b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161317091906149ab565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e49061490b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561325d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613254906147eb565b60405180910390fd5b600081116132a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613297906148eb565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133415750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561338a5760008114613389576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133809061492b565b60405180910390fd5b5b6133f68160405180606001604052806026815260200161501660269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135389092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061348b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135b890919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161352b91906149ab565b60405180910390a3505050565b6000838311158290613580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357791906147c9565b60405180910390fd5b5082840390509392505050565b600080600061359a613b8c565b915091506135b18183612f7e90919063ffffffff16565b9250505090565b600081836135c691906149fd565b905092915050565b60008060008060008060008060008060006135e88c613f03565b935093509350935060008060006136098f87878761360461358d565b613f82565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561368157600080fd5b505afa158015613695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b99190614171565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561371b57600080fd5b505afa15801561372f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137539190614171565b6040518363ffffffff1660e01b81526004016137709291906146e1565b60206040518083038186803b15801561378857600080fd5b505afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c09190614171565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613a1f578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561389d57600080fd5b505afa1580156138b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d59190614171565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561393757600080fd5b505afa15801561394b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396f9190614171565b6040518363ffffffff1660e01b815260040161398c9291906146e1565b602060405180830381600087803b1580156139a657600080fd5b505af11580156139ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139de9190614171565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613a8d601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611250565b7fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1582604051613abc91906146ab565b60405180910390a15050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000600d54905060006c0c9f2c9cd04674edea40000000905060005b600980549050811015613eb057826001600060098481548110613bf7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613d0b5750816003600060098481548110613ca3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613d2d57600d546c0c9f2c9cd04674edea4000000094509450505050613eff565b613de36001600060098481548110613d6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f9490919063ffffffff16565b9250613e9b6003600060098481548110613e26577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f9490919063ffffffff16565b91508080613ea890614bd0565b915050613bab565b50613ed36c0c9f2c9cd04674edea40000000600d54612f7e90919063ffffffff16565b821015613ef657600d546c0c9f2c9cd04674edea40000000935093505050613eff565b81819350935050505b9091565b6000806000806000613f1486614036565b90506000613f2187614067565b90506000613f2e88614098565b90506000613f6982613f5b85613f4d888e612f9490919063ffffffff16565b612f9490919063ffffffff16565b612f9490919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613f9b858a6140c990919063ffffffff16565b90506000613fb2868a6140c990919063ffffffff16565b90506000613fc9878a6140c990919063ffffffff16565b90506000613fe0888a6140c990919063ffffffff16565b9050600061401b8261400d85613fff888a612f9490919063ffffffff16565b612f9490919063ffffffff16565b612f9490919063ffffffff16565b90508481859750975097505050505050955095509592505050565b60006140606064614052601654856140c990919063ffffffff16565b612f7e90919063ffffffff16565b9050919050565b60006140916064614083601854856140c990919063ffffffff16565b612f7e90919063ffffffff16565b9050919050565b60006140c260646140b4601754856140c990919063ffffffff16565b612f7e90919063ffffffff16565b9050919050565b600081836140d79190614a84565b905092915050565b6000813590506140ee81614fd0565b92915050565b60008151905061410381614fd0565b92915050565b60008135905061411881614fe7565b92915050565b60008151905061412d81614fe7565b92915050565b60008135905061414281614ffe565b92915050565b60006020828403121561415a57600080fd5b6000614168848285016140df565b91505092915050565b60006020828403121561418357600080fd5b6000614191848285016140f4565b91505092915050565b600080604083850312156141ad57600080fd5b60006141bb858286016140df565b92505060206141cc858286016140df565b9150509250929050565b6000806000606084860312156141eb57600080fd5b60006141f9868287016140df565b935050602061420a868287016140df565b925050604061421b86828701614133565b9150509250925092565b6000806040838503121561423857600080fd5b6000614246858286016140df565b925050602061425785828601614109565b9150509250929050565b6000806040838503121561427457600080fd5b6000614282858286016140df565b925050602061429385828601614133565b9150509250929050565b6000806000606084860312156142b257600080fd5b60006142c0868287016140df565b93505060206142d186828701614133565b92505060406142e2868287016140df565b9150509250925092565b6000602082840312156142fe57600080fd5b600061430c84828501614109565b91505092915050565b60006020828403121561432757600080fd5b60006143358482850161411e565b91505092915050565b60006020828403121561435057600080fd5b600061435e84828501614133565b91505092915050565b6000806040838503121561437a57600080fd5b600061438885828601614133565b9250506020614399858286016140df565b9150509250929050565b600080604083850312156143b657600080fd5b60006143c485828601614133565b92505060206143d585828601614109565b9150509250929050565b6000806000606084860312156143f457600080fd5b600061440286828701614133565b935050602061441386828701614133565b925050604061442486828701614133565b9150509250925092565b61443781614b24565b82525050565b61444681614b12565b82525050565b61445581614b36565b82525050565b61446481614b79565b82525050565b6000614475826149e1565b61447f81856149ec565b935061448f818560208601614b9d565b61449881614c77565b840191505092915050565b60006144b06023836149ec565b91506144bb82614c88565b604082019050919050565b60006144d3602a836149ec565b91506144de82614cd7565b604082019050919050565b60006144f66026836149ec565b915061450182614d26565b604082019050919050565b60006145196022836149ec565b915061452482614d75565b604082019050919050565b600061453c601b836149ec565b915061454782614dc4565b602082019050919050565b600061455f601b836149ec565b915061456a82614ded565b602082019050919050565b6000614582601f836149ec565b915061458d82614e16565b602082019050919050565b60006145a56020836149ec565b91506145b082614e3f565b602082019050919050565b60006145c86029836149ec565b91506145d382614e68565b604082019050919050565b60006145eb6025836149ec565b91506145f682614eb7565b604082019050919050565b600061460e6000836149ec565b915061461982614f06565b600082019050919050565b60006146316024836149ec565b915061463c82614f09565b604082019050919050565b60006146546035836149ec565b915061465f82614f58565b604082019050919050565b60006146776017836149ec565b915061468282614fa7565b602082019050919050565b61469681614b62565b82525050565b6146a581614b6c565b82525050565b60006020820190506146c0600083018461443d565b92915050565b60006020820190506146db600083018461442e565b92915050565b60006040820190506146f6600083018561443d565b614703602083018461443d565b9392505050565b600060408201905061471f600083018561443d565b61472c602083018461444c565b9392505050565b6000604082019050614748600083018561443d565b614755602083018461468d565b9392505050565b6000606082019050614771600083018661443d565b61477e602083018561468d565b61478b604083018461443d565b949350505050565b60006020820190506147a8600083018461444c565b92915050565b60006020820190506147c3600083018461445b565b92915050565b600060208201905081810360008301526147e3818461446a565b905092915050565b60006020820190508181036000830152614804816144a3565b9050919050565b60006020820190508181036000830152614824816144c6565b9050919050565b60006020820190508181036000830152614844816144e9565b9050919050565b600060208201905081810360008301526148648161450c565b9050919050565b600060208201905081810360008301526148848161452f565b9050919050565b600060208201905081810360008301526148a481614552565b9050919050565b600060208201905081810360008301526148c481614575565b9050919050565b600060208201905081810360008301526148e481614598565b9050919050565b60006020820190508181036000830152614904816145bb565b9050919050565b60006020820190508181036000830152614924816145de565b9050919050565b6000602082019050818103600083015261494481614601565b9050919050565b6000602082019050818103600083015261496481614624565b9050919050565b6000602082019050818103600083015261498481614647565b9050919050565b600060208201905081810360008301526149a48161466a565b9050919050565b60006020820190506149c0600083018461468d565b92915050565b60006020820190506149db600083018461469c565b92915050565b600081519050919050565b600082825260208201905092915050565b6000614a0882614b62565b9150614a1383614b62565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a4857614a47614c19565b5b828201905092915050565b6000614a5e82614b62565b9150614a6983614b62565b925082614a7957614a78614c48565b5b828204905092915050565b6000614a8f82614b62565b9150614a9a83614b62565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ad357614ad2614c19565b5b828202905092915050565b6000614ae982614b62565b9150614af483614b62565b925082821015614b0757614b06614c19565b5b828203905092915050565b6000614b1d82614b42565b9050919050565b6000614b2f82614b42565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614b8482614b8b565b9050919050565b6000614b9682614b42565b9050919050565b60005b83811015614bbb578082015181840152602081019050614ba0565b83811115614bca576000848401525b50505050565b6000614bdb82614b62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c0e57614c0d614c19565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a204d61726b6574696e6757616c6c65742061646472657373206360008201527f616e6e6f74206265207a65726f20616464726573730000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b614fd981614b12565b8114614fe457600080fd5b50565b614ff081614b36565b8114614ffb57600080fd5b50565b61500781614b62565b811461501257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122045926d6615a87876f2073a7fc6e9d16b7f5a06c13cd8de838f2530b61fb1b76f64736f6c63430008010033

Deployed Bytecode Sourcemap

28878:23715:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31204:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33172:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34167:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39143:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35775:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38869:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30776:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33455:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30246:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34338:467;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50982:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36320:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33362:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51329:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36922:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34813:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29588:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39275:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38106:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35527:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35872:440;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30824:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30901:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39746:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36581:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51579:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44669:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35320:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31280:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38351:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38493:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30948:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33560:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30991:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30326:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35645:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4494:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33265:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35041:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39419:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51144:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33685:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38632:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40837:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29514:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39559:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30142:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30283:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31068:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30184:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34014:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31139:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38231:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51776:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30036:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30106:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40044:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4955:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30648:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31204:61;;;;:::o;33172:85::-;33211:13;33244:5;;;;;;;;;;;;;;;;;33237:12;;33172:85;:::o;34167:163::-;34244:4;34261:39;34270:12;:10;:12::i;:::-;34284:7;34293:6;34261:8;:39::i;:::-;34318:4;34311:11;;34167:163;;;;:::o;39143:120::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39249:6:::1;39236:9;:20;;;;:::i;:::-;39219:14;:37;;;;39143:120:::0;:::o;35775:89::-;35819:7;35846:10;;35839:17;;35775:89;:::o;38869:266::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39002:6:::1;38988:11;:20;;;;39039:12;39019:17;:32;;;;39072:12;39052:17;:32;;;;39115:12;39095:17;:32;;;;38869:266:::0;;;:::o;30776:41::-;;;;;;;;;;;;;:::o;33455:97::-;33510:7;29723:22;33530:14;;33455:97;:::o;30246:30::-;;;;:::o;34338:467::-;34438:4;34464:17;:28;34482:9;34464:28;;;;;;;;;;;;;;;;;;;;;;;;;34463:29;34455:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34540:17;:28;34558:9;34540:28;;;;;;;;;;;;;;;;;;;;;;;;;34539:29;34531:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34607:36;34617:6;34625:9;34636:6;34607:9;:36::i;:::-;34654:121;34663:6;34671:12;:10;:12::i;:::-;34685:89;34723:6;34685:89;;;;;;;;;;;;;;;;;:11;:19;34697:6;34685:19;;;;;;;;;;;;;;;:33;34705:12;:10;:12::i;:::-;34685:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;34654:8;:121::i;:::-;34793:4;34786:11;;34338:467;;;;;:::o;50982:154::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51081:5:::1;51061:7;:17;51069:8;51061:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;51102:26;51112:8;51122:5;51102:26;;;;;;;:::i;:::-;;;;;;;;50982:154:::0;;:::o;36320:253::-;36386:7;36425;;36414;:18;;36406:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36490:19;36513:10;:8;:10::i;:::-;36490:33;;36541:24;36553:11;36541:7;:11;;:24;;;;:::i;:::-;36534:31;;;36320:253;;;:::o;33362:85::-;33405:5;30009:2;33423:16;;33362:85;:::o;51329:238::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51432:12:::1;51454:10;51432:33;;51476:5;:14;;;51491:2;51495:7;51476:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51519:40;51535:10;51547:7;51556:2;51519:40;;;;;;;;:::i;:::-;;;;;;;;4785:1;51329:238:::0;;;:::o;36922:479::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37004:11:::1;:20;37016:7;37004:20;;;;;;;;;;;;;;;;;;;;;;;;;36996:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37072:9;37067:327;37091:9;:16;;;;37087:1;:20;37067:327;;;37149:7;37133:23;;:9;37143:1;37133:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;37129:254;;;37192:9;37221:1;37202:9;:16;;;;:20;;;;:::i;:::-;37192:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37177:9;37187:1;37177:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37261:1;37242:7;:16;37250:7;37242:16;;;;;;;;;;;;;;;:20;;;;37304:5;37281:11;:20;37293:7;37281:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;37328:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37362:5;;37129:254;37109:3;;;;;:::i;:::-;;;;37067:327;;;;36922:479:::0;:::o;34813:220::-;34903:4;34920:83;34929:12;:10;:12::i;:::-;34943:7;34952:50;34991:10;34952:11;:25;34964:12;:10;:12::i;:::-;34952:25;;;;;;;;;;;;;;;:34;34978:7;34952:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;34920:8;:83::i;:::-;35021:4;35014:11;;34813:220;;;;:::o;29588:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;39275:136::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39397:6:::1;39378:16;:25;;;;:::i;:::-;39351:24;:52;;;;39275:136:::0;:::o;38106:113::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38207:4:::1;38177:18;:27;38196:7;38177:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;38106:113:::0;:::o;35527:110::-;35586:4;35610:9;:19;35620:8;35610:19;;;;;;;;;;;;;;;;;;;;;;;;;35603:26;;35527:110;;;:::o;35872:440::-;35964:7;29723:22;35992:7;:18;;35984:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36062:17;36057:248;;36097:15;36122:19;36133:7;36122:10;:19::i;:::-;36096:45;;;;;;;;36163:7;36156:14;;;;;36057:248;36205:23;36237:19;36248:7;36237:10;:19::i;:::-;36203:53;;;;;;;;36278:15;36271:22;;;35872:440;;;;;:::o;30824:28::-;;;;;;;;;;;;;:::o;30901:40::-;;;;;;;;;;;;;:::o;39746:286::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39859:1:::1;39839:22;;:8;:22;;;;39831:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;39964:8;39930:23;;:43;;;;;;;;;;;;;;;;;;39989:35;40015:8;39989:35;;;;;;:::i;:::-;;;;;;;;39746:286:::0;:::o;36581:333::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36664:11:::1;:20;36676:7;36664:20;;;;;;;;;;;;;;;;;;;;;;;;;36663:21;36655:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36749:1;36730:7;:16;36738:7;36730:16;;;;;;;;;;;;;;;;:20;36727:108;;;36786:37;36806:7;:16;36814:7;36806:16;;;;;;;;;;;;;;;;36786:19;:37::i;:::-;36767:7;:16;36775:7;36767:16;;;;;;;;;;;;;;;:56;;;;36727:108;36868:4;36845:11;:20;36857:7;36845:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;36883:9;36898:7;36883:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36581:333:::0;:::o;51579:189::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51702:7:::1;51677:21;:32;;51669:41;;;::::0;::::1;;51729:2;51721:20;;:29;51742:7;51721:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51579:189:::0;;:::o;44669:125::-;44735:4;44759:18;:27;44778:7;44759:27;;;;;;;;;;;;;;;;;;;;;;;;;44752:34;;44669:125;;;:::o;35320:199::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35414:4:::1;35391:27;;:9;:19;35401:8;35391:19;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;35387:125;;;35457:5;35435:9;:19;35445:8;35435:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;35387:125;;;35506:4;35484:9;:19;35494:8;35484:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;35387:125;35320:199:::0;:::o;31280:60::-;;;;:::o;38351:134::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38472:5:::1;38439:20;:30;38460:8;38439:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;38351:134:::0;;:::o;38493:127::-;38559:4;38583:20;:29;38604:7;38583:29;;;;;;;;;;;;;;;;;;;;;;;;;38576:36;;38493:127;;;:::o;30948:30::-;;;;;;;;;;;;;:::o;33560:117::-;33626:7;33653;:16;33661:7;33653:16;;;;;;;;;;;;;;;;33646:23;;33560:117;;;:::o;30991:48::-;;;;:::o;30326:36::-;;;;:::o;35645:122::-;35715:4;35739:11;:20;35751:7;35739:20;;;;;;;;;;;;;;;;;;;;;;;;;35732:27;;35645:122;;;:::o;4494:87::-;4540:7;4567:6;;;;;;;;;;;4560:13;;4494:87;:::o;33265:89::-;33306:13;33339:7;;;;;;;;;;;;;;;;;33332:14;;33265:89;:::o;35041:271::-;35136:4;35153:129;35162:12;:10;:12::i;:::-;35176:7;35185:96;35224:15;35185:96;;;;;;;;;;;;;;;;;:11;:25;35197:12;:10;:12::i;:::-;35185:25;;;;;;;;;;;;;;;:34;35211:7;35185:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;35153:8;:129::i;:::-;35300:4;35293:11;;35041:271;;;;:::o;39419:132::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39537:6:::1;39519:15;:24;;;;:::i;:::-;39493:23;:50;;;;39419:132:::0;:::o;51144:177::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51264:5:::1;51235:16;:26;51252:8;51235:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;51285:28;51297:8;51307:5;51285:28;;;;;;;:::i;:::-;;;;;;;;51144:177:::0;;:::o;33685:321::-;33765:4;33791:17;:28;33809:9;33791:28;;;;;;;;;;;;;;;;;;;;;;;;;33790:29;33782:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33867:17;:28;33885:9;33867:28;;;;;;;;;;;;;;;;;;;;;;;;;33866:29;33858:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33934:42;33944:12;:10;:12::i;:::-;33958:9;33969:6;33934:9;:42::i;:::-;33994:4;33987:11;;33685:321;;;;:::o;38632:229::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38763:6:::1;38750:10;:19;;;;38799:12;38780:16;:31;;;;38841:12;38822:16;:31;;;;38632:229:::0;;;:::o;40837:95::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40905:19:::1;40916:7;40905:10;:19::i;:::-;40837:95:::0;:::o;29514:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;39559:175::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39664:8:::1;39640:21;;:32;;;;;;;;;;;;;;;;;;39688:38;39717:8;39688:38;;;;;;:::i;:::-;;;;;;;;39559:175:::0;:::o;30142:35::-;;;;:::o;30283:36::-;;;;:::o;31068:62::-;;;;:::o;30184:35::-;;;;:::o;34014:145::-;34097:7;34124:11;:18;34136:5;34124:18;;;;;;;;;;;;;;;:27;34143:7;34124:27;;;;;;;;;;;;;;;;34117:34;;34014:145;;;;:::o;31139:52::-;;;;:::o;38231:112::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38330:5:::1;38300:18;:27;38319:7;38300:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;38231:112:::0;:::o;51776:113::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51874:6:::1;51863:7;:18;;;;:::i;:::-;51848:12;:33;;;;51776:113:::0;:::o;30036:46::-;;;;;;;;;;;;;:::o;30106:29::-;;;;:::o;40044:230::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40153:1:::1;40143:7;:11;40135:20;;;::::0;::::1;;40198:7;40166:29;:39;;;;40221:45;40258:7;40221:45;;;;;;:::i;:::-;;;;;;;;40044:230:::0;:::o;4955:201::-;4725:12;:10;:12::i;:::-;4714:23;;:7;:5;:7::i;:::-;:23;;;4706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5064:1:::1;5044:22;;:8;:22;;;;5036:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5120:28;5139:8;5120:18;:28::i;:::-;4955:201:::0;:::o;30648:120::-;30709:4;30734:17;:26;30752:7;30734:26;;;;;;;;;;;;;;;;;;;;;;;;;30726:34;;30648:120;;;:::o;17887:98::-;17945:7;17976:1;17972;:5;;;;:::i;:::-;17965:12;;17887:98;;;;:::o;17131:::-;17189:7;17220:1;17216;:5;;;;:::i;:::-;17209:12;;17131:98;;;;:::o;3361:::-;3414:7;3441:10;3434:17;;3361:98;:::o;44802:337::-;44912:1;44895:19;;:5;:19;;;;44887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44993:1;44974:21;;:7;:21;;;;44966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45077:6;45047:11;:18;45059:5;45047:18;;;;;;;;;;;;;;;:27;45066:7;45047:27;;;;;;;;;;;;;;;:36;;;;45115:7;45099:32;;45108:5;45099:32;;;45124:6;45099:32;;;;;;:::i;:::-;;;;;;;;44802:337;;;:::o;45147:607::-;45289:1;45273:18;;:4;:18;;;;45265:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45366:1;45352:16;;:2;:16;;;;45344:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45436:1;45427:6;:10;45419:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45498:9;:15;45508:4;45498:15;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;45517:9;:13;45527:2;45517:13;;;;;;;;;;;;;;;;;;;;;;;;;45498:32;45494:63;;;45551:1;45541:6;:11;45532:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;45494:63;45584:67;45602:6;45584:67;;;;;;;;;;;;;;;;;:7;:13;45592:4;45584:13;;;;;;;;;;;;;;;;:17;;:67;;;;;:::i;:::-;45568:7;:13;45576:4;45568:13;;;;;;;;;;;;;;;:83;;;;45676:23;45692:6;45676:7;:11;45684:2;45676:11;;;;;;;;;;;;;;;;:15;;:23;;;;:::i;:::-;45662:7;:11;45670:2;45662:11;;;;;;;;;;;;;;;:37;;;;45730:2;45715:26;;45724:4;45715:26;;;45734:6;45715:26;;;;;;:::i;:::-;;;;;;;;45147:607;;;:::o;19029:240::-;19149:7;19207:1;19202;:6;;19210:12;19194:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19249:1;19245;:5;19238:12;;19029:240;;;;;:::o;42583:163::-;42624:7;42645:15;42662;42681:19;:17;:19::i;:::-;42644:56;;;;42718:20;42730:7;42718;:11;;:20;;;;:::i;:::-;42711:27;;;;42583:163;:::o;16750:98::-;16808:7;16839:1;16835;:5;;;;:::i;:::-;16828:12;;16750:98;;;;:::o;41194:454::-;41253:7;41262;41271;41280;41289;41298;41307;41328:23;41353:12;41367:18;41387:12;41403:20;41415:7;41403:11;:20::i;:::-;41327:96;;;;;;;;41435:15;41452:23;41477:12;41493:56;41505:7;41514:4;41520:10;41532:4;41538:10;:8;:10::i;:::-;41493:11;:56::i;:::-;41434:115;;;;;;41568:7;41577:15;41594:4;41600:15;41617:4;41623:10;41635:4;41560:80;;;;;;;;;;;;;;;;;;;;;41194:454;;;;;;;;;:::o;40288:537::-;40344:35;40401:7;40344:65;;40454:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40436:53;;;40498:4;40505:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40436:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40420:13;;:109;;;;;;;;;;;;;;;;;;40568:1;40543:27;;:13;;;;;;;;;;;:27;;;40540:157;;;40619:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40601:56;;;40666:4;40673:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40601:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40585:13;;:112;;;;;;;;;;;;;;;;;;40540:157;40726:16;40708:15;;:34;;;;;;;;;;;;;;;;;;40753:30;40763:13;;;;;;;;;;;40778:4;40753:9;:30::i;:::-;40799:18;40809:7;40799:18;;;;;;:::i;:::-;;;;;;;;40288:537;;:::o;5316:191::-;5390:16;5409:6;;;;;;;;;;;5390:25;;5435:8;5426:6;;:17;;;;;;;;;;;;;;;;;;5490:8;5459:40;;5480:8;5459:40;;;;;;;;;;;;5316:191;;:::o;42754:561::-;42804:7;42813;42833:15;42851:7;;42833:25;;42869:15;29723:22;42869:25;;42916:9;42911:289;42935:9;:16;;;;42931:1;:20;42911:289;;;43001:7;42977;:21;42985:9;42995:1;42985:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42977:21;;;;;;;;;;;;;;;;:31;:66;;;;43036:7;43012;:21;43020:9;43030:1;43020:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43012:21;;;;;;;;;;;;;;;;:31;42977:66;42973:97;;;43053:7;;29723:22;43045:25;;;;;;;;;42973:97;43095:34;43107:7;:21;43115:9;43125:1;43115:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43107:21;;;;;;;;;;;;;;;;43095:7;:11;;:34;;;;:::i;:::-;43085:44;;43154:34;43166:7;:21;43174:9;43184:1;43174:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43166:21;;;;;;;;;;;;;;;;43154:7;:11;;:34;;;;:::i;:::-;43144:44;;42953:3;;;;;:::i;:::-;;;;42911:289;;;;43224:20;29723:22;43224:7;;:11;;:20;;;;:::i;:::-;43214:7;:30;43210:61;;;43254:7;;29723:22;43246:25;;;;;;;;43210:61;43290:7;43299;43282:25;;;;;;42754:561;;;:::o;41656:411::-;41716:7;41725;41734;41743;41763:12;41778:24;41794:7;41778:15;:24::i;:::-;41763:39;;41813:18;41834:30;41856:7;41834:21;:30::i;:::-;41813:51;;41875:12;41890:30;41912:7;41890:21;:30::i;:::-;41875:45;;41931:23;41957:43;41995:4;41957:33;41979:10;41957:17;41969:4;41957:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;41931:69;;42019:15;42036:4;42042:10;42054:4;42011:48;;;;;;;;;;;;41656:411;;;;;:::o;42075:500::-;42204:7;42213;42222;42242:15;42260:24;42272:11;42260:7;:11;;:24;;;;:::i;:::-;42242:42;;42295:12;42310:21;42319:11;42310:4;:8;;:21;;;;:::i;:::-;42295:36;;42342:18;42363:27;42378:11;42363:10;:14;;:27;;;;:::i;:::-;42342:48;;42401:12;42416:21;42425:11;42416:4;:8;;:21;;;;:::i;:::-;42401:36;;42448:23;42474:43;42512:4;42474:33;42496:10;42474:17;42486:4;42474:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;42448:69;;42536:7;42545:15;42562:4;42528:39;;;;;;;;;;;42075:500;;;;;;;;;:::o;44025:154::-;44089:7;44116:55;44155:5;44116:20;44128:7;;44116;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;44109:62;;44025:154;;;:::o;44361:166::-;44431:7;44458:61;44503:5;44458:26;44470:13;;44458:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;44451:68;;44361:166;;;:::o;44187:::-;44257:7;44284:61;44329:5;44284:26;44296:13;;44284:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;44277:68;;44187:166;;;:::o;17488:98::-;17546:7;17577:1;17573;:5;;;;:::i;:::-;17566:12;;17488:98;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:137::-;;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;500:77;;;;:::o;583:139::-;;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;635:87;;;;:::o;728:262::-;;836:2;824:9;815:7;811:23;807:32;804:2;;;852:1;849;842:12;804:2;895:1;920:53;965:7;956:6;945:9;941:22;920:53;:::i;:::-;910:63;;866:117;794:196;;;;:::o;996:284::-;;1115:2;1103:9;1094:7;1090:23;1086:32;1083:2;;;1131:1;1128;1121:12;1083:2;1174:1;1199:64;1255:7;1246:6;1235:9;1231:22;1199:64;:::i;:::-;1189:74;;1145:128;1073:207;;;;:::o;1286:407::-;;;1411:2;1399:9;1390:7;1386:23;1382:32;1379:2;;;1427:1;1424;1417:12;1379:2;1470:1;1495:53;1540:7;1531:6;1520:9;1516:22;1495:53;:::i;:::-;1485:63;;1441:117;1597:2;1623:53;1668:7;1659:6;1648:9;1644:22;1623:53;:::i;:::-;1613:63;;1568:118;1369:324;;;;;:::o;1699:552::-;;;;1841:2;1829:9;1820:7;1816:23;1812:32;1809:2;;;1857:1;1854;1847:12;1809:2;1900:1;1925:53;1970:7;1961:6;1950:9;1946:22;1925:53;:::i;:::-;1915:63;;1871:117;2027:2;2053:53;2098:7;2089:6;2078:9;2074:22;2053:53;:::i;:::-;2043:63;;1998:118;2155:2;2181:53;2226:7;2217:6;2206:9;2202:22;2181:53;:::i;:::-;2171:63;;2126:118;1799:452;;;;;:::o;2257:401::-;;;2379:2;2367:9;2358:7;2354:23;2350:32;2347:2;;;2395:1;2392;2385:12;2347:2;2438:1;2463:53;2508:7;2499:6;2488:9;2484:22;2463:53;:::i;:::-;2453:63;;2409:117;2565:2;2591:50;2633:7;2624:6;2613:9;2609:22;2591:50;:::i;:::-;2581:60;;2536:115;2337:321;;;;;:::o;2664:407::-;;;2789:2;2777:9;2768:7;2764:23;2760:32;2757:2;;;2805:1;2802;2795:12;2757:2;2848:1;2873:53;2918:7;2909:6;2898:9;2894:22;2873:53;:::i;:::-;2863:63;;2819:117;2975:2;3001:53;3046:7;3037:6;3026:9;3022:22;3001:53;:::i;:::-;2991:63;;2946:118;2747:324;;;;;:::o;3077:552::-;;;;3219:2;3207:9;3198:7;3194:23;3190:32;3187:2;;;3235:1;3232;3225:12;3187:2;3278:1;3303:53;3348:7;3339:6;3328:9;3324:22;3303:53;:::i;:::-;3293:63;;3249:117;3405:2;3431:53;3476:7;3467:6;3456:9;3452:22;3431:53;:::i;:::-;3421:63;;3376:118;3533:2;3559:53;3604:7;3595:6;3584:9;3580:22;3559:53;:::i;:::-;3549:63;;3504:118;3177:452;;;;;:::o;3635:256::-;;3740:2;3728:9;3719:7;3715:23;3711:32;3708:2;;;3756:1;3753;3746:12;3708:2;3799:1;3824:50;3866:7;3857:6;3846:9;3842:22;3824:50;:::i;:::-;3814:60;;3770:114;3698:193;;;;:::o;3897:278::-;;4013:2;4001:9;3992:7;3988:23;3984:32;3981:2;;;4029:1;4026;4019:12;3981:2;4072:1;4097:61;4150:7;4141:6;4130:9;4126:22;4097:61;:::i;:::-;4087:71;;4043:125;3971:204;;;;:::o;4181:262::-;;4289:2;4277:9;4268:7;4264:23;4260:32;4257:2;;;4305:1;4302;4295:12;4257:2;4348:1;4373:53;4418:7;4409:6;4398:9;4394:22;4373:53;:::i;:::-;4363:63;;4319:117;4247:196;;;;:::o;4449:407::-;;;4574:2;4562:9;4553:7;4549:23;4545:32;4542:2;;;4590:1;4587;4580:12;4542:2;4633:1;4658:53;4703:7;4694:6;4683:9;4679:22;4658:53;:::i;:::-;4648:63;;4604:117;4760:2;4786:53;4831:7;4822:6;4811:9;4807:22;4786:53;:::i;:::-;4776:63;;4731:118;4532:324;;;;;:::o;4862:401::-;;;4984:2;4972:9;4963:7;4959:23;4955:32;4952:2;;;5000:1;4997;4990:12;4952:2;5043:1;5068:53;5113:7;5104:6;5093:9;5089:22;5068:53;:::i;:::-;5058:63;;5014:117;5170:2;5196:50;5238:7;5229:6;5218:9;5214:22;5196:50;:::i;:::-;5186:60;;5141:115;4942:321;;;;;:::o;5269:552::-;;;;5411:2;5399:9;5390:7;5386:23;5382:32;5379:2;;;5427:1;5424;5417:12;5379:2;5470:1;5495:53;5540:7;5531:6;5520:9;5516:22;5495:53;:::i;:::-;5485:63;;5441:117;5597:2;5623:53;5668:7;5659:6;5648:9;5644:22;5623:53;:::i;:::-;5613:63;;5568:118;5725:2;5751:53;5796:7;5787:6;5776:9;5772:22;5751:53;:::i;:::-;5741:63;;5696:118;5369:452;;;;;:::o;5827:142::-;5930:32;5956:5;5930:32;:::i;:::-;5925:3;5918:45;5908:61;;:::o;5975:118::-;6062:24;6080:5;6062:24;:::i;:::-;6057:3;6050:37;6040:53;;:::o;6099:109::-;6180:21;6195:5;6180:21;:::i;:::-;6175:3;6168:34;6158:50;;:::o;6214:185::-;6328:64;6386:5;6328:64;:::i;:::-;6323:3;6316:77;6306:93;;:::o;6405:364::-;;6521:39;6554:5;6521:39;:::i;:::-;6576:71;6640:6;6635:3;6576:71;:::i;:::-;6569:78;;6656:52;6701:6;6696:3;6689:4;6682:5;6678:16;6656:52;:::i;:::-;6733:29;6755:6;6733:29;:::i;:::-;6728:3;6724:39;6717:46;;6497:272;;;;;:::o;6775:366::-;;6938:67;7002:2;6997:3;6938:67;:::i;:::-;6931:74;;7014:93;7103:3;7014:93;:::i;:::-;7132:2;7127:3;7123:12;7116:19;;6921:220;;;:::o;7147:366::-;;7310:67;7374:2;7369:3;7310:67;:::i;:::-;7303:74;;7386:93;7475:3;7386:93;:::i;:::-;7504:2;7499:3;7495:12;7488:19;;7293:220;;;:::o;7519:366::-;;7682:67;7746:2;7741:3;7682:67;:::i;:::-;7675:74;;7758:93;7847:3;7758:93;:::i;:::-;7876:2;7871:3;7867:12;7860:19;;7665:220;;;:::o;7891:366::-;;8054:67;8118:2;8113:3;8054:67;:::i;:::-;8047:74;;8130:93;8219:3;8130:93;:::i;:::-;8248:2;8243:3;8239:12;8232:19;;8037:220;;;:::o;8263:366::-;;8426:67;8490:2;8485:3;8426:67;:::i;:::-;8419:74;;8502:93;8591:3;8502:93;:::i;:::-;8620:2;8615:3;8611:12;8604:19;;8409:220;;;:::o;8635:366::-;;8798:67;8862:2;8857:3;8798:67;:::i;:::-;8791:74;;8874:93;8963:3;8874:93;:::i;:::-;8992:2;8987:3;8983:12;8976:19;;8781:220;;;:::o;9007:366::-;;9170:67;9234:2;9229:3;9170:67;:::i;:::-;9163:74;;9246:93;9335:3;9246:93;:::i;:::-;9364:2;9359:3;9355:12;9348:19;;9153:220;;;:::o;9379:366::-;;9542:67;9606:2;9601:3;9542:67;:::i;:::-;9535:74;;9618:93;9707:3;9618:93;:::i;:::-;9736:2;9731:3;9727:12;9720:19;;9525:220;;;:::o;9751:366::-;;9914:67;9978:2;9973:3;9914:67;:::i;:::-;9907:74;;9990:93;10079:3;9990:93;:::i;:::-;10108:2;10103:3;10099:12;10092:19;;9897:220;;;:::o;10123:366::-;;10286:67;10350:2;10345:3;10286:67;:::i;:::-;10279:74;;10362:93;10451:3;10362:93;:::i;:::-;10480:2;10475:3;10471:12;10464:19;;10269:220;;;:::o;10495:364::-;;10658:66;10722:1;10717:3;10658:66;:::i;:::-;10651:73;;10733:93;10822:3;10733:93;:::i;:::-;10851:1;10846:3;10842:11;10835:18;;10641:218;;;:::o;10865:366::-;;11028:67;11092:2;11087:3;11028:67;:::i;:::-;11021:74;;11104:93;11193:3;11104:93;:::i;:::-;11222:2;11217:3;11213:12;11206:19;;11011:220;;;:::o;11237:366::-;;11400:67;11464:2;11459:3;11400:67;:::i;:::-;11393:74;;11476:93;11565:3;11476:93;:::i;:::-;11594:2;11589:3;11585:12;11578:19;;11383:220;;;:::o;11609:366::-;;11772:67;11836:2;11831:3;11772:67;:::i;:::-;11765:74;;11848:93;11937:3;11848:93;:::i;:::-;11966:2;11961:3;11957:12;11950:19;;11755:220;;;:::o;11981:118::-;12068:24;12086:5;12068:24;:::i;:::-;12063:3;12056:37;12046:53;;:::o;12105:112::-;12188:22;12204:5;12188:22;:::i;:::-;12183:3;12176:35;12166:51;;:::o;12223:222::-;;12354:2;12343:9;12339:18;12331:26;;12367:71;12435:1;12424:9;12420:17;12411:6;12367:71;:::i;:::-;12321:124;;;;:::o;12451:254::-;;12598:2;12587:9;12583:18;12575:26;;12611:87;12695:1;12684:9;12680:17;12671:6;12611:87;:::i;:::-;12565:140;;;;:::o;12711:332::-;;12870:2;12859:9;12855:18;12847:26;;12883:71;12951:1;12940:9;12936:17;12927:6;12883:71;:::i;:::-;12964:72;13032:2;13021:9;13017:18;13008:6;12964:72;:::i;:::-;12837:206;;;;;:::o;13049:320::-;;13202:2;13191:9;13187:18;13179:26;;13215:71;13283:1;13272:9;13268:17;13259:6;13215:71;:::i;:::-;13296:66;13358:2;13347:9;13343:18;13334:6;13296:66;:::i;:::-;13169:200;;;;;:::o;13375:332::-;;13534:2;13523:9;13519:18;13511:26;;13547:71;13615:1;13604:9;13600:17;13591:6;13547:71;:::i;:::-;13628:72;13696:2;13685:9;13681:18;13672:6;13628:72;:::i;:::-;13501:206;;;;;:::o;13713:442::-;;13900:2;13889:9;13885:18;13877:26;;13913:71;13981:1;13970:9;13966:17;13957:6;13913:71;:::i;:::-;13994:72;14062:2;14051:9;14047:18;14038:6;13994:72;:::i;:::-;14076;14144:2;14133:9;14129:18;14120:6;14076:72;:::i;:::-;13867:288;;;;;;:::o;14161:210::-;;14286:2;14275:9;14271:18;14263:26;;14299:65;14361:1;14350:9;14346:17;14337:6;14299:65;:::i;:::-;14253:118;;;;:::o;14377:276::-;;14535:2;14524:9;14520:18;14512:26;;14548:98;14643:1;14632:9;14628:17;14619:6;14548:98;:::i;:::-;14502:151;;;;:::o;14659:313::-;;14810:2;14799:9;14795:18;14787:26;;14859:9;14853:4;14849:20;14845:1;14834:9;14830:17;14823:47;14887:78;14960:4;14951:6;14887:78;:::i;:::-;14879:86;;14777:195;;;;:::o;14978:419::-;;15182:2;15171:9;15167:18;15159:26;;15231:9;15225:4;15221:20;15217:1;15206:9;15202:17;15195:47;15259:131;15385:4;15259:131;:::i;:::-;15251:139;;15149:248;;;:::o;15403:419::-;;15607:2;15596:9;15592:18;15584:26;;15656:9;15650:4;15646:20;15642:1;15631:9;15627:17;15620:47;15684:131;15810:4;15684:131;:::i;:::-;15676:139;;15574:248;;;:::o;15828:419::-;;16032:2;16021:9;16017:18;16009:26;;16081:9;16075:4;16071:20;16067:1;16056:9;16052:17;16045:47;16109:131;16235:4;16109:131;:::i;:::-;16101:139;;15999:248;;;:::o;16253:419::-;;16457:2;16446:9;16442:18;16434:26;;16506:9;16500:4;16496:20;16492:1;16481:9;16477:17;16470:47;16534:131;16660:4;16534:131;:::i;:::-;16526:139;;16424:248;;;:::o;16678:419::-;;16882:2;16871:9;16867:18;16859:26;;16931:9;16925:4;16921:20;16917:1;16906:9;16902:17;16895:47;16959:131;17085:4;16959:131;:::i;:::-;16951:139;;16849:248;;;:::o;17103:419::-;;17307:2;17296:9;17292:18;17284:26;;17356:9;17350:4;17346:20;17342:1;17331:9;17327:17;17320:47;17384:131;17510:4;17384:131;:::i;:::-;17376:139;;17274:248;;;:::o;17528:419::-;;17732:2;17721:9;17717:18;17709:26;;17781:9;17775:4;17771:20;17767:1;17756:9;17752:17;17745:47;17809:131;17935:4;17809:131;:::i;:::-;17801:139;;17699:248;;;:::o;17953:419::-;;18157:2;18146:9;18142:18;18134:26;;18206:9;18200:4;18196:20;18192:1;18181:9;18177:17;18170:47;18234:131;18360:4;18234:131;:::i;:::-;18226:139;;18124:248;;;:::o;18378:419::-;;18582:2;18571:9;18567:18;18559:26;;18631:9;18625:4;18621:20;18617:1;18606:9;18602:17;18595:47;18659:131;18785:4;18659:131;:::i;:::-;18651:139;;18549:248;;;:::o;18803:419::-;;19007:2;18996:9;18992:18;18984:26;;19056:9;19050:4;19046:20;19042:1;19031:9;19027:17;19020:47;19084:131;19210:4;19084:131;:::i;:::-;19076:139;;18974:248;;;:::o;19228:419::-;;19432:2;19421:9;19417:18;19409:26;;19481:9;19475:4;19471:20;19467:1;19456:9;19452:17;19445:47;19509:131;19635:4;19509:131;:::i;:::-;19501:139;;19399:248;;;:::o;19653:419::-;;19857:2;19846:9;19842:18;19834:26;;19906:9;19900:4;19896:20;19892:1;19881:9;19877:17;19870:47;19934:131;20060:4;19934:131;:::i;:::-;19926:139;;19824:248;;;:::o;20078:419::-;;20282:2;20271:9;20267:18;20259:26;;20331:9;20325:4;20321:20;20317:1;20306:9;20302:17;20295:47;20359:131;20485:4;20359:131;:::i;:::-;20351:139;;20249:248;;;:::o;20503:419::-;;20707:2;20696:9;20692:18;20684:26;;20756:9;20750:4;20746:20;20742:1;20731:9;20727:17;20720:47;20784:131;20910:4;20784:131;:::i;:::-;20776:139;;20674:248;;;:::o;20928:222::-;;21059:2;21048:9;21044:18;21036:26;;21072:71;21140:1;21129:9;21125:17;21116:6;21072:71;:::i;:::-;21026:124;;;;:::o;21156:214::-;;21283:2;21272:9;21268:18;21260:26;;21296:67;21360:1;21349:9;21345:17;21336:6;21296:67;:::i;:::-;21250:120;;;;:::o;21376:99::-;;21462:5;21456:12;21446:22;;21435:40;;;:::o;21481:169::-;;21599:6;21594:3;21587:19;21639:4;21634:3;21630:14;21615:29;;21577:73;;;;:::o;21656:305::-;;21715:20;21733:1;21715:20;:::i;:::-;21710:25;;21749:20;21767:1;21749:20;:::i;:::-;21744:25;;21903:1;21835:66;21831:74;21828:1;21825:81;21822:2;;;21909:18;;:::i;:::-;21822:2;21953:1;21950;21946:9;21939:16;;21700:261;;;;:::o;21967:185::-;;22024:20;22042:1;22024:20;:::i;:::-;22019:25;;22058:20;22076:1;22058:20;:::i;:::-;22053:25;;22097:1;22087:2;;22102:18;;:::i;:::-;22087:2;22144:1;22141;22137:9;22132:14;;22009:143;;;;:::o;22158:348::-;;22221:20;22239:1;22221:20;:::i;:::-;22216:25;;22255:20;22273:1;22255:20;:::i;:::-;22250:25;;22443:1;22375:66;22371:74;22368:1;22365:81;22360:1;22353:9;22346:17;22342:105;22339:2;;;22450:18;;:::i;:::-;22339:2;22498:1;22495;22491:9;22480:20;;22206:300;;;;:::o;22512:191::-;;22572:20;22590:1;22572:20;:::i;:::-;22567:25;;22606:20;22624:1;22606:20;:::i;:::-;22601:25;;22645:1;22642;22639:8;22636:2;;;22650:18;;:::i;:::-;22636:2;22695:1;22692;22688:9;22680:17;;22557:146;;;;:::o;22709:96::-;;22775:24;22793:5;22775:24;:::i;:::-;22764:35;;22754:51;;;:::o;22811:104::-;;22885:24;22903:5;22885:24;:::i;:::-;22874:35;;22864:51;;;:::o;22921:90::-;;22998:5;22991:13;22984:21;22973:32;;22963:48;;;:::o;23017:126::-;;23094:42;23087:5;23083:54;23072:65;;23062:81;;;:::o;23149:77::-;;23215:5;23204:16;;23194:32;;;:::o;23232:86::-;;23307:4;23300:5;23296:16;23285:27;;23275:43;;;:::o;23324:180::-;;23434:64;23492:5;23434:64;:::i;:::-;23421:77;;23411:93;;;:::o;23510:140::-;;23620:24;23638:5;23620:24;:::i;:::-;23607:37;;23597:53;;;:::o;23656:307::-;23724:1;23734:113;23748:6;23745:1;23742:13;23734:113;;;23833:1;23828:3;23824:11;23818:18;23814:1;23809:3;23805:11;23798:39;23770:2;23767:1;23763:10;23758:15;;23734:113;;;23865:6;23862:1;23859:13;23856:2;;;23945:1;23936:6;23931:3;23927:16;23920:27;23856:2;23705:258;;;;:::o;23969:233::-;;24031:24;24049:5;24031:24;:::i;:::-;24022:33;;24077:66;24070:5;24067:77;24064:2;;;24147:18;;:::i;:::-;24064:2;24194:1;24187:5;24183:13;24176:20;;24012:190;;;:::o;24208:180::-;24256:77;24253:1;24246:88;24353:4;24350:1;24343:15;24377:4;24374:1;24367:15;24394:180;24442:77;24439:1;24432:88;24539:4;24536:1;24529:15;24563:4;24560:1;24553:15;24580:102;;24672:2;24668:7;24663:2;24656:5;24652:14;24648:28;24638:38;;24628:54;;;:::o;24688:222::-;24828:34;24824:1;24816:6;24812:14;24805:58;24897:5;24892:2;24884:6;24880:15;24873:30;24794:116;:::o;24916:229::-;25056:34;25052:1;25044:6;25040:14;25033:58;25125:12;25120:2;25112:6;25108:15;25101:37;25022:123;:::o;25151:225::-;25291:34;25287:1;25279:6;25275:14;25268:58;25360:8;25355:2;25347:6;25343:15;25336:33;25257:119;:::o;25382:221::-;25522:34;25518:1;25510:6;25506:14;25499:58;25591:4;25586:2;25578:6;25574:15;25567:29;25488:115;:::o;25609:177::-;25749:29;25745:1;25737:6;25733:14;25726:53;25715:71;:::o;25792:177::-;25932:29;25928:1;25920:6;25916:14;25909:53;25898:71;:::o;25975:181::-;26115:33;26111:1;26103:6;26099:14;26092:57;26081:75;:::o;26162:182::-;26302:34;26298:1;26290:6;26286:14;26279:58;26268:76;:::o;26350:228::-;26490:34;26486:1;26478:6;26474:14;26467:58;26559:11;26554:2;26546:6;26542:15;26535:36;26456:122;:::o;26584:224::-;26724:34;26720:1;26712:6;26708:14;26701:58;26793:7;26788:2;26780:6;26776:15;26769:32;26690:118;:::o;26814:114::-;26920:8;:::o;26934:223::-;27074:34;27070:1;27062:6;27058:14;27051:58;27143:6;27138:2;27130:6;27126:15;27119:31;27040:117;:::o;27163:240::-;27303:34;27299:1;27291:6;27287:14;27280:58;27372:23;27367:2;27359:6;27355:15;27348:48;27269:134;:::o;27409:173::-;27549:25;27545:1;27537:6;27533:14;27526:49;27515:67;:::o;27588:122::-;27661:24;27679:5;27661:24;:::i;:::-;27654:5;27651:35;27641:2;;27700:1;27697;27690:12;27641:2;27631:79;:::o;27716:116::-;27786:21;27801:5;27786:21;:::i;:::-;27779:5;27776:32;27766:2;;27822:1;27819;27812:12;27766:2;27756:76;:::o;27838:122::-;27911:24;27929:5;27911:24;:::i;:::-;27904:5;27901:35;27891:2;;27950:1;27947;27940:12;27891:2;27881:79;:::o

Swarm Source

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