ETH Price: $3,842.31 (+6.21%)

Token

ERC-20: GRINGO DOGE (GRINGODOGE)
 

Overview

Max Total Supply

10,000,000,000,000 GRINGODOGE

Holders

73

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: GRINGODOGE
Balance
7,916,054,107,878.805118146 GRINGODOGE

Value
$0.00
0x0a173de9fd2d5d26139beb6ab9e009310ead80db
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:
GRINGODOGE

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-13
*/

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

pragma solidity ^0.8.3;
// SPDX-License-Identifier: Unlicensed

/*

GRINGODOGE THE MEXICAN BOSS FROM THE CARTELL

Telegram: https://t.me/GRINGODOGE
Website: GRINGODOGE.io
*/

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

// 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 no longer needed starting with Solidity 0.8. 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. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * 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;
        }
    }
}

/*
 * @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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
    * @dev Returns true if `account` is a contract.
    *
    * [IMPORTANT]
    * ====
    * It is unsafe to assume that an address for which this function returns
    * false is an externally-owned account (EOA) and not a contract.
    *
    * Among others, `isContract` will return false for the following
    * types of addresses:
    *
    *  - an externally-owned account
    *  - a contract in construction
    *  - an address where a contract will be created
    *  - an address where a contract lived, but was destroyed
    * ====
    */
    function isContract(address account) internal view returns (bool) {
        // 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;
        // solhint-disable-next-line no-inline-assembly
        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");

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

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

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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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 () {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }

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

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

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

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

// contract implementation
contract GRINGODOGE is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    uint8 private _decimals = 9;

    // ********************************* START VARIABLES **********************************
    string private _name = "GRINGO DOGE"; // name
    string private _symbol = "GRINGODOGE"; // symbol
    uint256 private _tTotal = 10000000000000 * 10**uint256(_decimals); // total supply

    // % to holders
    uint256 public defaultTaxFee = 2;
    uint256 public _taxFee = defaultTaxFee;
    uint256 private _previousTaxFee = _taxFee;

    // % to swap & send to marketing wallet
    uint256 public defaultMarketingFee = 6;
    uint256 public _marketingFee = defaultMarketingFee;
    uint256 private _previousMarketingFee = _marketingFee;

    uint256 public _marketingFee4Sellers = 6;

    bool public feesOnSellersAndBuyers = true;

    uint256 public _maxTxAmount = _tTotal.div(1).div(100); // max transaction amount
    uint256 public numTokensToExchangeForMarketing = _tTotal.div(100).div(100); // contract balance to trigger swap & send

    address payable private _teamWalletAddress;
    address payable private _marketingWalletAddress;

    // ********************************** END VARIABLES ***********************************

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

    mapping (address => bool) private _isExcludedFromFee;

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

    address[] private _excluded;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tFeeTotal;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndSend;
    bool public SwapAndSendEnabled = true;        
    bool public tradingEnabled = false;

    event SwapAndSendEnabledUpdated(bool enabled);

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

    constructor (address payable teamWalletAddress, address payable marketingWalletAddress) {
        
        _teamWalletAddress = teamWalletAddress;
        _marketingWalletAddress = marketingWalletAddress;
        
        _rOwned[_msgSender()] = _rTotal;

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

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

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

        _isBlackListedBot[address(0x7589319ED0fD750017159fb4E4d96C63966173C1)] = true;
        _blackListedBots.push(address(0x7589319ED0fD750017159fb4E4d96C63966173C1));
        
        _isBlackListedBot[address(0x65A67DF75CCbF57828185c7C050e34De64d859d0)] = true;
        _blackListedBots.push(address(0x65A67DF75CCbF57828185c7C050e34De64d859d0));
        
        _isBlackListedBot[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _blackListedBots.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));
        
        _isBlackListedBot[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _blackListedBots.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isBlackListedBot[address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)] = true;
        _blackListedBots.push(address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345));

        _isBlackListedBot[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true;
        _blackListedBots.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b));

        _isBlackListedBot[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true;
        _blackListedBots.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95));

        _isBlackListedBot[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true;
        _blackListedBots.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964));

        _isBlackListedBot[address(0xDC81a3450817A58D00f45C86d0368290088db848)] = true;
        _blackListedBots.push(address(0xDC81a3450817A58D00f45C86d0368290088db848));

        _isBlackListedBot[address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)] = true;
        _blackListedBots.push(address(0x45fD07C63e5c316540F14b2002B085aEE78E3881));

        _isBlackListedBot[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true;
        _blackListedBots.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679));
        
        _isBlackListedBot[address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7)] = true;
        _blackListedBots.push(address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7));
        
        _isBlackListedBot[address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533)] = true;
        _blackListedBots.push(address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533));
        
        _isBlackListedBot[address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d)] = true;
        _blackListedBots.push(address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d));
        
        _isBlackListedBot[address(0x000000000000084e91743124a982076C59f10084)] = true;
        _blackListedBots.push(address(0x000000000000084e91743124a982076C59f10084));

        _isBlackListedBot[address(0x6dA4bEa09C3aA0761b09b19837D9105a52254303)] = true;
        _blackListedBots.push(address(0x6dA4bEa09C3aA0761b09b19837D9105a52254303));
        
        _isBlackListedBot[address(0x323b7F37d382A68B0195b873aF17CeA5B67cd595)] = true;
        _blackListedBots.push(address(0x323b7F37d382A68B0195b873aF17CeA5B67cd595));
        
        _isBlackListedBot[address(0x000000005804B22091aa9830E50459A15E7C9241)] = true;
        _blackListedBots.push(address(0x000000005804B22091aa9830E50459A15E7C9241));
        
        _isBlackListedBot[address(0xA3b0e79935815730d942A444A84d4Bd14A339553)] = true;
        _blackListedBots.push(address(0xA3b0e79935815730d942A444A84d4Bd14A339553));
        
        _isBlackListedBot[address(0xf6da21E95D74767009acCB145b96897aC3630BaD)] = true;
        _blackListedBots.push(address(0xf6da21E95D74767009acCB145b96897aC3630BaD));
        
        _isBlackListedBot[address(0x0000000000007673393729D5618DC555FD13f9aA)] = true;
        _blackListedBots.push(address(0x0000000000007673393729D5618DC555FD13f9aA));
        
        _isBlackListedBot[address(0x00000000000003441d59DdE9A90BFfb1CD3fABf1)] = true;
        _blackListedBots.push(address(0x00000000000003441d59DdE9A90BFfb1CD3fABf1));
        
        _isBlackListedBot[address(0x59903993Ae67Bf48F10832E9BE28935FEE04d6F6)] = true;
        _blackListedBots.push(address(0x59903993Ae67Bf48F10832E9BE28935FEE04d6F6));
        
        _isBlackListedBot[address(0x000000917de6037d52b1F0a306eeCD208405f7cd)] = true;
        _blackListedBots.push(address(0x000000917de6037d52b1F0a306eeCD208405f7cd));
        
        _isBlackListedBot[address(0x7100e690554B1c2FD01E8648db88bE235C1E6514)] = true;
        _blackListedBots.push(address(0x7100e690554B1c2FD01E8648db88bE235C1E6514));
        
        _isBlackListedBot[address(0x72b30cDc1583224381132D379A052A6B10725415)] = true;
        _blackListedBots.push(address(0x72b30cDc1583224381132D379A052A6B10725415));
        
        _isBlackListedBot[address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE)] = true;
        _blackListedBots.push(address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE));

        _isBlackListedBot[address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F)] = true;
        _blackListedBots.push(address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F));
        
        _isBlackListedBot[address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)] = true;
        _blackListedBots.push(address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b));
        
        _isBlackListedBot[address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9)] = true;
        _blackListedBots.push(address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9));

        _isBlackListedBot[address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7)] = true;
        _blackListedBots.push(address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7));

        _isBlackListedBot[address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF)] = true;
        _blackListedBots.push(address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF));

        _isBlackListedBot[address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290)] = true;
        _blackListedBots.push(address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290));
        
        _isBlackListedBot[address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5)] = true;
        _blackListedBots.push(address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5));
        
        _isBlackListedBot[address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)] = true;
        _blackListedBots.push(address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b));
        
        _isBlackListedBot[address(0x5B83A351500B631cc2a20a665ee17f0dC66e3dB7)] = true;
        _blackListedBots.push(address(0x5B83A351500B631cc2a20a665ee17f0dC66e3dB7));
  
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
        _blackListedBots.push(account);
    }
    
    function removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _blackListedBots.length; i++) {
            if (_blackListedBots[i] == account) {
                _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1];
                _isBlackListedBot[account] = false;
                _blackListedBots.pop();
                break;
            }
        }
    }

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

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

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

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

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

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

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

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

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

        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;

        _taxFee = 0;
        _marketingFee = 0;
    }

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

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

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

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

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rMarketing);
        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 _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate =  _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing);
    }

    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 isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlackListedBot[to], "You have no power here!");
        require(!_isBlackListedBot[from], "You have no power here!");

        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            if (from == uniswapV2Pair || to == uniswapV2Pair) {
                require(tradingEnabled, "Trading is not enabled yet");
            }
        }

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

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

        if (
            overMinTokenBalance &&
            !inSwapAndSend &&
            from != uniswapV2Pair &&
            SwapAndSendEnabled
        ) {
            SwapAndSend(contractTokenBalance);
        }

        if(feesOnSellersAndBuyers) {
            setFees(to);
        }

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

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

        _tokenTransfer(from,to,amount,takeFee);
    }

    function setFees(address recipient) private {
        _taxFee = defaultTaxFee;
        _marketingFee = defaultMarketingFee;
        if (recipient == uniswapV2Pair) { // sell
            _marketingFee = _marketingFee4Sellers;
        }
    }

    function SwapAndSend(uint256 contractTokenBalance) private lockTheSwap {
        // 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), contractTokenBalance);

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

        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
             _teamWalletAddress.transfer(contractETHBalance.div(2));
            _marketingWalletAddress.transfer(contractETHBalance.div(2));
        }
    }

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

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

        if(!takeFee)
            restoreAllFee();
    }

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

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _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);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function setDefaultMarketingFee(uint256 marketingFee) external onlyOwner() {
        defaultMarketingFee = marketingFee;
    }

    function setMarketingFee4Sellers(uint256 marketingFee4Sellers) external onlyOwner() {
        _marketingFee4Sellers = marketingFee4Sellers;
    }

    function setFeesOnSellersAndBuyers(bool _enabled) public onlyOwner() {
        feesOnSellersAndBuyers = _enabled;
    }

    function setSwapAndSendEnabled(bool _enabled) public onlyOwner() {
        SwapAndSendEnabled = _enabled;
        emit SwapAndSendEnabledUpdated(_enabled);
    }
    
    function LetTradingBegin(bool _tradingEnabled) external onlyOwner() {
         tradingEnabled = _tradingEnabled;
    }

    function setnumTokensToExchangeForMarketing(uint256 _numTokensToExchangeForMarketing) public onlyOwner() {
        numTokensToExchangeForMarketing = _numTokensToExchangeForMarketing;
    }

    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"teamWalletAddress","type":"address"},{"internalType":"address payable","name":"marketingWalletAddress","type":"address"}],"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":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":"bool","name":"enabled","type":"bool"}],"name":"SwapAndSendEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"bool","name":"_tradingEnabled","type":"bool"}],"name":"LetTradingBegin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SwapAndSendEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee4Sellers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesOnSellersAndBuyers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToExchangeForMarketing","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":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setDefaultMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnSellersAndBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee4Sellers","type":"uint256"}],"name":"setMarketingFee4Sellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensToExchangeForMarketing","type":"uint256"}],"name":"setnumTokensToExchangeForMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526009600060146101000a81548160ff021916908360ff1602179055506040518060400160405280600b81526020017f4752494e474f20444f4745000000000000000000000000000000000000000000815250600190805190602001906200006d92919062002736565b506040518060400160405280600a81526020017f4752494e474f444f47450000000000000000000000000000000000000000000081525060029080519060200190620000bb92919062002736565b50600060149054906101000a900460ff1660ff16600a620000dd919062002980565b6509184e72a000620000f0919062002abd565b600355600260045560045460055560055460065560066007556007546008556008546009556006600a556001600b60006101000a81548160ff0219169083151502179055506200016c6064620001586001600354620026ed60201b620027bd1790919060201c565b620026ed60201b620027bd1790919060201c565b600c55620001a66064620001926064600354620026ed60201b620027bd1790919060201c565b620026ed60201b620027bd1790919060201c565b600d55600354600019620001bb919062002be1565b600019620001ca919062002b1e565b6019556001601a60016101000a81548160ff0219169083151502179055506000601a60026101000a81548160ff0219169083151502179055503480156200021057600080fd5b506040516200859e3803806200859e833981810160405281019062000236919062002840565b620002466200270560201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a381600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060195460106000620003996200270560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043757600080fd5b505afa1580156200044c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000472919062002814565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004d557600080fd5b505afa158015620004ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000510919062002814565b6040518363ffffffff1660e01b81526004016200052f929190620028a3565b602060405180830381600087803b1580156200054a57600080fd5b505af11580156200055f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000585919062002814565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160136000620006086200270d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000737589319ed0fd750017159fb4e4d96c63966173c173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506016737589319ed0fd750017159fb4e4d96c63966173c19080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560007365a67df75ccbf57828185c7c050e34de64d859d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060167365a67df75ccbf57828185c7c050e34de64d859d09080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073e031b36b53e53a292a20c5f08fd1658cddf74fce73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673e031b36b53e53a292a20c5f08fd1658cddf74fce9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073e031b36b53e53a292a20c5f08fd1658cddf74fce73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673e031b36b53e53a292a20c5f08fd1658cddf74fce9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073e516bdee55b0b4e9bacaf6285130de15589b134573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673e516bdee55b0b4e9bacaf6285130de15589b13459080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073a1cec245c456dd1bd9f2815a6955fef44eb4191b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673a1cec245c456dd1bd9f2815a6955fef44eb4191b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf9573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf959080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073fe76f05dc59fec04184fa0245ad0c3cf9a57b96473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673fe76f05dc59fec04184fa0245ad0c3cf9a57b9649080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073dc81a3450817a58d00f45c86d0368290088db84873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673dc81a3450817a58d00f45c86d0368290088db8489080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560007345fd07c63e5c316540f14b2002b085aee78e388173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060167345fd07c63e5c316540f14b2002b085aee78e38819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560007327f9adb26d532a41d97e00206114e429ad58c67973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060167327f9adb26d532a41d97e00206114e429ad58c6799080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160156000739282dc5c422fa91ff2f6ff3a0b45b7bf97cf78e773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506016739282dc5c422fa91ff2f6ff3a0b45b7bf97cf78e79080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073fad95b6089c53a0d1d861eabfaadd8901b0f853373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673fad95b6089c53a0d1d861eabfaadd8901b0f85339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160156000731d6e8bac6ea3730825bde4b005ed7b2b39a2932d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506016731d6e8bac6ea3730825bde4b005ed7b2b39a2932d9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560006d084e91743124a982076c59f1008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060166d084e91743124a982076c59f100849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160156000736da4bea09c3aa0761b09b19837d9105a5225430373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506016736da4bea09c3aa0761b09b19837d9105a522543039080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073323b7f37d382a68b0195b873af17cea5b67cd59573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673323b7f37d382a68b0195b873af17cea5b67cd5959080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560006f5804b22091aa9830e50459a15e7c924173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060166f5804b22091aa9830e50459a15e7c92419080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073a3b0e79935815730d942a444a84d4bd14a33955373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673a3b0e79935815730d942a444a84d4bd14a3395539080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073f6da21e95d74767009accb145b96897ac3630bad73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673f6da21e95d74767009accb145b96897ac3630bad9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560006d7673393729d5618dc555fd13f9aa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060166d7673393729d5618dc555fd13f9aa9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560006d03441d59dde9a90bffb1cd3fabf173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060166d03441d59dde9a90bffb1cd3fabf19080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560007359903993ae67bf48f10832e9be28935fee04d6f673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060167359903993ae67bf48f10832e9be28935fee04d6f69080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600070917de6037d52b1f0a306eecd208405f7cd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601670917de6037d52b1f0a306eecd208405f7cd9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160156000737100e690554b1c2fd01e8648db88be235c1e651473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506016737100e690554b1c2fd01e8648db88be235c1e65149080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560007372b30cdc1583224381132d379a052a6b1072541573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060167372b30cdc1583224381132d379a052a6b107254159080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160156000739edd647d7d6eceae6bb61d7785ef66c5055a9bee73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506016739edd647d7d6eceae6bb61d7785ef66c5055a9bee9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073fe9d99ef02e905127239e85a611c29ad32c31c2f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673fe9d99ef02e905127239e85a611c29ad32c31c2f9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560007339608b6f20704889c51c0ae28b1fca8f36a5239b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060167339608b6f20704889c51c0ae28b1fca8f36a5239b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073c496d84215d5018f6f53e7f6f12e45c9b5e8e8a973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673c496d84215d5018f6f53e7f6f12e45c9b5e8e8a99080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560007359341bc6b4f3ace878574b05914f43309dd678c773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060167359341bc6b4f3ace878574b05914f43309dd678c79080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073e986d48efee9ec1b8f66cd0b0ae8e3d18f091bdf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673e986d48efee9ec1b8f66cd0b0ae8e3d18f091bdf9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160156000734aeb32e16dcac00b092596adc6cd4955efdee29073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506016734aeb32e16dcac00b092596adc6cd4955efdee2909080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016015600073136f4b5b6a306091b280e3f251fa0e21b1280cd573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601673136f4b5b6a306091b280e3f251fa0e21b1280cd59080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560007339608b6f20704889c51c0ae28b1fca8f36a5239b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060167339608b6f20704889c51c0ae28b1fca8f36a5239b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160156000735b83a351500b631cc2a20a665ee17f0dc66e3db773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506016735b83a351500b631cc2a20a665ee17f0dc66e3db79080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200267b6200270560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600354604051620026dc9190620028d0565b60405180910390a350505062002ce7565b60008183620026fd9190620028ed565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620027449062002bab565b90600052602060002090601f016020900481019282620027685760008555620027b4565b82601f106200278357805160ff1916838001178555620027b4565b82800160010185558215620027b4579182015b82811115620027b357825182559160200191906001019062002796565b5b509050620027c39190620027c7565b5090565b5b80821115620027e2576000816000905550600101620027c8565b5090565b600081519050620027f78162002cb3565b92915050565b6000815190506200280e8162002ccd565b92915050565b6000602082840312156200282757600080fd5b60006200283784828501620027e6565b91505092915050565b600080604083850312156200285457600080fd5b60006200286485828601620027fd565b92505060206200287785828601620027fd565b9150509250929050565b6200288c8162002b59565b82525050565b6200289d8162002ba1565b82525050565b6000604082019050620028ba600083018562002881565b620028c9602083018462002881565b9392505050565b6000602082019050620028e7600083018462002892565b92915050565b6000620028fa8262002ba1565b9150620029078362002ba1565b9250826200291a576200291962002c48565b5b828204905092915050565b6000808291508390505b600185111562002977578086048111156200294f576200294e62002c19565b5b60018516156200295f5780820291505b80810290506200296f8562002ca6565b94506200292f565b94509492505050565b60006200298d8262002ba1565b91506200299a8362002ba1565b9250620029c97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620029d1565b905092915050565b600082620029e3576001905062002ab6565b81620029f3576000905062002ab6565b816001811462002a0c576002811462002a175762002a4d565b600191505062002ab6565b60ff84111562002a2c5762002a2b62002c19565b5b8360020a91508482111562002a465762002a4562002c19565b5b5062002ab6565b5060208310610133831016604e8410600b841016171562002a875782820a90508381111562002a815762002a8062002c19565b5b62002ab6565b62002a96848484600162002925565b9250905081840481111562002ab05762002aaf62002c19565b5b81810290505b9392505050565b600062002aca8262002ba1565b915062002ad78362002ba1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562002b135762002b1262002c19565b5b828202905092915050565b600062002b2b8262002ba1565b915062002b388362002ba1565b92508282101562002b4e5762002b4d62002c19565b5b828203905092915050565b600062002b668262002b81565b9050919050565b600062002b7a8262002b81565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062002bc457607f821691505b6020821081141562002bdb5762002bda62002c77565b5b50919050565b600062002bee8262002ba1565b915062002bfb8362002ba1565b92508262002c0e5762002c0d62002c48565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b62002cbe8162002b59565b811462002cca57600080fd5b50565b62002cd88162002b6d565b811462002ce457600080fd5b50565b60805160601c60a05160601c61585a62002d446000396000818161168801528181612ca501528181612cfa01528181612de70152613443015260008181610b75015281816131390152818161324f0152613276015261585a6000f3fe6080604052600436106102765760003560e01c806370a082311161014f578063a457c2d7116100c1578063d54994db1161007a578063d54994db1461099b578063dab522a8146109c4578063dd62ed3e146109ed578063e47d606014610a2a578063ea2f0b3714610a67578063f2fde38b14610a905761027d565b8063a457c2d714610877578063a9059cbb146108b4578063abdef31d146108f1578063bc951f981461091a578063c537bd8f14610945578063cba851b3146109705761027d565b80638da5cb5b116101135780638da5cb5b1461077757806395d89b41146107a25780639f646214146107cd578063a062e3ba146107f8578063a08f676014610823578063a38644301461084c5761027d565b806370a0823114610692578063715018a6146106cf5780637d1db4a5146106e65780637ded4d6a1461071157806388f820201461073a5761027d565b80633685d419116101e85780634549b039116101ac5780634549b0391461057057806349bd5a5e146105ad5780634ada218b146105d857806352390c02146106035780635342acb41461062c57806357e0a1d0146106695761027d565b80633685d4191461048d57806339509351146104b65780633b124fe7146104f35780634303443d1461051e578063437823ec146105475761027d565b80631bbae6e01161023a5780631bbae6e01461036b57806322976e0d1461039457806323b872dd146103bf5780632663236f146103fc5780632d83811914610425578063313ce567146104625761027d565b806306fdde0314610282578063095ea7b3146102ad57806313114a9d146102ea5780631694505e1461031557806318160ddd146103405761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610ab9565b6040516102a49190614db9565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190614956565b610b4b565b6040516102e19190614d83565b60405180910390f35b3480156102f657600080fd5b506102ff610b69565b60405161030c9190614fdb565b60405180910390f35b34801561032157600080fd5b5061032a610b73565b6040516103379190614d9e565b60405180910390f35b34801561034c57600080fd5b50610355610b97565b6040516103629190614fdb565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d91906149bb565b610ba1565b005b3480156103a057600080fd5b506103a9610c27565b6040516103b69190614fdb565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190614907565b610c2d565b6040516103f39190614d83565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e9190614992565b610d06565b005b34801561043157600080fd5b5061044c600480360381019061044791906149bb565b610dd6565b6040516104599190614fdb565b60405180910390f35b34801561046e57600080fd5b50610477610e44565b6040516104849190615050565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af9190614879565b610e5a565b005b3480156104c257600080fd5b506104dd60048036038101906104d89190614956565b611228565b6040516104ea9190614d83565b60405180910390f35b3480156104ff57600080fd5b506105086112db565b6040516105159190614fdb565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190614879565b6112e1565b005b34801561055357600080fd5b5061056e60048036038101906105699190614879565b61152b565b005b34801561057c57600080fd5b50610597600480360381019061059291906149e4565b611602565b6040516105a49190614fdb565b60405180910390f35b3480156105b957600080fd5b506105c2611686565b6040516105cf9190614d68565b60405180910390f35b3480156105e457600080fd5b506105ed6116aa565b6040516105fa9190614d83565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614879565b6116bd565b005b34801561063857600080fd5b50610653600480360381019061064e9190614879565b611958565b6040516106609190614d83565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b9190614992565b6119ae565b005b34801561069e57600080fd5b506106b960048036038101906106b49190614879565b611a47565b6040516106c69190614fdb565b60405180910390f35b3480156106db57600080fd5b506106e4611b32565b005b3480156106f257600080fd5b506106fb611c6c565b6040516107089190614fdb565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190614879565b611c72565b005b34801561074657600080fd5b50610761600480360381019061075c9190614879565b611ffb565b60405161076e9190614d83565b60405180910390f35b34801561078357600080fd5b5061078c612051565b6040516107999190614d68565b60405180910390f35b3480156107ae57600080fd5b506107b761207a565b6040516107c49190614db9565b60405180910390f35b3480156107d957600080fd5b506107e261210c565b6040516107ef9190614fdb565b60405180910390f35b34801561080457600080fd5b5061080d612112565b60405161081a9190614d83565b60405180910390f35b34801561082f57600080fd5b5061084a600480360381019061084591906149bb565b612125565b005b34801561085857600080fd5b506108616121ab565b60405161086e9190614fdb565b60405180910390f35b34801561088357600080fd5b5061089e60048036038101906108999190614956565b6121b1565b6040516108ab9190614d83565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190614956565b61227e565b6040516108e89190614d83565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190614992565b61229c565b005b34801561092657600080fd5b5061092f612335565b60405161093c9190614fdb565b60405180910390f35b34801561095157600080fd5b5061095a61233b565b6040516109679190614d83565b60405180910390f35b34801561097c57600080fd5b5061098561234e565b6040516109929190614fdb565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd91906149bb565b612354565b005b3480156109d057600080fd5b506109eb60048036038101906109e691906149bb565b6123da565b005b3480156109f957600080fd5b50610a146004803603810190610a0f91906148cb565b612460565b604051610a219190614fdb565b60405180910390f35b348015610a3657600080fd5b50610a516004803603810190610a4c9190614879565b6124e7565b604051610a5e9190614d83565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a899190614879565b61253d565b005b348015610a9c57600080fd5b50610ab76004803603810190610ab29190614879565b612614565b005b606060018054610ac890615293565b80601f0160208091040260200160405190810160405280929190818152602001828054610af490615293565b8015610b415780601f10610b1657610100808354040283529160200191610b41565b820191906000526020600020905b815481529060010190602001808311610b2457829003601f168201915b5050505050905090565b6000610b5f610b586127d3565b84846127db565b6001905092915050565b6000601854905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600354905090565b610ba96127d3565b73ffffffffffffffffffffffffffffffffffffffff16610bc7612051565b73ffffffffffffffffffffffffffffffffffffffff1614610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490614efb565b60405180910390fd5b80600c8190555050565b60085481565b6000610c3a8484846129a6565b610cfb84610c466127d3565b610cf6856040518060600160405280602881526020016157d860289139601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cac6127d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f419092919063ffffffff16565b6127db565b600190509392505050565b610d0e6127d3565b73ffffffffffffffffffffffffffffffffffffffff16610d2c612051565b73ffffffffffffffffffffffffffffffffffffffff1614610d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7990614efb565b60405180910390fd5b80601a60016101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610dcb9190614d83565b60405180910390a150565b6000601954821115610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490614e1b565b60405180910390fd5b6000610e27612f96565b9050610e3c81846127bd90919063ffffffff16565b915050919050565b60008060149054906101000a900460ff16905090565b610e626127d3565b73ffffffffffffffffffffffffffffffffffffffff16610e80612051565b73ffffffffffffffffffffffffffffffffffffffff1614610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90614efb565b60405180910390fd5b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990614e7b565b60405180910390fd5b60005b601780549050811015611224578173ffffffffffffffffffffffffffffffffffffffff1660178281548110610fc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611211576017600160178054905061101e91906151a1565b81548110611055577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601782815481106110ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060178054806111d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611224565b808061121c906152c5565b915050610f65565b5050565b60006112d16112356127d3565b846112cc85601260006112466127d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b6127db565b6001905092915050565b60055481565b6112e96127d3565b73ffffffffffffffffffffffffffffffffffffffff16611307612051565b73ffffffffffffffffffffffffffffffffffffffff161461135d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135490614efb565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790614f5b565b60405180910390fd5b601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490614e9b565b60405180910390fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506016819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115336127d3565b73ffffffffffffffffffffffffffffffffffffffff16611551612051565b73ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614efb565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600354831115611649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164090614ebb565b60405180910390fd5b8161166957600061165984612fd7565b5050505050905080915050611680565b600061167484612fd7565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601a60029054906101000a900460ff1681565b6116c56127d3565b73ffffffffffffffffffffffffffffffffffffffff166116e3612051565b73ffffffffffffffffffffffffffffffffffffffff1614611739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173090614efb565b60405180910390fd5b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90614e7b565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561189a57611856601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dd6565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506017819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6119b66127d3565b73ffffffffffffffffffffffffffffffffffffffff166119d4612051565b73ffffffffffffffffffffffffffffffffffffffff1614611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190614efb565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ae257601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b2d565b611b2a601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dd6565b90505b919050565b611b3a6127d3565b73ffffffffffffffffffffffffffffffffffffffff16611b58612051565b73ffffffffffffffffffffffffffffffffffffffff1614611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba590614efb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5481565b611c7a6127d3565b73ffffffffffffffffffffffffffffffffffffffff16611c98612051565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614efb565b60405180910390fd5b601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7190614f3b565b60405180910390fd5b60005b601680549050811015611ff7578173ffffffffffffffffffffffffffffffffffffffff1660168281548110611ddb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fe45760166001601680549050611e3691906151a1565b81548110611e6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660168281548110611ed2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506016805480611faa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611ff7565b8080611fef906152c5565b915050611d7d565b5050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461208990615293565b80601f01602080910402602001604051908101604052809291908181526020018280546120b590615293565b80156121025780601f106120d757610100808354040283529160200191612102565b820191906000526020600020905b8154815290600101906020018083116120e557829003601f168201915b5050505050905090565b60075481565b601a60019054906101000a900460ff1681565b61212d6127d3565b73ffffffffffffffffffffffffffffffffffffffff1661214b612051565b73ffffffffffffffffffffffffffffffffffffffff16146121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890614efb565b60405180910390fd5b80600a8190555050565b600d5481565b60006122746121be6127d3565b8461226f8560405180606001604052806025815260200161580060259139601260006121e86127d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f419092919063ffffffff16565b6127db565b6001905092915050565b600061229261228b6127d3565b84846129a6565b6001905092915050565b6122a46127d3565b73ffffffffffffffffffffffffffffffffffffffff166122c2612051565b73ffffffffffffffffffffffffffffffffffffffff1614612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f90614efb565b60405180910390fd5b80601a60026101000a81548160ff02191690831515021790555050565b600a5481565b600b60009054906101000a900460ff1681565b60045481565b61235c6127d3565b73ffffffffffffffffffffffffffffffffffffffff1661237a612051565b73ffffffffffffffffffffffffffffffffffffffff16146123d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c790614efb565b60405180910390fd5b8060078190555050565b6123e26127d3565b73ffffffffffffffffffffffffffffffffffffffff16612400612051565b73ffffffffffffffffffffffffffffffffffffffff1614612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90614efb565b60405180910390fd5b80600d8190555050565b6000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6125456127d3565b73ffffffffffffffffffffffffffffffffffffffff16612563612051565b73ffffffffffffffffffffffffffffffffffffffff16146125b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b090614efb565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61261c6127d3565b73ffffffffffffffffffffffffffffffffffffffff1661263a612051565b73ffffffffffffffffffffffffffffffffffffffff1614612690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268790614efb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f790614e3b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081836127cb9190615116565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561284b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284290614f9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290614e5b565b60405180910390fd5b80601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129999190614fdb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90614f7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d90614ddb565b60405180910390fd5b60008111612ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac090614f1b565b60405180910390fd5b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d90614fbb565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda90614fbb565b60405180910390fd5b612beb612051565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c595750612c29612051565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d9e57600c54811115612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a90614edb565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612d4857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612d9d57601a60029054906101000a900460ff16612d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9390614dfb565b60405180910390fd5b5b5b6000612da930611a47565b90506000600d548210159050600c548210612dc457600c5491505b808015612dde5750601a60009054906101000a900460ff16155b8015612e3657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e4e5750601a60019054906101000a900460ff165b15612e5d57612e5c82613033565b5b600b60009054906101000a900460ff1615612e7c57612e7b8461342f565b5b600060019050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f235750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f2d57600090505b612f39868686846134a2565b505050505050565b6000838311158290612f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f809190614db9565b60405180910390fd5b5082840390509392505050565b6000806000612fa36137b3565b91509150612fba81836127bd90919063ffffffff16565b9250505090565b60008183612fcf91906150c0565b905092915050565b6000806000806000806000806000612fee8a613afe565b925092509250600080600061300c8d8686613007612f96565b613b58565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601a60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115613091577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156130bf5781602001602082028036833780820191505090505b50905030816000815181106130fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561319d57600080fd5b505afa1580156131b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d591906148a2565b8160018151811061320f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613274307f0000000000000000000000000000000000000000000000000000000000000000846127db565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132d6959493929190614ff6565b600060405180830381600087803b1580156132f057600080fd5b505af1158015613304573d6000803e3d6000fd5b505050506000479050600081111561340f57600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6133666002846127bd90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613391573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6133e26002846127bd90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561340d573d6000803e3d6000fd5b505b50506000601a60006101000a81548160ff02191690831515021790555050565b6004546005819055506007546008819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561349f57600a546008819055505b50565b806134b0576134af613be1565b5b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135535750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561356857613563848484613c24565b61379f565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561360b5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136205761361b848484613e84565b61379e565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136c45750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136d9576136d48484846140e4565b61379d565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561377b5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137905761378b8484846142af565b61379c565b61379b8484846140e4565b5b5b5b5b806137ad576137ac6145a4565b5b50505050565b600080600060195490506000600354905060005b601780549050811015613ac157826010600060178481548110613813577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061392757508160116000601784815481106138bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561393e5760195460035494509450505050613afa565b6139f4601060006017848154811061397f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846145b890919063ffffffff16565b9250613aac6011600060178481548110613a37577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836145b890919063ffffffff16565b91508080613ab9906152c5565b9150506137c7565b50613ad96003546019546127bd90919063ffffffff16565b821015613af157601954600354935093505050613afa565b81819350935050505b9091565b600080600080613b0d856145ce565b90506000613b1a866145ff565b90506000613b4382613b35858a6145b890919063ffffffff16565b6145b890919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613b71858961463090919063ffffffff16565b90506000613b88868961463090919063ffffffff16565b90506000613b9f878961463090919063ffffffff16565b90506000613bc882613bba85876145b890919063ffffffff16565b6145b890919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600554148015613bf557506000600854145b15613bff57613c22565b600554600681905550600854600981905550600060058190555060006008819055505b565b600080600080600080613c3687612fd7565b955095509550955095509550613c9487601160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145b890919063ffffffff16565b601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d2986601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145b890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dbe85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0a81614646565b613e1484836147eb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e719190614fdb565b60405180910390a3505050505050505050565b600080600080600080613e9687612fd7565b955095509550955095509550613ef486601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145b890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8983601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061401e85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061406a81614646565b61407484836147eb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140d19190614fdb565b60405180910390a3505050505050505050565b6000806000806000806140f687612fd7565b95509550955095509550955061415486601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145b890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141e985601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423581614646565b61423f84836147eb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161429c9190614fdb565b60405180910390a3505050505050505050565b6000806000806000806142c187612fd7565b95509550955095509550955061431f87601160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145b890919063ffffffff16565b601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143b486601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145b890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061444983601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144de85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061452a81614646565b61453484836147eb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145919190614fdb565b60405180910390a3505050505050505050565b600654600581905550600954600881905550565b600081836145c691906151a1565b905092915050565b60006145f860646145ea6005548561463090919063ffffffff16565b6127bd90919063ffffffff16565b9050919050565b6000614629606461461b6008548561463090919063ffffffff16565b6127bd90919063ffffffff16565b9050919050565b6000818361463e9190615147565b905092915050565b6000614650612f96565b90506000614667828461463090919063ffffffff16565b90506146bb81601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147e6576147a283601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614800826019546145b890919063ffffffff16565b60198190555061481b81601854612fc190919063ffffffff16565b6018819055505050565b60008135905061483481615792565b92915050565b60008151905061484981615792565b92915050565b60008135905061485e816157a9565b92915050565b600081359050614873816157c0565b92915050565b60006020828403121561488b57600080fd5b600061489984828501614825565b91505092915050565b6000602082840312156148b457600080fd5b60006148c28482850161483a565b91505092915050565b600080604083850312156148de57600080fd5b60006148ec85828601614825565b92505060206148fd85828601614825565b9150509250929050565b60008060006060848603121561491c57600080fd5b600061492a86828701614825565b935050602061493b86828701614825565b925050604061494c86828701614864565b9150509250925092565b6000806040838503121561496957600080fd5b600061497785828601614825565b925050602061498885828601614864565b9150509250929050565b6000602082840312156149a457600080fd5b60006149b28482850161484f565b91505092915050565b6000602082840312156149cd57600080fd5b60006149db84828501614864565b91505092915050565b600080604083850312156149f757600080fd5b6000614a0585828601614864565b9250506020614a168582860161484f565b9150509250929050565b6000614a2c8383614a38565b60208301905092915050565b614a41816151d5565b82525050565b614a50816151d5565b82525050565b6000614a618261507b565b614a6b818561509e565b9350614a768361506b565b8060005b83811015614aa7578151614a8e8882614a20565b9750614a9983615091565b925050600181019050614a7a565b5085935050505092915050565b614abd816151e7565b82525050565b614acc8161522a565b82525050565b614adb8161524e565b82525050565b6000614aec82615086565b614af681856150af565b9350614b06818560208601615260565b614b0f8161539b565b840191505092915050565b6000614b276023836150af565b9150614b32826153ac565b604082019050919050565b6000614b4a601a836150af565b9150614b55826153fb565b602082019050919050565b6000614b6d602a836150af565b9150614b7882615424565b604082019050919050565b6000614b906026836150af565b9150614b9b82615473565b604082019050919050565b6000614bb36022836150af565b9150614bbe826154c2565b604082019050919050565b6000614bd6601b836150af565b9150614be182615511565b602082019050919050565b6000614bf9601e836150af565b9150614c048261553a565b602082019050919050565b6000614c1c601f836150af565b9150614c2782615563565b602082019050919050565b6000614c3f6028836150af565b9150614c4a8261558c565b604082019050919050565b6000614c626020836150af565b9150614c6d826155db565b602082019050919050565b6000614c856029836150af565b9150614c9082615604565b604082019050919050565b6000614ca8601a836150af565b9150614cb382615653565b602082019050919050565b6000614ccb6024836150af565b9150614cd68261567c565b604082019050919050565b6000614cee6025836150af565b9150614cf9826156cb565b604082019050919050565b6000614d116024836150af565b9150614d1c8261571a565b604082019050919050565b6000614d346017836150af565b9150614d3f82615769565b602082019050919050565b614d5381615213565b82525050565b614d628161521d565b82525050565b6000602082019050614d7d6000830184614a47565b92915050565b6000602082019050614d986000830184614ab4565b92915050565b6000602082019050614db36000830184614ac3565b92915050565b60006020820190508181036000830152614dd38184614ae1565b905092915050565b60006020820190508181036000830152614df481614b1a565b9050919050565b60006020820190508181036000830152614e1481614b3d565b9050919050565b60006020820190508181036000830152614e3481614b60565b9050919050565b60006020820190508181036000830152614e5481614b83565b9050919050565b60006020820190508181036000830152614e7481614ba6565b9050919050565b60006020820190508181036000830152614e9481614bc9565b9050919050565b60006020820190508181036000830152614eb481614bec565b9050919050565b60006020820190508181036000830152614ed481614c0f565b9050919050565b60006020820190508181036000830152614ef481614c32565b9050919050565b60006020820190508181036000830152614f1481614c55565b9050919050565b60006020820190508181036000830152614f3481614c78565b9050919050565b60006020820190508181036000830152614f5481614c9b565b9050919050565b60006020820190508181036000830152614f7481614cbe565b9050919050565b60006020820190508181036000830152614f9481614ce1565b9050919050565b60006020820190508181036000830152614fb481614d04565b9050919050565b60006020820190508181036000830152614fd481614d27565b9050919050565b6000602082019050614ff06000830184614d4a565b92915050565b600060a08201905061500b6000830188614d4a565b6150186020830187614ad2565b818103604083015261502a8186614a56565b90506150396060830185614a47565b6150466080830184614d4a565b9695505050505050565b60006020820190506150656000830184614d59565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006150cb82615213565b91506150d683615213565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561510b5761510a61530e565b5b828201905092915050565b600061512182615213565b915061512c83615213565b92508261513c5761513b61533d565b5b828204905092915050565b600061515282615213565b915061515d83615213565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151965761519561530e565b5b828202905092915050565b60006151ac82615213565b91506151b783615213565b9250828210156151ca576151c961530e565b5b828203905092915050565b60006151e0826151f3565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152358261523c565b9050919050565b6000615247826151f3565b9050919050565b600061525982615213565b9050919050565b60005b8381101561527e578082015181840152602081019050615263565b8381111561528d576000848401525b50505050565b600060028204905060018216806152ab57607f821691505b602082108114156152bf576152be61536c565b5b50919050565b60006152d082615213565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153035761530261530e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f7420656e61626c656420796574000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920626c61636b6c69737465640000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000600082015250565b7f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f7560008201527f7465722e00000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b61579b816151d5565b81146157a657600080fd5b50565b6157b2816151e7565b81146157bd57600080fd5b50565b6157c981615213565b81146157d457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b46f7856afcfc524dbb1fcc31425257c9b5d78e908042c728da3aca37d67617364736f6c6343000803003300000000000000000000000075efa6ba39fa171c5b9001a064ff65a13b8496c100000000000000000000000039dc28c248b974f58d1825f093e2dae729c6752a

