ETH Price: $2,671.50 (+1.30%)
Gas: 0.93 Gwei

Token

QuadLife (QUAD)
 

Overview

Max Total Supply

1,000,000,000,000,000 QUAD

Holders

144

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
wreckinbeard.eth
Balance
125,620,181,502.910886421 QUAD

Value
$0.00
0x2A9961aA2B35A992026304A7B92Fba073a85eE91
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:
Quadlife

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-01
*/

/**
*    Telegram : https://t.me/QUADofficial
*    Website  : https://thagunnaz.net
*/

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

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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        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);
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev 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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

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

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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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 Quadlife is Context, IERC20, Ownable {
  using SafeMath for uint256;
  using Address for address;

  uint8 public marketingPercent = 100; 
  address payable public marketingAddress =
    payable(0xfFe17962DfED9d37840ED835971f193b306B8101); //(0xfFe17962DfED9d37840ED835971f193b306B8101);

  address payable public liqOwner = payable(0x000000000000000000000000000000000000dEaD);
  
  address private constant UNISWAP_ROUTER =
    0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

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

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

  string private constant _name = 'QuadLife';
  string private constant _symbol = 'QUAD';
  uint8 private constant _decimals = 9;

  uint256 private constant MAX = ~uint256(0);
  uint256 private constant _tTotal = 1_000_000_000_000_000 * 10**_decimals;
  uint256 public _maxTxAmount = 10_000_000_000_000 * 10**_decimals; //1%
  uint256 public _maxWalletSize = 30_000_000_000_000 * 10**_decimals; //3%
  uint256 private _rTotal = (MAX - (MAX % _tTotal));
  uint256 private _tFeeTotal;

  uint256 public buyReflectionFee = 1;
  uint256 public sellReflectionFee = 2;
  uint256 private _previousBuyReflectFee = buyReflectionFee;
  uint256 private _previousSellReflectFee = sellReflectionFee;

  uint256 public buyMktgFee = 7; 
  uint256 public sellMktgFee = 5;
  uint256 private _previousBuyMktgFee = buyMktgFee;
  uint256 private _previousSellMktgFee = sellMktgFee;

  uint256 public buyLpFee = 4;
  uint256 public sellLpFee = 8;
  uint256 private _previousBuyLpFee = buyLpFee;
  uint256 private _previousSellLpFee = sellLpFee;

  bool isSelling = false;
  uint256 public liquifyRate = 5; //.5%

  uint256 public launchTime;
  mapping(address => bool) private snipe;
  address[] private _sniped;
  bool public limitsEnabled = false;

  mapping (address => uint) private cooldown;
  mapping (address => bool) private bots;

  IUniswapV2Router02 public uniswapV2Router;
  address public uniswapV2Pair;
  mapping(address => bool) private _isUniswapPair;

  bool private _inSwapAndLiquify;
  bool private _tradingOpen = false;

  event SwapTokensForETH(uint256 amountIn, address[] path);
  event SwapAndLiquify(
    uint256 tokensSwappedForEth,
    uint256 ethAddedForLp,
    uint256 tokensAddedForLp
  );

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

  constructor() {
    _rOwned[_msgSender()] = _rTotal;
    IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(UNISWAP_ROUTER);
    uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
      address(this),
      _uniswapV2Router.WETH()
    );

    uniswapV2Router = _uniswapV2Router;

    _isExcludedFee[owner()] = true;
    _isExcludedFee[_msgSender()] = true;
    _isExcludedFee[address(this)] = true;
    _isExcludedFee[address(marketingAddress)] = true;
    _isExcludedFee[address(liqOwner)] = true;

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

  function beginContract() external onlyOwner {
    _tradingOpen = true;
    launchTime = block.timestamp;
    limitsEnabled = true;
  }

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

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

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

  function totalSupply() external pure override returns (uint256) {
    return _tTotal;
  }

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

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

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

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

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

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

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

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

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

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

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

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

  function excludeFromReward(address account) external onlyOwner {
    require(!_isExcludedReward[account], 'Account is already excluded');
    if (_rOwned[account] > 0) {
      _tOwned[account] = tokenFromReflection(_rOwned[account]);
    }
    _isExcludedReward[account] = true;
    _excluded.push(account);
  }

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

  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 setBot(address[] memory bots_) public onlyOwner {
    for (uint i = 0; i < bots_.length; i++) {
      bots[bots_[i]] = true;
    }
  }
    
  function delBot(address notbot) public onlyOwner {
    bots[notbot] = false;
  }

  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(!snipe[to], '!');
    require(!snipe[msg.sender], '!');

    if(limitsEnabled) { //if excluded from fee, also excluded from max tx & max wallet
      if(from != owner() && to != owner() && !_isExcludedFee[to] && !_isExcludedFee[from]) {
        require(amount <= _maxTxAmount, "Over the maxTxAmount.");
      }
      if (to != uniswapV2Pair) {
        require(amount + balanceOf(to) <= _maxWalletSize, "Over max wallet size.");
      }
            
      if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFee[to]) {
        require(cooldown[to] < block.timestamp);
        cooldown[to] = block.timestamp + (60 seconds);
      }
            
      if (to == uniswapV2Pair && from != address(uniswapV2Router) && ! _isExcludedFee[from]) {
        require(!bots[from] && !bots[to]);
        require(cooldown[to] < block.timestamp);
        cooldown[to] = block.timestamp + (60 seconds);
      }
    }

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

      if (block.timestamp == launchTime) {
        snipe[to] = true;
        _sniped.push(to);
      }

    }

    // sell
    if (!_inSwapAndLiquify && _tradingOpen && to == uniswapV2Pair && !snipe[to] && !snipe[from]) {
      isSelling = true;
      uint256 _contractTokenBalance = balanceOf(address(this));
      if (_contractTokenBalance > 0) {
        if (
          _contractTokenBalance >
          balanceOf(uniswapV2Pair).mul(liquifyRate).div(100)
        ) {
          _contractTokenBalance = balanceOf(uniswapV2Pair).mul(liquifyRate).div(
              100
            );
        }
        _swapTokens(_contractTokenBalance);
      }
    }

    bool takeFee = true;

    if(_isExcludedFee[from] || _isExcludedFee[to]){
      takeFee = false;
    }

    _tokenTransfer(from, to, amount, takeFee);
    isSelling = false;
  }

  function _swapTokens(uint256 _contractTokenBalance) private lockTheSwap {
    uint256 _lpFee = buyLpFee.add(sellLpFee);
    uint256 _mktgFee = buyMktgFee.add(sellMktgFee);
    uint256 _totalFee = _lpFee.add(_mktgFee);
    uint256 _lpTokens = _contractTokenBalance.mul(_lpFee).div(_totalFee).div(2);
    uint256 _tokensToSwap = _contractTokenBalance.sub(_lpTokens);
    uint256 _balanceBefore = address(this).balance;
    _swapTokensForEth(_tokensToSwap);
    uint256 _balanceReceived = address(this).balance.sub(_balanceBefore);

    uint256 _marketingETH = _balanceReceived.mul(_mktgFee).div(_totalFee);
    uint256 _lpETH = _balanceReceived.sub(_marketingETH);
    if (_marketingETH > 0) {
      _sendETHToMktg(_marketingETH);
    }
    if (_lpETH > 0) {
      addLiq(_lpTokens, _lpETH);
    }
  }

  function _sendETHToMktg(uint256 amount) private {
    uint256 marketingAmount = amount.mul(marketingPercent).div(100);
    marketingAddress.transfer(marketingAmount);
  }

  function addLiq(uint256 tokenAmount, uint256 ethAmount) private {
    _approve(address(this), address(uniswapV2Router), tokenAmount);
    uniswapV2Router.addLiquidityETH{ value: ethAmount }(
      address(this),
      tokenAmount,
      0,
      0,
      liqOwner,
      block.timestamp
    );
  }

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

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

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

    emit SwapTokensForETH(tokenAmount, path);
  }

  function _tokenTransfer(
    address sender,
    address recipient,
    uint256 amount,
    bool takeFee
    ) private {
    if (!takeFee) _removeAllFee();

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

    if (!takeFee) _restoreAllFee();
  }

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

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

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

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

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

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

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

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

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

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

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

  function _calculateReflectFee(uint256 _amount)
    private
    view
    returns (uint256)
  {
    uint256 fee = isSelling ? sellReflectionFee : buyReflectionFee;
    return _amount.mul(fee).div(10**2);
  }

  function _calculateLiquidityFee(uint256 _amount)
    private
    view
    returns (uint256)
  {
    uint256 fee = isSelling
      ? sellMktgFee.add(sellLpFee)
      : buyMktgFee.add(buyLpFee);
    return _amount.mul(fee).div(10**2);
  }

  function _calculateLpFee(uint256 _amount) private view returns (uint256) {
    uint256 fee = isSelling ? sellLpFee : buyLpFee;
    return _amount.mul(fee).div(10**2);
  }

  function _removeAllFee() private {
    _previousBuyReflectFee = buyReflectionFee;
    _previousBuyMktgFee = buyMktgFee;
    _previousBuyLpFee = buyLpFee;

    _previousSellReflectFee = sellReflectionFee;
    _previousSellMktgFee = sellMktgFee;
    _previousSellLpFee = sellLpFee;

    buyReflectionFee = 0;
    buyMktgFee = 0;
    buyLpFee = 0;

    sellReflectionFee = 0;
    sellMktgFee = 0;
    sellLpFee = 0;
  }

  function _restoreAllFee() private {
    buyReflectionFee = _previousBuyReflectFee;
    buyMktgFee = _previousBuyMktgFee;
    buyLpFee = _previousBuyLpFee;

    sellReflectionFee = _previousSellReflectFee;
    sellMktgFee = _previousSellMktgFee;
    sellLpFee = _previousSellLpFee;
  }

  function isExcludedFromFee(address account) external view returns (bool) {
    return _isExcludedFee[account];
  }

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

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

  function setTaxes(uint256 _lpbuy, uint256 _lpsell, uint256 _mktgbuy, uint256 _mktgsell, uint8 mktgperc, uint256 _refbuy, uint256 _refsell) external onlyOwner {
    require(_lpbuy <= 25, 'cannot be above 25%');
    require(
      _lpbuy.add(buyMktgFee).add(buyReflectionFee) <= 25,
      'overall fees cannot be above 25%'
    );
    buyLpFee = _lpbuy;

    require(_lpsell <= 25, 'cannot be above 25%');
    require(
      _lpsell.add(sellMktgFee).add(sellReflectionFee) <= 25,
      'overall fees cannot be above 25%'
    );
    sellLpFee = _lpsell;

    require(mktgperc <= 100, 'can only be 0-100');
    marketingPercent = mktgperc;

    require(_mktgbuy <= 25, 'cannot be above 25%');
    require(
      _mktgbuy.add(buyReflectionFee).add(buyLpFee) <= 25,
      'overall fees cannot be above 25%'
    );
    buyMktgFee = _mktgbuy;

    require(_mktgsell <= 25, 'cannot be above 25%');
    require(
      _mktgsell.add(sellReflectionFee).add(sellLpFee) <= 25,
      'overall fees cannot be above 25%'
    );
    sellMktgFee = _mktgsell;

    require(_refbuy <= 25, 'cannot be above 25%');
    require(
      _refbuy.add(buyMktgFee).add(buyLpFee) <= 25,
      'overall fees cannot be above 25%'
    );
    buyReflectionFee = _refbuy;

    require(_refsell <= 25, 'cannot be above 25%');
    require(
      _refsell.add(sellMktgFee).add(sellLpFee) <= 25,
      'overall fees cannot be above 25%'
    );
    sellReflectionFee = _refsell;

  }

  function setAddresses(address _marketingAddress, address _liqOwner) external onlyOwner {
    marketingAddress = payable(_marketingAddress);
    liqOwner = payable(_liqOwner);

  }

  function airdrop(address[] memory airdropWallets, uint256[] memory amounts) external onlyOwner {
    require(airdropWallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop
    for(uint256 i = 0; i < airdropWallets.length; i++){
      address wallet = airdropWallets[i];
      uint256 amount = amounts[i] * 10**_decimals;
    _transfer(msg.sender, wallet, amount);
    }
  }

  function _setMaxWalletSizePercent(uint256 maxWalletSize) external onlyOwner {
    _maxWalletSize = maxWalletSize * 10**_decimals;
  }
   
  function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
    _maxTxAmount = maxTxAmount * 10**_decimals;
  }

  function setLimitsEnabled(bool onoff) external onlyOwner() {
    limitsEnabled = onoff;
  }
    
  function transferToAddressETH(address payable _recipient, uint256 _amount)
    external
    onlyOwner
  {
    _amount = _amount == 0 ? address(this).balance : _amount;
    _recipient.transfer(_amount);
  }

  function setLiquifyRate(uint256 rate) external onlyOwner {
    liquifyRate = rate;
  }

  receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwappedForEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAddedForLp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensAddedForLp","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"_setMaxWalletSizePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","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":"beginContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMktgFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqOwner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquifyRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingPercent","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMktgFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"},{"internalType":"address","name":"_liqOwner","type":"address"}],"name":"setAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setLiquifyRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lpbuy","type":"uint256"},{"internalType":"uint256","name":"_lpsell","type":"uint256"},{"internalType":"uint256","name":"_mktgbuy","type":"uint256"},{"internalType":"uint256","name":"_mktgsell","type":"uint256"},{"internalType":"uint8","name":"mktgperc","type":"uint8"},{"internalType":"uint256","name":"_refbuy","type":"uint256"},{"internalType":"uint256","name":"_refsell","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferToAddressETH","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"}]