Deployed Bytecode

0x6080604052600436106102765760003560e01c806370a082311161014f578063a457c2d7116100c1578063d54994db1161007a578063d54994db1461099b578063dab522a8146109c4578063dd62ed3e146109ed578063e47d606014610a2a578063ea2f0b3714610a67578063f2fde38b14610a905761027d565b8063a457c2d714610877578063a9059cbb146108b4578063abdef31d146108f1578063bc951f981461091a578063c537bd8f14610945578063cba851b3146109705761027d565b80638da5cb5b116101135780638da5cb5b1461077757806395d89b41146107a25780639f646214146107cd578063a062e3ba146107f8578063a08f676014610823578063a38644301461084c5761027d565b806370a0823114610692578063715018a6146106cf5780637d1db4a5146106e65780637ded4d6a1461071157806388f820201461073a5761027d565b80633685d419116101e85780634549b039116101ac5780634549b0391461057057806349bd5a5e146105ad5780634ada218b146105d857806352390c02146106035780635342acb41461062c57806357e0a1d0146106695761027d565b80633685d4191461048d57806339509351146104b65780633b124fe7146104f35780634303443d1461051e578063437823ec146105475761027d565b80631bbae6e01161023a5780631bbae6e01461036b57806322976e0d1461039457806323b872dd146103bf5780632663236f146103fc5780632d83811914610425578063313ce567146104625761027d565b806306fdde0314610282578063095ea7b3146102ad57806313114a9d146102ea5780631694505e1461031557806318160ddd146103405761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610ab9565b6040516102a49190614db9565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190614956565b610b4b565b6040516102e19190614d83565b60405180910390f35b3480156102f657600080fd5b506102ff610b69565b60405161030c9190614fdb565b60405180910390f35b34801561032157600080fd5b5061032a610b73565b6040516103379190614d9e565b60405180910390f35b34801561034c57600080fd5b50610355610b97565b6040516103629190614fdb565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d91906149bb565b610ba1565b005b3480156103a057600080fd5b506103a9610c27565b6040516103b69190614fdb565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190614907565b610c2d565b6040516103f39190614d83565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e9190614992565b610d06565b005b34801561043157600080fd5b5061044c600480360381019061044791906149bb565b610dd6565b6040516104599190614fdb565b60405180910390f35b34801561046e57600080fd5b50610477610e44565b6040516104849190615050565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af9190614879565b610e5a565b005b3480156104c257600080fd5b506104dd60048036038101906104d89190614956565b611228565b6040516104ea9190614d83565b60405180910390f35b3480156104ff57600080fd5b506105086112db565b6040516105159190614fdb565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190614879565b6112e1565b005b34801561055357600080fd5b5061056e60048036038101906105699190614879565b61152b565b005b34801561057c57600080fd5b50610597600480360381019061059291906149e4565b611602565b6040516105a49190614fdb565b60405180910390f35b3480156105b957600080fd5b506105c2611686565b6040516105cf9190614d68565b60405180910390f35b3480156105e457600080fd5b506105ed6116aa565b6040516105fa9190614d83565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614879565b6116bd565b005b34801561063857600080fd5b50610653600480360381019061064e9190614879565b611958565b6040516106609190614d83565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b9190614992565b6119ae565b005b34801561069e57600080fd5b506106b960048036038101906106b49190614879565b611a47565b6040516106c69190614fdb565b60405180910390f35b3480156106db57600080fd5b506106e4611b32565b005b3480156106f257600080fd5b506106fb611c6c565b6040516107089190614fdb565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190614879565b611c72565b005b34801561074657600080fd5b50610761600480360381019061075c9190614879565b611ffb565b60405161076e9190614d83565b60405180910390f35b34801561078357600080fd5b5061078c612051565b6040516107999190614d68565b60405180910390f35b3480156107ae57600080fd5b506107b761207a565b6040516107c49190614db9565b60405180910390f35b3480156107d957600080fd5b506107e261210c565b6040516107ef9190614fdb565b60405180910390f35b34801561080457600080fd5b5061080d612112565b60405161081a9190614d83565b60405180910390f35b34801561082f57600080fd5b5061084a600480360381019061084591906149bb565b612125565b005b34801561085857600080fd5b506108616121ab565b60405161086e9190614fdb565b60405180910390f35b34801561088357600080fd5b5061089e60048036038101906108999190614956565b6121b1565b6040516108ab9190614d83565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190614956565b61227e565b6040516108e89190614d83565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190614992565b61229c565b005b34801561092657600080fd5b5061092f612335565b60405161093c9190614fdb565b60405180910390f35b34801561095157600080fd5b5061095a61233b565b6040516109679190614d83565b60405180910390f35b34801561097c57600080fd5b5061098561234e565b6040516109929190614fdb565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd91906149bb565b612354565b005b3480156109d057600080fd5b506109eb60048036038101906109e691906149bb565b6123da565b005b3480156109f957600080fd5b50610a146004803603810190610a0f91906148cb565b612460565b604051610a219190614fdb565b60405180910390f35b348015610a3657600080fd5b50610a516004803603810190610a4c9190614879565b6124e7565b604051610a5e9190614d83565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a899190614879565b61253d565b005b348015610a9c57600080fd5b50610ab76004803603810190610ab29190614879565b612614565b005b606060018054610ac890615293565b80601f0160208091040260200160405190810160405280929190818152602001828054610af490615293565b8015610b415780601f10610b1657610100808354040283529160200191610b41565b820191906000526020600020905b815481529060010190602001808311610b2457829003601f168201915b5050505050905090565b6000610b5f610b586127d3565b84846127db565b6001905092915050565b6000601854905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600354905090565b610ba96127d3565b73ffffffffffffffffffffffffffffffffffffffff16610bc7612051565b73ffffffffffffffffffffffffffffffffffffffff1614610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490614efb565b60405180910390fd5b80600c8190555050565b60085481565b6000610c3a8484846129a6565b610cfb84610c466127d3565b610cf6856040518060600160405280602881526020016157d860289139601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cac6127d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f419092919063ffffffff16565b6127db565b600190509392505050565b610d0e6127d3565b73ffffffffffffffffffffffffffffffffffffffff16610d2c612051565b73ffffffffffffffffffffffffffffffffffffffff1614610d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7990614efb565b60405180910390fd5b80601a60016101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610dcb9190614d83565b60405180910390a150565b6000601954821115610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490614e1b565b60405180910390fd5b6000610e27612f96565b9050610e3c81846127bd90919063ffffffff16565b915050919050565b60008060149054906101000a900460ff16905090565b610e626127d3565b73ffffffffffffffffffffffffffffffffffffffff16610e80612051565b73ffffffffffffffffffffffffffffffffffffffff1614610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90614efb565b60405180910390fd5b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990614e7b565b60405180910390fd5b60005b601780549050811015611224578173ffffffffffffffffffffffffffffffffffffffff1660178281548110610fc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611211576017600160178054905061101e91906151a1565b81548110611055577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601782815481106110ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060178054806111d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611224565b808061121c906152c5565b915050610f65565b5050565b60006112d16112356127d3565b846112cc85601260006112466127d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b6127db565b6001905092915050565b60055481565b6112e96127d3565b73ffffffffffffffffffffffffffffffffffffffff16611307612051565b73ffffffffffffffffffffffffffffffffffffffff161461135d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135490614efb565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790614f5b565b60405180910390fd5b601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490614e9b565b60405180910390fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506016819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115336127d3565b73ffffffffffffffffffffffffffffffffffffffff16611551612051565b73ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614efb565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600354831115611649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164090614ebb565b60405180910390fd5b8161166957600061165984612fd7565b5050505050905080915050611680565b600061167484612fd7565b50505050915050809150505b92915050565b7f0000000000000000000000000a173de9fd2d5d26139beb6ab9e009310ead80db81565b601a60029054906101000a900460ff1681565b6116c56127d3565b73ffffffffffffffffffffffffffffffffffffffff166116e3612051565b73ffffffffffffffffffffffffffffffffffffffff1614611739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173090614efb565b60405180910390fd5b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90614e7b565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561189a57611856601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dd6565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506017819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6119b66127d3565b73ffffffffffffffffffffffffffffffffffffffff166119d4612051565b73ffffffffffffffffffffffffffffffffffffffff1614611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190614efb565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ae257601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b2d565b611b2a601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dd6565b90505b919050565b611b3a6127d3565b73ffffffffffffffffffffffffffffffffffffffff16611b58612051565b73ffffffffffffffffffffffffffffffffffffffff1614611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba590614efb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5481565b611c7a6127d3565b73ffffffffffffffffffffffffffffffffffffffff16611c98612051565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614efb565b60405180910390fd5b601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7190614f3b565b60405180910390fd5b60005b601680549050811015611ff7578173ffffffffffffffffffffffffffffffffffffffff1660168281548110611ddb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fe45760166001601680549050611e3691906151a1565b81548110611e6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660168281548110611ed2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506016805480611faa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611ff7565b8080611fef906152c5565b915050611d7d565b5050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461208990615293565b80601f01602080910402602001604051908101604052809291908181526020018280546120b590615293565b80156121025780601f106120d757610100808354040283529160200191612102565b820191906000526020600020905b8154815290600101906020018083116120e557829003601f168201915b5050505050905090565b60075481565b601a60019054906101000a900460ff1681565b61212d6127d3565b73ffffffffffffffffffffffffffffffffffffffff1661214b612051565b73ffffffffffffffffffffffffffffffffffffffff16146121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890614efb565b60405180910390fd5b80600a8190555050565b600d5481565b60006122746121be6127d3565b8461226f8560405180606001604052806025815260200161580060259139601260006121e86127d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f419092919063ffffffff16565b6127db565b6001905092915050565b600061229261228b6127d3565b84846129a6565b6001905092915050565b6122a46127d3565b73ffffffffffffffffffffffffffffffffffffffff166122c2612051565b73ffffffffffffffffffffffffffffffffffffffff1614612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f90614efb565b60405180910390fd5b80601a60026101000a81548160ff02191690831515021790555050565b600a5481565b600b60009054906101000a900460ff1681565b60045481565b61235c6127d3565b73ffffffffffffffffffffffffffffffffffffffff1661237a612051565b73ffffffffffffffffffffffffffffffffffffffff16146123d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c790614efb565b60405180910390fd5b8060078190555050565b6123e26127d3565b73ffffffffffffffffffffffffffffffffffffffff16612400612051565b73ffffffffffffffffffffffffffffffffffffffff1614612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90614efb565b60405180910390fd5b80600d8190555050565b6000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6125456127d3565b73ffffffffffffffffffffffffffffffffffffffff16612563612051565b73ffffffffffffffffffffffffffffffffffffffff16146125b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b090614efb565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61261c6127d3565b73ffffffffffffffffffffffffffffffffffffffff1661263a612051565b73ffffffffffffffffffffffffffffffffffffffff1614612690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268790614efb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f790614e3b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081836127cb9190615116565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561284b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284290614f9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290614e5b565b60405180910390fd5b80601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129999190614fdb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90614f7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d90614ddb565b60405180910390fd5b60008111612ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac090614f1b565b60405180910390fd5b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d90614fbb565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda90614fbb565b60405180910390fd5b612beb612051565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c595750612c29612051565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d9e57600c54811115612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a90614edb565b60405180910390fd5b7f0000000000000000000000000a173de9fd2d5d26139beb6ab9e009310ead80db73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612d4857507f0000000000000000000000000a173de9fd2d5d26139beb6ab9e009310ead80db73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612d9d57601a60029054906101000a900460ff16612d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9390614dfb565b60405180910390fd5b5b5b6000612da930611a47565b90506000600d548210159050600c548210612dc457600c5491505b808015612dde5750601a60009054906101000a900460ff16155b8015612e3657507f0000000000000000000000000a173de9fd2d5d26139beb6ab9e009310ead80db73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e4e5750601a60019054906101000a900460ff165b15612e5d57612e5c82613033565b5b600b60009054906101000a900460ff1615612e7c57612e7b8461342f565b5b600060019050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f235750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f2d57600090505b612f39868686846134a2565b505050505050565b6000838311158290612f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f809190614db9565b60405180910390fd5b5082840390509392505050565b6000806000612fa36137b3565b91509150612fba81836127bd90919063ffffffff16565b9250505090565b60008183612fcf91906150c0565b905092915050565b6000806000806000806000806000612fee8a613afe565b925092509250600080600061300c8d8686613007612f96565b613b58565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601a60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115613091577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156130bf5781602001602082028036833780820191505090505b50905030816000815181106130fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561319d57600080fd5b505afa1580156131b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d591906148a2565b8160018151811061320f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613274307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127db565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132d6959493929190614ff6565b600060405180830381600087803b1580156132f057600080fd5b505af1158015613304573d6000803e3d6000fd5b505050506000479050600081111561340f57600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6133666002846127bd90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613391573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6133e26002846127bd90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561340d573d6000803e3d6000fd5b505b50506000601a60006101000a81548160ff02191690831515021790555050565b6004546005819055506007546008819055507f0000000000000000000000000a173de9fd2d5d26139beb6ab9e009310ead80db73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561349f57600a546008819055505b50565b806134b0576134af613be1565b5b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135535750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561356857613563848484613c24565b61379f565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561360b5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136205761361b848484613e84565b61379e565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136c45750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136d9576136d48484846140e4565b61379d565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561377b5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137905761378b8484846142af565b61379c565b61379b8484846140e4565b5b5b5b5b806137ad576137ac6145a4565b5b50505050565b600080600060195490506000600354905060005b601780549050811015613ac157826010600060178481548110613813577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061392757508160116000601784815481106138bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561393e5760195460035494509450505050613afa565b6139f4601060006017848154811061397f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846145b890919063ffffffff16565b9250613aac6011600060178481548110613a37577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836145b890919063ffffffff16565b91508080613ab9906152c5565b9150506137c7565b50613ad96003546019546127bd90919063ffffffff16565b821015613af157601954600354935093505050613afa565b81819350935050505b9091565b600080600080613b0d856145ce565b90506000613b1a866145ff565b90506000613b4382613b35858a6145b890919063ffffffff16565b6145b890919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613b71858961463090919063ffffffff16565b90506000613b88868961463090919063ffffffff16565b90506000613b9f878961463090919063ffffffff16565b90506000613bc882613bba85876145b890919063ffffffff16565b6145b890919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600554148015613bf557506000600854145b15613bff57613c22565b600554600681905550600854600981905550600060058190555060006008819055505b565b600080600080600080613c3687612fd7565b955095509550955095509550613c9487601160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145b890919063ffffffff16565b601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d2986601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145b890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dbe85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0a81614646565b613e1484836147eb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e719190614fdb565b60405180910390a3505050505050505050565b600080600080600080613e9687612fd7565b955095509550955095509550613ef486601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145b890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8983601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061401e85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061406a81614646565b61407484836147eb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140d19190614fdb565b60405180910390a3505050505050505050565b6000806000806000806140f687612fd7565b95509550955095509550955061415486601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145b890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141e985601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423581614646565b61423f84836147eb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161429c9190614fdb565b60405180910390a3505050505050505050565b6000806000806000806142c187612fd7565b95509550955095509550955061431f87601160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145b890919063ffffffff16565b601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143b486601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145b890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061444983601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144de85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061452a81614646565b61453484836147eb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145919190614fdb565b60405180910390a3505050505050505050565b600654600581905550600954600881905550565b600081836145c691906151a1565b905092915050565b60006145f860646145ea6005548561463090919063ffffffff16565b6127bd90919063ffffffff16565b9050919050565b6000614629606461461b6008548561463090919063ffffffff16565b6127bd90919063ffffffff16565b9050919050565b6000818361463e9190615147565b905092915050565b6000614650612f96565b90506000614667828461463090919063ffffffff16565b90506146bb81601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147e6576147a283601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc190919063ffffffff16565b601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614800826019546145b890919063ffffffff16565b60198190555061481b81601854612fc190919063ffffffff16565b6018819055505050565b60008135905061483481615792565b92915050565b60008151905061484981615792565b92915050565b60008135905061485e816157a9565b92915050565b600081359050614873816157c0565b92915050565b60006020828403121561488b57600080fd5b600061489984828501614825565b91505092915050565b6000602082840312156148b457600080fd5b60006148c28482850161483a565b91505092915050565b600080604083850312156148de57600080fd5b60006148ec85828601614825565b92505060206148fd85828601614825565b9150509250929050565b60008060006060848603121561491c57600080fd5b600061492a86828701614825565b935050602061493b86828701614825565b925050604061494c86828701614864565b9150509250925092565b6000806040838503121561496957600080fd5b600061497785828601614825565b925050602061498885828601614864565b9150509250929050565b6000602082840312156149a457600080fd5b60006149b28482850161484f565b91505092915050565b6000602082840312156149cd57600080fd5b60006149db84828501614864565b91505092915050565b600080604083850312156149f757600080fd5b6000614a0585828601614864565b9250506020614a168582860161484f565b9150509250929050565b6000614a2c8383614a38565b60208301905092915050565b614a41816151d5565b82525050565b614a50816151d5565b82525050565b6000614a618261507b565b614a6b818561509e565b9350614a768361506b565b8060005b83811015614aa7578151614a8e8882614a20565b9750614a9983615091565b925050600181019050614a7a565b5085935050505092915050565b614abd816151e7565b82525050565b614acc8161522a565b82525050565b614adb8161524e565b82525050565b6000614aec82615086565b614af681856150af565b9350614b06818560208601615260565b614b0f8161539b565b840191505092915050565b6000614b276023836150af565b9150614b32826153ac565b604082019050919050565b6000614b4a601a836150af565b9150614b55826153fb565b602082019050919050565b6000614b6d602a836150af565b9150614b7882615424565b604082019050919050565b6000614b906026836150af565b9150614b9b82615473565b604082019050919050565b6000614bb36022836150af565b9150614bbe826154c2565b604082019050919050565b6000614bd6601b836150af565b9150614be182615511565b602082019050919050565b6000614bf9601e836150af565b9150614c048261553a565b602082019050919050565b6000614c1c601f836150af565b9150614c2782615563565b602082019050919050565b6000614c3f6028836150af565b9150614c4a8261558c565b604082019050919050565b6000614c626020836150af565b9150614c6d826155db565b602082019050919050565b6000614c856029836150af565b9150614c9082615604565b604082019050919050565b6000614ca8601a836150af565b9150614cb382615653565b602082019050919050565b6000614ccb6024836150af565b9150614cd68261567c565b604082019050919050565b6000614cee6025836150af565b9150614cf9826156cb565b604082019050919050565b6000614d116024836150af565b9150614d1c8261571a565b604082019050919050565b6000614d346017836150af565b9150614d3f82615769565b602082019050919050565b614d5381615213565b82525050565b614d628161521d565b82525050565b6000602082019050614d7d6000830184614a47565b92915050565b6000602082019050614d986000830184614ab4565b92915050565b6000602082019050614db36000830184614ac3565b92915050565b60006020820190508181036000830152614dd38184614ae1565b905092915050565b60006020820190508181036000830152614df481614b1a565b9050919050565b60006020820190508181036000830152614e1481614b3d565b9050919050565b60006020820190508181036000830152614e3481614b60565b9050919050565b60006020820190508181036000830152614e5481614b83565b9050919050565b60006020820190508181036000830152614e7481614ba6565b9050919050565b60006020820190508181036000830152614e9481614bc9565b9050919050565b60006020820190508181036000830152614eb481614bec565b9050919050565b60006020820190508181036000830152614ed481614c0f565b9050919050565b60006020820190508181036000830152614ef481614c32565b9050919050565b60006020820190508181036000830152614f1481614c55565b9050919050565b60006020820190508181036000830152614f3481614c78565b9050919050565b60006020820190508181036000830152614f5481614c9b565b9050919050565b60006020820190508181036000830152614f7481614cbe565b9050919050565b60006020820190508181036000830152614f9481614ce1565b9050919050565b60006020820190508181036000830152614fb481614d04565b9050919050565b60006020820190508181036000830152614fd481614d27565b9050919050565b6000602082019050614ff06000830184614d4a565b92915050565b600060a08201905061500b6000830188614d4a565b6150186020830187614ad2565b818103604083015261502a8186614a56565b90506150396060830185614a47565b6150466080830184614d4a565b9695505050505050565b60006020820190506150656000830184614d59565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006150cb82615213565b91506150d683615213565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561510b5761510a61530e565b5b828201905092915050565b600061512182615213565b915061512c83615213565b92508261513c5761513b61533d565b5b828204905092915050565b600061515282615213565b915061515d83615213565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151965761519561530e565b5b828202905092915050565b60006151ac82615213565b91506151b783615213565b9250828210156151ca576151c961530e565b5b828203905092915050565b60006151e0826151f3565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152358261523c565b9050919050565b6000615247826151f3565b9050919050565b600061525982615213565b9050919050565b60005b8381101561527e578082015181840152602081019050615263565b8381111561528d576000848401525b50505050565b600060028204905060018216806152ab57607f821691505b602082108114156152bf576152be61536c565b5b50919050565b60006152d082615213565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153035761530261530e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f7420656e61626c656420796574000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920626c61636b6c69737465640000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000600082015250565b7f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f7560008201527f7465722e00000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b61579b816151d5565b81146157a657600080fd5b50565b6157b2816151e7565b81146157bd57600080fd5b50565b6157c981615213565b81146157d457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b46f7856afcfc524dbb1fcc31425257c9b5d78e908042c728da3aca37d67617364736f6c63430008030033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000075efa6ba39fa171c5b9001a064ff65a13b8496c100000000000000000000000039dc28c248b974f58d1825f093e2dae729c6752a

-----Decoded View---------------
Arg [0] : teamWalletAddress (address): 0x75EFa6Ba39fA171C5B9001A064FF65a13b8496C1
Arg [1] : marketingWalletAddress (address): 0x39dC28c248B974F58d1825f093e2dAE729c6752a

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000075efa6ba39fa171c5b9001a064ff65a13b8496c1
Arg [1] : 00000000000000000000000039dc28c248b974f58d1825f093e2dae729c6752a


Deployed Bytecode Sourcemap

28693:25762:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38354:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39266:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41386:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30590:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38631:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54340:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29384:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39435:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53838:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41925:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38540:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42641:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40755:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29199:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39756:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43128:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41481:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30648:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30772:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42186:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46606:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53709:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38734:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20151:148;;;;;;;;;;;;;:::i;:::-;;29602:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40120:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41258:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19508:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38445;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29339:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30720:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53554:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29688:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40981:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38940:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54014:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29503:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29552:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29160:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53418:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54142:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39115:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40628:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43249:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20451:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38354:83;38391:13;38424:5;38417:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38354:83;:::o;39266:161::-;39341:4;39358:39;39367:12;:10;:12::i;:::-;39381:7;39390:6;39358:8;:39::i;:::-;39415:4;39408:11;;39266:161;;;;:::o;41386:87::-;41428:7;41455:10;;41448:17;;41386:87;:::o;30590:51::-;;;:::o;38631:95::-;38684:7;38711;;38704:14;;38631:95;:::o;54340:112::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54433:11:::1;54418:12;:26;;;;54340:112:::0;:::o;29384:50::-;;;;:::o;39435:313::-;39533:4;39550:36;39560:6;39568:9;39579:6;39550:9;:36::i;:::-;39597:121;39606:6;39614:12;:10;:12::i;:::-;39628:89;39666:6;39628:89;;;;;;;;;;;;;;;;;:11;:19;39640:6;39628:19;;;;;;;;;;;;;;;:33;39648:12;:10;:12::i;:::-;39628:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;39597:8;:121::i;:::-;39736:4;39729:11;;39435:313;;;;;:::o;53838:164::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53935:8:::1;53914:18;;:29;;;;;;;;;;;;;;;;;;53959:35;53985:8;53959:35;;;;;;:::i;:::-;;;;;;;;53838:164:::0;:::o;41925:253::-;41991:7;42030;;42019;:18;;42011:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42095:19;42118:10;:8;:10::i;:::-;42095:33;;42146:24;42158:11;42146:7;:11;;:24;;;;:::i;:::-;42139:31;;;41925:253;;;:::o;38540:83::-;38581:5;38606:9;;;;;;;;;;;38599:16;;38540:83;:::o;42641:479::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42723:11:::1;:20;42735:7;42723:20;;;;;;;;;;;;;;;;;;;;;;;;;42715:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42791:9;42786:327;42810:9;:16;;;;42806:1;:20;42786:327;;;42868:7;42852:23;;:9;42862:1;42852:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;42848:254;;;42911:9;42940:1;42921:9;:16;;;;:20;;;;:::i;:::-;42911:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42896:9;42906:1;42896:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42980:1;42961:7;:16;42969:7;42961:16;;;;;;;;;;;;;;;:20;;;;43023:5;43000:11;:20;43012:7;43000:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;43047:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43081:5;;42848:254;42828:3;;;;;:::i;:::-;;;;42786:327;;;;42641:479:::0;:::o;40755:218::-;40843:4;40860:83;40869:12;:10;:12::i;:::-;40883:7;40892:50;40931:10;40892:11;:25;40904:12;:10;:12::i;:::-;40892:25;;;;;;;;;;;;;;;:34;40918:7;40892:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;40860:8;:83::i;:::-;40961:4;40954:11;;40755:218;;;;:::o;29199:38::-;;;;:::o;39756:352::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39851:42:::1;39840:53;;:7;:53;;;;39832:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;39954:17;:26;39972:7;39954:26;;;;;;;;;;;;;;;;;;;;;;;;;39953:27;39945:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;40055:4;40026:17;:26;40044:7;40026:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;40070:16;40092:7;40070:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39756:352:::0;:::o;43128:113::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43229:4:::1;43199:18;:27;43218:7;43199:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;43128:113:::0;:::o;41481:436::-;41571:7;41610;;41599;:18;;41591:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41669:17;41664:246;;41704:15;41728:19;41739:7;41728:10;:19::i;:::-;41703:44;;;;;;;41769:7;41762:14;;;;;41664:246;41811:23;41842:19;41853:7;41842:10;:19::i;:::-;41809:52;;;;;;;41883:15;41876:22;;;41481:436;;;;;:::o;30648:38::-;;;:::o;30772:34::-;;;;;;;;;;;;;:::o;42186:447::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42383:11:::1;:20;42395:7;42383:20;;;;;;;;;;;;;;;;;;;;;;;;;42382:21;42374:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42468:1;42449:7;:16;42457:7;42449:16;;;;;;;;;;;;;;;;:20;42446:108;;;42505:37;42525:7;:16;42533:7;42525:16;;;;;;;;;;;;;;;;42505:19;:37::i;:::-;42486:7;:16;42494:7;42486:16;;;;;;;;;;;;;;;:56;;;;42446:108;42587:4;42564:11;:20;42576:7;42564:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;42602:9;42617:7;42602:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42186:447:::0;:::o;46606:123::-;46670:4;46694:18;:27;46713:7;46694:27;;;;;;;;;;;;;;;;;;;;;;;;;46687:34;;46606:123;;;:::o;53709:121::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53814:8:::1;53789:22;;:33;;;;;;;;;;;;;;;;;;53709:121:::0;:::o;38734:198::-;38800:7;38824:11;:20;38836:7;38824:20;;;;;;;;;;;;;;;;;;;;;;;;;38820:49;;;38853:7;:16;38861:7;38853:16;;;;;;;;;;;;;;;;38846:23;;;;38820:49;38887:37;38907:7;:16;38915:7;38907:16;;;;;;;;;;;;;;;;38887:19;:37::i;:::-;38880:44;;38734:198;;;;:::o;20151:148::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20258:1:::1;20221:40;;20242:6;::::0;::::1;;;;;;;;20221:40;;;;;;;;;;;;20289:1;20272:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;20151:148::o:0;29602:53::-;;;;:::o;40120:500::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40209:17:::1;:26;40227:7;40209:26;;;;;;;;;;;;;;;;;;;;;;;;;40201:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40282:9;40277:336;40301:16;:23;;;;40297:1;:27;40277:336;;;40373:7;40350:30;;:16;40367:1;40350:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;40346:256;;;40423:16;40466:1;40440:16;:23;;;;:27;;;;:::i;:::-;40423:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40401:16;40418:1;40401:19;;;;;;;;;;;;;;;;;;;;;;;;:67;;;;;;;;;;;;;;;;;;40516:5;40487:17;:26;40505:7;40487:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;40540:16;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40581:5;;40346:256;40326:3;;;;;:::i;:::-;;;;40277:336;;;;40120:500:::0;:::o;41258:120::-;41326:4;41350:11;:20;41362:7;41350:20;;;;;;;;;;;;;;;;;;;;;;;;;41343:27;;41258:120;;;:::o;19508:87::-;19554:7;19581:6;;;;;;;;;;;19574:13;;19508:87;:::o;38445:::-;38484:13;38517:7;38510:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38445:87;:::o;29339:38::-;;;;:::o;30720:37::-;;;;;;;;;;;;;:::o;53554:147::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53673:20:::1;53649:21;:44;;;;53554:147:::0;:::o;29688:74::-;;;;:::o;40981:269::-;41074:4;41091:129;41100:12;:10;:12::i;:::-;41114:7;41123:96;41162:15;41123:96;;;;;;;;;;;;;;;;;:11;:25;41135:12;:10;:12::i;:::-;41123:25;;;;;;;;;;;;;;;:34;41149:7;41123:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;41091:8;:129::i;:::-;41238:4;41231:11;;40981:269;;;;:::o;38940:167::-;39018:4;39035:42;39045:12;:10;:12::i;:::-;39059:9;39070:6;39035:9;:42::i;:::-;39095:4;39088:11;;38940:167;;;;:::o;54014:120::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54111:15:::1;54094:14;;:32;;;;;;;;;;;;;;;;;;54014:120:::0;:::o;29503:40::-;;;;:::o;29552:41::-;;;;;;;;;;;;;:::o;29160:32::-;;;;:::o;53418:128::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53526:12:::1;53504:19;:34;;;;53418:128:::0;:::o;54142:190::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54292:32:::1;54258:31;:66;;;;54142:190:::0;:::o;39115:143::-;39196:7;39223:11;:18;39235:5;39223:18;;;;;;;;;;;;;;;:27;39242:7;39223:27;;;;;;;;;;;;;;;;39216:34;;39115:143;;;;:::o;40628:119::-;40689:4;40713:17;:26;40731:7;40713:26;;;;;;;;;;;;;;;;;;;;;;;;;40706:33;;40628:119;;;:::o;43249:112::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43348:5:::1;43318:18;:27;43337:7;43318:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;43249:112:::0;:::o;20451:244::-;19737:12;:10;:12::i;:::-;19726:23;;:7;:5;:7::i;:::-;:23;;;19718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20560:1:::1;20540:22;;:8;:22;;;;20532:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20650:8;20621:38;;20642:6;::::0;::::1;;;;;;;;20621:38;;;;;;;;;;;;20679:8;20670:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20451:244:::0;:::o;6707:98::-;6765:7;6796:1;6792;:5;;;;:::i;:::-;6785:12;;6707:98;;;;:::o;10347:::-;10400:7;10427:10;10420:17;;10347:98;:::o;46737:337::-;46847:1;46830:19;;:5;:19;;;;46822:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46928:1;46909:21;;:7;:21;;;;46901:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47012:6;46982:11;:18;46994:5;46982:18;;;;;;;;;;;;;;;:27;47001:7;46982:27;;;;;;;;;;;;;;;:36;;;;47050:7;47034:32;;47043:5;47034:32;;;47059:6;47034:32;;;;;;:::i;:::-;;;;;;;;46737:337;;;:::o;47082:1982::-;47220:1;47204:18;;:4;:18;;;;47196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47297:1;47283:16;;:2;:16;;;;47275:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47367:1;47358:6;:10;47350:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47434:17;:21;47452:2;47434:21;;;;;;;;;;;;;;;;;;;;;;;;;47433:22;47425:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47503:17;:23;47521:4;47503:23;;;;;;;;;;;;;;;;;;;;;;;;;47502:24;47494:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47578:7;:5;:7::i;:::-;47570:15;;:4;:15;;;;:32;;;;;47595:7;:5;:7::i;:::-;47589:13;;:2;:13;;;;47570:32;47567:291;;;47637:12;;47627:6;:22;;47619:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;47721:13;47713:21;;:4;:21;;;:44;;;;47744:13;47738:19;;:2;:19;;;47713:44;47709:138;;;47786:14;;;;;;;;;;;47778:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;47709:138;47567:291;48145:28;48176:24;48194:4;48176:9;:24::i;:::-;48145:55;;48211:24;48262:31;;48238:20;:55;;48211:82;;48333:12;;48309:20;:36;48306:112;;48394:12;;48371:35;;48306:112;48448:19;:50;;;;;48485:13;;;;;;;;;;;48484:14;48448:50;:88;;;;;48523:13;48515:21;;:4;:21;;;;48448:88;:123;;;;;48553:18;;;;;;;;;;;48448:123;48430:213;;;48598:33;48610:20;48598:11;:33::i;:::-;48430:213;48658:22;;;;;;;;;;;48655:65;;;48697:11;48705:2;48697:7;:11::i;:::-;48655:65;48793:12;48808:4;48793:19;;48912:18;:24;48931:4;48912:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;48940:18;:22;48959:2;48940:22;;;;;;;;;;;;;;;;;;;;;;;;;48912:50;48909:97;;;48989:5;48979:15;;48909:97;49018:38;49033:4;49038:2;49041:6;49048:7;49018:14;:38::i;:::-;47082:1982;;;;;;:::o;7826:206::-;7912:7;7970:1;7965;:6;;7973:12;7957:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8012:1;8008;:5;8001:12;;7826:206;;;;;:::o;45173:163::-;45214:7;45235:15;45252;45271:19;:17;:19::i;:::-;45234:56;;;;45308:20;45320:7;45308;:11;;:20;;;;:::i;:::-;45301:27;;;;45173:163;:::o;5597:98::-;5655:7;5686:1;5682;:5;;;;:::i;:::-;5675:12;;5597:98;;;;:::o;43971:419::-;44030:7;44039;44048;44057;44066;44075;44096:23;44121:12;44135:18;44157:20;44169:7;44157:11;:20::i;:::-;44095:82;;;;;;44189:15;44206:23;44231:12;44247:50;44259:7;44268:4;44274:10;44286;:8;:10::i;:::-;44247:11;:50::i;:::-;44188:109;;;;;;44316:7;44325:15;44342:4;44348:15;44365:4;44371:10;44308:74;;;;;;;;;;;;;;;;;;43971:419;;;;;;;:::o;49326:879::-;30917:4;30901:13;;:20;;;;;;;;;;;;;;;;;;49468:21:::1;49506:1;49492:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49468:40;;49537:4;49519;49524:1;49519:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;49563:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49553:4;49558:1;49553:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;::::0;::::1;49598:71;49615:4;49630:15;49648:20;49598:8;:71::i;:::-;49708:15;:66;;;49789:20;49824:1;49868:4;49895;49915:15;49708:233;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49954:26;49983:21;49954:50;;50039:1;50018:18;:22;50015:183;;;50058:18;;;;;;;;;;;:27;;:54;50086:25;50109:1;50086:18;:22;;:25;;;;:::i;:::-;50058:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50127:23;;;;;;;;;;;:32;;:59;50160:25;50183:1;50160:18;:22;;:25;;;;:::i;:::-;50127:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50015:183;30932:1;;30960:5:::0;30944:13;;:21;;;;;;;;;;;;;;;;;;49326:879;:::o;49072:246::-;49137:13;;49127:7;:23;;;;49177:19;;49161:13;:35;;;;49224:13;49211:26;;:9;:26;;;49207:104;;;49278:21;;49262:13;:37;;;;49207:104;49072:246;:::o;50286:818::-;50397:7;50393:40;;50419:14;:12;:14::i;:::-;50393:40;50450:11;:19;50462:6;50450:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;50474:11;:22;50486:9;50474:22;;;;;;;;;;;;;;;;;;;;;;;;;50473:23;50450:46;50446:597;;;50513:48;50535:6;50543:9;50554:6;50513:21;:48::i;:::-;50446:597;;;50584:11;:19;50596:6;50584:19;;;;;;;;;;;;;;;;;;;;;;;;;50583:20;:46;;;;;50607:11;:22;50619:9;50607:22;;;;;;;;;;;;;;;;;;;;;;;;;50583:46;50579:464;;;50646:46;50666:6;50674:9;50685:6;50646:19;:46::i;:::-;50579:464;;;50715:11;:19;50727:6;50715:19;;;;;;;;;;;;;;;;;;;;;;;;;50714:20;:47;;;;;50739:11;:22;50751:9;50739:22;;;;;;;;;;;;;;;;;;;;;;;;;50738:23;50714:47;50710:333;;;50778:44;50796:6;50804:9;50815:6;50778:17;:44::i;:::-;50710:333;;;50844:11;:19;50856:6;50844:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;50867:11;:22;50879:9;50867:22;;;;;;;;;;;;;;;;;;;;;;;;;50844:45;50840:203;;;50906:48;50928:6;50936:9;50947:6;50906:21;:48::i;:::-;50840:203;;;50987:44;51005:6;51013:9;51024:6;50987:17;:44::i;:::-;50840:203;50710:333;50579:464;50446:597;51059:7;51055:41;;51081:15;:13;:15::i;:::-;51055:41;50286:818;;;;:::o;45344:555::-;45394:7;45403;45423:15;45441:7;;45423:25;;45459:15;45477:7;;45459:25;;45500:9;45495:289;45519:9;:16;;;;45515:1;:20;45495:289;;;45585:7;45561;:21;45569:9;45579:1;45569:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45561:21;;;;;;;;;;;;;;;;:31;:66;;;;45620:7;45596;:21;45604:9;45614:1;45604:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45596:21;;;;;;;;;;;;;;;;:31;45561:66;45557:97;;;45637:7;;45646;;45629:25;;;;;;;;;45557:97;45679:34;45691:7;:21;45699:9;45709:1;45699:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45691:21;;;;;;;;;;;;;;;;45679:7;:11;;:34;;;;:::i;:::-;45669:44;;45738:34;45750:7;:21;45758:9;45768:1;45758:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45750:21;;;;;;;;;;;;;;;;45738:7;:11;;:34;;;;:::i;:::-;45728:44;;45537:3;;;;;:::i;:::-;;;;45495:289;;;;45808:20;45820:7;;45808;;:11;;:20;;;;:::i;:::-;45798:7;:30;45794:61;;;45838:7;;45847;;45830:25;;;;;;;;45794:61;45874:7;45883;45866:25;;;;;;45344:555;;;:::o;44398:330::-;44458:7;44467;44476;44496:12;44511:24;44527:7;44511:15;:24::i;:::-;44496:39;;44546:18;44567:30;44589:7;44567:21;:30::i;:::-;44546:51;;44608:23;44634:33;44656:10;44634:17;44646:4;44634:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;44608:59;;44686:15;44703:4;44709:10;44678:42;;;;;;;;;44398:330;;;;;:::o;44736:429::-;44851:7;44860;44869;44889:15;44907:24;44919:11;44907:7;:11;;:24;;;;:::i;:::-;44889:42;;44942:12;44957:21;44966:11;44957:4;:8;;:21;;;;:::i;:::-;44942:36;;44989:18;45010:27;45025:11;45010:10;:14;;:27;;;;:::i;:::-;44989:48;;45048:23;45074:33;45096:10;45074:17;45086:4;45074:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;45048:59;;45126:7;45135:15;45152:4;45118:39;;;;;;;;;;44736:429;;;;;;;;:::o;43369:234::-;43426:1;43415:7;;:12;:34;;;;;43448:1;43431:13;;:18;43415:34;43412:46;;;43451:7;;43412:46;43488:7;;43470:15;:25;;;;43530:13;;43506:21;:37;;;;43566:1;43556:7;:11;;;;43594:1;43578:13;:17;;;;43369:234;:::o;52205:563::-;52308:15;52325:23;52350:12;52364:23;52389:12;52403:18;52425:19;52436:7;52425:10;:19::i;:::-;52307:137;;;;;;;;;;;;52473:28;52493:7;52473;:15;52481:6;52473:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;52455:7;:15;52463:6;52455:15;;;;;;;;;;;;;;;:46;;;;52530:28;52550:7;52530;:15;52538:6;52530:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;52512:7;:15;52520:6;52512:15;;;;;;;;;;;;;;;:46;;;;52590:39;52613:15;52590:7;:18;52598:9;52590:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;52569:7;:18;52577:9;52569:18;;;;;;;;;;;;;;;:60;;;;52640:26;52655:10;52640:14;:26::i;:::-;52677:23;52689:4;52695;52677:11;:23::i;:::-;52733:9;52716:44;;52725:6;52716:44;;;52744:15;52716:44;;;;;;:::i;:::-;;;;;;;;52205:563;;;;;;;;;:::o;51622:575::-;51723:15;51740:23;51765:12;51779:23;51804:12;51818:18;51840:19;51851:7;51840:10;:19::i;:::-;51722:137;;;;;;;;;;;;51888:28;51908:7;51888;:15;51896:6;51888:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;51870:7;:15;51878:6;51870:15;;;;;;;;;;;;;;;:46;;;;51948:39;51971:15;51948:7;:18;51956:9;51948:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;51927:7;:18;51935:9;51927:18;;;;;;;;;;;;;;;:60;;;;52019:39;52042:15;52019:7;:18;52027:9;52019:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;51998:7;:18;52006:9;51998:18;;;;;;;;;;;;;;;:60;;;;52069:26;52084:10;52069:14;:26::i;:::-;52106:23;52118:4;52124;52106:11;:23::i;:::-;52162:9;52145:44;;52154:6;52145:44;;;52173:15;52145:44;;;;;;:::i;:::-;;;;;;;;51622:575;;;;;;;;;:::o;51112:502::-;51211:15;51228:23;51253:12;51267:23;51292:12;51306:18;51328:19;51339:7;51328:10;:19::i;:::-;51210:137;;;;;;;;;;;;51376:28;51396:7;51376;:15;51384:6;51376:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;51358:7;:15;51366:6;51358:15;;;;;;;;;;;;;;;:46;;;;51436:39;51459:15;51436:7;:18;51444:9;51436:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;51415:7;:18;51423:9;51415:18;;;;;;;;;;;;;;;:60;;;;51486:26;51501:10;51486:14;:26::i;:::-;51523:23;51535:4;51541;51523:11;:23::i;:::-;51579:9;51562:44;;51571:6;51562:44;;;51590:15;51562:44;;;;;;:::i;:::-;;;;;;;;51112:502;;;;;;;;;:::o;52776:634::-;52879:15;52896:23;52921:12;52935:23;52960:12;52974:18;52996:19;53007:7;52996:10;:19::i;:::-;52878:137;;;;;;;;;;;;53044:28;53064:7;53044;:15;53052:6;53044:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;53026:7;:15;53034:6;53026:15;;;;;;;;;;;;;;;:46;;;;53101:28;53121:7;53101;:15;53109:6;53101:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;53083:7;:15;53091:6;53083:15;;;;;;;;;;;;;;;:46;;;;53161:39;53184:15;53161:7;:18;53169:9;53161:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;53140:7;:18;53148:9;53140:18;;;;;;;;;;;;;;;:60;;;;53232:39;53255:15;53232:7;:18;53240:9;53232:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;53211:7;:18;53219:9;53211:18;;;;;;;;;;;;;;;:60;;;;53282:26;53297:10;53282:14;:26::i;:::-;53319:23;53331:4;53337;53319:11;:23::i;:::-;53375:9;53358:44;;53367:6;53358:44;;;53386:15;53358:44;;;;;;:::i;:::-;;;;;;;;52776:634;;;;;;;;;:::o;43611:125::-;43665:15;;43655:7;:25;;;;43707:21;;43691:13;:37;;;;43611:125::o;5969:98::-;6027:7;6058:1;6054;:5;;;;:::i;:::-;6047:12;;5969:98;;;;:::o;46270:154::-;46334:7;46361:55;46400:5;46361:20;46373:7;;46361;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;46354:62;;46270:154;;;:::o;46432:166::-;46502:7;46529:61;46574:5;46529:26;46541:13;;46529:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;46522:68;;46432:166;;;:::o;6317:98::-;6375:7;6406:1;6402;:5;;;;:::i;:::-;6395:12;;6317:98;;;;:::o;45907:355::-;45970:19;45993:10;:8;:10::i;:::-;45970:33;;46014:18;46035:27;46050:11;46035:10;:14;;:27;;;;:::i;:::-;46014:48;;46098:38;46125:10;46098:7;:22;46114:4;46098:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;46073:7;:22;46089:4;46073:22;;;;;;;;;;;;;;;:63;;;;46150:11;:26;46170:4;46150:26;;;;;;;;;;;;;;;;;;;;;;;;;46147:107;;;46216:38;46243:10;46216:7;:22;46232:4;46216:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;46191:7;:22;46207:4;46191:22;;;;;;;;;;;;;;;:63;;;;46147:107;45907:355;;;:::o;43816:147::-;43894:17;43906:4;43894:7;;:11;;:17;;;;:::i;:::-;43884:7;:27;;;;43935:20;43950:4;43935:10;;:14;;:20;;;;:::i;:::-;43922:10;:33;;;;43816:147;;:::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:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:284::-;;972:2;960:9;951:7;947:23;943:32;940:2;;;988:1;985;978:12;940:2;1031:1;1056:64;1112:7;1103:6;1092:9;1088:22;1056:64;:::i;:::-;1046:74;;1002:128;930:207;;;;:::o;1143:407::-;;;1268:2;1256:9;1247:7;1243:23;1239:32;1236:2;;;1284:1;1281;1274:12;1236:2;1327:1;1352:53;1397:7;1388:6;1377:9;1373:22;1352:53;:::i;:::-;1342:63;;1298:117;1454:2;1480:53;1525:7;1516:6;1505:9;1501:22;1480:53;:::i;:::-;1470:63;;1425:118;1226:324;;;;;:::o;1556:552::-;;;;1698:2;1686:9;1677:7;1673:23;1669:32;1666:2;;;1714:1;1711;1704:12;1666:2;1757:1;1782:53;1827:7;1818:6;1807:9;1803:22;1782:53;:::i;:::-;1772:63;;1728:117;1884:2;1910:53;1955:7;1946:6;1935:9;1931:22;1910:53;:::i;:::-;1900:63;;1855:118;2012:2;2038:53;2083:7;2074:6;2063:9;2059:22;2038:53;:::i;:::-;2028:63;;1983:118;1656:452;;;;;:::o;2114:407::-;;;2239:2;2227:9;2218:7;2214:23;2210:32;2207:2;;;2255:1;2252;2245:12;2207:2;2298:1;2323:53;2368:7;2359:6;2348:9;2344:22;2323:53;:::i;:::-;2313:63;;2269:117;2425:2;2451:53;2496:7;2487:6;2476:9;2472:22;2451:53;:::i;:::-;2441:63;;2396:118;2197:324;;;;;:::o;2527:256::-;;2632:2;2620:9;2611:7;2607:23;2603:32;2600:2;;;2648:1;2645;2638:12;2600:2;2691:1;2716:50;2758:7;2749:6;2738:9;2734:22;2716:50;:::i;:::-;2706:60;;2662:114;2590:193;;;;:::o;2789:262::-;;2897:2;2885:9;2876:7;2872:23;2868:32;2865:2;;;2913:1;2910;2903:12;2865:2;2956:1;2981:53;3026:7;3017:6;3006:9;3002:22;2981:53;:::i;:::-;2971:63;;2927:117;2855:196;;;;:::o;3057:401::-;;;3179:2;3167:9;3158:7;3154:23;3150:32;3147:2;;;3195:1;3192;3185:12;3147:2;3238:1;3263:53;3308:7;3299:6;3288:9;3284:22;3263:53;:::i;:::-;3253:63;;3209:117;3365:2;3391:50;3433:7;3424:6;3413:9;3409:22;3391:50;:::i;:::-;3381:60;;3336:115;3137:321;;;;;:::o;3464:179::-;;3554:46;3596:3;3588:6;3554:46;:::i;:::-;3632:4;3627:3;3623:14;3609:28;;3544:99;;;;:::o;3649:108::-;3726:24;3744:5;3726:24;:::i;:::-;3721:3;3714:37;3704:53;;:::o;3763:118::-;3850:24;3868:5;3850:24;:::i;:::-;3845:3;3838:37;3828:53;;:::o;3917:732::-;;4065:54;4113:5;4065:54;:::i;:::-;4135:86;4214:6;4209:3;4135:86;:::i;:::-;4128:93;;4245:56;4295:5;4245:56;:::i;:::-;4324:7;4355:1;4340:284;4365:6;4362:1;4359:13;4340:284;;;4441:6;4435:13;4468:63;4527:3;4512:13;4468:63;:::i;:::-;4461:70;;4554:60;4607:6;4554:60;:::i;:::-;4544:70;;4400:224;4387:1;4384;4380:9;4375:14;;4340:284;;;4344:14;4640:3;4633:10;;4041:608;;;;;;;:::o;4655:109::-;4736:21;4751:5;4736:21;:::i;:::-;4731:3;4724:34;4714:50;;:::o;4770:185::-;4884:64;4942:5;4884:64;:::i;:::-;4879:3;4872:77;4862:93;;:::o;4961:147::-;5056:45;5095:5;5056:45;:::i;:::-;5051:3;5044:58;5034:74;;:::o;5114:364::-;;5230:39;5263:5;5230:39;:::i;:::-;5285:71;5349:6;5344:3;5285:71;:::i;:::-;5278:78;;5365:52;5410:6;5405:3;5398:4;5391:5;5387:16;5365:52;:::i;:::-;5442:29;5464:6;5442:29;:::i;:::-;5437:3;5433:39;5426:46;;5206:272;;;;;:::o;5484:366::-;;5647:67;5711:2;5706:3;5647:67;:::i;:::-;5640:74;;5723:93;5812:3;5723:93;:::i;:::-;5841:2;5836:3;5832:12;5825:19;;5630:220;;;:::o;5856:366::-;;6019:67;6083:2;6078:3;6019:67;:::i;:::-;6012:74;;6095:93;6184:3;6095:93;:::i;:::-;6213:2;6208:3;6204:12;6197:19;;6002:220;;;:::o;6228:366::-;;6391:67;6455:2;6450:3;6391:67;:::i;:::-;6384:74;;6467:93;6556:3;6467:93;:::i;:::-;6585:2;6580:3;6576:12;6569:19;;6374:220;;;:::o;6600:366::-;;6763:67;6827:2;6822:3;6763:67;:::i;:::-;6756:74;;6839:93;6928:3;6839:93;:::i;:::-;6957:2;6952:3;6948:12;6941:19;;6746:220;;;:::o;6972:366::-;;7135:67;7199:2;7194:3;7135:67;:::i;:::-;7128:74;;7211:93;7300:3;7211:93;:::i;:::-;7329:2;7324:3;7320:12;7313:19;;7118:220;;;:::o;7344:366::-;;7507:67;7571:2;7566:3;7507:67;:::i;:::-;7500:74;;7583:93;7672:3;7583:93;:::i;:::-;7701:2;7696:3;7692:12;7685:19;;7490:220;;;:::o;7716:366::-;;7879:67;7943:2;7938:3;7879:67;:::i;:::-;7872:74;;7955:93;8044:3;7955:93;:::i;:::-;8073:2;8068:3;8064:12;8057:19;;7862:220;;;:::o;8088:366::-;;8251:67;8315:2;8310:3;8251:67;:::i;:::-;8244:74;;8327:93;8416:3;8327:93;:::i;:::-;8445:2;8440:3;8436:12;8429:19;;8234:220;;;:::o;8460:366::-;;8623:67;8687:2;8682:3;8623:67;:::i;:::-;8616:74;;8699:93;8788:3;8699:93;:::i;:::-;8817:2;8812:3;8808:12;8801:19;;8606:220;;;:::o;8832:366::-;;8995:67;9059:2;9054:3;8995:67;:::i;:::-;8988:74;;9071:93;9160:3;9071:93;:::i;:::-;9189:2;9184:3;9180:12;9173:19;;8978:220;;;:::o;9204:366::-;;9367:67;9431:2;9426:3;9367:67;:::i;:::-;9360:74;;9443:93;9532:3;9443:93;:::i;:::-;9561:2;9556:3;9552:12;9545:19;;9350:220;;;:::o;9576:366::-;;9739:67;9803:2;9798:3;9739:67;:::i;:::-;9732:74;;9815:93;9904:3;9815:93;:::i;:::-;9933:2;9928:3;9924:12;9917:19;;9722:220;;;:::o;9948:366::-;;10111:67;10175:2;10170:3;10111:67;:::i;:::-;10104:74;;10187:93;10276:3;10187:93;:::i;:::-;10305:2;10300:3;10296:12;10289:19;;10094:220;;;:::o;10320:366::-;;10483:67;10547:2;10542:3;10483:67;:::i;:::-;10476:74;;10559:93;10648:3;10559:93;:::i;:::-;10677:2;10672:3;10668:12;10661:19;;10466:220;;;:::o;10692:366::-;;10855:67;10919:2;10914:3;10855:67;:::i;:::-;10848:74;;10931:93;11020:3;10931:93;:::i;:::-;11049:2;11044:3;11040:12;11033:19;;10838:220;;;:::o;11064:366::-;;11227:67;11291:2;11286:3;11227:67;:::i;:::-;11220:74;;11303:93;11392:3;11303:93;:::i;:::-;11421:2;11416:3;11412:12;11405:19;;11210:220;;;:::o;11436:118::-;11523:24;11541:5;11523:24;:::i;:::-;11518:3;11511:37;11501:53;;:::o;11560:112::-;11643:22;11659:5;11643:22;:::i;:::-;11638:3;11631:35;11621:51;;:::o;11678:222::-;;11809:2;11798:9;11794:18;11786:26;;11822:71;11890:1;11879:9;11875:17;11866:6;11822:71;:::i;:::-;11776:124;;;;:::o;11906:210::-;;12031:2;12020:9;12016:18;12008:26;;12044:65;12106:1;12095:9;12091:17;12082:6;12044:65;:::i;:::-;11998:118;;;;:::o;12122:276::-;;12280:2;12269:9;12265:18;12257:26;;12293:98;12388:1;12377:9;12373:17;12364:6;12293:98;:::i;:::-;12247:151;;;;:::o;12404:313::-;;12555:2;12544:9;12540:18;12532:26;;12604:9;12598:4;12594:20;12590:1;12579:9;12575:17;12568:47;12632:78;12705:4;12696:6;12632:78;:::i;:::-;12624:86;;12522:195;;;;:::o;12723:419::-;;12927:2;12916:9;12912:18;12904:26;;12976:9;12970:4;12966:20;12962:1;12951:9;12947:17;12940:47;13004:131;13130:4;13004:131;:::i;:::-;12996:139;;12894:248;;;:::o;13148:419::-;;13352:2;13341:9;13337:18;13329:26;;13401:9;13395:4;13391:20;13387:1;13376:9;13372:17;13365:47;13429:131;13555:4;13429:131;:::i;:::-;13421:139;;13319:248;;;:::o;13573:419::-;;13777:2;13766:9;13762:18;13754:26;;13826:9;13820:4;13816:20;13812:1;13801:9;13797:17;13790:47;13854:131;13980:4;13854:131;:::i;:::-;13846:139;;13744:248;;;:::o;13998:419::-;;14202:2;14191:9;14187:18;14179:26;;14251:9;14245:4;14241:20;14237:1;14226:9;14222:17;14215:47;14279:131;14405:4;14279:131;:::i;:::-;14271:139;;14169:248;;;:::o;14423:419::-;;14627:2;14616:9;14612:18;14604:26;;14676:9;14670:4;14666:20;14662:1;14651:9;14647:17;14640:47;14704:131;14830:4;14704:131;:::i;:::-;14696:139;;14594:248;;;:::o;14848:419::-;;15052:2;15041:9;15037:18;15029:26;;15101:9;15095:4;15091:20;15087:1;15076:9;15072:17;15065:47;15129:131;15255:4;15129:131;:::i;:::-;15121:139;;15019:248;;;:::o;15273:419::-;;15477:2;15466:9;15462:18;15454:26;;15526:9;15520:4;15516:20;15512:1;15501:9;15497:17;15490:47;15554:131;15680:4;15554:131;:::i;:::-;15546:139;;15444:248;;;:::o;15698:419::-;;15902:2;15891:9;15887:18;15879:26;;15951:9;15945:4;15941:20;15937:1;15926:9;15922:17;15915:47;15979:131;16105:4;15979:131;:::i;:::-;15971:139;;15869:248;;;:::o;16123:419::-;;16327:2;16316:9;16312:18;16304:26;;16376:9;16370:4;16366:20;16362:1;16351:9;16347:17;16340:47;16404:131;16530:4;16404:131;:::i;:::-;16396:139;;16294:248;;;:::o;16548:419::-;;16752:2;16741:9;16737:18;16729:26;;16801:9;16795:4;16791:20;16787:1;16776:9;16772:17;16765:47;16829:131;16955:4;16829:131;:::i;:::-;16821:139;;16719:248;;;:::o;16973:419::-;;17177:2;17166:9;17162:18;17154:26;;17226:9;17220:4;17216:20;17212:1;17201:9;17197:17;17190:47;17254:131;17380:4;17254:131;:::i;:::-;17246:139;;17144:248;;;:::o;17398:419::-;;17602:2;17591:9;17587:18;17579:26;;17651:9;17645:4;17641:20;17637:1;17626:9;17622:17;17615:47;17679:131;17805:4;17679:131;:::i;:::-;17671:139;;17569:248;;;:::o;17823:419::-;;18027:2;18016:9;18012:18;18004:26;;18076:9;18070:4;18066:20;18062:1;18051:9;18047:17;18040:47;18104:131;18230:4;18104:131;:::i;:::-;18096:139;;17994:248;;;:::o;18248:419::-;;18452:2;18441:9;18437:18;18429:26;;18501:9;18495:4;18491:20;18487:1;18476:9;18472:17;18465:47;18529:131;18655:4;18529:131;:::i;:::-;18521:139;;18419:248;;;:::o;18673:419::-;;18877:2;18866:9;18862:18;18854:26;;18926:9;18920:4;18916:20;18912:1;18901:9;18897:17;18890:47;18954:131;19080:4;18954:131;:::i;:::-;18946:139;;18844:248;;;:::o;19098:419::-;;19302:2;19291:9;19287:18;19279:26;;19351:9;19345:4;19341:20;19337:1;19326:9;19322:17;19315:47;19379:131;19505:4;19379:131;:::i;:::-;19371:139;;19269:248;;;:::o;19523:222::-;;19654:2;19643:9;19639:18;19631:26;;19667:71;19735:1;19724:9;19720:17;19711:6;19667:71;:::i;:::-;19621:124;;;;:::o;19751:831::-;;20052:3;20041:9;20037:19;20029:27;;20066:71;20134:1;20123:9;20119:17;20110:6;20066:71;:::i;:::-;20147:80;20223:2;20212:9;20208:18;20199:6;20147:80;:::i;:::-;20274:9;20268:4;20264:20;20259:2;20248:9;20244:18;20237:48;20302:108;20405:4;20396:6;20302:108;:::i;:::-;20294:116;;20420:72;20488:2;20477:9;20473:18;20464:6;20420:72;:::i;:::-;20502:73;20570:3;20559:9;20555:19;20546:6;20502:73;:::i;:::-;20019:563;;;;;;;;:::o;20588:214::-;;20715:2;20704:9;20700:18;20692:26;;20728:67;20792:1;20781:9;20777:17;20768:6;20728:67;:::i;:::-;20682:120;;;;:::o;20808:132::-;;20898:3;20890:11;;20928:4;20923:3;20919:14;20911:22;;20880:60;;;:::o;20946:114::-;;21047:5;21041:12;21031:22;;21020:40;;;:::o;21066:99::-;;21152:5;21146:12;21136:22;;21125:40;;;:::o;21171:113::-;;21273:4;21268:3;21264:14;21256:22;;21246:38;;;:::o;21290:184::-;;21423:6;21418:3;21411:19;21463:4;21458:3;21454:14;21439:29;;21401:73;;;;:::o;21480:169::-;;21598:6;21593:3;21586:19;21638:4;21633:3;21629:14;21614:29;;21576:73;;;;:::o;21655:305::-;;21714:20;21732:1;21714:20;:::i;:::-;21709:25;;21748:20;21766:1;21748:20;:::i;:::-;21743:25;;21902:1;21834:66;21830:74;21827:1;21824:81;21821:2;;;21908:18;;:::i;:::-;21821:2;21952:1;21949;21945:9;21938:16;;21699:261;;;;:::o;21966:185::-;;22023:20;22041:1;22023:20;:::i;:::-;22018:25;;22057:20;22075:1;22057:20;:::i;:::-;22052:25;;22096:1;22086:2;;22101:18;;:::i;:::-;22086:2;22143:1;22140;22136:9;22131:14;;22008:143;;;;:::o;22157:348::-;;22220:20;22238:1;22220:20;:::i;:::-;22215:25;;22254:20;22272:1;22254:20;:::i;:::-;22249:25;;22442:1;22374:66;22370:74;22367:1;22364:81;22359:1;22352:9;22345:17;22341:105;22338:2;;;22449:18;;:::i;:::-;22338:2;22497:1;22494;22490:9;22479:20;;22205:300;;;;:::o;22511:191::-;;22571:20;22589:1;22571:20;:::i;:::-;22566:25;;22605:20;22623:1;22605:20;:::i;:::-;22600:25;;22644:1;22641;22638:8;22635:2;;;22649:18;;:::i;:::-;22635:2;22694:1;22691;22687:9;22679:17;;22556:146;;;;:::o;22708:96::-;;22774:24;22792:5;22774:24;:::i;:::-;22763:35;;22753:51;;;:::o;22810:90::-;;22887:5;22880:13;22873:21;22862:32;;22852:48;;;:::o;22906:126::-;;22983:42;22976:5;22972:54;22961:65;;22951:81;;;:::o;23038:77::-;;23104:5;23093:16;;23083:32;;;:::o;23121:86::-;;23196:4;23189:5;23185:16;23174:27;;23164:43;;;:::o;23213:180::-;;23323:64;23381:5;23323:64;:::i;:::-;23310:77;;23300:93;;;:::o;23399:140::-;;23509:24;23527:5;23509:24;:::i;:::-;23496:37;;23486:53;;;:::o;23545:121::-;;23636:24;23654:5;23636:24;:::i;:::-;23623:37;;23613:53;;;:::o;23672:307::-;23740:1;23750:113;23764:6;23761:1;23758:13;23750:113;;;23849:1;23844:3;23840:11;23834:18;23830:1;23825:3;23821:11;23814:39;23786:2;23783:1;23779:10;23774:15;;23750:113;;;23881:6;23878:1;23875:13;23872:2;;;23961:1;23952:6;23947:3;23943:16;23936:27;23872:2;23721:258;;;;:::o;23985:320::-;;24066:1;24060:4;24056:12;24046:22;;24113:1;24107:4;24103:12;24134:18;24124:2;;24190:4;24182:6;24178:17;24168:27;;24124:2;24252;24244:6;24241:14;24221:18;24218:38;24215:2;;;24271:18;;:::i;:::-;24215:2;24036:269;;;;:::o;24311:233::-;;24373:24;24391:5;24373:24;:::i;:::-;24364:33;;24419:66;24412:5;24409:77;24406:2;;;24489:18;;:::i;:::-;24406:2;24536:1;24529:5;24525:13;24518:20;;24354:190;;;:::o;24550:180::-;24598:77;24595:1;24588:88;24695:4;24692:1;24685:15;24719:4;24716:1;24709:15;24736:180;24784:77;24781:1;24774:88;24881:4;24878:1;24871:15;24905:4;24902:1;24895:15;24922:180;24970:77;24967:1;24960:88;25067:4;25064:1;25057:15;25091:4;25088:1;25081:15;25108:102;;25200:2;25196:7;25191:2;25184:5;25180:14;25176:28;25166:38;;25156:54;;;:::o;25216:222::-;25356:34;25352:1;25344:6;25340:14;25333:58;25425:5;25420:2;25412:6;25408:15;25401:30;25322:116;:::o;25444:176::-;25584:28;25580:1;25572:6;25568:14;25561:52;25550:70;:::o;25626:229::-;25766:34;25762:1;25754:6;25750:14;25743:58;25835:12;25830:2;25822:6;25818:15;25811:37;25732:123;:::o;25861:225::-;26001:34;25997:1;25989:6;25985:14;25978:58;26070:8;26065:2;26057:6;26053:15;26046:33;25967:119;:::o;26092:221::-;26232:34;26228:1;26220:6;26216:14;26209:58;26301:4;26296:2;26288:6;26284:15;26277:29;26198:115;:::o;26319:177::-;26459:29;26455:1;26447:6;26443:14;26436:53;26425:71;:::o;26502:180::-;26642:32;26638:1;26630:6;26626:14;26619:56;26608:74;:::o;26688:181::-;26828:33;26824:1;26816:6;26812:14;26805:57;26794:75;:::o;26875:227::-;27015:34;27011:1;27003:6;26999:14;26992:58;27084:10;27079:2;27071:6;27067:15;27060:35;26981:121;:::o;27108:182::-;27248:34;27244:1;27236:6;27232:14;27225:58;27214:76;:::o;27296:228::-;27436:34;27432:1;27424:6;27420:14;27413:58;27505:11;27500:2;27492:6;27488:15;27481:36;27402:122;:::o;27530:176::-;27670:28;27666:1;27658:6;27654:14;27647:52;27636:70;:::o;27712:223::-;27852:34;27848:1;27840:6;27836:14;27829:58;27921:6;27916:2;27908:6;27904:15;27897:31;27818:117;:::o;27941:224::-;28081:34;28077:1;28069:6;28065:14;28058:58;28150:7;28145:2;28137:6;28133:15;28126:32;28047:118;:::o;28171:223::-;28311:34;28307:1;28299:6;28295:14;28288:58;28380:6;28375:2;28367:6;28363:15;28356:31;28277:117;:::o;28400:173::-;28540:25;28536:1;28528:6;28524:14;28517:49;28506:67;:::o;28579:122::-;28652:24;28670:5;28652:24;:::i;:::-;28645:5;28642:35;28632:2;;28691:1;28688;28681:12;28632:2;28622:79;:::o;28707:116::-;28777:21;28792:5;28777:21;:::i;:::-;28770:5;28767:32;28757:2;;28813:1;28810;28803:12;28757:2;28747:76;:::o;28829:122::-;28902:24;28920:5;28902:24;:::i;:::-;28895:5;28892:35;28882:2;;28941:1;28938;28931:12;28882:2;28872:79;:::o

Swarm Source

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