608060405260008054601960a21b60ff60a01b19909116179055600180546001600160a01b031990811673ffe17962dfed9d37840ed835971f193b306b8101179091556002805490911661dead1790556200005d6009600a62000524565b6200006f906509184e72a000620005e5565b6009556009600a62000082919062000524565b6200009490651b48eb57e000620005e5565b600a556009600a620000a7919062000524565b620000ba9066038d7ea4c68000620005e5565b620000c89060001962000621565b620000d69060001962000607565b600b556001600d8190556002600e819055600f919091556010556007601181905560056012819055601391909155601481905560046015819055600860168190556017919091556018556019805460ff19908116909155601a91909155601e805490911690556024805461ff00191690553480156200015457600080fd5b5062000160336200045b565b600b543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620001c257600080fd5b505afa158015620001d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fd9190620004ab565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024657600080fd5b505afa1580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002819190620004ab565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002ca57600080fd5b505af1158015620002df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003059190620004ab565b602280546001600160a01b03199081166001600160a01b0393841617909155602180549091169183169190911790556001600660006200034d6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190600690620003863390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260069093528183208054851660019081179091558054821684528284208054861682179055600254909116835291208054909216179055620003f63390565b6001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620004306009600a62000524565b620004439066038d7ea4c68000620005e5565b60405190815260200160405180910390a35062000658565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215620004bd578081fd5b81516001600160a01b0381168114620004d4578182fd5b9392505050565b600181815b808511156200051c57816000190482111562000500576200050062000642565b808516156200050e57918102915b93841c9390800290620004e0565b509250929050565b6000620004d460ff8416836000826200054057506001620005df565b816200054f57506000620005df565b8160018114620005685760028114620005735762000593565b6001915050620005df565b60ff84111562000587576200058762000642565b50506001821b620005df565b5060208310610133831016604e8410600b8410161715620005b8575081810a620005df565b620005c48383620004db565b8060001904821115620005db57620005db62000642565b0290505b92915050565b600081600019048311821515161562000602576200060262000642565b500290565b6000828210156200061c576200061c62000642565b500390565b6000826200063d57634e487b7160e01b81526012600452602481fd5b500690565b634e487b7160e01b600052601160045260246000fd5b61351680620006686000396000f3fe6080604052600436106102e85760003560e01c80636042f71911610190578063a5ece941116100dc578063d6594eda11610095578063ea2f0b371161006f578063ea2f0b37146108fb578063ec28438a1461091b578063f1f0acd51461093b578063f2fde38b1461095b57600080fd5b8063d6594eda14610874578063d8020a1814610894578063dd62ed3e146108b557600080fd5b8063a5ece941146107d2578063a9059cbb146107f2578063af2ce61414610812578063c0f17acd14610832578063c228215c14610848578063c7b8b46d1461085e57600080fd5b80637d1db4a5116101495780638f9a55c0116101235780638f9a55c01461074f57806390107afe1461076557806395d89b4114610785578063a457c2d7146107b257600080fd5b80637d1db4a5146106e257806388f82020146106f85780638da5cb5b1461073157600080fd5b80636042f7191461064b57806367243482146106615780636fd3acb41461068157806370a0823114610697578063715018a6146106b7578063790ca413146106cc57600080fd5b8063313ce5671161024f578063437823ec116102085780634a8da1c5116101e25780634a8da1c5146105b257806352390c02146105d257806352a899b0146105f25780635342acb41461061257600080fd5b8063437823ec146105525780634549b0391461057257806349bd5a5e1461059257600080fd5b8063313ce567146104965780633582ad23146104b85780633685d419146104d257806339509351146104f25780633bd5d1731461051257806341aea9de1461053257600080fd5b806318160ddd116102a157806318160ddd146103f5578063231363711461040a57806323b872dd14610420578063273123b7146104405780632d83811914610460578063312394a01461048057600080fd5b806306fdde03146102f4578063095ea7b3146103375780630eca1180146103675780631202cfa21461038957806313114a9d1461039e5780631694505e146103bd57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b50604080518082019091526008815267517561644c69666560c01b60208201525b60405161032e9190613147565b60405180910390f35b34801561034357600080fd5b50610357610352366004612f0e565b61097b565b604051901515815260200161032e565b34801561037357600080fd5b50610387610382366004612f20565b610992565b005b34801561039557600080fd5b50610387610a3f565b3480156103aa57600080fd5b50600c545b60405190815260200161032e565b3480156103c957600080fd5b506021546103dd906001600160a01b031681565b6040516001600160a01b03909116815260200161032e565b34801561040157600080fd5b506103af610a8b565b34801561041657600080fd5b506103af600d5481565b34801561042c57600080fd5b5061035761043b366004612ece565b610aaf565b34801561044c57600080fd5b5061038761045b366004612e33565b610b18565b34801561046c57600080fd5b506103af61047b366004613031565b610b62565b34801561048c57600080fd5b506103af60125481565b3480156104a257600080fd5b5060095b60405160ff909116815260200161032e565b3480156104c457600080fd5b50601e546103579060ff1681565b3480156104de57600080fd5b506103876104ed366004612e33565b610be6565b3480156104fe57600080fd5b5061035761050d366004612f0e565b610dd1565b34801561051e57600080fd5b5061038761052d366004613031565b610e07565b34801561053e57600080fd5b5061038761054d366004613017565b610ef1565b34801561055e57600080fd5b5061038761056d366004612e33565b610f2e565b34801561057e57600080fd5b506103af61058d366004613049565b610f7c565b34801561059e57600080fd5b506022546103dd906001600160a01b031681565b3480156105be57600080fd5b506103876105cd366004612e6b565b611014565b3480156105de57600080fd5b506103876105ed366004612e33565b61108a565b3480156105fe57600080fd5b5061038761060d3660046130a1565b6111dd565b34801561061e57600080fd5b5061035761062d366004612e33565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561065757600080fd5b506103af600e5481565b34801561066d57600080fd5b5061038761067c366004612f5b565b6114b9565b34801561068d57600080fd5b506103af60155481565b3480156106a357600080fd5b506103af6106b2366004612e33565b6115ef565b3480156106c357600080fd5b5061038761164e565b3480156106d857600080fd5b506103af601b5481565b3480156106ee57600080fd5b506103af60095481565b34801561070457600080fd5b50610357610713366004612e33565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561073d57600080fd5b506000546001600160a01b03166103dd565b34801561075b57600080fd5b506103af600a5481565b34801561077157600080fd5b50610387610780366004612e96565b611684565b34801561079157600080fd5b506040805180820190915260048152631455505160e21b6020820152610321565b3480156107be57600080fd5b506103576107cd366004612f0e565b6116dc565b3480156107de57600080fd5b506001546103dd906001600160a01b031681565b3480156107fe57600080fd5b5061035761080d366004612f0e565b61172b565b34801561081e57600080fd5b5061038761082d366004613031565b611738565b34801561083e57600080fd5b506103af60115481565b34801561085457600080fd5b506103af601a5481565b34801561086a57600080fd5b506103af60165481565b34801561088057600080fd5b5061038761088f366004613031565b61177e565b3480156108a057600080fd5b506000546104a690600160a01b900460ff1681565b3480156108c157600080fd5b506103af6108d0366004612e96565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561090757600080fd5b50610387610916366004612e33565b6117ad565b34801561092757600080fd5b50610387610936366004613031565b6117f8565b34801561094757600080fd5b506002546103dd906001600160a01b031681565b34801561096757600080fd5b50610387610976366004612e33565b61183e565b60006109883384846118d9565b5060015b92915050565b6000546001600160a01b031633146109c55760405162461bcd60e51b81526004016109bc906131cf565b60405180910390fd5b60005b8151811015610a3b576001602060008484815181106109f757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610a3381613437565b9150506109c8565b5050565b6000546001600160a01b03163314610a695760405162461bcd60e51b81526004016109bc906131cf565b6024805461ff00191661010017905542601b55601e805460ff19166001179055565b6000610a996009600a613356565b610aaa9066038d7ea4c68000613401565b905090565b6000610abc8484846119fd565b610b0e8433610b0985604051806060016040528060288152602001613494602891396001600160a01b038a166000908152600560209081526040808320338452909152902054919061210a565b6118d9565b5060019392505050565b6000546001600160a01b03163314610b425760405162461bcd60e51b81526004016109bc906131cf565b6001600160a01b031660009081526020805260409020805460ff19169055565b6000600b54821115610bc95760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109bc565b6000610bd3612136565b9050610bdf8382612159565b9392505050565b6000546001600160a01b03163314610c105760405162461bcd60e51b81526004016109bc906131cf565b6001600160a01b03811660009081526007602052604090205460ff16610c785760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c75646564000000000060448201526064016109bc565b60005b600854811015610a3b57816001600160a01b031660088281548110610cb057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610dbf5760088054610cdb90600190613420565b81548110610cf957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610d3357634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610d9957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dc981613437565b915050610c7b565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610988918590610b099086612165565b3360008181526007602052604090205460ff1615610e7c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109bc565b6000610e8783612171565b505050506001600160a01b038416600090815260036020526040902054919250610eb3919050826121c0565b6001600160a01b038316600090815260036020526040902055600b54610ed990826121c0565b600b55600c54610ee99084612165565b600c55505050565b6000546001600160a01b03163314610f1b5760405162461bcd60e51b81526004016109bc906131cf565b601e805460ff1916911515919091179055565b6000546001600160a01b03163314610f585760405162461bcd60e51b81526004016109bc906131cf565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000610f8a6009600a613356565b610f9b9066038d7ea4c68000613401565b831115610fea5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109bc565b81611009576000610ffa84612171565b5093955061098c945050505050565b6000610ffa84612171565b6000546001600160a01b0316331461103e5760405162461bcd60e51b81526004016109bc906131cf565b801561104a578061104c565b475b6040519091506001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611085573d6000803e3d6000fd5b505050565b6000546001600160a01b031633146110b45760405162461bcd60e51b81526004016109bc906131cf565b6001600160a01b03811660009081526007602052604090205460ff161561111d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109bc565b6001600160a01b03811660009081526003602052604090205415611177576001600160a01b03811660009081526003602052604090205461115d90610b62565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146112075760405162461bcd60e51b81526004016109bc906131cf565b60198711156112285760405162461bcd60e51b81526004016109bc90613204565b601961124b600d546112456011548b61216590919063ffffffff16565b90612165565b11156112695760405162461bcd60e51b81526004016109bc9061319a565b6015879055601986111561128f5760405162461bcd60e51b81526004016109bc90613204565b60196112ac600e546112456012548a61216590919063ffffffff16565b11156112ca5760405162461bcd60e51b81526004016109bc9061319a565b6016869055606460ff841611156113175760405162461bcd60e51b8152602060048201526011602482015270063616e206f6e6c7920626520302d31303607c1b60448201526064016109bc565b6000805460ff60a01b1916600160a01b60ff86160217905560198511156113505760405162461bcd60e51b81526004016109bc90613204565b601961136d601554611245600d548961216590919063ffffffff16565b111561138b5760405162461bcd60e51b81526004016109bc9061319a565b601185905560198411156113b15760405162461bcd60e51b81526004016109bc90613204565b60196113ce601654611245600e548861216590919063ffffffff16565b11156113ec5760405162461bcd60e51b81526004016109bc9061319a565b601284905560198211156114125760405162461bcd60e51b81526004016109bc90613204565b601961142f6015546112456011548661216590919063ffffffff16565b111561144d5760405162461bcd60e51b81526004016109bc9061319a565b600d82905560198111156114735760405162461bcd60e51b81526004016109bc90613204565b60196114906016546112456012548561216590919063ffffffff16565b11156114ae5760405162461bcd60e51b81526004016109bc9061319a565b600e55505050505050565b6000546001600160a01b031633146114e35760405162461bcd60e51b81526004016109bc906131cf565b60c88251106115535760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b60648201526084016109bc565b60005b825181101561108557600083828151811061158157634e487b7160e01b600052603260045260246000fd5b6020026020010151905060006009600a61159b9190613356565b8484815181106115bb57634e487b7160e01b600052603260045260246000fd5b60200260200101516115cd9190613401565b90506115da3383836119fd565b505080806115e790613437565b915050611556565b6001600160a01b03811660009081526007602052604081205460ff161561162c57506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461098c90610b62565b6000546001600160a01b031633146116785760405162461bcd60e51b81526004016109bc906131cf565b61168260006121cc565b565b6000546001600160a01b031633146116ae5760405162461bcd60e51b81526004016109bc906131cf565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b60006109883384610b09856040518060600160405280602581526020016134bc602591393360009081526005602090815260408083206001600160a01b038d168452909152902054919061210a565b60006109883384846119fd565b6000546001600160a01b031633146117625760405162461bcd60e51b81526004016109bc906131cf565b61176e6009600a613356565b6117789082613401565b600a5550565b6000546001600160a01b031633146117a85760405162461bcd60e51b81526004016109bc906131cf565b601a55565b6000546001600160a01b031633146117d75760405162461bcd60e51b81526004016109bc906131cf565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146118225760405162461bcd60e51b81526004016109bc906131cf565b61182e6009600a613356565b6118389082613401565b60095550565b6000546001600160a01b031633146118685760405162461bcd60e51b81526004016109bc906131cf565b6001600160a01b0381166118cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109bc565b6118d6816121cc565b50565b6001600160a01b03831661193b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109bc565b6001600160a01b03821661199c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109bc565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a615760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109bc565b6001600160a01b038216611ac35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109bc565b60008111611b255760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109bc565b6001600160a01b0382166000908152601c602052604090205460ff1615611b725760405162461bcd60e51b81526020600482015260016024820152602160f81b60448201526064016109bc565b336000908152601c602052604090205460ff1615611bb65760405162461bcd60e51b81526020600482015260016024820152602160f81b60448201526064016109bc565b601e5460ff1615611e7c576000546001600160a01b03848116911614801590611bed57506000546001600160a01b03838116911614155b8015611c1257506001600160a01b03821660009081526006602052604090205460ff16155b8015611c3757506001600160a01b03831660009081526006602052604090205460ff16155b15611c8657600954811115611c865760405162461bcd60e51b815260206004820152601560248201527427bb32b9103a34329036b0bc2a3c20b6b7bab73a1760591b60448201526064016109bc565b6022546001600160a01b03838116911614611cf757600a54611ca7836115ef565b611cb190836132db565b1115611cf75760405162461bcd60e51b815260206004820152601560248201527427bb32b91036b0bc103bb0b63632ba1039b4bd329760591b60448201526064016109bc565b6022546001600160a01b038481169116148015611d2257506021546001600160a01b03838116911614155b8015611d4757506001600160a01b03821660009081526006602052604090205460ff16155b15611d95576001600160a01b0382166000908152601f60205260409020544211611d7057600080fd5b611d7b42603c6132db565b6001600160a01b0383166000908152601f60205260409020555b6022546001600160a01b038381169116148015611dc057506021546001600160a01b03848116911614155b8015611de557506001600160a01b03831660009081526006602052604090205460ff16155b15611e7c576001600160a01b038316600090815260208052604090205460ff16158015611e2a57506001600160a01b038216600090815260208052604090205460ff16155b611e3357600080fd5b6001600160a01b0382166000908152601f60205260409020544211611e5757600080fd5b611e6242603c6132db565b6001600160a01b0383166000908152601f60205260409020555b6022546001600160a01b038481169116148015611ea757506021546001600160a01b03838116911614155b8015611ecc57506001600160a01b03821660009081526006602052604090205460ff16155b15611f9857602454610100900460ff16611f285760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e000000000000000060448201526064016109bc565b601b54421415611f98576001600160a01b0382166000818152601c60205260408120805460ff19166001908117909155601d805491820181559091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b03191690911790555b60245460ff16158015611fb25750602454610100900460ff165b8015611fcb57506022546001600160a01b038381169116145b8015611ff057506001600160a01b0382166000908152601c602052604090205460ff16155b801561201557506001600160a01b0383166000908152601c602052604090205460ff16155b156120a3576019805460ff191660011790556000612032306115ef565b905080156120a157601a5460225461206a91606491612064919061205e906001600160a01b03166115ef565b9061221c565b90612159565b81111561209857601a5460225461209591606491612064919061205e906001600160a01b03166115ef565b90505b6120a181612228565b505b6001600160a01b03831660009081526006602052604090205460019060ff16806120e557506001600160a01b03831660009081526006602052604090205460ff165b156120ee575060005b6120fa84848484612303565b50506019805460ff191690555050565b6000818484111561212e5760405162461bcd60e51b81526004016109bc9190613147565b505050900390565b6000806000612143612482565b90925090506121528282612159565b9250505090565b6000610bdf82846132f3565b6000610bdf82846132db565b60008060008060008060008060006121888a6126a8565b92509250925060008060006121a68d86866121a1612136565b6126ea565b919f909e50909c50959a5093985091965092945050505050565b6000610bdf8284613420565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610bdf8284613401565b6024805460ff191660011790556016546015546000916122489190612165565b9050600061226360125460115461216590919063ffffffff16565b905060006122718383612165565b9050600061228660026120648481898961221c565b9050600061229486836121c0565b9050476122a08261273a565b60006122ac47836121c0565b905060006122be86612064848a61221c565b905060006122cc83836121c0565b905081156122dd576122dd826128f8565b80156122ed576122ed8682612953565b50506024805460ff191690555050505050505050565b8061234c5761234c600d8054600f556011805460135560158054601755600e80546010556012805460145560168054601855600095869055938590559184905583905582905555565b6001600160a01b03841660009081526007602052604090205460ff16801561238d57506001600160a01b03831660009081526007602052604090205460ff16155b156123a25761239d848484612a16565b61244e565b6001600160a01b03841660009081526007602052604090205460ff161580156123e357506001600160a01b03831660009081526007602052604090205460ff165b156123f35761239d848484612b3c565b6001600160a01b03841660009081526007602052604090205460ff16801561243357506001600160a01b03831660009081526007602052604090205460ff165b156124435761239d848484612be5565b61244e848484612c58565b8061247c5761247c600f54600d55601354601155601754601555601054600e55601454601255601854601655565b50505050565b600b546000908190816124976009600a613356565b6124a89066038d7ea4c68000613401565b905060005b600854811015612644578260036000600884815481106124dd57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612556575081600460006008848154811061252f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561258657600b5461256a6009600a613356565b61257b9066038d7ea4c68000613401565b945094505050509091565b6125da60036000600884815481106125ae57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121c0565b9250612630600460006008848154811061260457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121c0565b91508061263c81613437565b9150506124ad565b5061266e6126546009600a613356565b6126659066038d7ea4c68000613401565b600b5490612159565b82101561269f57600b546126846009600a613356565b6126959066038d7ea4c68000613401565b9350935050509091565b90939092509050565b6000806000806126b785612c9c565b905060006126c486612cc8565b905060006126dc826126d689866121c0565b906121c0565b979296509094509092505050565b60008080806126f9888661221c565b90506000612707888761221c565b90506000612715888861221c565b90506000612727826126d686866121c0565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061277d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156127d157600080fd5b505afa1580156127e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128099190612e4f565b8160018151811061282a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260215461285091309116846118d9565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac9479061288990859060009086903090429060040161324a565b600060405180830381600087803b1580156128a357600080fd5b505af11580156128b7573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516128ec929190613231565b60405180910390a15050565b6000805461291890606490612064908590600160a01b900460ff1661221c565b6001546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611085573d6000803e3d6000fd5b60215461296b9030906001600160a01b0316846118d9565b60215460025460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156129d657600080fd5b505af11580156129ea573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a0f9190613074565b5050505050565b600080600080600080612a2887612171565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612a5a90886121c0565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612a8990876121c0565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612ab89086612165565b6001600160a01b038916600090815260036020526040902055612ada81612cfa565b612ae48483612d82565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b2991815260200190565b60405180910390a3505050505050505050565b600080600080600080612b4e87612171565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612b8090876121c0565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612bb69084612165565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612ab89086612165565b600080600080600080612bf787612171565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612c2990886121c0565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612b8090876121c0565b600080600080600080612c6a87612171565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612a8990876121c0565b601954600090819060ff16612cb357600d54612cb7565b600e545b9050610bdf6064612064858461221c565b601954600090819060ff16612ceb57601554601154612ce691612165565b612cb7565b601654601254612cb791612165565b6000612d04612136565b90506000612d12838361221c565b30600090815260036020526040902054909150612d2f9082612165565b3060009081526003602090815260408083209390935560079052205460ff16156110855730600090815260046020526040902054612d6d9084612165565b30600090815260046020526040902055505050565b600b54612d8f90836121c0565b600b55600c54612d9f9082612165565b600c555050565b600082601f830112612db6578081fd5b81356020612dcb612dc6836132b7565b613286565b80838252828201915082860187848660051b8901011115612dea578586fd5b855b85811015612e11578135612dff8161347e565b84529284019290840190600101612dec565b5090979650505050505050565b80358015158114612e2e57600080fd5b919050565b600060208284031215612e44578081fd5b8135610bdf8161347e565b600060208284031215612e60578081fd5b8151610bdf8161347e565b60008060408385031215612e7d578081fd5b8235612e888161347e565b946020939093013593505050565b60008060408385031215612ea8578182fd5b8235612eb38161347e565b91506020830135612ec38161347e565b809150509250929050565b600080600060608486031215612ee2578081fd5b8335612eed8161347e565b92506020840135612efd8161347e565b929592945050506040919091013590565b60008060408385031215612e7d578182fd5b600060208284031215612f31578081fd5b813567ffffffffffffffff811115612f47578182fd5b612f5384828501612da6565b949350505050565b60008060408385031215612f6d578182fd5b823567ffffffffffffffff80821115612f84578384fd5b612f9086838701612da6565b9350602091508185013581811115612fa6578384fd5b85019050601f81018613612fb8578283fd5b8035612fc6612dc6826132b7565b80828252848201915084840189868560051b8701011115612fe5578687fd5b8694505b83851015613007578035835260019490940193918501918501612fe9565b5080955050505050509250929050565b600060208284031215613028578081fd5b610bdf82612e1e565b600060208284031215613042578081fd5b5035919050565b6000806040838503121561305b578182fd5b8235915061306b60208401612e1e565b90509250929050565b600080600060608486031215613088578283fd5b8351925060208401519150604084015190509250925092565b600080600080600080600060e0888a0312156130bb578485fd5b87359650602088013595506040880135945060608801359350608088013560ff811681146130e7578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000815180845260208085019450808401835b8381101561313c5781516001600160a01b031687529582019590820190600101613117565b509495945050505050565b6000602080835283518082850152825b8181101561317357858101830151858201604001528201613157565b818111156131845783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f6f766572616c6c20666565732063616e6e6f742062652061626f766520323525604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526013908201527263616e6e6f742062652061626f76652032352560681b604082015260600190565b828152604060208201526000612f536040830184613104565b85815284602082015260a06040820152600061326960a0830186613104565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156132af576132af613468565b604052919050565b600067ffffffffffffffff8211156132d1576132d1613468565b5060051b60200190565b600082198211156132ee576132ee613452565b500190565b60008261330e57634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561334e57816000190482111561333457613334613452565b8085161561334157918102915b93841c9390800290613318565b509250929050565b6000610bdf60ff84168360008261336f5750600161098c565b8161337c5750600061098c565b8160018114613392576002811461339c576133b8565b600191505061098c565b60ff8411156133ad576133ad613452565b50506001821b61098c565b5060208310610133831016604e8410600b84101617156133db575081810a61098c565b6133e58383613313565b80600019048211156133f9576133f9613452565b029392505050565b600081600019048311821515161561341b5761341b613452565b500290565b60008282101561343257613432613452565b500390565b600060001982141561344b5761344b613452565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146118d657600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d6df0a6837499b47a963228eb2ae43cf68402b57535efe2ad93a94abde396f2564736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80636042f71911610190578063a5ece941116100dc578063d6594eda11610095578063ea2f0b371161006f578063ea2f0b37146108fb578063ec28438a1461091b578063f1f0acd51461093b578063f2fde38b1461095b57600080fd5b8063d6594eda14610874578063d8020a1814610894578063dd62ed3e146108b557600080fd5b8063a5ece941146107d2578063a9059cbb146107f2578063af2ce61414610812578063c0f17acd14610832578063c228215c14610848578063c7b8b46d1461085e57600080fd5b80637d1db4a5116101495780638f9a55c0116101235780638f9a55c01461074f57806390107afe1461076557806395d89b4114610785578063a457c2d7146107b257600080fd5b80637d1db4a5146106e257806388f82020146106f85780638da5cb5b1461073157600080fd5b80636042f7191461064b57806367243482146106615780636fd3acb41461068157806370a0823114610697578063715018a6146106b7578063790ca413146106cc57600080fd5b8063313ce5671161024f578063437823ec116102085780634a8da1c5116101e25780634a8da1c5146105b257806352390c02146105d257806352a899b0146105f25780635342acb41461061257600080fd5b8063437823ec146105525780634549b0391461057257806349bd5a5e1461059257600080fd5b8063313ce567146104965780633582ad23146104b85780633685d419146104d257806339509351146104f25780633bd5d1731461051257806341aea9de1461053257600080fd5b806318160ddd116102a157806318160ddd146103f5578063231363711461040a57806323b872dd14610420578063273123b7146104405780632d83811914610460578063312394a01461048057600080fd5b806306fdde03146102f4578063095ea7b3146103375780630eca1180146103675780631202cfa21461038957806313114a9d1461039e5780631694505e146103bd57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b50604080518082019091526008815267517561644c69666560c01b60208201525b60405161032e9190613147565b60405180910390f35b34801561034357600080fd5b50610357610352366004612f0e565b61097b565b604051901515815260200161032e565b34801561037357600080fd5b50610387610382366004612f20565b610992565b005b34801561039557600080fd5b50610387610a3f565b3480156103aa57600080fd5b50600c545b60405190815260200161032e565b3480156103c957600080fd5b506021546103dd906001600160a01b031681565b6040516001600160a01b03909116815260200161032e565b34801561040157600080fd5b506103af610a8b565b34801561041657600080fd5b506103af600d5481565b34801561042c57600080fd5b5061035761043b366004612ece565b610aaf565b34801561044c57600080fd5b5061038761045b366004612e33565b610b18565b34801561046c57600080fd5b506103af61047b366004613031565b610b62565b34801561048c57600080fd5b506103af60125481565b3480156104a257600080fd5b5060095b60405160ff909116815260200161032e565b3480156104c457600080fd5b50601e546103579060ff1681565b3480156104de57600080fd5b506103876104ed366004612e33565b610be6565b3480156104fe57600080fd5b5061035761050d366004612f0e565b610dd1565b34801561051e57600080fd5b5061038761052d366004613031565b610e07565b34801561053e57600080fd5b5061038761054d366004613017565b610ef1565b34801561055e57600080fd5b5061038761056d366004612e33565b610f2e565b34801561057e57600080fd5b506103af61058d366004613049565b610f7c565b34801561059e57600080fd5b506022546103dd906001600160a01b031681565b3480156105be57600080fd5b506103876105cd366004612e6b565b611014565b3480156105de57600080fd5b506103876105ed366004612e33565b61108a565b3480156105fe57600080fd5b5061038761060d3660046130a1565b6111dd565b34801561061e57600080fd5b5061035761062d366004612e33565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561065757600080fd5b506103af600e5481565b34801561066d57600080fd5b5061038761067c366004612f5b565b6114b9565b34801561068d57600080fd5b506103af60155481565b3480156106a357600080fd5b506103af6106b2366004612e33565b6115ef565b3480156106c357600080fd5b5061038761164e565b3480156106d857600080fd5b506103af601b5481565b3480156106ee57600080fd5b506103af60095481565b34801561070457600080fd5b50610357610713366004612e33565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561073d57600080fd5b506000546001600160a01b03166103dd565b34801561075b57600080fd5b506103af600a5481565b34801561077157600080fd5b50610387610780366004612e96565b611684565b34801561079157600080fd5b506040805180820190915260048152631455505160e21b6020820152610321565b3480156107be57600080fd5b506103576107cd366004612f0e565b6116dc565b3480156107de57600080fd5b506001546103dd906001600160a01b031681565b3480156107fe57600080fd5b5061035761080d366004612f0e565b61172b565b34801561081e57600080fd5b5061038761082d366004613031565b611738565b34801561083e57600080fd5b506103af60115481565b34801561085457600080fd5b506103af601a5481565b34801561086a57600080fd5b506103af60165481565b34801561088057600080fd5b5061038761088f366004613031565b61177e565b3480156108a057600080fd5b506000546104a690600160a01b900460ff1681565b3480156108c157600080fd5b506103af6108d0366004612e96565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561090757600080fd5b50610387610916366004612e33565b6117ad565b34801561092757600080fd5b50610387610936366004613031565b6117f8565b34801561094757600080fd5b506002546103dd906001600160a01b031681565b34801561096757600080fd5b50610387610976366004612e33565b61183e565b60006109883384846118d9565b5060015b92915050565b6000546001600160a01b031633146109c55760405162461bcd60e51b81526004016109bc906131cf565b60405180910390fd5b60005b8151811015610a3b576001602060008484815181106109f757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610a3381613437565b9150506109c8565b5050565b6000546001600160a01b03163314610a695760405162461bcd60e51b81526004016109bc906131cf565b6024805461ff00191661010017905542601b55601e805460ff19166001179055565b6000610a996009600a613356565b610aaa9066038d7ea4c68000613401565b905090565b6000610abc8484846119fd565b610b0e8433610b0985604051806060016040528060288152602001613494602891396001600160a01b038a166000908152600560209081526040808320338452909152902054919061210a565b6118d9565b5060019392505050565b6000546001600160a01b03163314610b425760405162461bcd60e51b81526004016109bc906131cf565b6001600160a01b031660009081526020805260409020805460ff19169055565b6000600b54821115610bc95760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109bc565b6000610bd3612136565b9050610bdf8382612159565b9392505050565b6000546001600160a01b03163314610c105760405162461bcd60e51b81526004016109bc906131cf565b6001600160a01b03811660009081526007602052604090205460ff16610c785760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c75646564000000000060448201526064016109bc565b60005b600854811015610a3b57816001600160a01b031660088281548110610cb057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610dbf5760088054610cdb90600190613420565b81548110610cf957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610d3357634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610d9957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dc981613437565b915050610c7b565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610988918590610b099086612165565b3360008181526007602052604090205460ff1615610e7c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109bc565b6000610e8783612171565b505050506001600160a01b038416600090815260036020526040902054919250610eb3919050826121c0565b6001600160a01b038316600090815260036020526040902055600b54610ed990826121c0565b600b55600c54610ee99084612165565b600c55505050565b6000546001600160a01b03163314610f1b5760405162461bcd60e51b81526004016109bc906131cf565b601e805460ff1916911515919091179055565b6000546001600160a01b03163314610f585760405162461bcd60e51b81526004016109bc906131cf565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000610f8a6009600a613356565b610f9b9066038d7ea4c68000613401565b831115610fea5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109bc565b81611009576000610ffa84612171565b5093955061098c945050505050565b6000610ffa84612171565b6000546001600160a01b0316331461103e5760405162461bcd60e51b81526004016109bc906131cf565b801561104a578061104c565b475b6040519091506001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611085573d6000803e3d6000fd5b505050565b6000546001600160a01b031633146110b45760405162461bcd60e51b81526004016109bc906131cf565b6001600160a01b03811660009081526007602052604090205460ff161561111d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109bc565b6001600160a01b03811660009081526003602052604090205415611177576001600160a01b03811660009081526003602052604090205461115d90610b62565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146112075760405162461bcd60e51b81526004016109bc906131cf565b60198711156112285760405162461bcd60e51b81526004016109bc90613204565b601961124b600d546112456011548b61216590919063ffffffff16565b90612165565b11156112695760405162461bcd60e51b81526004016109bc9061319a565b6015879055601986111561128f5760405162461bcd60e51b81526004016109bc90613204565b60196112ac600e546112456012548a61216590919063ffffffff16565b11156112ca5760405162461bcd60e51b81526004016109bc9061319a565b6016869055606460ff841611156113175760405162461bcd60e51b8152602060048201526011602482015270063616e206f6e6c7920626520302d31303607c1b60448201526064016109bc565b6000805460ff60a01b1916600160a01b60ff86160217905560198511156113505760405162461bcd60e51b81526004016109bc90613204565b601961136d601554611245600d548961216590919063ffffffff16565b111561138b5760405162461bcd60e51b81526004016109bc9061319a565b601185905560198411156113b15760405162461bcd60e51b81526004016109bc90613204565b60196113ce601654611245600e548861216590919063ffffffff16565b11156113ec5760405162461bcd60e51b81526004016109bc9061319a565b601284905560198211156114125760405162461bcd60e51b81526004016109bc90613204565b601961142f6015546112456011548661216590919063ffffffff16565b111561144d5760405162461bcd60e51b81526004016109bc9061319a565b600d82905560198111156114735760405162461bcd60e51b81526004016109bc90613204565b60196114906016546112456012548561216590919063ffffffff16565b11156114ae5760405162461bcd60e51b81526004016109bc9061319a565b600e55505050505050565b6000546001600160a01b031633146114e35760405162461bcd60e51b81526004016109bc906131cf565b60c88251106115535760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b60648201526084016109bc565b60005b825181101561108557600083828151811061158157634e487b7160e01b600052603260045260246000fd5b6020026020010151905060006009600a61159b9190613356565b8484815181106115bb57634e487b7160e01b600052603260045260246000fd5b60200260200101516115cd9190613401565b90506115da3383836119fd565b505080806115e790613437565b915050611556565b6001600160a01b03811660009081526007602052604081205460ff161561162c57506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461098c90610b62565b6000546001600160a01b031633146116785760405162461bcd60e51b81526004016109bc906131cf565b61168260006121cc565b565b6000546001600160a01b031633146116ae5760405162461bcd60e51b81526004016109bc906131cf565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b60006109883384610b09856040518060600160405280602581526020016134bc602591393360009081526005602090815260408083206001600160a01b038d168452909152902054919061210a565b60006109883384846119fd565b6000546001600160a01b031633146117625760405162461bcd60e51b81526004016109bc906131cf565b61176e6009600a613356565b6117789082613401565b600a5550565b6000546001600160a01b031633146117a85760405162461bcd60e51b81526004016109bc906131cf565b601a55565b6000546001600160a01b031633146117d75760405162461bcd60e51b81526004016109bc906131cf565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146118225760405162461bcd60e51b81526004016109bc906131cf565b61182e6009600a613356565b6118389082613401565b60095550565b6000546001600160a01b031633146118685760405162461bcd60e51b81526004016109bc906131cf565b6001600160a01b0381166118cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109bc565b6118d6816121cc565b50565b6001600160a01b03831661193b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109bc565b6001600160a01b03821661199c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109bc565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a615760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109bc565b6001600160a01b038216611ac35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109bc565b60008111611b255760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109bc565b6001600160a01b0382166000908152601c602052604090205460ff1615611b725760405162461bcd60e51b81526020600482015260016024820152602160f81b60448201526064016109bc565b336000908152601c602052604090205460ff1615611bb65760405162461bcd60e51b81526020600482015260016024820152602160f81b60448201526064016109bc565b601e5460ff1615611e7c576000546001600160a01b03848116911614801590611bed57506000546001600160a01b03838116911614155b8015611c1257506001600160a01b03821660009081526006602052604090205460ff16155b8015611c3757506001600160a01b03831660009081526006602052604090205460ff16155b15611c8657600954811115611c865760405162461bcd60e51b815260206004820152601560248201527427bb32b9103a34329036b0bc2a3c20b6b7bab73a1760591b60448201526064016109bc565b6022546001600160a01b03838116911614611cf757600a54611ca7836115ef565b611cb190836132db565b1115611cf75760405162461bcd60e51b815260206004820152601560248201527427bb32b91036b0bc103bb0b63632ba1039b4bd329760591b60448201526064016109bc565b6022546001600160a01b038481169116148015611d2257506021546001600160a01b03838116911614155b8015611d4757506001600160a01b03821660009081526006602052604090205460ff16155b15611d95576001600160a01b0382166000908152601f60205260409020544211611d7057600080fd5b611d7b42603c6132db565b6001600160a01b0383166000908152601f60205260409020555b6022546001600160a01b038381169116148015611dc057506021546001600160a01b03848116911614155b8015611de557506001600160a01b03831660009081526006602052604090205460ff16155b15611e7c576001600160a01b038316600090815260208052604090205460ff16158015611e2a57506001600160a01b038216600090815260208052604090205460ff16155b611e3357600080fd5b6001600160a01b0382166000908152601f60205260409020544211611e5757600080fd5b611e6242603c6132db565b6001600160a01b0383166000908152601f60205260409020555b6022546001600160a01b038481169116148015611ea757506021546001600160a01b03838116911614155b8015611ecc57506001600160a01b03821660009081526006602052604090205460ff16155b15611f9857602454610100900460ff16611f285760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e000000000000000060448201526064016109bc565b601b54421415611f98576001600160a01b0382166000818152601c60205260408120805460ff19166001908117909155601d805491820181559091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b03191690911790555b60245460ff16158015611fb25750602454610100900460ff165b8015611fcb57506022546001600160a01b038381169116145b8015611ff057506001600160a01b0382166000908152601c602052604090205460ff16155b801561201557506001600160a01b0383166000908152601c602052604090205460ff16155b156120a3576019805460ff191660011790556000612032306115ef565b905080156120a157601a5460225461206a91606491612064919061205e906001600160a01b03166115ef565b9061221c565b90612159565b81111561209857601a5460225461209591606491612064919061205e906001600160a01b03166115ef565b90505b6120a181612228565b505b6001600160a01b03831660009081526006602052604090205460019060ff16806120e557506001600160a01b03831660009081526006602052604090205460ff165b156120ee575060005b6120fa84848484612303565b50506019805460ff191690555050565b6000818484111561212e5760405162461bcd60e51b81526004016109bc9190613147565b505050900390565b6000806000612143612482565b90925090506121528282612159565b9250505090565b6000610bdf82846132f3565b6000610bdf82846132db565b60008060008060008060008060006121888a6126a8565b92509250925060008060006121a68d86866121a1612136565b6126ea565b919f909e50909c50959a5093985091965092945050505050565b6000610bdf8284613420565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610bdf8284613401565b6024805460ff191660011790556016546015546000916122489190612165565b9050600061226360125460115461216590919063ffffffff16565b905060006122718383612165565b9050600061228660026120648481898961221c565b9050600061229486836121c0565b9050476122a08261273a565b60006122ac47836121c0565b905060006122be86612064848a61221c565b905060006122cc83836121c0565b905081156122dd576122dd826128f8565b80156122ed576122ed8682612953565b50506024805460ff191690555050505050505050565b8061234c5761234c600d8054600f556011805460135560158054601755600e80546010556012805460145560168054601855600095869055938590559184905583905582905555565b6001600160a01b03841660009081526007602052604090205460ff16801561238d57506001600160a01b03831660009081526007602052604090205460ff16155b156123a25761239d848484612a16565b61244e565b6001600160a01b03841660009081526007602052604090205460ff161580156123e357506001600160a01b03831660009081526007602052604090205460ff165b156123f35761239d848484612b3c565b6001600160a01b03841660009081526007602052604090205460ff16801561243357506001600160a01b03831660009081526007602052604090205460ff165b156124435761239d848484612be5565b61244e848484612c58565b8061247c5761247c600f54600d55601354601155601754601555601054600e55601454601255601854601655565b50505050565b600b546000908190816124976009600a613356565b6124a89066038d7ea4c68000613401565b905060005b600854811015612644578260036000600884815481106124dd57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612556575081600460006008848154811061252f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561258657600b5461256a6009600a613356565b61257b9066038d7ea4c68000613401565b945094505050509091565b6125da60036000600884815481106125ae57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121c0565b9250612630600460006008848154811061260457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121c0565b91508061263c81613437565b9150506124ad565b5061266e6126546009600a613356565b6126659066038d7ea4c68000613401565b600b5490612159565b82101561269f57600b546126846009600a613356565b6126959066038d7ea4c68000613401565b9350935050509091565b90939092509050565b6000806000806126b785612c9c565b905060006126c486612cc8565b905060006126dc826126d689866121c0565b906121c0565b979296509094509092505050565b60008080806126f9888661221c565b90506000612707888761221c565b90506000612715888861221c565b90506000612727826126d686866121c0565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061277d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156127d157600080fd5b505afa1580156127e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128099190612e4f565b8160018151811061282a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260215461285091309116846118d9565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac9479061288990859060009086903090429060040161324a565b600060405180830381600087803b1580156128a357600080fd5b505af11580156128b7573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516128ec929190613231565b60405180910390a15050565b6000805461291890606490612064908590600160a01b900460ff1661221c565b6001546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611085573d6000803e3d6000fd5b60215461296b9030906001600160a01b0316846118d9565b60215460025460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156129d657600080fd5b505af11580156129ea573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a0f9190613074565b5050505050565b600080600080600080612a2887612171565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612a5a90886121c0565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612a8990876121c0565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612ab89086612165565b6001600160a01b038916600090815260036020526040902055612ada81612cfa565b612ae48483612d82565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b2991815260200190565b60405180910390a3505050505050505050565b600080600080600080612b4e87612171565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612b8090876121c0565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612bb69084612165565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612ab89086612165565b600080600080600080612bf787612171565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612c2990886121c0565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612b8090876121c0565b600080600080600080612c6a87612171565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612a8990876121c0565b601954600090819060ff16612cb357600d54612cb7565b600e545b9050610bdf6064612064858461221c565b601954600090819060ff16612ceb57601554601154612ce691612165565b612cb7565b601654601254612cb791612165565b6000612d04612136565b90506000612d12838361221c565b30600090815260036020526040902054909150612d2f9082612165565b3060009081526003602090815260408083209390935560079052205460ff16156110855730600090815260046020526040902054612d6d9084612165565b30600090815260046020526040902055505050565b600b54612d8f90836121c0565b600b55600c54612d9f9082612165565b600c555050565b600082601f830112612db6578081fd5b81356020612dcb612dc6836132b7565b613286565b80838252828201915082860187848660051b8901011115612dea578586fd5b855b85811015612e11578135612dff8161347e565b84529284019290840190600101612dec565b5090979650505050505050565b80358015158114612e2e57600080fd5b919050565b600060208284031215612e44578081fd5b8135610bdf8161347e565b600060208284031215612e60578081fd5b8151610bdf8161347e565b60008060408385031215612e7d578081fd5b8235612e888161347e565b946020939093013593505050565b60008060408385031215612ea8578182fd5b8235612eb38161347e565b91506020830135612ec38161347e565b809150509250929050565b600080600060608486031215612ee2578081fd5b8335612eed8161347e565b92506020840135612efd8161347e565b929592945050506040919091013590565b60008060408385031215612e7d578182fd5b600060208284031215612f31578081fd5b813567ffffffffffffffff811115612f47578182fd5b612f5384828501612da6565b949350505050565b60008060408385031215612f6d578182fd5b823567ffffffffffffffff80821115612f84578384fd5b612f9086838701612da6565b9350602091508185013581811115612fa6578384fd5b85019050601f81018613612fb8578283fd5b8035612fc6612dc6826132b7565b80828252848201915084840189868560051b8701011115612fe5578687fd5b8694505b83851015613007578035835260019490940193918501918501612fe9565b5080955050505050509250929050565b600060208284031215613028578081fd5b610bdf82612e1e565b600060208284031215613042578081fd5b5035919050565b6000806040838503121561305b578182fd5b8235915061306b60208401612e1e565b90509250929050565b600080600060608486031215613088578283fd5b8351925060208401519150604084015190509250925092565b600080600080600080600060e0888a0312156130bb578485fd5b87359650602088013595506040880135945060608801359350608088013560ff811681146130e7578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000815180845260208085019450808401835b8381101561313c5781516001600160a01b031687529582019590820190600101613117565b509495945050505050565b6000602080835283518082850152825b8181101561317357858101830151858201604001528201613157565b818111156131845783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f6f766572616c6c20666565732063616e6e6f742062652061626f766520323525604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526013908201527263616e6e6f742062652061626f76652032352560681b604082015260600190565b828152604060208201526000612f536040830184613104565b85815284602082015260a06040820152600061326960a0830186613104565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156132af576132af613468565b604052919050565b600067ffffffffffffffff8211156132d1576132d1613468565b5060051b60200190565b600082198211156132ee576132ee613452565b500190565b60008261330e57634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561334e57816000190482111561333457613334613452565b8085161561334157918102915b93841c9390800290613318565b509250929050565b6000610bdf60ff84168360008261336f5750600161098c565b8161337c5750600061098c565b8160018114613392576002811461339c576133b8565b600191505061098c565b60ff8411156133ad576133ad613452565b50506001821b61098c565b5060208310610133831016604e8410600b84101617156133db575081810a61098c565b6133e58383613313565b80600019048211156133f9576133f9613452565b029392505050565b600081600019048311821515161561341b5761341b613452565b500290565b60008282101561343257613432613452565b500390565b600060001982141561344b5761344b613452565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146118d657600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d6df0a6837499b47a963228eb2ae43cf68402b57535efe2ad93a94abde396f2564736f6c63430008040033

Deployed Bytecode Sourcemap

27685:22668:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31104:79;;;;;;;;;;-1:-1:-1;31172:5:0;;;;;;;;;;;;-1:-1:-1;;;31172:5:0;;;;31104:79;;;;;;;:::i;:::-;;;;;;;;32011:171;;;;;;;;;;-1:-1:-1;32011:171:0;;;;;:::i;:::-;;:::i;:::-;;;7969:14:1;;7962:22;7944:41;;7932:2;7917:18;32011:171:0;7899:92:1;35553:147:0;;;;;;;;;;-1:-1:-1;35553:147:0;;;;;:::i;:::-;;:::i;:::-;;30960:138;;;;;;;;;;;;;:::i;33300:83::-;;;;;;;;;;-1:-1:-1;33367:10:0;;33300:83;;;16537:25:1;;;16525:2;16510:18;33300:83:0;16492:76:1;29851:41:0;;;;;;;;;;-1:-1:-1;29851:41:0;;;;-1:-1:-1;;;;;29851:41:0;;;;;;-1:-1:-1;;;;;6916:32:1;;;6898:51;;6886:2;6871:18;29851:41:0;6853:102:1;31363:91:0;;;;;;;;;;;;;:::i;28990:35::-;;;;;;;;;;;;;;;;32188:376;;;;;;;;;;-1:-1:-1;32188:376:0;;;;;:::i;:::-;;:::i;35710:82::-;;;;;;;;;;-1:-1:-1;35710:82:0;;;;;:::i;:::-;;:::i;34208:239::-;;;;;;;;;;-1:-1:-1;34208:239:0;;;;;:::i;:::-;;:::i;29234:30::-;;;;;;;;;;;;;;;;31278:79;;;;;;;;;;-1:-1:-1;28621:1:0;31278:79;;;17669:4:1;17657:17;;;17639:36;;17627:2;17612:18;31278:79:0;17594:87:1;29719:33:0;;;;;;;;;;-1:-1:-1;29719:33:0;;;;;;;;34777:423;;;;;;;;;;-1:-1:-1;34777:423:0;;;;;:::i;:::-;;:::i;32570:256::-;;;;;;;;;;-1:-1:-1;32570:256:0;;;;;:::i;:::-;;:::i;33389:385::-;;;;;;;;;;-1:-1:-1;33389:385:0;;;;;:::i;:::-;;:::i;49907:93::-;;;;;;;;;;-1:-1:-1;49907:93:0;;;;;:::i;:::-;;:::i;47303:103::-;;;;;;;;;;-1:-1:-1;47303:103:0;;;;;:::i;:::-;;:::i;33780:422::-;;;;;;;;;;-1:-1:-1;33780:422:0;;;;;:::i;:::-;;:::i;29897:28::-;;;;;;;;;;-1:-1:-1;29897:28:0;;;;-1:-1:-1;;;;;29897:28:0;;;50010:211;;;;;;;;;;-1:-1:-1;50010:211:0;;;;;:::i;:::-;;:::i;34453:318::-;;;;;;;;;;-1:-1:-1;34453:318:0;;;;;:::i;:::-;;:::i;47520:1488::-;;;;;;;;;;-1:-1:-1;47520:1488:0;;;;;:::i;:::-;;:::i;47181:116::-;;;;;;;;;;-1:-1:-1;47181:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;47268:23:0;47248:4;47268:23;;;:14;:23;;;;;;;;;47181:116;29030:36;;;;;;;;;;;;;;;;49203:427;;;;;;;;;;-1:-1:-1;49203:427:0;;;;;:::i;:::-;;:::i;29379:27::-;;;;;;;;;;;;;;;;31460:194;;;;;;;;;;-1:-1:-1;31460:194:0;;;;;:::i;:::-;;:::i;10627:103::-;;;;;;;;;;;;;:::i;29616:25::-;;;;;;;;;;;;;;;;28753:64;;;;;;;;;;;;;;;;33172:122;;;;;;;;;;-1:-1:-1;33172:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;33262:26:0;33242:4;33262:26;;;:17;:26;;;;;;;;;33172:122;9976:87;;;;;;;;;;-1:-1:-1;10022:7:0;10049:6;-1:-1:-1;;;;;10049:6:0;9976:87;;28827:66;;;;;;;;;;;;;;;;49014:183;;;;;;;;;;-1:-1:-1;49014:183:0;;;;;:::i;:::-;;:::i;31189:83::-;;;;;;;;;;-1:-1:-1;31259:7:0;;;;;;;;;;;;-1:-1:-1;;;31259:7:0;;;;31189:83;;32832:334;;;;;;;;;;-1:-1:-1;32832:334:0;;;;;:::i;:::-;;:::i;27840:98::-;;;;;;;;;;-1:-1:-1;27840:98:0;;;;-1:-1:-1;;;;;27840:98:0;;;31660:177;;;;;;;;;;-1:-1:-1;31660:177:0;;;;;:::i;:::-;;:::i;49636:135::-;;;;;;;;;;-1:-1:-1;49636:135:0;;;;;:::i;:::-;;:::i;29199:29::-;;;;;;;;;;;;;;;;29573:30;;;;;;;;;;;;;;;;29411:28;;;;;;;;;;;;;;;;50227:88;;;;;;;;;;-1:-1:-1;50227:88:0;;;;;:::i;:::-;;:::i;27799:35::-;;;;;;;;;;-1:-1:-1;27799:35:0;;;;-1:-1:-1;;;27799:35:0;;;;;;31843:162;;;;;;;;;;-1:-1:-1;31843:162:0;;;;;:::i;:::-;-1:-1:-1;;;;;31972:18:0;;;31946:7;31972:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31843:162;47412:102;;;;;;;;;;-1:-1:-1;47412:102:0;;;;;:::i;:::-;;:::i;49780:121::-;;;;;;;;;;-1:-1:-1;49780:121:0;;;;;:::i;:::-;;:::i;27993:85::-;;;;;;;;;;-1:-1:-1;27993:85:0;;;;-1:-1:-1;;;;;27993:85:0;;;10885:201;;;;;;;;;;-1:-1:-1;10885:201:0;;;;;:::i;:::-;;:::i;32011:171::-;32103:4;32119:39;9430:10;32142:7;32151:6;32119:8;:39::i;:::-;-1:-1:-1;32172:4:0;32011:171;;;;;:::o;35553:147::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;;;;;;;;;35622:6:::1;35617:78;35638:5;:12;35634:1;:16;35617:78;;;35683:4;35666;:14;35671:5;35677:1;35671:8;;;;;;-1:-1:-1::0;;;35671:8:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;35666:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;35666:14:0;:21;;-1:-1:-1;;35666:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35652:3;::::1;::::0;::::1;:::i;:::-;;;;35617:78;;;;35553:147:::0;:::o;30960:138::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;31011:12:::1;:19:::0;;-1:-1:-1;;31011:19:0::1;;;::::0;;31050:15:::1;31037:10;:28:::0;31072:13:::1;:20:::0;;-1:-1:-1;;31072:20:0::1;31026:4;31072:20;::::0;;30960:138::o;31363:91::-;31418:7;28735:13;28621:1;28735:2;:13;:::i;:::-;28711:37;;:21;:37;:::i;:::-;31434:14;;31363:91;:::o;32188:376::-;32308:4;32321:36;32331:6;32339:9;32350:6;32321:9;:36::i;:::-;32364:176;32381:6;9430:10;32417:116;32465:6;32417:116;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32417:19:0;;;;;;:11;:19;;;;;;;;9430:10;32417:33;;;;;;;;;;:37;:116::i;:::-;32364:8;:176::i;:::-;-1:-1:-1;32554:4:0;32188:376;;;;;:::o;35710:82::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35766:12:0::1;35781:5;35766:12:::0;;;:4:::1;:12:::0;;;;;:20;;-1:-1:-1;;35766:20:0::1;::::0;;35710:82::o;34208:239::-;34275:7;34310;;34299;:18;;34291:73;;;;-1:-1:-1;;;34291:73:0;;9868:2:1;34291:73:0;;;9850:21:1;9907:2;9887:18;;;9880:30;9946:34;9926:18;;;9919:62;-1:-1:-1;;;9997:18:1;;;9990:40;10047:19;;34291:73:0;9840:232:1;34291:73:0;34371:19;34393:10;:8;:10::i;:::-;34371:32;-1:-1:-1;34417:24:0;:7;34371:32;34417:11;:24::i;:::-;34410:31;34208:239;-1:-1:-1;;;34208:239:0:o;34777:423::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34853:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;34845:66;;;::::0;-1:-1:-1;;;34845:66:0;;11774:2:1;34845:66:0::1;::::0;::::1;11756:21:1::0;11813:2;11793:18;;;11786:30;11852:29;11832:18;;;11825:57;11899:18;;34845:66:0::1;11746:177:1::0;34845:66:0::1;34923:9;34918:277;34942:9;:16:::0;34938:20;::::1;34918:277;;;34994:7;-1:-1:-1::0;;;;;34978:23:0::1;:9;34988:1;34978:12;;;;;;-1:-1:-1::0;;;34978:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34978:12:0::1;:23;34974:214;;;35029:9;35039:16:::0;;:20:::1;::::0;35058:1:::1;::::0;35039:20:::1;:::i;:::-;35029:31;;;;;;-1:-1:-1::0;;;35029:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;35014:9:::1;:12:::0;;-1:-1:-1;;;;;35029:31:0;;::::1;::::0;35024:1;;35014:12;::::1;;;-1:-1:-1::0;;;35014:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;35014:46:0::1;-1:-1:-1::0;;;;;35014:46:0;;::::1;;::::0;;35071:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;35102:17:::1;:26:::0;;;;:34;;-1:-1:-1;;35102:34:0::1;::::0;;35147:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;35147:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;35147:15:0;;;;;-1:-1:-1;;;;;;35147:15:0::1;::::0;;;;;35617:78:::1;35553:147:::0;:::o;34974:214::-:1;34960:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34918:277;;32570:256:::0;9430:10;32675:4;32745:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32745:34:0;;;;;;;;;;32675:4;;32691:111;;32729:7;;32745:50;;32784:10;32745:38;:50::i;33389:385::-;9430:10;33439:14;33492:25;;;:17;:25;;;;;;;;33491:26;33475:104;;;;-1:-1:-1;;;33475:104:0;;16180:2:1;33475:104:0;;;16162:21:1;16219:2;16199:18;;;16192:30;16258:34;16238:18;;;16231:62;-1:-1:-1;;;16309:18:1;;;16302:42;16361:19;;33475:104:0;16152:234:1;33475:104:0;33587:15;33616:19;33627:7;33616:10;:19::i;:::-;-1:-1:-1;;;;;;;;;33660:15:0;;;;;;:7;:15;;;;;;33586:49;;-1:-1:-1;33660:28:0;;:15;-1:-1:-1;33586:49:0;33660:19;:28::i;:::-;-1:-1:-1;;;;;33642:15:0;;;;;;:7;:15;;;;;:46;33705:7;;:20;;33717:7;33705:11;:20::i;:::-;33695:7;:30;33745:10;;:23;;33760:7;33745:14;:23::i;:::-;33732:10;:36;-1:-1:-1;;;33389:385:0:o;49907:93::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;49973:13:::1;:21:::0;;-1:-1:-1;;49973:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49907:93::o;47303:103::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47370:23:0::1;;::::0;;;:14:::1;:23;::::0;;;;:30;;-1:-1:-1;;47370:30:0::1;47396:4;47370:30;::::0;;47303:103::o;33780:422::-;33888:7;28735:13;28621:1;28735:2;:13;:::i;:::-;28711:37;;:21;:37;:::i;:::-;33912:7;:18;;33904:62;;;;-1:-1:-1;;;33904:62:0;;12130:2:1;33904:62:0;;;12112:21:1;12169:2;12149:18;;;12142:30;12208:33;12188:18;;;12181:61;12259:18;;33904:62:0;12102:181:1;33904:62:0;33978:17;33973:224;;34007:15;34036:19;34047:7;34036:10;:19::i;:::-;-1:-1:-1;34006:49:0;;-1:-1:-1;34064:14:0;;-1:-1:-1;;;;;34064:14:0;33973:224;34102:23;34139:19;34150:7;34139:10;:19::i;50010:211::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;50134:12;;:46:::1;;50173:7;50134:46;;;50149:21;50134:46;50187:28;::::0;50124:56;;-1:-1:-1;;;;;;50187:19:0;::::1;::::0;:28;::::1;;;::::0;50124:56;;50187:28:::1;::::0;;;50124:56;50187:19;:28;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;50010:211:::0;;:::o;34453:318::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34532:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;34531:27;34523:67;;;::::0;-1:-1:-1;;;34523:67:0;;11418:2:1;34523:67:0::1;::::0;::::1;11400:21:1::0;11457:2;11437:18;;;11430:30;11496:29;11476:18;;;11469:57;11543:18;;34523:67:0::1;11390:177:1::0;34523:67:0::1;-1:-1:-1::0;;;;;34601:16:0;::::1;34620:1;34601:16:::0;;;:7:::1;:16;::::0;;;;;:20;34597:99:::1;;-1:-1:-1::0;;;;;34671:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;34651:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;34632:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;34597:99:::1;-1:-1:-1::0;;;;;34702:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;34702:33:0::1;34731:4;34702:33:::0;;::::1;::::0;;;34742:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34742:23:0::1;::::0;;::::1;::::0;;34453:318::o;47520:1488::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;47703:2:::1;47693:6;:12;;47685:44;;;;-1:-1:-1::0;;;47685:44:0::1;;;;;;;:::i;:::-;47800:2;47752:44;47779:16;;47752:22;47763:10;;47752:6;:10;;:22;;;;:::i;:::-;:26:::0;::::1;:44::i;:::-;:50;;47736:116;;;;-1:-1:-1::0;;;47736:116:0::1;;;;;;;:::i;:::-;47859:8;:17:::0;;;47904:2:::1;47893:13:::0;::::1;;47885:45;;;;-1:-1:-1::0;;;47885:45:0::1;;;;;;;:::i;:::-;48004:2;47953:47;47982:17;;47953:24;47965:11;;47953:7;:11;;:24;;;;:::i;:47::-;:53;;47937:119;;;;-1:-1:-1::0;;;47937:119:0::1;;;;;;;:::i;:::-;48063:9;:19:::0;;;48111:3:::1;48099:15;::::0;::::1;;;48091:45;;;::::0;-1:-1:-1;;;48091:45:0;;12851:2:1;48091:45:0::1;::::0;::::1;12833:21:1::0;12890:2;12870:18;;;12863:30;-1:-1:-1;;;12909:18:1;;;12902:47;12966:18;;48091:45:0::1;12823:167:1::0;48091:45:0::1;48143:16;:27:::0;;-1:-1:-1;;;;48143:27:0::1;-1:-1:-1::0;;;48143:27:0::1;::::0;::::1;;;::::0;;48199:2:::1;48187:14:::0;::::1;;48179:46;;;;-1:-1:-1::0;;;48179:46:0::1;;;;;;;:::i;:::-;48296:2;48248:44;48283:8;;48248:30;48261:16;;48248:8;:12;;:30;;;;:::i;:44::-;:50;;48232:116;;;;-1:-1:-1::0;;;48232:116:0::1;;;;;;;:::i;:::-;48355:10;:21:::0;;;48406:2:::1;48393:15:::0;::::1;;48385:47;;;;-1:-1:-1::0;;;48385:47:0::1;;;;;;;:::i;:::-;48506:2;48455:47;48492:9;;48455:32;48469:17;;48455:9;:13;;:32;;;;:::i;:47::-;:53;;48439:119;;;;-1:-1:-1::0;;;48439:119:0::1;;;;;;;:::i;:::-;48565:11;:23:::0;;;48616:2:::1;48605:13:::0;::::1;;48597:45;;;;-1:-1:-1::0;;;48597:45:0::1;;;;;;;:::i;:::-;48706:2;48665:37;48693:8;;48665:23;48677:10;;48665:7;:11;;:23;;;;:::i;:37::-;:43;;48649:109;;;;-1:-1:-1::0;;;48649:109:0::1;;;;;;;:::i;:::-;48765:16;:26:::0;;;48820:2:::1;48808:14:::0;::::1;;48800:46;;;;-1:-1:-1::0;;;48800:46:0::1;;;;;;;:::i;:::-;48913:2;48869:40;48899:9;;48869:25;48882:11;;48869:8;:12;;:25;;;;:::i;:40::-;:46;;48853:112;;;;-1:-1:-1::0;;;48853:112:0::1;;;;;;;:::i;:::-;48972:17;:28:::0;-1:-1:-1;;;;;;47520:1488:0:o;49203:427::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;49337:3:::1;49313:14;:21;:27;49305:94;;;::::0;-1:-1:-1;;;49305:94:0;;9445:2:1;49305:94:0::1;::::0;::::1;9427:21:1::0;9484:2;9464:18;;;9457:30;9523:34;9503:18;;;9496:62;-1:-1:-1;;;9574:18:1;;;9567:52;9636:19;;49305:94:0::1;9417:244:1::0;49305:94:0::1;49432:9;49428:197;49451:14;:21;49447:1;:25;49428:197;;;49487:14;49504;49519:1;49504:17;;;;;;-1:-1:-1::0;;;49504:17:0::1;;;;;;;;;;;;;;;49487:34;;49530:14;28621:1;49560:2;:13;;;;:::i;:::-;49547:7;49555:1;49547:10;;;;;;-1:-1:-1::0;;;49547:10:0::1;;;;;;;;;;;;;;;:26;;;;:::i;:::-;49530:43;;49580:37;49590:10;49602:6;49610;49580:9;:37::i;:::-;49428:197;;49474:3;;;;;:::i;:::-;;;;49428:197;;31460:194:::0;-1:-1:-1;;;;;31546:26:0;;31526:7;31546:26;;;:17;:26;;;;;;;;31542:55;;;-1:-1:-1;;;;;;31581:16:0;;;;;:7;:16;;;;;;;31460:194::o;31542:55::-;-1:-1:-1;;;;;31631:16:0;;;;;;:7;:16;;;;;;31611:37;;:19;:37::i;10627:103::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;10692:30:::1;10719:1;10692:18;:30::i;:::-;10627:103::o:0;49014:183::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;49108:16:::1;:45:::0;;-1:-1:-1;;;;;49108:45:0;;::::1;-1:-1:-1::0;;;;;;49108:45:0;;::::1;;::::0;;;49160:8:::1;:29:::0;;;;;::::1;::::0;::::1;;::::0;;49014:183::o;32832:334::-;32942:4;32958:184;9430:10;32996:7;33012:123;33061:15;33012:123;;;;;;;;;;;;;;;;;9430:10;33012:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;33012:34:0;;;;;;;;;;;;:38;:123::i;31660:177::-;31755:4;31771:42;9430:10;31795:9;31806:6;31771:9;:42::i;49636:135::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;49752:13:::1;28621:1;49752:2;:13;:::i;:::-;49736:29;::::0;:13;:29:::1;:::i;:::-;49719:14;:46:::0;-1:-1:-1;49636:135:0:o;50227:88::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;50291:11:::1;:18:::0;50227:88::o;47412:102::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47477:23:0::1;47503:5;47477:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;47477:31:0::1;::::0;;47412:102::o;49780:121::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;49882:13:::1;28621:1;49882:2;:13;:::i;:::-;49868:27;::::0;:11;:27:::1;:::i;:::-;49853:12;:42:::0;-1:-1:-1;49780:121:0:o;10885:201::-;10022:7;10049:6;-1:-1:-1;;;;;10049:6:0;9430:10;10196:23;10188:68;;;;-1:-1:-1;;;10188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10974:22:0;::::1;10966:73;;;::::0;-1:-1:-1;;;10966:73:0;;10279:2:1;10966:73:0::1;::::0;::::1;10261:21:1::0;10318:2;10298:18;;;10291:30;10357:34;10337:18;;;10330:62;-1:-1:-1;;;10408:18:1;;;10401:36;10454:19;;10966:73:0::1;10251:228:1::0;10966:73:0::1;11050:28;11069:8;11050:18;:28::i;:::-;10885:201:::0;:::o;35206:341::-;-1:-1:-1;;;;;35317:19:0;;35309:68;;;;-1:-1:-1;;;35309:68:0;;15074:2:1;35309:68:0;;;15056:21:1;15113:2;15093:18;;;15086:30;15152:34;15132:18;;;15125:62;-1:-1:-1;;;15203:18:1;;;15196:34;15247:19;;35309:68:0;15046:226:1;35309:68:0;-1:-1:-1;;;;;35392:21:0;;35384:68;;;;-1:-1:-1;;;35384:68:0;;10686:2:1;35384:68:0;;;10668:21:1;10725:2;10705:18;;;10698:30;10764:34;10744:18;;;10737:62;-1:-1:-1;;;10815:18:1;;;10808:32;10857:19;;35384:68:0;10658:224:1;35384:68:0;-1:-1:-1;;;;;35461:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;35509:32;;16537:25:1;;;35509:32:0;;16510:18:1;35509:32:0;;;;;;;35206:341;;;:::o;35798:2326::-;-1:-1:-1;;;;;35904:18:0;;35896:68;;;;-1:-1:-1;;;35896:68:0;;14668:2:1;35896:68:0;;;14650:21:1;14707:2;14687:18;;;14680:30;14746:34;14726:18;;;14719:62;-1:-1:-1;;;14797:18:1;;;14790:35;14842:19;;35896:68:0;14640:227:1;35896:68:0;-1:-1:-1;;;;;35979:16:0;;35971:64;;;;-1:-1:-1;;;35971:64:0;;9041:2:1;35971:64:0;;;9023:21:1;9080:2;9060:18;;;9053:30;9119:34;9099:18;;;9092:62;-1:-1:-1;;;9170:18:1;;;9163:33;9213:19;;35971:64:0;9013:225:1;35971:64:0;36059:1;36050:6;:10;36042:64;;;;-1:-1:-1;;;36042:64:0;;13908:2:1;36042:64:0;;;13890:21:1;13947:2;13927:18;;;13920:30;13986:34;13966:18;;;13959:62;-1:-1:-1;;;14037:18:1;;;14030:39;14086:19;;36042:64:0;13880:231:1;36042:64:0;-1:-1:-1;;;;;36122:9:0;;;;;;:5;:9;;;;;;;;36121:10;36113:24;;;;-1:-1:-1;;;36113:24:0;;11089:2:1;36113:24:0;;;11071:21:1;11128:1;11108:18;;;11101:29;-1:-1:-1;;;11146:18:1;;;11139:31;11187:18;;36113:24:0;11061:150:1;36113:24:0;36159:10;36153:17;;;;:5;:17;;;;;;;;36152:18;36144:32;;;;-1:-1:-1;;;36144:32:0;;11089:2:1;36144:32:0;;;11071:21:1;11128:1;11108:18;;;11101:29;-1:-1:-1;;;11146:18:1;;;11139:31;11187:18;;36144:32:0;11061:150:1;36144:32:0;36188:13;;;;36185:879;;;10022:7;10049:6;-1:-1:-1;;;;;36278:15:0;;;10049:6;;36278:15;;;;:32;;-1:-1:-1;10022:7:0;10049:6;-1:-1:-1;;;;;36297:13:0;;;10049:6;;36297:13;;36278:32;:55;;;;-1:-1:-1;;;;;;36315:18:0;;;;;;:14;:18;;;;;;;;36314:19;36278:55;:80;;;;-1:-1:-1;;;;;;36338:20:0;;;;;;:14;:20;;;;;;;;36337:21;36278:80;36275:162;;;36389:12;;36379:6;:22;;36371:56;;;;-1:-1:-1;;;36371:56:0;;13558:2:1;36371:56:0;;;13540:21:1;13597:2;13577:18;;;13570:30;-1:-1:-1;;;13616:18:1;;;13609:51;13677:18;;36371:56:0;13530:171:1;36371:56:0;36455:13;;-1:-1:-1;;;;;36449:19:0;;;36455:13;;36449:19;36445:120;;36515:14;;36498:13;36508:2;36498:9;:13::i;:::-;36489:22;;:6;:22;:::i;:::-;:40;;36481:74;;;;-1:-1:-1;;;36481:74:0;;14318:2:1;36481:74:0;;;14300:21:1;14357:2;14337:18;;;14330:30;-1:-1:-1;;;14376:18:1;;;14369:51;14437:18;;36481:74:0;14290:171:1;36481:74:0;36599:13;;-1:-1:-1;;;;;36591:21:0;;;36599:13;;36591:21;:55;;;;-1:-1:-1;36630:15:0;;-1:-1:-1;;;;;36616:30:0;;;36630:15;;36616:30;;36591:55;:79;;;;-1:-1:-1;;;;;;36652:18:0;;;;;;:14;:18;;;;;;;;36650:20;36591:79;36587:201;;;-1:-1:-1;;;;;36691:12:0;;;;;;:8;:12;;;;;;36706:15;-1:-1:-1;36683:39:0;;;;;;36748:30;:15;36767:10;36748:30;:::i;:::-;-1:-1:-1;;;;;36733:12:0;;;;;;:8;:12;;;;;:45;36587:201;36820:13;;-1:-1:-1;;;;;36814:19:0;;;36820:13;;36814:19;:55;;;;-1:-1:-1;36853:15:0;;-1:-1:-1;;;;;36837:32:0;;;36853:15;;36837:32;;36814:55;:81;;;;-1:-1:-1;;;;;;36875:20:0;;;;;;:14;:20;;;;;;;;36873:22;36814:81;36810:247;;;-1:-1:-1;;;;;36917:10:0;;;;;;:4;:10;;;;;;;;36916:11;:24;;;;-1:-1:-1;;;;;;36932:8:0;;;;;;:4;:8;;;;;;;;36931:9;36916:24;36908:33;;;;;;-1:-1:-1;;;;;36960:12:0;;;;;;:8;:12;;;;;;36975:15;-1:-1:-1;36952:39:0;;;;;;37017:30;:15;37036:10;37017:30;:::i;:::-;-1:-1:-1;;;;;37002:12:0;;;;;;:8;:12;;;;;:45;36810:247;37104:13;;-1:-1:-1;;;;;37096:21:0;;;37104:13;;37096:21;:62;;;;-1:-1:-1;37142:15:0;;-1:-1:-1;;;;;37128:30:0;;;37142:15;;37128:30;;37096:62;:92;;;;-1:-1:-1;;;;;;37170:18:0;;;;;;:14;:18;;;;;;;;37169:19;37096:92;37084:289;;;37213:12;;;;;;;37205:49;;;;-1:-1:-1;;;37205:49:0;;15827:2:1;37205:49:0;;;15809:21:1;15866:2;15846:18;;;15839:30;15905:26;15885:18;;;15878:54;15949:18;;37205:49:0;15799:174:1;37205:49:0;37288:10;;37269:15;:29;37265:99;;;-1:-1:-1;;;;;37311:9:0;;;;;;:5;:9;;;;;:16;;-1:-1:-1;;37311:16:0;37323:4;37311:16;;;;;;37338:7;:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;37338:16:0;;;;;;37265:99;37399:17;;;;37398:18;:34;;;;-1:-1:-1;37420:12:0;;;;;;;37398:34;:57;;;;-1:-1:-1;37442:13:0;;-1:-1:-1;;;;;37436:19:0;;;37442:13;;37436:19;37398:57;:71;;;;-1:-1:-1;;;;;;37460:9:0;;;;;;:5;:9;;;;;;;;37459:10;37398:71;:87;;;;-1:-1:-1;;;;;;37474:11:0;;;;;;:5;:11;;;;;;;;37473:12;37398:87;37394:537;;;37496:9;:16;;-1:-1:-1;;37496:16:0;37508:4;37496:16;;;:9;37553:24;37571:4;37553:9;:24::i;:::-;37521:56;-1:-1:-1;37590:25:0;;37586:338;;37708:11;;37689:13;;37679:50;;37725:3;;37679:41;;37708:11;37679:24;;-1:-1:-1;;;;;37689:13:0;37679:9;:24::i;:::-;:28;;:41::i;:::-;:45;;:50::i;:::-;37644:21;:85;37628:242;;;37807:11;;37788:13;;37778:80;;37840:3;;37778:41;;37807:11;37778:24;;-1:-1:-1;;;;;37788:13:0;37778:9;:24::i;:80::-;37754:104;;37628:242;37880:34;37892:21;37880:11;:34::i;:::-;37394:537;;-1:-1:-1;;;;;37970:20:0;;37939:12;37970:20;;;:14;:20;;;;;;37954:4;;37970:20;;;:42;;-1:-1:-1;;;;;;37994:18:0;;;;;;:14;:18;;;;;;;;37970:42;37967:78;;;-1:-1:-1;38032:5:0;37967:78;38053:41;38068:4;38074:2;38078:6;38086:7;38053:14;:41::i;:::-;-1:-1:-1;;38101:9:0;:17;;-1:-1:-1;;38101:17:0;;;-1:-1:-1;;35798:2326:0:o;7431:240::-;7551:7;7612:12;7604:6;;;;7596:29;;;;-1:-1:-1;;;7596:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;7647:5:0;;;7431:240::o;44767:154::-;44809:7;44826:15;44843;44862:19;:17;:19::i;:::-;44825:56;;-1:-1:-1;44825:56:0;-1:-1:-1;44895:20:0;44825:56;;44895:11;:20::i;:::-;44888:27;;;;44767:154;:::o;6289:98::-;6347:7;6374:5;6378:1;6374;:5;:::i;5152:98::-;5210:7;5237:5;5241:1;5237;:5;:::i;43323:584::-;43405:7;43421;43437;43453;43469;43485;43519:23;43551:12;43572:18;43600:20;43612:7;43600:11;:20::i;:::-;43510:110;;;;;;43628:15;43645:23;43670:12;43686:85;43706:7;43722:4;43735:10;43754;:8;:10::i;:::-;43686:11;:85::i;:::-;43627:144;;;;-1:-1:-1;43627:144:0;;-1:-1:-1;43847:15:0;;-1:-1:-1;43871:4:0;;-1:-1:-1;43884:10:0;;-1:-1:-1;43323:584:0;;-1:-1:-1;;;;;43323:584:0:o;5533:98::-;5591:7;5618:5;5622:1;5618;:5;:::i;11246:191::-;11320:16;11339:6;;-1:-1:-1;;;;;11356:17:0;;;-1:-1:-1;;;;;;11356:17:0;;;;;;11389:40;;11339:6;;;;;;;11389:40;;11320:16;11389:40;11246:191;;:::o;5890:98::-;5948:7;5975:5;5979:1;5975;:5;:::i;38130:817::-;30275:17;:24;;-1:-1:-1;;30275:24:0;30295:4;30275:24;;;38239:9:::1;::::0;38226:8:::1;::::0;30275:17;;38226:23:::1;::::0;:8;:12:::1;:23::i;:::-;38209:40;;38256:16;38275:27;38290:11;;38275:10;;:14;;:27;;;;:::i;:::-;38256:46:::0;-1:-1:-1;38309:17:0::1;38329:20;:6:::0;38256:46;38329:10:::1;:20::i;:::-;38309:40:::0;-1:-1:-1;38356:17:0::1;38376:55;38429:1;38376:48;38309:40:::0;38376:48;:21;38402:6;38376:25:::1;:33::i;:55::-;38356:75:::0;-1:-1:-1;38438:21:0::1;38462:36;:21:::0;38356:75;38462:25:::1;:36::i;:::-;38438:60:::0;-1:-1:-1;38530:21:0::1;38558:32;38438:60:::0;38558:17:::1;:32::i;:::-;38597:24;38624:41;:21;38650:14:::0;38624:25:::1;:41::i;:::-;38597:68:::0;-1:-1:-1;38674:21:0::1;38698:45;38733:9:::0;38698:30:::1;38597:68:::0;38719:8;38698:20:::1;:30::i;:45::-;38674:69:::0;-1:-1:-1;38750:14:0::1;38767:35;:16:::0;38674:69;38767:20:::1;:35::i;:::-;38750:52:::0;-1:-1:-1;38813:17:0;;38809:69:::1;;38841:29;38856:13;38841:14;:29::i;:::-;38888:10:::0;;38884:58:::1;;38909:25;38916:9;38927:6;38909;:25::i;:::-;-1:-1:-1::0;;30314:17:0;:25;;-1:-1:-1;;30314:25:0;;;-1:-1:-1;;;;;;;;38130:817:0:o;40042:676::-;40178:7;40173:29;;40187:15;46510:16;;;46485:22;:41;46555:10;;;46533:19;:32;46592:8;;;46572:17;:28;46635:17;;;46609:23;:43;46682:11;;;46659:20;:34;46721:9;;;46700:18;:30;-1:-1:-1;46739:20:0;;;;46766:14;;;;46787:12;;;;46808:21;;;46836:15;;;46858:13;46445:432;40187:15;-1:-1:-1;;;;;40215:25:0;;;;;;:17;:25;;;;;;;;:58;;;;-1:-1:-1;;;;;;40245:28:0;;;;;;:17;:28;;;;;;;;40244:29;40215:58;40211:463;;;40284:48;40306:6;40314:9;40325:6;40284:21;:48::i;:::-;40211:463;;;-1:-1:-1;;;;;40351:25:0;;;;;;:17;:25;;;;;;;;40350:26;:58;;;;-1:-1:-1;;;;;;40380:28:0;;;;;;:17;:28;;;;;;;;40350:58;40346:328;;;40419:46;40439:6;40447:9;40458:6;40419:19;:46::i;40346:328::-;-1:-1:-1;;;;;40483:25:0;;;;;;:17;:25;;;;;;;;:57;;;;-1:-1:-1;;;;;;40512:28:0;;;;;;:17;:28;;;;;;;;40483:57;40479:195;;;40551:48;40573:6;40581:9;40592:6;40551:21;:48::i;40479:195::-;40622:44;40640:6;40648:9;40659:6;40622:17;:44::i;:::-;40687:7;40682:30;;40696:16;46943:22;;46924:16;:41;46985:19;;46972:10;:32;47022:17;;47011:8;:28;47068:23;;47048:17;:43;47112:20;;47098:11;:34;47151:18;;47139:9;:30;46883:292;40696:16;40042:676;;;;:::o;44927:521::-;45021:7;;44978;;;;;28735:13;28621:1;28735:2;:13;:::i;:::-;28711:37;;:21;:37;:::i;:::-;45035:25;;45072:9;45067:276;45091:9;:16;45087:20;;45067:276;;;45151:7;45127;:21;45135:9;45145:1;45135:12;;;;;;-1:-1:-1;;;45135:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45135:12:0;45127:21;;;;;;;;;;;;;:31;;:66;;;45186:7;45162;:21;45170:9;45180:1;45170:12;;;;;;-1:-1:-1;;;45170:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45170:12:0;45162:21;;;;;;;;;;;;;:31;45127:66;45123:106;;;45212:7;;28735:13;28621:1;28735:2;:13;:::i;:::-;28711:37;;:21;:37;:::i;:::-;45204:25;;;;;;;44927:521;;:::o;45123:106::-;45248:34;45260:7;:21;45268:9;45278:1;45268:12;;;;;;-1:-1:-1;;;45268:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45268:12:0;45260:21;;;;;;;;;;;;;45248:7;;:11;:34::i;:::-;45238:44;;45301:34;45313:7;:21;45321:9;45331:1;45321:12;;;;;;-1:-1:-1;;;45321:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45321:12:0;45313:21;;;;;;;;;;;;;45301:7;;:11;:34::i;:::-;45291:44;-1:-1:-1;45109:3:0;;;;:::i;:::-;;;;45067:276;;;-1:-1:-1;45363:20:0;28735:13;28621:1;28735:2;:13;:::i;:::-;28711:37;;:21;:37;:::i;:::-;45363:7;;;:11;:20::i;:::-;45353:7;:30;45349:61;;;45393:7;;28735:13;28621:1;28735:2;:13;:::i;:::-;28711:37;;:21;:37;:::i;:::-;45385:25;;;;;;44927:521;;:::o;45349:61::-;45425:7;;45434;;-1:-1:-1;44927:521:0;-1:-1:-1;44927:521:0:o;43913:364::-;43996:7;44012;44028;44053:12;44068:29;44089:7;44068:20;:29::i;:::-;44053:44;;44104:18;44125:31;44148:7;44125:22;:31::i;:::-;44104:52;-1:-1:-1;44163:23:0;44189:33;44104:52;44189:17;:7;44201:4;44189:11;:17::i;:::-;:21;;:33::i;:::-;44163:59;44254:4;;-1:-1:-1;44260:10:0;;-1:-1:-1;43913:364:0;;-1:-1:-1;;;43913:364:0:o;44283:478::-;44446:7;;;;44521:24;:7;44533:11;44521;:24::i;:::-;44503:42;-1:-1:-1;44552:12:0;44567:21;:4;44576:11;44567:8;:21::i;:::-;44552:36;-1:-1:-1;44595:18:0;44616:27;:10;44631:11;44616:14;:27::i;:::-;44595:48;-1:-1:-1;44650:23:0;44676:33;44595:48;44676:17;:7;44688:4;44676:11;:17::i;:33::-;44724:7;;;;-1:-1:-1;44750:4:0;;-1:-1:-1;44283:478:0;;-1:-1:-1;;;;;;;44283:478:0:o;39445:591::-;39588:16;;;39602:1;39588:16;;;;;;;;39564:21;;39588:16;;;;;;;;;;-1:-1:-1;39588:16:0;39564:40;;39629:4;39611;39616:1;39611:7;;;;;;-1:-1:-1;;;39611:7:0;;;;;;;;;-1:-1:-1;;;;;39611:23:0;;;:7;;;;;;;;;;:23;;;;39651:15;;:22;;;-1:-1:-1;;;39651:22:0;;;;:15;;;;;:20;;:22;;;;;39611:7;;39651:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39641:4;39646:1;39641:7;;;;;;-1:-1:-1;;;39641:7:0;;;;;;;;;-1:-1:-1;;;;;39641:32:0;;;:7;;;;;;;;;:32;39714:15;;39682:62;;39699:4;;39714:15;39732:11;39682:8;:62::i;:::-;39775:15;;:206;;-1:-1:-1;;;39775:206:0;;-1:-1:-1;;;;;39775:15:0;;;;:66;;:206;;39850:11;;39775:15;;39908:4;;39929;;39959:15;;39775:206;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39995:35;40012:11;40025:4;39995:35;;;;;;;:::i;:::-;;;;;;;;39445:591;;:::o;38953:173::-;39008:23;39045:16;;39034:37;;39067:3;;39034:28;;:6;;-1:-1:-1;;;39045:16:0;;;;39034:10;:28::i;:37::-;39078:16;;:42;;39008:63;;-1:-1:-1;;;;;;39078:16:0;;:42;;;;;39008:63;;39078:16;:42;:16;:42;39008:63;39078:16;:42;;;;;;;;;;;;;;;;;;;39132:307;39235:15;;39203:62;;39220:4;;-1:-1:-1;;;;;39235:15:0;39253:11;39203:8;:62::i;:::-;39272:15;;39394:8;;39272:161;;-1:-1:-1;;;39272:161:0;;39340:4;39272:161;;;7533:34:1;7583:18;;;7576:34;;;39272:15:0;7626:18:1;;;7619:34;;;7669:18;;;7662:34;-1:-1:-1;;;;;39394:8:0;;;7712:19:1;;;7705:44;39411:15:0;7765:19:1;;;7758:35;39272:15:0;;;:31;;39312:9;;7467:19:1;;39272:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39132:307;;:::o;41897:602::-;42024:15;42048:23;42080:12;42101:23;42133:12;42154:18;42182:19;42193:7;42182:10;:19::i;:::-;-1:-1:-1;;;;;42226:15:0;;;;;;:7;:15;;;;;;42015:186;;-1:-1:-1;42015:186:0;;-1:-1:-1;42015:186:0;;-1:-1:-1;42015:186:0;-1:-1:-1;42015:186:0;-1:-1:-1;42015:186:0;-1:-1:-1;42226:28:0;;42246:7;42226:19;:28::i;:::-;-1:-1:-1;;;;;42208:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42279:7;:15;;;;:28;;42299:7;42279:19;:28::i;:::-;-1:-1:-1;;;;;42261:15:0;;;;;;;:7;:15;;;;;;:46;;;;42335:18;;;;;;;:39;;42358:15;42335:22;:39::i;:::-;-1:-1:-1;;;;;42314:18:0;;;;;;:7;:18;;;;;:60;42381:26;42396:10;42381:14;:26::i;:::-;42414:23;42426:4;42432;42414:11;:23::i;:::-;42466:9;-1:-1:-1;;;;;42449:44:0;42458:6;-1:-1:-1;;;;;42449:44:0;;42477:15;42449:44;;;;16537:25:1;;16525:2;16510:18;;16492:76;42449:44:0;;;;;;;;41897:602;;;;;;;;;:::o;41277:614::-;41402:15;41426:23;41458:12;41479:23;41511:12;41532:18;41560:19;41571:7;41560:10;:19::i;:::-;-1:-1:-1;;;;;41604:15:0;;;;;;:7;:15;;;;;;41393:186;;-1:-1:-1;41393:186:0;;-1:-1:-1;41393:186:0;;-1:-1:-1;41393:186:0;-1:-1:-1;41393:186:0;-1:-1:-1;41393:186:0;-1:-1:-1;41604:28:0;;41393:186;41604:19;:28::i;:::-;-1:-1:-1;;;;;41586:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;41660:18;;;;;:7;:18;;;;;:39;;41683:15;41660:22;:39::i;:::-;-1:-1:-1;;;;;41639:18:0;;;;;;:7;:18;;;;;;;;:60;;;;41727:7;:18;;;;:39;;41750:15;41727:22;:39::i;42505:669::-;42632:15;42656:23;42688:12;42709:23;42741:12;42762:18;42790:19;42801:7;42790:10;:19::i;:::-;-1:-1:-1;;;;;42834:15:0;;;;;;:7;:15;;;;;;42623:186;;-1:-1:-1;42623:186:0;;-1:-1:-1;42623:186:0;;-1:-1:-1;42623:186:0;-1:-1:-1;42623:186:0;-1:-1:-1;42623:186:0;-1:-1:-1;42834:28:0;;42854:7;42834:19;:28::i;:::-;-1:-1:-1;;;;;42816:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42887:7;:15;;;;:28;;42907:7;42887:19;:28::i;40724:547::-;40849:15;40873:23;40905:12;40926:23;40958:12;40979:18;41007:19;41018:7;41007:10;:19::i;:::-;-1:-1:-1;;;;;41051:15:0;;;;;;:7;:15;;;;;;40840:186;;-1:-1:-1;40840:186:0;;-1:-1:-1;40840:186:0;;-1:-1:-1;40840:186:0;-1:-1:-1;40840:186:0;-1:-1:-1;40840:186:0;-1:-1:-1;41051:28:0;;40840:186;41051:19;:28::i;45797:212::-;45914:9;;45881:7;;;;45914:9;;:48;;45946:16;;45914:48;;;45926:17;;45914:48;45900:62;-1:-1:-1;45976:27:0;45997:5;45976:16;:7;45900:62;45976:11;:16::i;46015:245::-;46134:9;;46101:7;;;;46134:9;;:79;;46204:8;;46189:10;;:24;;:14;:24::i;:::-;46134:79;;;46169:9;;46153:11;;:26;;:15;:26::i;45454:337::-;45513:19;45535:10;:8;:10::i;:::-;45513:32;-1:-1:-1;45552:18:0;45573:27;:10;45513:32;45573:14;:27::i;:::-;45648:4;45632:22;;;;:7;:22;;;;;;45552:48;;-1:-1:-1;45632:38:0;;45552:48;45632:26;:38::i;:::-;45623:4;45607:22;;;;:7;:22;;;;;;;;:63;;;;45681:17;:32;;;;;;45677:108;;;45763:4;45747:22;;;;:7;:22;;;;;;:38;;45774:10;45747:26;:38::i;:::-;45738:4;45722:22;;;;:7;:22;;;;;:63;45454:337;;;:::o;43180:137::-;43254:7;;:17;;43266:4;43254:11;:17::i;:::-;43244:7;:27;43291:10;;:20;;43306:4;43291:14;:20::i;:::-;43278:10;:33;-1:-1:-1;;43180:137:0:o;14:768:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;315:3;339:2;334:3;327:15;367:2;362:3;358:12;351:19;;402:2;394:6;390:15;454:3;449:2;443;440:1;436:10;428:6;424:23;420:32;417:41;414:2;;;475:5;468;461:20;414:2;501:5;515:238;529:2;526:1;523:9;515:238;;;600:3;587:17;617:31;642:5;617:31;:::i;:::-;661:18;;699:12;;;;731;;;;547:1;540:9;515:238;;;-1:-1:-1;771:5:1;;78:704;-1:-1:-1;;;;;;;78:704:1:o;787:160::-;852:20;;908:13;;901:21;891:32;;881:2;;937:1;934;927:12;881:2;833:114;;;:::o;952:257::-;1011:6;1064:2;1052:9;1043:7;1039:23;1035:32;1032:2;;;1085:6;1077;1070:22;1032:2;1129:9;1116:23;1148:31;1173:5;1148:31;:::i;1214:261::-;1284:6;1337:2;1325:9;1316:7;1312:23;1308:32;1305:2;;;1358:6;1350;1343:22;1305:2;1395:9;1389:16;1414:31;1439:5;1414:31;:::i;1480:333::-;1556:6;1564;1617:2;1605:9;1596:7;1592:23;1588:32;1585:2;;;1638:6;1630;1623:22;1585:2;1682:9;1669:23;1701:31;1726:5;1701:31;:::i;:::-;1751:5;1803:2;1788:18;;;;1775:32;;-1:-1:-1;;;1575:238:1:o;1818:398::-;1886:6;1894;1947:2;1935:9;1926:7;1922:23;1918:32;1915:2;;;1968:6;1960;1953:22;1915:2;2012:9;1999:23;2031:31;2056:5;2031:31;:::i;:::-;2081:5;-1:-1:-1;2138:2:1;2123:18;;2110:32;2151:33;2110:32;2151:33;:::i;:::-;2203:7;2193:17;;;1905:311;;;;;:::o;2221:466::-;2298:6;2306;2314;2367:2;2355:9;2346:7;2342:23;2338:32;2335:2;;;2388:6;2380;2373:22;2335:2;2432:9;2419:23;2451:31;2476:5;2451:31;:::i;:::-;2501:5;-1:-1:-1;2558:2:1;2543:18;;2530:32;2571:33;2530:32;2571:33;:::i;:::-;2325:362;;2623:7;;-1:-1:-1;;;2677:2:1;2662:18;;;;2649:32;;2325:362::o;2692:325::-;2760:6;2768;2821:2;2809:9;2800:7;2796:23;2792:32;2789:2;;;2842:6;2834;2827:22;3022:368;3106:6;3159:2;3147:9;3138:7;3134:23;3130:32;3127:2;;;3180:6;3172;3165:22;3127:2;3225:9;3212:23;3258:18;3250:6;3247:30;3244:2;;;3295:6;3287;3280:22;3244:2;3323:61;3376:7;3367:6;3356:9;3352:22;3323:61;:::i;:::-;3313:71;3117:273;-1:-1:-1;;;;3117:273:1:o;3395:1204::-;3513:6;3521;3574:2;3562:9;3553:7;3549:23;3545:32;3542:2;;;3595:6;3587;3580:22;3542:2;3640:9;3627:23;3669:18;3710:2;3702:6;3699:14;3696:2;;;3731:6;3723;3716:22;3696:2;3759:61;3812:7;3803:6;3792:9;3788:22;3759:61;:::i;:::-;3749:71;;3839:2;3829:12;;3894:2;3883:9;3879:18;3866:32;3923:2;3913:8;3910:16;3907:2;;;3944:6;3936;3929:22;3907:2;3972:24;;;-1:-1:-1;4027:4:1;4019:13;;4015:27;-1:-1:-1;4005:2:1;;4061:6;4053;4046:22;4005:2;4102;4089:16;4125:60;4141:43;4181:2;4141:43;:::i;4125:60::-;4207:3;4231:2;4226:3;4219:15;4259:2;4254:3;4250:12;4243:19;;4290:2;4286;4282:11;4338:7;4333:2;4327;4324:1;4320:10;4316:2;4312:19;4308:28;4305:41;4302:2;;;4364:6;4356;4349:22;4302:2;4391:6;4382:15;;4406:163;4420:2;4417:1;4414:9;4406:163;;;4477:17;;4465:30;;4438:1;4431:9;;;;;4515:12;;;;4547;;4406:163;;;4410:3;4588:5;4578:15;;;;;;;3532:1067;;;;;:::o;4604:190::-;4660:6;4713:2;4701:9;4692:7;4688:23;4684:32;4681:2;;;4734:6;4726;4719:22;4681:2;4762:26;4778:9;4762:26;:::i;4799:190::-;4858:6;4911:2;4899:9;4890:7;4886:23;4882:32;4879:2;;;4932:6;4924;4917:22;4879:2;-1:-1:-1;4960:23:1;;4869:120;-1:-1:-1;4869:120:1:o;4994:258::-;5059:6;5067;5120:2;5108:9;5099:7;5095:23;5091:32;5088:2;;;5141:6;5133;5126:22;5088:2;5182:9;5169:23;5159:33;;5211:35;5242:2;5231:9;5227:18;5211:35;:::i;:::-;5201:45;;5078:174;;;;;:::o;5257:316::-;5345:6;5353;5361;5414:2;5402:9;5393:7;5389:23;5385:32;5382:2;;;5435:6;5427;5420:22;5382:2;5469:9;5463:16;5453:26;;5519:2;5508:9;5504:18;5498:25;5488:35;;5563:2;5552:9;5548:18;5542:25;5532:35;;5372:201;;;;;:::o;5578:701::-;5689:6;5697;5705;5713;5721;5729;5737;5790:3;5778:9;5769:7;5765:23;5761:33;5758:2;;;5812:6;5804;5797:22;5758:2;5853:9;5840:23;5830:33;;5910:2;5899:9;5895:18;5882:32;5872:42;;5961:2;5950:9;5946:18;5933:32;5923:42;;6012:2;6001:9;5997:18;5984:32;5974:42;;6066:3;6055:9;6051:19;6038:33;6111:4;6104:5;6100:16;6093:5;6090:27;6080:2;;6136:6;6128;6121:22;6080:2;5748:531;;;;-1:-1:-1;5748:531:1;;;;6164:5;6216:3;6201:19;;6188:33;;-1:-1:-1;6268:3:1;6253:19;;;6240:33;;5748:531;-1:-1:-1;;5748:531:1:o;6284:463::-;6337:3;6375:5;6369:12;6402:6;6397:3;6390:19;6428:4;6457:2;6452:3;6448:12;6441:19;;6494:2;6487:5;6483:14;6515:3;6527:195;6541:6;6538:1;6535:13;6527:195;;;6606:13;;-1:-1:-1;;;;;6602:39:1;6590:52;;6662:12;;;;6697:15;;;;6638:1;6556:9;6527:195;;;-1:-1:-1;6738:3:1;;6345:402;-1:-1:-1;;;;;6345:402:1:o;8231:603::-;8343:4;8372:2;8401;8390:9;8383:21;8433:6;8427:13;8476:6;8471:2;8460:9;8456:18;8449:34;8501:4;8514:140;8528:6;8525:1;8522:13;8514:140;;;8623:14;;;8619:23;;8613:30;8589:17;;;8608:2;8585:26;8578:66;8543:10;;8514:140;;;8672:6;8669:1;8666:13;8663:2;;;8742:4;8737:2;8728:6;8717:9;8713:22;8709:31;8702:45;8663:2;-1:-1:-1;8818:2:1;8797:15;-1:-1:-1;;8793:29:1;8778:45;;;;8825:2;8774:54;;8352:482;-1:-1:-1;;;8352:482:1:o;12288:356::-;12490:2;12472:21;;;12509:18;;;12502:30;12568:34;12563:2;12548:18;;12541:62;12635:2;12620:18;;12462:182::o;12995:356::-;13197:2;13179:21;;;13216:18;;;13209:30;13275:34;13270:2;13255:18;;13248:62;13342:2;13327:18;;13169:182::o;15277:343::-;15479:2;15461:21;;;15518:2;15498:18;;;15491:30;-1:-1:-1;;;15552:2:1;15537:18;;15530:49;15611:2;15596:18;;15451:169::o;16573:332::-;16780:6;16769:9;16762:25;16823:2;16818;16807:9;16803:18;16796:30;16743:4;16843:56;16895:2;16884:9;16880:18;16872:6;16843:56;:::i;16910:582::-;17209:6;17198:9;17191:25;17252:6;17247:2;17236:9;17232:18;17225:34;17295:3;17290:2;17279:9;17275:18;17268:31;17172:4;17316:57;17368:3;17357:9;17353:19;17345:6;17316:57;:::i;:::-;-1:-1:-1;;;;;17409:32:1;;;;17404:2;17389:18;;17382:60;-1:-1:-1;17473:3:1;17458:19;17451:35;17308:65;17181:311;-1:-1:-1;;;17181:311:1:o;17686:275::-;17757:2;17751:9;17822:2;17803:13;;-1:-1:-1;;17799:27:1;17787:40;;17857:18;17842:34;;17878:22;;;17839:62;17836:2;;;17904:18;;:::i;:::-;17940:2;17933:22;17731:230;;-1:-1:-1;17731:230:1:o;17966:183::-;18026:4;18059:18;18051:6;18048:30;18045:2;;;18081:18;;:::i;:::-;-1:-1:-1;18126:1:1;18122:14;18138:4;18118:25;;18035:114::o;18154:128::-;18194:3;18225:1;18221:6;18218:1;18215:13;18212:2;;;18231:18;;:::i;:::-;-1:-1:-1;18267:9:1;;18202:80::o;18287:217::-;18327:1;18353;18343:2;;-1:-1:-1;;;18378:31:1;;18432:4;18429:1;18422:15;18460:4;18385:1;18450:15;18343:2;-1:-1:-1;18489:9:1;;18333:171::o;18509:422::-;18598:1;18641:5;18598:1;18655:270;18676:7;18666:8;18663:21;18655:270;;;18735:4;18731:1;18727:6;18723:17;18717:4;18714:27;18711:2;;;18744:18;;:::i;:::-;18794:7;18784:8;18780:22;18777:2;;;18814:16;;;;18777:2;18893:22;;;;18853:15;;;;18655:270;;;18659:3;18573:358;;;;;:::o;18936:140::-;18994:5;19023:47;19064:4;19054:8;19050:19;19044:4;19130:5;19160:8;19150:2;;-1:-1:-1;19201:1:1;19215:5;;19150:2;19249:4;19239:2;;-1:-1:-1;19286:1:1;19300:5;;19239:2;19331:4;19349:1;19344:59;;;;19417:1;19412:130;;;;19324:218;;19344:59;19374:1;19365:10;;19388:5;;;19412:130;19449:3;19439:8;19436:17;19433:2;;;19456:18;;:::i;:::-;-1:-1:-1;;19512:1:1;19498:16;;19527:5;;19324:218;;19626:2;19616:8;19613:16;19607:3;19601:4;19598:13;19594:36;19588:2;19578:8;19575:16;19570:2;19564:4;19561:12;19557:35;19554:77;19551:2;;;-1:-1:-1;19663:19:1;;;19695:5;;19551:2;19742:34;19767:8;19761:4;19742:34;:::i;:::-;19812:6;19808:1;19804:6;19800:19;19791:7;19788:32;19785:2;;;19823:18;;:::i;:::-;19861:20;;19140:747;-1:-1:-1;;;19140:747:1:o;19892:168::-;19932:7;19998:1;19994;19990:6;19986:14;19983:1;19980:21;19975:1;19968:9;19961:17;19957:45;19954:2;;;20005:18;;:::i;:::-;-1:-1:-1;20045:9:1;;19944:116::o;20065:125::-;20105:4;20133:1;20130;20127:8;20124:2;;;20138:18;;:::i;:::-;-1:-1:-1;20175:9:1;;20114:76::o;20195:135::-;20234:3;-1:-1:-1;;20255:17:1;;20252:2;;;20275:18;;:::i;:::-;-1:-1:-1;20322:1:1;20311:13;;20242:88::o;20335:127::-;20396:10;20391:3;20387:20;20384:1;20377:31;20427:4;20424:1;20417:15;20451:4;20448:1;20441:15;20467:127;20528:10;20523:3;20519:20;20516:1;20509:31;20559:4;20556:1;20549:15;20583:4;20580:1;20573:15;20599:131;-1:-1:-1;;;;;20674:31:1;;20664:42;;20654:2;;20720:1;20717;20710:12

Swarm Source

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