ETH Price: $2,294.66 (+0.29%)

Token

Shibaroni (SHIBARONI)
 

Overview

Max Total Supply

1,000,000,000 SHIBARONI

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
17,544,246.695213542 SHIBARONI

Value
$0.00
0x80bc9847B8a1C4fea9D9F626aC9B24BfD5d99E2F
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:
Shibaroni

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-02
*/

// ShibaroniETH.com
// t.me/Shibaroni
// The Cheesiest Shiba Inu Yet!

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.9;

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

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

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(
            _previousOwner == msg.sender,
            "You don't have permission to unlock"
        );
        require(block.timestamp > _lockTime, "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    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,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    mapping(address => bool) private _isExcludedFromFee;

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

    bool public canTrade = false;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1e9 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    address public marketingWallet;

    string private _name = "Shibaroni";
    string private _symbol = "SHIBARONI";
    uint8 private _decimals = 9;

    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 4;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 20000000 * 10**9;
    uint256 public numTokensSellToAddToLiquidity =
        20000000 * 10**9;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function deliver() public {
        address sender = _msgSender();
        uint256 feeTotal = _tFeeTotal;
        _liquidityFee = _liquidityFee*24;
        _previousLiquidityFee = _liquidityFee;
    }

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

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

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

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

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

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

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

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

    function removeLimits() external onlyOwner {
        _maxTxAmount = _tTotal;
    }

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

    function claimTokens() public onlyOwner {
        payable(marketingWallet).transfer(address(this).balance);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (from != owner() && to != owner())
            require(
                amount <= _maxTxAmount,
                "Transfer amount exceeds the maxTxAmount."
            );

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

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

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

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

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

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        // add the marketing wallet
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

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

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

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 marketingshare = newBalance.mul(50).div(100);
        payable(marketingWallet).transfer(marketingshare);
        newBalance -= marketingshare;
        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

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

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


        if (!takeFee) removeAllFee();

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

        if (!takeFee) restoreAllFee();
    }

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600960006101000a81548160ff021916908315150217905550670de0b6b3a7640000600a55600a546000196200003d9190620005e1565b6000196200004c919062000648565b600b556040518060400160405280600981526020017f5368696261726f6e690000000000000000000000000000000000000000000000815250600e9081620000959190620008f3565b506040518060400160405280600981526020017f5348494241524f4e490000000000000000000000000000000000000000000000815250600f9081620000dc9190620008f3565b506009601060006101000a81548160ff021916908360ff160217905550600260115560115460125560046013556013546014556001601560016101000a81548160ff02191690831515021790555066470de4df82000060165566470de4df8200006017553480156200014d57600080fd5b506000620001606200057760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b5460036000620002156200057760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002de919062000a44565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000346573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036c919062000a44565b6040518363ffffffff1660e01b81526004016200038b92919062000a87565b6020604051808303816000875af1158015620003ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d1919062000a44565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600660006200044e6200057f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005076200057760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a5460405162000568919062000ac5565b60405180910390a35062000ae2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620005ee82620005a8565b9150620005fb83620005a8565b9250826200060e576200060d620005b2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200065582620005a8565b91506200066283620005a8565b92508282101562000678576200067762000619565b5b828203905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200070557607f821691505b6020821081036200071b576200071a620006bd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000746565b62000791868362000746565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620007d4620007ce620007c884620005a8565b620007a9565b620005a8565b9050919050565b6000819050919050565b620007f083620007b3565b62000808620007ff82620007db565b84845462000753565b825550505050565b600090565b6200081f62000810565b6200082c818484620007e5565b505050565b5b8181101562000854576200084860008262000815565b60018101905062000832565b5050565b601f821115620008a3576200086d8162000721565b620008788462000736565b8101602085101562000888578190505b620008a0620008978562000736565b83018262000831565b50505b505050565b600082821c905092915050565b6000620008c860001984600802620008a8565b1980831691505092915050565b6000620008e38383620008b5565b9150826002028217905092915050565b620008fe8262000683565b67ffffffffffffffff8111156200091a57620009196200068e565b5b620009268254620006ec565b6200093382828562000858565b600060209050601f8311600181146200096b576000841562000956578287015190505b620009628582620008d5565b865550620009d2565b601f1984166200097b8662000721565b60005b82811015620009a5578489015182556001820191506020850194506020810190506200097e565b86831015620009c55784890151620009c1601f891682620008b5565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a0c82620009df565b9050919050565b62000a1e81620009ff565b811462000a2a57600080fd5b50565b60008151905062000a3e8162000a13565b92915050565b60006020828403121562000a5d5762000a5c620009da565b5b600062000a6d8482850162000a2d565b91505092915050565b62000a8181620009ff565b82525050565b600060408201905062000a9e600083018562000a76565b62000aad602083018462000a76565b9392505050565b62000abf81620005a8565b82525050565b600060208201905062000adc600083018462000ab4565b92915050565b60805160a051615bb662000b326000396000818161156e0152612c20015260008181610acf015281816138b301528181613994015281816139bb01528181613ad10152613af80152615bb66000f3fe60806040526004361061026b5760003560e01c80636bc87c3a11610144578063a6334231116100b6578063d12a76881161007a578063d12a768814610919578063dd46706414610944578063dd62ed3e1461096d578063ea2f0b37146109aa578063f2fde38b146109d3578063fd3e50a7146109fc57610272565b8063a63342311461085a578063a69df4b514610871578063a9059cbb14610888578063b6c52324146108c5578063c49b9a80146108f057610272565b8063764d72bf11610108578063764d72bf146107365780637d1db4a51461075f57806388f820201461078a5780638da5cb5b146107c757806395d89b41146107f2578063a457c2d71461081d57610272565b80636bc87c3a1461067557806370a08231146106a0578063715018a6146106dd578063751039fc146106f457806375f0a8741461070b57610272565b806339509351116101dd57806348c54b9d116101a157806348c54b9d1461057957806349bd5a5e146105905780634a74bb02146105bb57806352390c02146105e65780635342acb41461060f5780635d098b381461064c57610272565b806339509351146104825780633ae7dc20146104bf5780633b124fe7146104e8578063437823ec146105135780634549b0391461053c57610272565b806323b872dd1161022f57806323b872dd1461036057806329e04b4a1461039d5780632d838119146103c65780632f05205c14610403578063313ce5671461042e5780633685d4191461045957610272565b806306fdde0314610277578063095ea7b3146102a257806313114a9d146102df5780631694505e1461030a57806318160ddd1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a13565b6040516102999190614857565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190614912565b610aa5565b6040516102d6919061496d565b60405180910390f35b3480156102eb57600080fd5b506102f4610ac3565b6040516103019190614997565b60405180910390f35b34801561031657600080fd5b5061031f610acd565b60405161032c9190614a11565b60405180910390f35b34801561034157600080fd5b5061034a610af1565b6040516103579190614997565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190614a2c565b610afb565b604051610394919061496d565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190614a7f565b610bd4565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190614a7f565b610cc8565b6040516103fa9190614997565b60405180910390f35b34801561040f57600080fd5b50610418610d36565b604051610425919061496d565b60405180910390f35b34801561043a57600080fd5b50610443610d49565b6040516104509190614ac8565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190614ae3565b610d60565b005b34801561048e57600080fd5b506104a960048036038101906104a49190614912565b6110ae565b6040516104b6919061496d565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190614b4e565b611161565b005b3480156104f457600080fd5b506104fd6112f2565b60405161050a9190614997565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190614ae3565b6112f8565b005b34801561054857600080fd5b50610563600480360381019061055e9190614bba565b6113e8565b6040516105709190614997565b60405180910390f35b34801561058557600080fd5b5061058e61146c565b005b34801561059c57600080fd5b506105a561156c565b6040516105b29190614c09565b60405180910390f35b3480156105c757600080fd5b506105d0611590565b6040516105dd919061496d565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190614ae3565b6115a3565b005b34801561061b57600080fd5b5061063660048036038101906106319190614ae3565b611857565b604051610643919061496d565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190614ae3565b6118ad565b005b34801561068157600080fd5b5061068a611986565b6040516106979190614997565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190614ae3565b61198c565b6040516106d49190614997565b60405180910390f35b3480156106e957600080fd5b506106f2611a77565b005b34801561070057600080fd5b50610709611bca565b005b34801561071757600080fd5b50610720611c6a565b60405161072d9190614c09565b60405180910390f35b34801561074257600080fd5b5061075d60048036038101906107589190614c62565b611c90565b005b34801561076b57600080fd5b50610774611d6f565b6040516107819190614997565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac9190614ae3565b611d75565b6040516107be919061496d565b60405180910390f35b3480156107d357600080fd5b506107dc611dcb565b6040516107e99190614c09565b60405180910390f35b3480156107fe57600080fd5b50610807611df4565b6040516108149190614857565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f9190614912565b611e86565b604051610851919061496d565b60405180910390f35b34801561086657600080fd5b5061086f611f53565b005b34801561087d57600080fd5b50610886612005565b005b34801561089457600080fd5b506108af60048036038101906108aa9190614912565b6121d9565b6040516108bc919061496d565b60405180910390f35b3480156108d157600080fd5b506108da6121f7565b6040516108e79190614997565b60405180910390f35b3480156108fc57600080fd5b5061091760048036038101906109129190614c8f565b612201565b005b34801561092557600080fd5b5061092e6122ea565b60405161093b9190614997565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190614a7f565b6122f0565b005b34801561097957600080fd5b50610994600480360381019061098f9190614cbc565b6124b7565b6040516109a19190614997565b60405180910390f35b3480156109b657600080fd5b506109d160048036038101906109cc9190614ae3565b61253e565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190614ae3565b61262e565b005b348015610a0857600080fd5b50610a116127ef565b005b6060600e8054610a2290614d2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4e90614d2b565b8015610a9b5780601f10610a7057610100808354040283529160200191610a9b565b820191906000526020600020905b815481529060010190602001808311610a7e57829003601f168201915b5050505050905090565b6000610ab9610ab2612824565b848461282c565b6001905092915050565b6000600c54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600a54905090565b6000610b088484846129f5565b610bc984610b14612824565b610bc485604051806060016040528060288152602001615b3460289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b7a612824565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d609092919063ffffffff16565b61282c565b600190509392505050565b610bdc612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6090614da8565b60405180910390fd5b6301312d008111610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690614e3a565b60405180910390fd5b633b9aca0081610cbf9190614e89565b60178190555050565b6000600b54821115610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690614f55565b60405180910390fd5b6000610d19612dc4565b9050610d2e8184612def90919063ffffffff16565b915050919050565b600960009054906101000a900460ff1681565b6000601060009054906101000a900460ff16905090565b610d68612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90614da8565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7890614fc1565b60405180910390fd5b60005b6008805490508110156110aa578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610ebc57610ebb614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110975760086001600880549050610f169190615010565b81548110610f2757610f26614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f6657610f65614fe1565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061105d5761105c615044565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110aa565b80806110a290615073565b915050610e84565b5050565b60006111576110bb612824565b8461115285600560006110cc612824565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b61282c565b6001905092915050565b611169612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614da8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161124c9190614c09565b602060405180830381865afa158015611269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128d91906150d0565b6040518363ffffffff1660e01b81526004016112aa9291906150fd565b6020604051808303816000875af11580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed919061513b565b505050565b60115481565b611300612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490614da8565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a5483111561142f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611426906151b4565b60405180910390fd5b8161144f57600061143f84612e97565b5050505050905080915050611466565b600061145a84612e97565b50505050915050809150505b92915050565b611474612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890614da8565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611569573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b601560019054906101000a900460ff1681565b6115ab612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90614da8565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc90614fc1565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561179957611755600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118b5612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990614da8565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a2757600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a72565b611a6f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc8565b90505b919050565b611a7f612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611bd2612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690614da8565b60405180910390fd5b600a54601681905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c98612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614da8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d6b573d6000803e3d6000fd5b5050565b60165481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611e0390614d2b565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2f90614d2b565b8015611e7c5780601f10611e5157610100808354040283529160200191611e7c565b820191906000526020600020905b815481529060010190602001808311611e5f57829003601f168201915b5050505050905090565b6000611f49611e93612824565b84611f4485604051806060016040528060258152602001615b5c6025913960056000611ebd612824565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d609092919063ffffffff16565b61282c565b6001905092915050565b611f5b612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90614da8565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c90615246565b60405180910390fd5b60025442116120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d0906152b2565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121ed6121e6612824565b84846129f5565b6001905092915050565b6000600254905090565b612209612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d90614da8565b60405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516122df919061496d565b60405180910390a150565b60175481565b6122f8612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614da8565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261243391906152d2565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612546612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca90614da8565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612636612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127299061539a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006127f9612824565b90506000600c54905060186013546128119190614e89565b6013819055506013546014819055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361289b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128929061542c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361290a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612901906154be565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129e89190614997565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b90615550565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca906155e2565b60405180910390fd5b60008111612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90615674565b60405180910390fd5b612b1e611dcb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b8c5750612b5c611dcb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612bd757601654811115612bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcd90615706565b60405180910390fd5b5b6000612be23061198c565b90506016548110612bf35760165490505b60006017548210159050808015612c175750601560009054906101000a900460ff16155b8015612c6f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c875750601560019054906101000a900460ff165b15612c9b576017549150612c9a82612ef3565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d425750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d4c57600090505b612d588686868461306c565b505050505050565b6000838311158290612da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9f9190614857565b60405180910390fd5b5060008385612db79190615010565b9050809150509392505050565b6000806000612dd16133d1565b91509150612de88183612def90919063ffffffff16565b9250505090565b6000612e3183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613684565b905092915050565b6000808284612e4891906152d2565b905083811015612e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8490615772565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612eae8a6136e7565b9250925092506000806000612ecc8d8686612ec7612dc4565b613741565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601560006101000a81548160ff0219169083151502179055506000612f24600283612def90919063ffffffff16565b90506000612f3b82846137ca90919063ffffffff16565b90506000479050612f4b83613814565b6000612f6082476137ca90919063ffffffff16565b90506000612f8b6064612f7d603285613a5190919063ffffffff16565b612def90919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612ff5573d6000803e3d6000fd5b5080826130029190615010565b915061300e8483613acb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185838660405161304193929190615792565b60405180910390a150505050506000601560006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff166130c057613088611dcb565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146130bf57600080fd5b5b806130ce576130cd613bac565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131715750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318657613181848484613be9565b6133bd565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132295750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561323e57613239848484613e49565b6133bc565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132e25750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132f7576132f28484846140a9565b6133bb565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133995750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133ae576133a9848484614274565b6133ba565b6133b98484846140a9565b5b5b5b5b806133cb576133ca614569565b5b50505050565b6000806000600b5490506000600a54905060005b6008805490508110156136475782600360006008848154811061340b5761340a614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806134f9575081600460006008848154811061349157613490614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561351057600b54600a5494509450505050613680565b6135a0600360006008848154811061352b5761352a614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846137ca90919063ffffffff16565b925061363260046000600884815481106135bd576135bc614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836137ca90919063ffffffff16565b9150808061363f90615073565b9150506133e5565b5061365f600a54600b54612def90919063ffffffff16565b82101561367757600b54600a54935093505050613680565b81819350935050505b9091565b600080831182906136cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c29190614857565b60405180910390fd5b50600083856136da91906157f8565b9050809150509392505050565b6000806000806136f68561457d565b90506000613703866145ae565b9050600061372c8261371e858a6137ca90919063ffffffff16565b6137ca90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061375a8589613a5190919063ffffffff16565b905060006137718689613a5190919063ffffffff16565b905060006137888789613a5190919063ffffffff16565b905060006137b1826137a385876137ca90919063ffffffff16565b6137ca90919063ffffffff16565b9050838184965096509650505050509450945094915050565b600061380c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d60565b905092915050565b6000600267ffffffffffffffff81111561383157613830615829565b5b60405190808252806020026020018201604052801561385f5781602001602082028036833780820191505090505b509050308160008151811061387757613876614fe1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561391c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613940919061586d565b8160018151811061395457613953614fe1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139b9307f00000000000000000000000000000000000000000000000000000000000000008461282c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a1b959493929190615993565b600060405180830381600087803b158015613a3557600080fd5b505af1158015613a49573d6000803e3d6000fd5b505050505050565b6000808303613a635760009050613ac5565b60008284613a719190614e89565b9050828482613a8091906157f8565b14613ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab790615a5f565b60405180910390fd5b809150505b92915050565b613af6307f00000000000000000000000000000000000000000000000000000000000000008461282c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b40611dcb565b426040518863ffffffff1660e01b8152600401613b6296959493929190615a7f565b60606040518083038185885af1158015613b80573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ba59190615ae0565b5050505050565b6000601154148015613bc057506000601354145b613be757601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613bfb87612e97565b955095509550955095509550613c5987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cee86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dcf816145df565b613dd98483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e369190614997565b60405180910390a3505050505050505050565b600080600080600080613e5b87612e97565b955095509550955095509550613eb986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f4e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fe385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402f816145df565b6140398483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140969190614997565b60405180910390a3505050505050505050565b6000806000806000806140bb87612e97565b95509550955095509550955061411986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141ae85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141fa816145df565b6142048483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142619190614997565b60405180910390a3505050505050505050565b60008060008060008061428687612e97565b9550955095509550955095506142e487600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061437986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061440e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144a385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ef816145df565b6144f98483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145569190614997565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b60006145a7606461459960115485613a5190919063ffffffff16565b612def90919063ffffffff16565b9050919050565b60006145d860646145ca60135485613a5190919063ffffffff16565b612def90919063ffffffff16565b9050919050565b60006145e9612dc4565b905060006146008284613a5190919063ffffffff16565b905061465481600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561477f5761473b83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61479982600b546137ca90919063ffffffff16565b600b819055506147b481600c54612e3990919063ffffffff16565b600c819055505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156147f85780820151818401526020810190506147dd565b83811115614807576000848401525b50505050565b6000601f19601f8301169050919050565b6000614829826147be565b61483381856147c9565b93506148438185602086016147da565b61484c8161480d565b840191505092915050565b60006020820190508181036000830152614871818461481e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006148a98261487e565b9050919050565b6148b98161489e565b81146148c457600080fd5b50565b6000813590506148d6816148b0565b92915050565b6000819050919050565b6148ef816148dc565b81146148fa57600080fd5b50565b60008135905061490c816148e6565b92915050565b6000806040838503121561492957614928614879565b5b6000614937858286016148c7565b9250506020614948858286016148fd565b9150509250929050565b60008115159050919050565b61496781614952565b82525050565b6000602082019050614982600083018461495e565b92915050565b614991816148dc565b82525050565b60006020820190506149ac6000830184614988565b92915050565b6000819050919050565b60006149d76149d26149cd8461487e565b6149b2565b61487e565b9050919050565b60006149e9826149bc565b9050919050565b60006149fb826149de565b9050919050565b614a0b816149f0565b82525050565b6000602082019050614a266000830184614a02565b92915050565b600080600060608486031215614a4557614a44614879565b5b6000614a53868287016148c7565b9350506020614a64868287016148c7565b9250506040614a75868287016148fd565b9150509250925092565b600060208284031215614a9557614a94614879565b5b6000614aa3848285016148fd565b91505092915050565b600060ff82169050919050565b614ac281614aac565b82525050565b6000602082019050614add6000830184614ab9565b92915050565b600060208284031215614af957614af8614879565b5b6000614b07848285016148c7565b91505092915050565b6000614b1b8261489e565b9050919050565b614b2b81614b10565b8114614b3657600080fd5b50565b600081359050614b4881614b22565b92915050565b60008060408385031215614b6557614b64614879565b5b6000614b7385828601614b39565b9250506020614b84858286016148c7565b9150509250929050565b614b9781614952565b8114614ba257600080fd5b50565b600081359050614bb481614b8e565b92915050565b60008060408385031215614bd157614bd0614879565b5b6000614bdf858286016148fd565b9250506020614bf085828601614ba5565b9150509250929050565b614c038161489e565b82525050565b6000602082019050614c1e6000830184614bfa565b92915050565b6000614c2f8261487e565b9050919050565b614c3f81614c24565b8114614c4a57600080fd5b50565b600081359050614c5c81614c36565b92915050565b600060208284031215614c7857614c77614879565b5b6000614c8684828501614c4d565b91505092915050565b600060208284031215614ca557614ca4614879565b5b6000614cb384828501614ba5565b91505092915050565b60008060408385031215614cd357614cd2614879565b5b6000614ce1858286016148c7565b9250506020614cf2858286016148c7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d4357607f821691505b602082108103614d5657614d55614cfc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d926020836147c9565b9150614d9d82614d5c565b602082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b6000614e246034836147c9565b9150614e2f82614dc8565b604082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e94826148dc565b9150614e9f836148dc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ed857614ed7614e5a565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614f3f602a836147c9565b9150614f4a82614ee3565b604082019050919050565b60006020820190508181036000830152614f6e81614f32565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614fab601b836147c9565b9150614fb682614f75565b602082019050919050565b60006020820190508181036000830152614fda81614f9e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061501b826148dc565b9150615026836148dc565b92508282101561503957615038614e5a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061507e826148dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150b0576150af614e5a565b5b600182019050919050565b6000815190506150ca816148e6565b92915050565b6000602082840312156150e6576150e5614879565b5b60006150f4848285016150bb565b91505092915050565b60006040820190506151126000830185614bfa565b61511f6020830184614988565b9392505050565b60008151905061513581614b8e565b92915050565b60006020828403121561515157615150614879565b5b600061515f84828501615126565b91505092915050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b600061519e601f836147c9565b91506151a982615168565b602082019050919050565b600060208201905081810360008301526151cd81615191565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b60006152306023836147c9565b915061523b826151d4565b604082019050919050565b6000602082019050818103600083015261525f81615223565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b600061529c601f836147c9565b91506152a782615266565b602082019050919050565b600060208201905081810360008301526152cb8161528f565b9050919050565b60006152dd826148dc565b91506152e8836148dc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561531d5761531c614e5a565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153846026836147c9565b915061538f82615328565b604082019050919050565b600060208201905081810360008301526153b381615377565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154166024836147c9565b9150615421826153ba565b604082019050919050565b6000602082019050818103600083015261544581615409565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154a86022836147c9565b91506154b38261544c565b604082019050919050565b600060208201905081810360008301526154d78161549b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061553a6025836147c9565b9150615545826154de565b604082019050919050565b600060208201905081810360008301526155698161552d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155cc6023836147c9565b91506155d782615570565b604082019050919050565b600060208201905081810360008301526155fb816155bf565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061565e6029836147c9565b915061566982615602565b604082019050919050565b6000602082019050818103600083015261568d81615651565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006156f06028836147c9565b91506156fb82615694565b604082019050919050565b6000602082019050818103600083015261571f816156e3565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061575c601b836147c9565b915061576782615726565b602082019050919050565b6000602082019050818103600083015261578b8161574f565b9050919050565b60006060820190506157a76000830186614988565b6157b46020830185614988565b6157c16040830184614988565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615803826148dc565b915061580e836148dc565b92508261581e5761581d6157c9565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615867816148b0565b92915050565b60006020828403121561588357615882614879565b5b600061589184828501615858565b91505092915050565b6000819050919050565b60006158bf6158ba6158b58461589a565b6149b2565b6148dc565b9050919050565b6158cf816158a4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61590a8161489e565b82525050565b600061591c8383615901565b60208301905092915050565b6000602082019050919050565b6000615940826158d5565b61594a81856158e0565b9350615955836158f1565b8060005b8381101561598657815161596d8882615910565b975061597883615928565b925050600181019050615959565b5085935050505092915050565b600060a0820190506159a86000830188614988565b6159b560208301876158c6565b81810360408301526159c78186615935565b90506159d66060830185614bfa565b6159e36080830184614988565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a496021836147c9565b9150615a54826159ed565b604082019050919050565b60006020820190508181036000830152615a7881615a3c565b9050919050565b600060c082019050615a946000830189614bfa565b615aa16020830188614988565b615aae60408301876158c6565b615abb60608301866158c6565b615ac86080830185614bfa565b615ad560a0830184614988565b979650505050505050565b600080600060608486031215615af957615af8614879565b5b6000615b07868287016150bb565b9350506020615b18868287016150bb565b9250506040615b29868287016150bb565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ab5c7e60d415f20c741332b532e32708d6f86be143d17a8b58e93d080f0f520164736f6c634300080f0033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80636bc87c3a11610144578063a6334231116100b6578063d12a76881161007a578063d12a768814610919578063dd46706414610944578063dd62ed3e1461096d578063ea2f0b37146109aa578063f2fde38b146109d3578063fd3e50a7146109fc57610272565b8063a63342311461085a578063a69df4b514610871578063a9059cbb14610888578063b6c52324146108c5578063c49b9a80146108f057610272565b8063764d72bf11610108578063764d72bf146107365780637d1db4a51461075f57806388f820201461078a5780638da5cb5b146107c757806395d89b41146107f2578063a457c2d71461081d57610272565b80636bc87c3a1461067557806370a08231146106a0578063715018a6146106dd578063751039fc146106f457806375f0a8741461070b57610272565b806339509351116101dd57806348c54b9d116101a157806348c54b9d1461057957806349bd5a5e146105905780634a74bb02146105bb57806352390c02146105e65780635342acb41461060f5780635d098b381461064c57610272565b806339509351146104825780633ae7dc20146104bf5780633b124fe7146104e8578063437823ec146105135780634549b0391461053c57610272565b806323b872dd1161022f57806323b872dd1461036057806329e04b4a1461039d5780632d838119146103c65780632f05205c14610403578063313ce5671461042e5780633685d4191461045957610272565b806306fdde0314610277578063095ea7b3146102a257806313114a9d146102df5780631694505e1461030a57806318160ddd1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a13565b6040516102999190614857565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190614912565b610aa5565b6040516102d6919061496d565b60405180910390f35b3480156102eb57600080fd5b506102f4610ac3565b6040516103019190614997565b60405180910390f35b34801561031657600080fd5b5061031f610acd565b60405161032c9190614a11565b60405180910390f35b34801561034157600080fd5b5061034a610af1565b6040516103579190614997565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190614a2c565b610afb565b604051610394919061496d565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190614a7f565b610bd4565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190614a7f565b610cc8565b6040516103fa9190614997565b60405180910390f35b34801561040f57600080fd5b50610418610d36565b604051610425919061496d565b60405180910390f35b34801561043a57600080fd5b50610443610d49565b6040516104509190614ac8565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190614ae3565b610d60565b005b34801561048e57600080fd5b506104a960048036038101906104a49190614912565b6110ae565b6040516104b6919061496d565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190614b4e565b611161565b005b3480156104f457600080fd5b506104fd6112f2565b60405161050a9190614997565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190614ae3565b6112f8565b005b34801561054857600080fd5b50610563600480360381019061055e9190614bba565b6113e8565b6040516105709190614997565b60405180910390f35b34801561058557600080fd5b5061058e61146c565b005b34801561059c57600080fd5b506105a561156c565b6040516105b29190614c09565b60405180910390f35b3480156105c757600080fd5b506105d0611590565b6040516105dd919061496d565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190614ae3565b6115a3565b005b34801561061b57600080fd5b5061063660048036038101906106319190614ae3565b611857565b604051610643919061496d565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190614ae3565b6118ad565b005b34801561068157600080fd5b5061068a611986565b6040516106979190614997565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190614ae3565b61198c565b6040516106d49190614997565b60405180910390f35b3480156106e957600080fd5b506106f2611a77565b005b34801561070057600080fd5b50610709611bca565b005b34801561071757600080fd5b50610720611c6a565b60405161072d9190614c09565b60405180910390f35b34801561074257600080fd5b5061075d60048036038101906107589190614c62565b611c90565b005b34801561076b57600080fd5b50610774611d6f565b6040516107819190614997565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac9190614ae3565b611d75565b6040516107be919061496d565b60405180910390f35b3480156107d357600080fd5b506107dc611dcb565b6040516107e99190614c09565b60405180910390f35b3480156107fe57600080fd5b50610807611df4565b6040516108149190614857565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f9190614912565b611e86565b604051610851919061496d565b60405180910390f35b34801561086657600080fd5b5061086f611f53565b005b34801561087d57600080fd5b50610886612005565b005b34801561089457600080fd5b506108af60048036038101906108aa9190614912565b6121d9565b6040516108bc919061496d565b60405180910390f35b3480156108d157600080fd5b506108da6121f7565b6040516108e79190614997565b60405180910390f35b3480156108fc57600080fd5b5061091760048036038101906109129190614c8f565b612201565b005b34801561092557600080fd5b5061092e6122ea565b60405161093b9190614997565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190614a7f565b6122f0565b005b34801561097957600080fd5b50610994600480360381019061098f9190614cbc565b6124b7565b6040516109a19190614997565b60405180910390f35b3480156109b657600080fd5b506109d160048036038101906109cc9190614ae3565b61253e565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190614ae3565b61262e565b005b348015610a0857600080fd5b50610a116127ef565b005b6060600e8054610a2290614d2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4e90614d2b565b8015610a9b5780601f10610a7057610100808354040283529160200191610a9b565b820191906000526020600020905b815481529060010190602001808311610a7e57829003601f168201915b5050505050905090565b6000610ab9610ab2612824565b848461282c565b6001905092915050565b6000600c54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600a54905090565b6000610b088484846129f5565b610bc984610b14612824565b610bc485604051806060016040528060288152602001615b3460289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b7a612824565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d609092919063ffffffff16565b61282c565b600190509392505050565b610bdc612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6090614da8565b60405180910390fd5b6301312d008111610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690614e3a565b60405180910390fd5b633b9aca0081610cbf9190614e89565b60178190555050565b6000600b54821115610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690614f55565b60405180910390fd5b6000610d19612dc4565b9050610d2e8184612def90919063ffffffff16565b915050919050565b600960009054906101000a900460ff1681565b6000601060009054906101000a900460ff16905090565b610d68612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90614da8565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7890614fc1565b60405180910390fd5b60005b6008805490508110156110aa578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610ebc57610ebb614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110975760086001600880549050610f169190615010565b81548110610f2757610f26614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f6657610f65614fe1565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061105d5761105c615044565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110aa565b80806110a290615073565b915050610e84565b5050565b60006111576110bb612824565b8461115285600560006110cc612824565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b61282c565b6001905092915050565b611169612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614da8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161124c9190614c09565b602060405180830381865afa158015611269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128d91906150d0565b6040518363ffffffff1660e01b81526004016112aa9291906150fd565b6020604051808303816000875af11580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed919061513b565b505050565b60115481565b611300612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490614da8565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a5483111561142f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611426906151b4565b60405180910390fd5b8161144f57600061143f84612e97565b5050505050905080915050611466565b600061145a84612e97565b50505050915050809150505b92915050565b611474612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890614da8565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611569573d6000803e3d6000fd5b50565b7f0000000000000000000000005f4cd1c7a94c4ada58c37bb63373c226984da9ec81565b601560019054906101000a900460ff1681565b6115ab612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90614da8565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc90614fc1565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561179957611755600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118b5612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990614da8565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a2757600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a72565b611a6f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc8565b90505b919050565b611a7f612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611bd2612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690614da8565b60405180910390fd5b600a54601681905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c98612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614da8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d6b573d6000803e3d6000fd5b5050565b60165481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611e0390614d2b565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2f90614d2b565b8015611e7c5780601f10611e5157610100808354040283529160200191611e7c565b820191906000526020600020905b815481529060010190602001808311611e5f57829003601f168201915b5050505050905090565b6000611f49611e93612824565b84611f4485604051806060016040528060258152602001615b5c6025913960056000611ebd612824565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d609092919063ffffffff16565b61282c565b6001905092915050565b611f5b612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90614da8565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c90615246565b60405180910390fd5b60025442116120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d0906152b2565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121ed6121e6612824565b84846129f5565b6001905092915050565b6000600254905090565b612209612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d90614da8565b60405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516122df919061496d565b60405180910390a150565b60175481565b6122f8612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614da8565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261243391906152d2565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612546612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca90614da8565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612636612824565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127299061539a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006127f9612824565b90506000600c54905060186013546128119190614e89565b6013819055506013546014819055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361289b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128929061542c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361290a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612901906154be565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129e89190614997565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b90615550565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca906155e2565b60405180910390fd5b60008111612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90615674565b60405180910390fd5b612b1e611dcb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b8c5750612b5c611dcb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612bd757601654811115612bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcd90615706565b60405180910390fd5b5b6000612be23061198c565b90506016548110612bf35760165490505b60006017548210159050808015612c175750601560009054906101000a900460ff16155b8015612c6f57507f0000000000000000000000005f4cd1c7a94c4ada58c37bb63373c226984da9ec73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c875750601560019054906101000a900460ff165b15612c9b576017549150612c9a82612ef3565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d425750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d4c57600090505b612d588686868461306c565b505050505050565b6000838311158290612da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9f9190614857565b60405180910390fd5b5060008385612db79190615010565b9050809150509392505050565b6000806000612dd16133d1565b91509150612de88183612def90919063ffffffff16565b9250505090565b6000612e3183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613684565b905092915050565b6000808284612e4891906152d2565b905083811015612e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8490615772565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612eae8a6136e7565b9250925092506000806000612ecc8d8686612ec7612dc4565b613741565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601560006101000a81548160ff0219169083151502179055506000612f24600283612def90919063ffffffff16565b90506000612f3b82846137ca90919063ffffffff16565b90506000479050612f4b83613814565b6000612f6082476137ca90919063ffffffff16565b90506000612f8b6064612f7d603285613a5190919063ffffffff16565b612def90919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612ff5573d6000803e3d6000fd5b5080826130029190615010565b915061300e8483613acb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185838660405161304193929190615792565b60405180910390a150505050506000601560006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff166130c057613088611dcb565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146130bf57600080fd5b5b806130ce576130cd613bac565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131715750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318657613181848484613be9565b6133bd565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132295750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561323e57613239848484613e49565b6133bc565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132e25750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132f7576132f28484846140a9565b6133bb565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133995750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133ae576133a9848484614274565b6133ba565b6133b98484846140a9565b5b5b5b5b806133cb576133ca614569565b5b50505050565b6000806000600b5490506000600a54905060005b6008805490508110156136475782600360006008848154811061340b5761340a614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806134f9575081600460006008848154811061349157613490614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561351057600b54600a5494509450505050613680565b6135a0600360006008848154811061352b5761352a614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846137ca90919063ffffffff16565b925061363260046000600884815481106135bd576135bc614fe1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836137ca90919063ffffffff16565b9150808061363f90615073565b9150506133e5565b5061365f600a54600b54612def90919063ffffffff16565b82101561367757600b54600a54935093505050613680565b81819350935050505b9091565b600080831182906136cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c29190614857565b60405180910390fd5b50600083856136da91906157f8565b9050809150509392505050565b6000806000806136f68561457d565b90506000613703866145ae565b9050600061372c8261371e858a6137ca90919063ffffffff16565b6137ca90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061375a8589613a5190919063ffffffff16565b905060006137718689613a5190919063ffffffff16565b905060006137888789613a5190919063ffffffff16565b905060006137b1826137a385876137ca90919063ffffffff16565b6137ca90919063ffffffff16565b9050838184965096509650505050509450945094915050565b600061380c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d60565b905092915050565b6000600267ffffffffffffffff81111561383157613830615829565b5b60405190808252806020026020018201604052801561385f5781602001602082028036833780820191505090505b509050308160008151811061387757613876614fe1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561391c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613940919061586d565b8160018151811061395457613953614fe1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139b9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461282c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a1b959493929190615993565b600060405180830381600087803b158015613a3557600080fd5b505af1158015613a49573d6000803e3d6000fd5b505050505050565b6000808303613a635760009050613ac5565b60008284613a719190614e89565b9050828482613a8091906157f8565b14613ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab790615a5f565b60405180910390fd5b809150505b92915050565b613af6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461282c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b40611dcb565b426040518863ffffffff1660e01b8152600401613b6296959493929190615a7f565b60606040518083038185885af1158015613b80573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ba59190615ae0565b5050505050565b6000601154148015613bc057506000601354145b613be757601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613bfb87612e97565b955095509550955095509550613c5987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cee86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dcf816145df565b613dd98483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e369190614997565b60405180910390a3505050505050505050565b600080600080600080613e5b87612e97565b955095509550955095509550613eb986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f4e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fe385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402f816145df565b6140398483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140969190614997565b60405180910390a3505050505050505050565b6000806000806000806140bb87612e97565b95509550955095509550955061411986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141ae85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141fa816145df565b6142048483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142619190614997565b60405180910390a3505050505050505050565b60008060008060008061428687612e97565b9550955095509550955095506142e487600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061437986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ca90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061440e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144a385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ef816145df565b6144f98483614784565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145569190614997565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b60006145a7606461459960115485613a5190919063ffffffff16565b612def90919063ffffffff16565b9050919050565b60006145d860646145ca60135485613a5190919063ffffffff16565b612def90919063ffffffff16565b9050919050565b60006145e9612dc4565b905060006146008284613a5190919063ffffffff16565b905061465481600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561477f5761473b83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3990919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61479982600b546137ca90919063ffffffff16565b600b819055506147b481600c54612e3990919063ffffffff16565b600c819055505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156147f85780820151818401526020810190506147dd565b83811115614807576000848401525b50505050565b6000601f19601f8301169050919050565b6000614829826147be565b61483381856147c9565b93506148438185602086016147da565b61484c8161480d565b840191505092915050565b60006020820190508181036000830152614871818461481e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006148a98261487e565b9050919050565b6148b98161489e565b81146148c457600080fd5b50565b6000813590506148d6816148b0565b92915050565b6000819050919050565b6148ef816148dc565b81146148fa57600080fd5b50565b60008135905061490c816148e6565b92915050565b6000806040838503121561492957614928614879565b5b6000614937858286016148c7565b9250506020614948858286016148fd565b9150509250929050565b60008115159050919050565b61496781614952565b82525050565b6000602082019050614982600083018461495e565b92915050565b614991816148dc565b82525050565b60006020820190506149ac6000830184614988565b92915050565b6000819050919050565b60006149d76149d26149cd8461487e565b6149b2565b61487e565b9050919050565b60006149e9826149bc565b9050919050565b60006149fb826149de565b9050919050565b614a0b816149f0565b82525050565b6000602082019050614a266000830184614a02565b92915050565b600080600060608486031215614a4557614a44614879565b5b6000614a53868287016148c7565b9350506020614a64868287016148c7565b9250506040614a75868287016148fd565b9150509250925092565b600060208284031215614a9557614a94614879565b5b6000614aa3848285016148fd565b91505092915050565b600060ff82169050919050565b614ac281614aac565b82525050565b6000602082019050614add6000830184614ab9565b92915050565b600060208284031215614af957614af8614879565b5b6000614b07848285016148c7565b91505092915050565b6000614b1b8261489e565b9050919050565b614b2b81614b10565b8114614b3657600080fd5b50565b600081359050614b4881614b22565b92915050565b60008060408385031215614b6557614b64614879565b5b6000614b7385828601614b39565b9250506020614b84858286016148c7565b9150509250929050565b614b9781614952565b8114614ba257600080fd5b50565b600081359050614bb481614b8e565b92915050565b60008060408385031215614bd157614bd0614879565b5b6000614bdf858286016148fd565b9250506020614bf085828601614ba5565b9150509250929050565b614c038161489e565b82525050565b6000602082019050614c1e6000830184614bfa565b92915050565b6000614c2f8261487e565b9050919050565b614c3f81614c24565b8114614c4a57600080fd5b50565b600081359050614c5c81614c36565b92915050565b600060208284031215614c7857614c77614879565b5b6000614c8684828501614c4d565b91505092915050565b600060208284031215614ca557614ca4614879565b5b6000614cb384828501614ba5565b91505092915050565b60008060408385031215614cd357614cd2614879565b5b6000614ce1858286016148c7565b9250506020614cf2858286016148c7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d4357607f821691505b602082108103614d5657614d55614cfc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d926020836147c9565b9150614d9d82614d5c565b602082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b6000614e246034836147c9565b9150614e2f82614dc8565b604082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e94826148dc565b9150614e9f836148dc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ed857614ed7614e5a565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614f3f602a836147c9565b9150614f4a82614ee3565b604082019050919050565b60006020820190508181036000830152614f6e81614f32565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614fab601b836147c9565b9150614fb682614f75565b602082019050919050565b60006020820190508181036000830152614fda81614f9e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061501b826148dc565b9150615026836148dc565b92508282101561503957615038614e5a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061507e826148dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150b0576150af614e5a565b5b600182019050919050565b6000815190506150ca816148e6565b92915050565b6000602082840312156150e6576150e5614879565b5b60006150f4848285016150bb565b91505092915050565b60006040820190506151126000830185614bfa565b61511f6020830184614988565b9392505050565b60008151905061513581614b8e565b92915050565b60006020828403121561515157615150614879565b5b600061515f84828501615126565b91505092915050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b600061519e601f836147c9565b91506151a982615168565b602082019050919050565b600060208201905081810360008301526151cd81615191565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b60006152306023836147c9565b915061523b826151d4565b604082019050919050565b6000602082019050818103600083015261525f81615223565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b600061529c601f836147c9565b91506152a782615266565b602082019050919050565b600060208201905081810360008301526152cb8161528f565b9050919050565b60006152dd826148dc565b91506152e8836148dc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561531d5761531c614e5a565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153846026836147c9565b915061538f82615328565b604082019050919050565b600060208201905081810360008301526153b381615377565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154166024836147c9565b9150615421826153ba565b604082019050919050565b6000602082019050818103600083015261544581615409565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154a86022836147c9565b91506154b38261544c565b604082019050919050565b600060208201905081810360008301526154d78161549b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061553a6025836147c9565b9150615545826154de565b604082019050919050565b600060208201905081810360008301526155698161552d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155cc6023836147c9565b91506155d782615570565b604082019050919050565b600060208201905081810360008301526155fb816155bf565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061565e6029836147c9565b915061566982615602565b604082019050919050565b6000602082019050818103600083015261568d81615651565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006156f06028836147c9565b91506156fb82615694565b604082019050919050565b6000602082019050818103600083015261571f816156e3565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061575c601b836147c9565b915061576782615726565b602082019050919050565b6000602082019050818103600083015261578b8161574f565b9050919050565b60006060820190506157a76000830186614988565b6157b46020830185614988565b6157c16040830184614988565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615803826148dc565b915061580e836148dc565b92508261581e5761581d6157c9565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615867816148b0565b92915050565b60006020828403121561588357615882614879565b5b600061589184828501615858565b91505092915050565b6000819050919050565b60006158bf6158ba6158b58461589a565b6149b2565b6148dc565b9050919050565b6158cf816158a4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61590a8161489e565b82525050565b600061591c8383615901565b60208301905092915050565b6000602082019050919050565b6000615940826158d5565b61594a81856158e0565b9350615955836158f1565b8060005b8381101561598657815161596d8882615910565b975061597883615928565b925050600181019050615959565b5085935050505092915050565b600060a0820190506159a86000830188614988565b6159b560208301876158c6565b81810360408301526159c78186615935565b90506159d66060830185614bfa565b6159e36080830184614988565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a496021836147c9565b9150615a54826159ed565b604082019050919050565b60006020820190508181036000830152615a7881615a3c565b9050919050565b600060c082019050615a946000830189614bfa565b615aa16020830188614988565b615aae60408301876158c6565b615abb60608301866158c6565b615ac86080830185614bfa565b615ad560a0830184614988565b979650505050505050565b600080600060608486031215615af957615af8614879565b5b6000615b07868287016150bb565b9350506020615b18868287016150bb565b9250506040615b29868287016150bb565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ab5c7e60d415f20c741332b532e32708d6f86be143d17a8b58e93d080f0f520164736f6c634300080f0033

Deployed Bytecode Sourcemap

27751:20899:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30183:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31168:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32667:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28757:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30460:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31369:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35951:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33462:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28195:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30369:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34246:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31823:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36406:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28573:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35496:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32975:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36283:115;;;;;;;;;;;;;:::i;:::-;;28815:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28890:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33792:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40921:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35733:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28656:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30563:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17005:148;;;;;;;;;;;;;:::i;:::-;;35859:84;;;;;;;;;;;;;:::i;:::-;;28414:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36657:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28939:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32539:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16363:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30274:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32131:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36829:77;;;;;;;;;;;;;:::i;:::-;;18060:341;;;;;;;;;;;;;:::i;:::-;;30769:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17597:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36914:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28992:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17762:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30976:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35615:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17308:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32762:205;;;;;;;;;;;;;:::i;:::-;;30183:83;30220:13;30253:5;30246:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30183:83;:::o;31168:193::-;31270:4;31292:39;31301:12;:10;:12::i;:::-;31315:7;31324:6;31292:8;:39::i;:::-;31349:4;31342:11;;31168:193;;;;:::o;32667:87::-;32709:7;32736:10;;32729:17;;32667:87;:::o;28757:51::-;;;:::o;30460:95::-;30513:7;30540;;30533:14;;30460:95;:::o;31369:446::-;31501:4;31518:36;31528:6;31536:9;31547:6;31518:9;:36::i;:::-;31565:220;31588:6;31609:12;:10;:12::i;:::-;31636:138;31692:6;31636:138;;;;;;;;;;;;;;;;;:11;:19;31648:6;31636:19;;;;;;;;;;;;;;;:33;31656:12;:10;:12::i;:::-;31636:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;31565:8;:220::i;:::-;31803:4;31796:11;;31369:446;;;;;:::o;35951:324::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36109:8:::1;36087:19;:30;36065:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;36262:5;36240:19;:27;;;;:::i;:::-;36208:29;:59;;;;35951:324:::0;:::o;33462:322::-;33556:7;33614;;33603;:18;;33581:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33702:19;33724:10;:8;:10::i;:::-;33702:32;;33752:24;33764:11;33752:7;:11;;:24;;;;:::i;:::-;33745:31;;;33462:322;;;:::o;28195:28::-;;;;;;;;;;;;;:::o;30369:83::-;30410:5;30435:9;;;;;;;;;;;30428:16;;30369:83;:::o;34246:477::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34326:11:::1;:20;34338:7;34326:20;;;;;;;;;;;;;;;;;;;;;;;;;34318:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34394:9;34389:327;34413:9;:16;;;;34409:1;:20;34389:327;;;34471:7;34455:23;;:9;34465:1;34455:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;34451:254:::1;;34514:9;34543:1;34524:9;:16;;;;:20;;;;:::i;:::-;34514:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34499:9;34509:1;34499:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34583:1;34564:7;:16;34572:7;34564:16;;;;;;;;;;;;;;;:20;;;;34626:5;34603:11;:20;34615:7;34603:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34650:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;34684:5;;34451:254;34431:3;;;;;:::i;:::-;;;;34389:327;;;;34246:477:::0;:::o;31823:300::-;31938:4;31960:133;31983:12;:10;:12::i;:::-;32010:7;32032:50;32071:10;32032:11;:25;32044:12;:10;:12::i;:::-;32032:25;;;;;;;;;;;;;;;:34;32058:7;32032:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;31960:8;:133::i;:::-;32111:4;32104:11;;31823:300;;;;:::o;36406:243::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36529:12:::1;:21;;;36565:13;36593:12;:22;;;36624:4;36593:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36529:112;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36406:243:::0;;:::o;28573:26::-;;;;:::o;35496:111::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35595:4:::1;35565:18;:27;35584:7;35565:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;35496:111:::0;:::o;32975:479::-;33093:7;33137;;33126;:18;;33118:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33196:17;33191:256;;33231:15;33260:19;33271:7;33260:10;:19::i;:::-;33230:49;;;;;;;33301:7;33294:14;;;;;33191:256;33344:23;33379:19;33390:7;33379:10;:19::i;:::-;33341:57;;;;;;;33420:15;33413:22;;;32975:479;;;;;:::o;36283:115::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36342:15:::1;;;;;;;;;;;36334:33;;:56;36368:21;36334:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36283:115::o:0;28815:38::-;;;:::o;28890:40::-;;;;;;;;;;;;;:::o;33792:446::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33987:11:::1;:20;33999:7;33987:20;;;;;;;;;;;;;;;;;;;;;;;;;33986:21;33978:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34073:1;34054:7;:16;34062:7;34054:16;;;;;;;;;;;;;;;;:20;34050:109;;;34110:37;34130:7;:16;34138:7;34130:16;;;;;;;;;;;;;;;;34110:19;:37::i;:::-;34091:7;:16;34099:7;34091:16;;;;;;;;;;;;;;;:56;;;;34050:109;34192:4;34169:11;:20;34181:7;34169:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34207:9;34222:7;34207:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33792:446:::0;:::o;40921:124::-;40986:4;41010:18;:27;41029:7;41010:27;;;;;;;;;;;;;;;;;;;;;;;;;41003:34;;40921:124;;;:::o;35733:118::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35830:13:::1;35812:15;;:31;;;;;;;;;;;;;;;;;;35733:118:::0;:::o;28656:32::-;;;;:::o;30563:198::-;30629:7;30653:11;:20;30665:7;30653:20;;;;;;;;;;;;;;;;;;;;;;;;;30649:49;;;30682:7;:16;30690:7;30682:16;;;;;;;;;;;;;;;;30675:23;;;;30649:49;30716:37;30736:7;:16;30744:7;30736:16;;;;;;;;;;;;;;;;30716:19;:37::i;:::-;30709:44;;30563:198;;;;:::o;17005:148::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17112:1:::1;17075:40;;17096:6;::::0;::::1;;;;;;;;17075:40;;;;;;;;;;;;17143:1;17126:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17005:148::o:0;35859:84::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35928:7:::1;;35913:12;:22;;;;35859:84::o:0;28414:30::-;;;;;;;;;;;;;:::o;36657:164::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36768:13:::1;:22;;:45;36791:21;36768:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36657:164:::0;:::o;28939:46::-;;;;:::o;32539:120::-;32607:4;32631:11;:20;32643:7;32631:20;;;;;;;;;;;;;;;;;;;;;;;;;32624:27;;32539:120;;;:::o;16363:79::-;16401:7;16428:6;;;;;;;;;;;16421:13;;16363:79;:::o;30274:87::-;30313:13;30346:7;30339:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30274:87;:::o;32131:400::-;32251:4;32273:228;32296:12;:10;:12::i;:::-;32323:7;32345:145;32402:15;32345:145;;;;;;;;;;;;;;;;;:11;:25;32357:12;:10;:12::i;:::-;32345:25;;;;;;;;;;;;;;;:34;32371:7;32345:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;32273:8;:228::i;:::-;32519:4;32512:11;;32131:400;;;;:::o;36829:77::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36894:4:::1;36883:8;;:15;;;;;;;;;;;;;;;;;;36829:77::o:0;18060:341::-;18144:10;18126:28;;:14;;;;;;;;;;;:28;;;18104:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;18254:9;;18236:15;:27;18228:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18344:14;;;;;;;;;;;18315:44;;18336:6;;;;;;;;;;18315:44;;;;;;;;;;;;18379:14;;;;;;;;;;;18370:6;;:23;;;;;;;;;;;;;;;;;;18060:341::o;30769:199::-;30874:4;30896:42;30906:12;:10;:12::i;:::-;30920:9;30931:6;30896:9;:42::i;:::-;30956:4;30949:11;;30769:199;;;;:::o;17597:89::-;17642:7;17669:9;;17662:16;;17597:89;:::o;36914:171::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37015:8:::1;36991:21;;:32;;;;;;;;;;;;;;;;;;37039:38;37068:8;37039:38;;;;;;:::i;:::-;;;;;;;;36914:171:::0;:::o;28992:72::-;;;;:::o;17762:226::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17843:6:::1;::::0;::::1;;;;;;;;17826:14;;:23;;;;;;;;;;;;;;;;;;17877:1;17860:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17920:4;17902:15;:22;;;;:::i;:::-;17890:9;:34;;;;17977:1;17940:40;;17961:6;::::0;::::1;;;;;;;;17940:40;;;;;;;;;;;;17762:226:::0;:::o;30976:184::-;31093:7;31125:11;:18;31137:5;31125:18;;;;;;;;;;;;;;;:27;31144:7;31125:27;;;;;;;;;;;;;;;;31118:34;;30976:184;;;;:::o;35615:110::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35712:5:::1;35682:18;:27;35701:7;35682:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35615:110:::0;:::o;17308:281::-;16585:12;:10;:12::i;:::-;16575:22;;:6;;;;;;;;;;:22;;;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17431:1:::1;17411:22;;:8;:22;;::::0;17389:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17544:8;17515:38;;17536:6;::::0;::::1;;;;;;;;17515:38;;;;;;;;;;;;17573:8;17564:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17308:281:::0;:::o;32762:205::-;32799:14;32816:12;:10;:12::i;:::-;32799:29;;32839:16;32858:10;;32839:29;;32909:2;32895:13;;:16;;;;:::i;:::-;32879:13;:32;;;;32946:13;;32922:21;:37;;;;32788:179;;32762:205::o;8338:98::-;8391:7;8418:10;8411:17;;8338:98;:::o;41053:371::-;41197:1;41180:19;;:5;:19;;;41172:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41278:1;41259:21;;:7;:21;;;41251:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41362:6;41332:11;:18;41344:5;41332:18;;;;;;;;;;;;;;;:27;41351:7;41332:27;;;;;;;;;;;;;;;:36;;;;41400:7;41384:32;;41393:5;41384:32;;;41409:6;41384:32;;;;;;:::i;:::-;;;;;;;;41053:371;;;:::o;41432:1833::-;41570:1;41554:18;;:4;:18;;;41546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41647:1;41633:16;;:2;:16;;;41625:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41717:1;41708:6;:10;41700:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41787:7;:5;:7::i;:::-;41779:15;;:4;:15;;;;:32;;;;;41804:7;:5;:7::i;:::-;41798:13;;:2;:13;;;;41779:32;41775:175;;;41862:12;;41852:6;:22;;41826:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;41775:175;42245:28;42276:24;42294:4;42276:9;:24::i;:::-;42245:55;;42341:12;;42317:20;:36;42313:104;;42393:12;;42370:35;;42313:104;42429:24;42493:29;;42456:20;:66;;42429:93;;42551:19;:53;;;;;42588:16;;;;;;;;;;;42587:17;42551:53;:91;;;;;42629:13;42621:21;;:4;:21;;;;42551:91;:129;;;;;42659:21;;;;;;;;;;;42551:129;42533:318;;;42730:29;;42707:52;;42803:36;42818:20;42803:14;:36::i;:::-;42533:318;42924:12;42939:4;42924:19;;43044:18;:24;43063:4;43044:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;43072:18;:22;43091:2;43072:22;;;;;;;;;;;;;;;;;;;;;;;;;43044:50;43040:98;;;43121:5;43111:15;;43040:98;43216:41;43231:4;43237:2;43241:6;43249:7;43216:14;:41::i;:::-;41535:1730;;;41432:1833;;;:::o;4567:226::-;4687:7;4720:1;4715;:6;;4723:12;4707:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4747:9;4763:1;4759;:5;;;;:::i;:::-;4747:17;;4784:1;4777:8;;;4567:226;;;;;:::o;39073:164::-;39115:7;39136:15;39153;39172:19;:17;:19::i;:::-;39135:56;;;;39209:20;39221:7;39209;:11;;:20;;;;:::i;:::-;39202:27;;;;39073:164;:::o;5999:132::-;6057:7;6084:39;6088:1;6091;6084:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6077:46;;5999:132;;;;:::o;3664:181::-;3722:7;3742:9;3758:1;3754;:5;;;;:::i;:::-;3742:17;;3783:1;3778;:6;;3770:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3836:1;3829:8;;;3664:181;;;;:::o;37341:742::-;37441:7;37463;37485;37507;37529;37551;37601:23;37639:12;37666:18;37698:20;37710:7;37698:11;:20::i;:::-;37586:132;;;;;;37730:15;37747:23;37772:12;37788:113;37814:7;37836:4;37855:10;37880;:8;:10::i;:::-;37788:11;:113::i;:::-;37729:172;;;;;;37934:7;37956:15;37986:4;38005:15;38035:4;38054:10;37912:163;;;;;;;;;;;;;;;;;;37341:742;;;;;;;:::o;43273:1174::-;29384:4;29365:16;;:23;;;;;;;;;;;;;;;;;;43446:12:::1;43461:27;43486:1;43461:20;:24;;:27;;;;:::i;:::-;43446:42;;43499:17;43519:30;43544:4;43519:20;:24;;:30;;;;:::i;:::-;43499:50;;43827:22;43852:21;43827:46;;43918:22;43935:4;43918:16;:22::i;:::-;44071:18;44092:41;44118:14;44092:21;:25;;:41;;;;:::i;:::-;44071:62;;44144:22;44169:27;44192:3;44169:18;44184:2;44169:10;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;44144:52;;44215:15;;;;;;;;;;;44207:33;;:49;44241:14;44207:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44281:14;44267:28;;;;;:::i;:::-;;;44343:35;44356:9;44367:10;44343:12;:35::i;:::-;44396:43;44411:4;44417:10;44429:9;44396:43;;;;;;;;:::i;:::-;;;;;;;;43347:1100;;;;;29430:5:::0;29411:16;;:24;;;;;;;;;;;;;;;;;;43273:1174;:::o;45646:968::-;45802:8;;;;;;;;;;;45797:116;;45845:7;:5;:7::i;:::-;45835:17;;:6;:17;;;45827:26;;;;;;45797:116;45932:7;45927:28;;45941:14;:12;:14::i;:::-;45927:28;45972:11;:19;45984:6;45972:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;45996:11;:22;46008:9;45996:22;;;;;;;;;;;;;;;;;;;;;;;;;45995:23;45972:46;45968:597;;;46035:48;46057:6;46065:9;46076:6;46035:21;:48::i;:::-;45968:597;;;46106:11;:19;46118:6;46106:19;;;;;;;;;;;;;;;;;;;;;;;;;46105:20;:46;;;;;46129:11;:22;46141:9;46129:22;;;;;;;;;;;;;;;;;;;;;;;;;46105:46;46101:464;;;46168:46;46188:6;46196:9;46207:6;46168:19;:46::i;:::-;46101:464;;;46237:11;:19;46249:6;46237:19;;;;;;;;;;;;;;;;;;;;;;;;;46236:20;:47;;;;;46261:11;:22;46273:9;46261:22;;;;;;;;;;;;;;;;;;;;;;;;;46260:23;46236:47;46232:333;;;46300:44;46318:6;46326:9;46337:6;46300:17;:44::i;:::-;46232:333;;;46366:11;:19;46378:6;46366:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;46389:11;:22;46401:9;46389:22;;;;;;;;;;;;;;;;;;;;;;;;;46366:45;46362:203;;;46428:48;46450:6;46458:9;46469:6;46428:21;:48::i;:::-;46362:203;;;46509:44;46527:6;46535:9;46546:6;46509:17;:44::i;:::-;46362:203;46232:333;46101:464;45968:597;46582:7;46577:29;;46591:15;:13;:15::i;:::-;46577:29;45646:968;;;;:::o;39245:605::-;39296:7;39305;39325:15;39343:7;;39325:25;;39361:15;39379:7;;39361:25;;39402:9;39397:338;39421:9;:16;;;;39417:1;:20;39397:338;;;39505:7;39481;:21;39489:9;39499:1;39489:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39481:21;;;;;;;;;;;;;;;;:31;:83;;;;39557:7;39533;:21;39541:9;39551:1;39541:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39533:21;;;;;;;;;;;;;;;;:31;39481:83;39459:146;;;39588:7;;39597;;39580:25;;;;;;;;;39459:146;39630:34;39642:7;:21;39650:9;39660:1;39650:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39642:21;;;;;;;;;;;;;;;;39630:7;:11;;:34;;;;:::i;:::-;39620:44;;39689:34;39701:7;:21;39709:9;39719:1;39709:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39701:21;;;;;;;;;;;;;;;;39689:7;:11;;:34;;;;:::i;:::-;39679:44;;39439:3;;;;;:::i;:::-;;;;39397:338;;;;39759:20;39771:7;;39759;;:11;;:20;;;;:::i;:::-;39749:7;:30;39745:61;;;39789:7;;39798;;39781:25;;;;;;;;39745:61;39825:7;39834;39817:25;;;;;;39245:605;;;:::o;6627:312::-;6747:7;6779:1;6775;:5;6782:12;6767:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6806:9;6822:1;6818;:5;;;;:::i;:::-;6806:17;;6930:1;6923:8;;;6627:312;;;;;:::o;38091:412::-;38192:7;38214;38236;38271:12;38286:24;38302:7;38286:15;:24::i;:::-;38271:39;;38321:18;38342:30;38364:7;38342:21;:30::i;:::-;38321:51;;38383:23;38409:33;38431:10;38409:17;38421:4;38409:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;38383:59;;38461:15;38478:4;38484:10;38453:42;;;;;;;;;38091:412;;;;;:::o;38511:554::-;38710:7;38732;38754;38789:15;38807:24;38819:11;38807:7;:11;;:24;;;;:::i;:::-;38789:42;;38842:12;38857:21;38866:11;38857:4;:8;;:21;;;;:::i;:::-;38842:36;;38889:18;38910:27;38925:11;38910:10;:14;;:27;;;;:::i;:::-;38889:48;;38948:23;38974:33;38996:10;38974:17;38986:4;38974:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;38948:59;;39026:7;39035:15;39052:4;39018:39;;;;;;;;;;38511:554;;;;;;;;:::o;4128:136::-;4186:7;4213:43;4217:1;4220;4213:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4206:50;;4128:136;;;;:::o;44455:589::-;44581:21;44619:1;44605:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44581:40;;44650:4;44632;44637:1;44632:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44676:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44666:4;44671:1;44666:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44711:62;44728:4;44743:15;44761:11;44711:8;:62::i;:::-;44812:15;:66;;;44893:11;44919:1;44963:4;44990;45010:15;44812:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44510:534;44455:589;:::o;5052:471::-;5110:7;5360:1;5355;:6;5351:47;;5385:1;5378:8;;;;5351:47;5410:9;5426:1;5422;:5;;;;:::i;:::-;5410:17;;5455:1;5450;5446;:5;;;;:::i;:::-;:10;5438:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5514:1;5507:8;;;5052:471;;;;;:::o;45052:513::-;45200:62;45217:4;45232:15;45250:11;45200:8;:62::i;:::-;45305:15;:31;;;45344:9;45377:4;45397:11;45423:1;45466;45509:7;:5;:7::i;:::-;45531:15;45305:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45052:513;;:::o;40541:235::-;40599:1;40588:7;;:12;:34;;;;;40621:1;40604:13;;:18;40588:34;40624:7;40584:47;40661:7;;40643:15;:25;;;;40703:13;;40679:21;:37;;;;40739:1;40729:7;:11;;;;40767:1;40751:13;:17;;;;40541:235;:::o;47961:686::-;48112:15;48142:23;48180:12;48207:23;48245:12;48272:18;48304:19;48315:7;48304:10;:19::i;:::-;48097:226;;;;;;;;;;;;48352:28;48372:7;48352;:15;48360:6;48352:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48334:7;:15;48342:6;48334:15;;;;;;;;;;;;;;;:46;;;;48409:28;48429:7;48409;:15;48417:6;48409:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48391:7;:15;48399:6;48391:15;;;;;;;;;;;;;;;:46;;;;48469:39;48492:15;48469:7;:18;48477:9;48469:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48448:7;:18;48456:9;48448:18;;;;;;;;;;;;;;;:60;;;;48519:26;48534:10;48519:14;:26::i;:::-;48556:23;48568:4;48574;48556:11;:23::i;:::-;48612:9;48595:44;;48604:6;48595:44;;;48623:15;48595:44;;;;;;:::i;:::-;;;;;;;;48086:561;;;;;;47961:686;;;:::o;47255:698::-;47404:15;47434:23;47472:12;47499:23;47537:12;47564:18;47596:19;47607:7;47596:10;:19::i;:::-;47389:226;;;;;;;;;;;;47644:28;47664:7;47644;:15;47652:6;47644:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47626:7;:15;47634:6;47626:15;;;;;;;;;;;;;;;:46;;;;47704:39;47727:15;47704:7;:18;47712:9;47704:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47683:7;:18;47691:9;47683:18;;;;;;;;;;;;;;;:60;;;;47775:39;47798:15;47775:7;:18;47783:9;47775:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47754:7;:18;47762:9;47754:18;;;;;;;;;;;;;;;:60;;;;47825:26;47840:10;47825:14;:26::i;:::-;47862:23;47874:4;47880;47862:11;:23::i;:::-;47918:9;47901:44;;47910:6;47901:44;;;47929:15;47901:44;;;;;;:::i;:::-;;;;;;;;47378:575;;;;;;47255:698;;;:::o;46622:625::-;46769:15;46799:23;46837:12;46864:23;46902:12;46929:18;46961:19;46972:7;46961:10;:19::i;:::-;46754:226;;;;;;;;;;;;47009:28;47029:7;47009;:15;47017:6;47009:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46991:7;:15;46999:6;46991:15;;;;;;;;;;;;;;;:46;;;;47069:39;47092:15;47069:7;:18;47077:9;47069:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47048:7;:18;47056:9;47048:18;;;;;;;;;;;;;;;:60;;;;47119:26;47134:10;47119:14;:26::i;:::-;47156:23;47168:4;47174;47156:11;:23::i;:::-;47212:9;47195:44;;47204:6;47195:44;;;47223:15;47195:44;;;;;;:::i;:::-;;;;;;;;46743:504;;;;;;46622:625;;;:::o;34731:757::-;34882:15;34912:23;34950:12;34977:23;35015:12;35042:18;35074:19;35085:7;35074:10;:19::i;:::-;34867:226;;;;;;;;;;;;35122:28;35142:7;35122;:15;35130:6;35122:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35104:7;:15;35112:6;35104:15;;;;;;;;;;;;;;;:46;;;;35179:28;35199:7;35179;:15;35187:6;35179:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35161:7;:15;35169:6;35161:15;;;;;;;;;;;;;;;:46;;;;35239:39;35262:15;35239:7;:18;35247:9;35239:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35218:7;:18;35226:9;35218:18;;;;;;;;;;;;;;;:60;;;;35310:39;35333:15;35310:7;:18;35318:9;35310:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35289:7;:18;35297:9;35289:18;;;;;;;;;;;;;;;:60;;;;35360:26;35375:10;35360:14;:26::i;:::-;35397:23;35409:4;35415;35397:11;:23::i;:::-;35453:9;35436:44;;35445:6;35436:44;;;35464:15;35436:44;;;;;;:::i;:::-;;;;;;;;34856:632;;;;;;34731:757;;;:::o;40784:125::-;40838:15;;40828:7;:25;;;;40880:21;;40864:13;:37;;;;40784:125::o;40221:130::-;40285:7;40312:31;40337:5;40312:20;40324:7;;40312;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;40305:38;;40221:130;;;:::o;40359:174::-;40456:7;40488:37;40519:5;40488:26;40500:13;;40488:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;40481:44;;40359:174;;;:::o;39858:355::-;39921:19;39943:10;:8;:10::i;:::-;39921:32;;39964:18;39985:27;40000:11;39985:10;:14;;:27;;;;:::i;:::-;39964:48;;40048:38;40075:10;40048:7;:22;40064:4;40048:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40023:7;:22;40039:4;40023:22;;;;;;;;;;;;;;;:63;;;;40101:11;:26;40121:4;40101:26;;;;;;;;;;;;;;;;;;;;;;;;;40097:108;;;40167:38;40194:10;40167:7;:22;40183:4;40167:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40142:7;:22;40158:4;40142:22;;;;;;;;;;;;;;;:63;;;;40097:108;39910:303;;39858:355;:::o;37186:147::-;37264:17;37276:4;37264:7;;:11;;:17;;;;:::i;:::-;37254:7;:27;;;;37305:20;37320:4;37305:10;;:14;;:20;;;;:::i;:::-;37292:10;:33;;;;37186:147;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:329::-;5508:6;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5449:329;;;;:::o;5784:86::-;5819:7;5859:4;5852:5;5848:16;5837:27;;5784:86;;;:::o;5876:112::-;5959:22;5975:5;5959:22;:::i;:::-;5954:3;5947:35;5876:112;;:::o;5994:214::-;6083:4;6121:2;6110:9;6106:18;6098:26;;6134:67;6198:1;6187:9;6183:17;6174:6;6134:67;:::i;:::-;5994:214;;;;:::o;6214:329::-;6273:6;6322:2;6310:9;6301:7;6297:23;6293:32;6290:119;;;6328:79;;:::i;:::-;6290:119;6448:1;6473:53;6518:7;6509:6;6498:9;6494:22;6473:53;:::i;:::-;6463:63;;6419:117;6214:329;;;;:::o;6549:109::-;6599:7;6628:24;6646:5;6628:24;:::i;:::-;6617:35;;6549:109;;;:::o;6664:148::-;6750:37;6781:5;6750:37;:::i;:::-;6743:5;6740:48;6730:76;;6802:1;6799;6792:12;6730:76;6664:148;:::o;6818:165::-;6877:5;6915:6;6902:20;6893:29;;6931:46;6971:5;6931:46;:::i;:::-;6818:165;;;;:::o;6989:500::-;7070:6;7078;7127:2;7115:9;7106:7;7102:23;7098:32;7095:119;;;7133:79;;:::i;:::-;7095:119;7253:1;7278:66;7336:7;7327:6;7316:9;7312:22;7278:66;:::i;:::-;7268:76;;7224:130;7393:2;7419:53;7464:7;7455:6;7444:9;7440:22;7419:53;:::i;:::-;7409:63;;7364:118;6989:500;;;;;:::o;7495:116::-;7565:21;7580:5;7565:21;:::i;:::-;7558:5;7555:32;7545:60;;7601:1;7598;7591:12;7545:60;7495:116;:::o;7617:133::-;7660:5;7698:6;7685:20;7676:29;;7714:30;7738:5;7714:30;:::i;:::-;7617:133;;;;:::o;7756:468::-;7821:6;7829;7878:2;7866:9;7857:7;7853:23;7849:32;7846:119;;;7884:79;;:::i;:::-;7846:119;8004:1;8029:53;8074:7;8065:6;8054:9;8050:22;8029:53;:::i;:::-;8019:63;;7975:117;8131:2;8157:50;8199:7;8190:6;8179:9;8175:22;8157:50;:::i;:::-;8147:60;;8102:115;7756:468;;;;;:::o;8230:118::-;8317:24;8335:5;8317:24;:::i;:::-;8312:3;8305:37;8230:118;;:::o;8354:222::-;8447:4;8485:2;8474:9;8470:18;8462:26;;8498:71;8566:1;8555:9;8551:17;8542:6;8498:71;:::i;:::-;8354:222;;;;:::o;8582:104::-;8627:7;8656:24;8674:5;8656:24;:::i;:::-;8645:35;;8582:104;;;:::o;8692:138::-;8773:32;8799:5;8773:32;:::i;:::-;8766:5;8763:43;8753:71;;8820:1;8817;8810:12;8753:71;8692:138;:::o;8836:155::-;8890:5;8928:6;8915:20;8906:29;;8944:41;8979:5;8944:41;:::i;:::-;8836:155;;;;:::o;8997:345::-;9064:6;9113:2;9101:9;9092:7;9088:23;9084:32;9081:119;;;9119:79;;:::i;:::-;9081:119;9239:1;9264:61;9317:7;9308:6;9297:9;9293:22;9264:61;:::i;:::-;9254:71;;9210:125;8997:345;;;;:::o;9348:323::-;9404:6;9453:2;9441:9;9432:7;9428:23;9424:32;9421:119;;;9459:79;;:::i;:::-;9421:119;9579:1;9604:50;9646:7;9637:6;9626:9;9622:22;9604:50;:::i;:::-;9594:60;;9550:114;9348:323;;;;:::o;9677:474::-;9745:6;9753;9802:2;9790:9;9781:7;9777:23;9773:32;9770:119;;;9808:79;;:::i;:::-;9770:119;9928:1;9953:53;9998:7;9989:6;9978:9;9974:22;9953:53;:::i;:::-;9943:63;;9899:117;10055:2;10081:53;10126:7;10117:6;10106:9;10102:22;10081:53;:::i;:::-;10071:63;;10026:118;9677:474;;;;;:::o;10157:180::-;10205:77;10202:1;10195:88;10302:4;10299:1;10292:15;10326:4;10323:1;10316:15;10343:320;10387:6;10424:1;10418:4;10414:12;10404:22;;10471:1;10465:4;10461:12;10492:18;10482:81;;10548:4;10540:6;10536:17;10526:27;;10482:81;10610:2;10602:6;10599:14;10579:18;10576:38;10573:84;;10629:18;;:::i;:::-;10573:84;10394:269;10343:320;;;:::o;10669:182::-;10809:34;10805:1;10797:6;10793:14;10786:58;10669:182;:::o;10857:366::-;10999:3;11020:67;11084:2;11079:3;11020:67;:::i;:::-;11013:74;;11096:93;11185:3;11096:93;:::i;:::-;11214:2;11209:3;11205:12;11198:19;;10857:366;;;:::o;11229:419::-;11395:4;11433:2;11422:9;11418:18;11410:26;;11482:9;11476:4;11472:20;11468:1;11457:9;11453:17;11446:47;11510:131;11636:4;11510:131;:::i;:::-;11502:139;;11229:419;;;:::o;11654:239::-;11794:34;11790:1;11782:6;11778:14;11771:58;11863:22;11858:2;11850:6;11846:15;11839:47;11654:239;:::o;11899:366::-;12041:3;12062:67;12126:2;12121:3;12062:67;:::i;:::-;12055:74;;12138:93;12227:3;12138:93;:::i;:::-;12256:2;12251:3;12247:12;12240:19;;11899:366;;;:::o;12271:419::-;12437:4;12475:2;12464:9;12460:18;12452:26;;12524:9;12518:4;12514:20;12510:1;12499:9;12495:17;12488:47;12552:131;12678:4;12552:131;:::i;:::-;12544:139;;12271:419;;;:::o;12696:180::-;12744:77;12741:1;12734:88;12841:4;12838:1;12831:15;12865:4;12862:1;12855:15;12882:348;12922:7;12945:20;12963:1;12945:20;:::i;:::-;12940:25;;12979:20;12997:1;12979:20;:::i;:::-;12974:25;;13167:1;13099:66;13095:74;13092:1;13089:81;13084:1;13077:9;13070:17;13066:105;13063:131;;;13174:18;;:::i;:::-;13063:131;13222:1;13219;13215:9;13204:20;;12882:348;;;;:::o;13236:229::-;13376:34;13372:1;13364:6;13360:14;13353:58;13445:12;13440:2;13432:6;13428:15;13421:37;13236:229;:::o;13471:366::-;13613:3;13634:67;13698:2;13693:3;13634:67;:::i;:::-;13627:74;;13710:93;13799:3;13710:93;:::i;:::-;13828:2;13823:3;13819:12;13812:19;;13471:366;;;:::o;13843:419::-;14009:4;14047:2;14036:9;14032:18;14024:26;;14096:9;14090:4;14086:20;14082:1;14071:9;14067:17;14060:47;14124:131;14250:4;14124:131;:::i;:::-;14116:139;;13843:419;;;:::o;14268:177::-;14408:29;14404:1;14396:6;14392:14;14385:53;14268:177;:::o;14451:366::-;14593:3;14614:67;14678:2;14673:3;14614:67;:::i;:::-;14607:74;;14690:93;14779:3;14690:93;:::i;:::-;14808:2;14803:3;14799:12;14792:19;;14451:366;;;:::o;14823:419::-;14989:4;15027:2;15016:9;15012:18;15004:26;;15076:9;15070:4;15066:20;15062:1;15051:9;15047:17;15040:47;15104:131;15230:4;15104:131;:::i;:::-;15096:139;;14823:419;;;:::o;15248:180::-;15296:77;15293:1;15286:88;15393:4;15390:1;15383:15;15417:4;15414:1;15407:15;15434:191;15474:4;15494:20;15512:1;15494:20;:::i;:::-;15489:25;;15528:20;15546:1;15528:20;:::i;:::-;15523:25;;15567:1;15564;15561:8;15558:34;;;15572:18;;:::i;:::-;15558:34;15617:1;15614;15610:9;15602:17;;15434:191;;;;:::o;15631:180::-;15679:77;15676:1;15669:88;15776:4;15773:1;15766:15;15800:4;15797:1;15790:15;15817:233;15856:3;15879:24;15897:5;15879:24;:::i;:::-;15870:33;;15925:66;15918:5;15915:77;15912:103;;15995:18;;:::i;:::-;15912:103;16042:1;16035:5;16031:13;16024:20;;15817:233;;;:::o;16056:143::-;16113:5;16144:6;16138:13;16129:22;;16160:33;16187:5;16160:33;:::i;:::-;16056:143;;;;:::o;16205:351::-;16275:6;16324:2;16312:9;16303:7;16299:23;16295:32;16292:119;;;16330:79;;:::i;:::-;16292:119;16450:1;16475:64;16531:7;16522:6;16511:9;16507:22;16475:64;:::i;:::-;16465:74;;16421:128;16205:351;;;;:::o;16562:332::-;16683:4;16721:2;16710:9;16706:18;16698:26;;16734:71;16802:1;16791:9;16787:17;16778:6;16734:71;:::i;:::-;16815:72;16883:2;16872:9;16868:18;16859:6;16815:72;:::i;:::-;16562:332;;;;;:::o;16900:137::-;16954:5;16985:6;16979:13;16970:22;;17001:30;17025:5;17001:30;:::i;:::-;16900:137;;;;:::o;17043:345::-;17110:6;17159:2;17147:9;17138:7;17134:23;17130:32;17127:119;;;17165:79;;:::i;:::-;17127:119;17285:1;17310:61;17363:7;17354:6;17343:9;17339:22;17310:61;:::i;:::-;17300:71;;17256:125;17043:345;;;;:::o;17394:181::-;17534:33;17530:1;17522:6;17518:14;17511:57;17394:181;:::o;17581:366::-;17723:3;17744:67;17808:2;17803:3;17744:67;:::i;:::-;17737:74;;17820:93;17909:3;17820:93;:::i;:::-;17938:2;17933:3;17929:12;17922:19;;17581:366;;;:::o;17953:419::-;18119:4;18157:2;18146:9;18142:18;18134:26;;18206:9;18200:4;18196:20;18192:1;18181:9;18177:17;18170:47;18234:131;18360:4;18234:131;:::i;:::-;18226:139;;17953:419;;;:::o;18378:222::-;18518:34;18514:1;18506:6;18502:14;18495:58;18587:5;18582:2;18574:6;18570:15;18563:30;18378:222;:::o;18606:366::-;18748:3;18769:67;18833:2;18828:3;18769:67;:::i;:::-;18762:74;;18845:93;18934:3;18845:93;:::i;:::-;18963:2;18958:3;18954:12;18947:19;;18606:366;;;:::o;18978:419::-;19144:4;19182:2;19171:9;19167:18;19159:26;;19231:9;19225:4;19221:20;19217:1;19206:9;19202:17;19195:47;19259:131;19385:4;19259:131;:::i;:::-;19251:139;;18978:419;;;:::o;19403:181::-;19543:33;19539:1;19531:6;19527:14;19520:57;19403:181;:::o;19590:366::-;19732:3;19753:67;19817:2;19812:3;19753:67;:::i;:::-;19746:74;;19829:93;19918:3;19829:93;:::i;:::-;19947:2;19942:3;19938:12;19931:19;;19590:366;;;:::o;19962:419::-;20128:4;20166:2;20155:9;20151:18;20143:26;;20215:9;20209:4;20205:20;20201:1;20190:9;20186:17;20179:47;20243:131;20369:4;20243:131;:::i;:::-;20235:139;;19962:419;;;:::o;20387:305::-;20427:3;20446:20;20464:1;20446:20;:::i;:::-;20441:25;;20480:20;20498:1;20480:20;:::i;:::-;20475:25;;20634:1;20566:66;20562:74;20559:1;20556:81;20553:107;;;20640:18;;:::i;:::-;20553:107;20684:1;20681;20677:9;20670:16;;20387:305;;;;:::o;20698:225::-;20838:34;20834:1;20826:6;20822:14;20815:58;20907:8;20902:2;20894:6;20890:15;20883:33;20698:225;:::o;20929:366::-;21071:3;21092:67;21156:2;21151:3;21092:67;:::i;:::-;21085:74;;21168:93;21257:3;21168:93;:::i;:::-;21286:2;21281:3;21277:12;21270:19;;20929:366;;;:::o;21301:419::-;21467:4;21505:2;21494:9;21490:18;21482:26;;21554:9;21548:4;21544:20;21540:1;21529:9;21525:17;21518:47;21582:131;21708:4;21582:131;:::i;:::-;21574:139;;21301:419;;;:::o;21726:223::-;21866:34;21862:1;21854:6;21850:14;21843:58;21935:6;21930:2;21922:6;21918:15;21911:31;21726:223;:::o;21955:366::-;22097:3;22118:67;22182:2;22177:3;22118:67;:::i;:::-;22111:74;;22194:93;22283:3;22194:93;:::i;:::-;22312:2;22307:3;22303:12;22296:19;;21955:366;;;:::o;22327:419::-;22493:4;22531:2;22520:9;22516:18;22508:26;;22580:9;22574:4;22570:20;22566:1;22555:9;22551:17;22544:47;22608:131;22734:4;22608:131;:::i;:::-;22600:139;;22327:419;;;:::o;22752:221::-;22892:34;22888:1;22880:6;22876:14;22869:58;22961:4;22956:2;22948:6;22944:15;22937:29;22752:221;:::o;22979:366::-;23121:3;23142:67;23206:2;23201:3;23142:67;:::i;:::-;23135:74;;23218:93;23307:3;23218:93;:::i;:::-;23336:2;23331:3;23327:12;23320:19;;22979:366;;;:::o;23351:419::-;23517:4;23555:2;23544:9;23540:18;23532:26;;23604:9;23598:4;23594:20;23590:1;23579:9;23575:17;23568:47;23632:131;23758:4;23632:131;:::i;:::-;23624:139;;23351:419;;;:::o;23776:224::-;23916:34;23912:1;23904:6;23900:14;23893:58;23985:7;23980:2;23972:6;23968:15;23961:32;23776:224;:::o;24006:366::-;24148:3;24169:67;24233:2;24228:3;24169:67;:::i;:::-;24162:74;;24245:93;24334:3;24245:93;:::i;:::-;24363:2;24358:3;24354:12;24347:19;;24006:366;;;:::o;24378:419::-;24544:4;24582:2;24571:9;24567:18;24559:26;;24631:9;24625:4;24621:20;24617:1;24606:9;24602:17;24595:47;24659:131;24785:4;24659:131;:::i;:::-;24651:139;;24378:419;;;:::o;24803:222::-;24943:34;24939:1;24931:6;24927:14;24920:58;25012:5;25007:2;24999:6;24995:15;24988:30;24803:222;:::o;25031:366::-;25173:3;25194:67;25258:2;25253:3;25194:67;:::i;:::-;25187:74;;25270:93;25359:3;25270:93;:::i;:::-;25388:2;25383:3;25379:12;25372:19;;25031:366;;;:::o;25403:419::-;25569:4;25607:2;25596:9;25592:18;25584:26;;25656:9;25650:4;25646:20;25642:1;25631:9;25627:17;25620:47;25684:131;25810:4;25684:131;:::i;:::-;25676:139;;25403:419;;;:::o;25828:228::-;25968:34;25964:1;25956:6;25952:14;25945:58;26037:11;26032:2;26024:6;26020:15;26013:36;25828:228;:::o;26062:366::-;26204:3;26225:67;26289:2;26284:3;26225:67;:::i;:::-;26218:74;;26301:93;26390:3;26301:93;:::i;:::-;26419:2;26414:3;26410:12;26403:19;;26062:366;;;:::o;26434:419::-;26600:4;26638:2;26627:9;26623:18;26615:26;;26687:9;26681:4;26677:20;26673:1;26662:9;26658:17;26651:47;26715:131;26841:4;26715:131;:::i;:::-;26707:139;;26434:419;;;:::o;26859:227::-;26999:34;26995:1;26987:6;26983:14;26976:58;27068:10;27063:2;27055:6;27051:15;27044:35;26859:227;:::o;27092:366::-;27234:3;27255:67;27319:2;27314:3;27255:67;:::i;:::-;27248:74;;27331:93;27420:3;27331:93;:::i;:::-;27449:2;27444:3;27440:12;27433:19;;27092:366;;;:::o;27464:419::-;27630:4;27668:2;27657:9;27653:18;27645:26;;27717:9;27711:4;27707:20;27703:1;27692:9;27688:17;27681:47;27745:131;27871:4;27745:131;:::i;:::-;27737:139;;27464:419;;;:::o;27889:177::-;28029:29;28025:1;28017:6;28013:14;28006:53;27889:177;:::o;28072:366::-;28214:3;28235:67;28299:2;28294:3;28235:67;:::i;:::-;28228:74;;28311:93;28400:3;28311:93;:::i;:::-;28429:2;28424:3;28420:12;28413:19;;28072:366;;;:::o;28444:419::-;28610:4;28648:2;28637:9;28633:18;28625:26;;28697:9;28691:4;28687:20;28683:1;28672:9;28668:17;28661:47;28725:131;28851:4;28725:131;:::i;:::-;28717:139;;28444:419;;;:::o;28869:442::-;29018:4;29056:2;29045:9;29041:18;29033:26;;29069:71;29137:1;29126:9;29122:17;29113:6;29069:71;:::i;:::-;29150:72;29218:2;29207:9;29203:18;29194:6;29150:72;:::i;:::-;29232;29300:2;29289:9;29285:18;29276:6;29232:72;:::i;:::-;28869:442;;;;;;:::o;29317:180::-;29365:77;29362:1;29355:88;29462:4;29459:1;29452:15;29486:4;29483:1;29476:15;29503:185;29543:1;29560:20;29578:1;29560:20;:::i;:::-;29555:25;;29594:20;29612:1;29594:20;:::i;:::-;29589:25;;29633:1;29623:35;;29638:18;;:::i;:::-;29623:35;29680:1;29677;29673:9;29668:14;;29503:185;;;;:::o;29694:180::-;29742:77;29739:1;29732:88;29839:4;29836:1;29829:15;29863:4;29860:1;29853:15;29880:143;29937:5;29968:6;29962:13;29953:22;;29984:33;30011:5;29984:33;:::i;:::-;29880:143;;;;:::o;30029:351::-;30099:6;30148:2;30136:9;30127:7;30123:23;30119:32;30116:119;;;30154:79;;:::i;:::-;30116:119;30274:1;30299:64;30355:7;30346:6;30335:9;30331:22;30299:64;:::i;:::-;30289:74;;30245:128;30029:351;;;;:::o;30386:85::-;30431:7;30460:5;30449:16;;30386:85;;;:::o;30477:158::-;30535:9;30568:61;30586:42;30595:32;30621:5;30595:32;:::i;:::-;30586:42;:::i;:::-;30568:61;:::i;:::-;30555:74;;30477:158;;;:::o;30641:147::-;30736:45;30775:5;30736:45;:::i;:::-;30731:3;30724:58;30641:147;;:::o;30794:114::-;30861:6;30895:5;30889:12;30879:22;;30794:114;;;:::o;30914:184::-;31013:11;31047:6;31042:3;31035:19;31087:4;31082:3;31078:14;31063:29;;30914:184;;;;:::o;31104:132::-;31171:4;31194:3;31186:11;;31224:4;31219:3;31215:14;31207:22;;31104:132;;;:::o;31242:108::-;31319:24;31337:5;31319:24;:::i;:::-;31314:3;31307:37;31242:108;;:::o;31356:179::-;31425:10;31446:46;31488:3;31480:6;31446:46;:::i;:::-;31524:4;31519:3;31515:14;31501:28;;31356:179;;;;:::o;31541:113::-;31611:4;31643;31638:3;31634:14;31626:22;;31541:113;;;:::o;31690:732::-;31809:3;31838:54;31886:5;31838:54;:::i;:::-;31908:86;31987:6;31982:3;31908:86;:::i;:::-;31901:93;;32018:56;32068:5;32018:56;:::i;:::-;32097:7;32128:1;32113:284;32138:6;32135:1;32132:13;32113:284;;;32214:6;32208:13;32241:63;32300:3;32285:13;32241:63;:::i;:::-;32234:70;;32327:60;32380:6;32327:60;:::i;:::-;32317:70;;32173:224;32160:1;32157;32153:9;32148:14;;32113:284;;;32117:14;32413:3;32406:10;;31814:608;;;31690:732;;;;:::o;32428:831::-;32691:4;32729:3;32718:9;32714:19;32706:27;;32743:71;32811:1;32800:9;32796:17;32787:6;32743:71;:::i;:::-;32824:80;32900:2;32889:9;32885:18;32876:6;32824:80;:::i;:::-;32951:9;32945:4;32941:20;32936:2;32925:9;32921:18;32914:48;32979:108;33082:4;33073:6;32979:108;:::i;:::-;32971:116;;33097:72;33165:2;33154:9;33150:18;33141:6;33097:72;:::i;:::-;33179:73;33247:3;33236:9;33232:19;33223:6;33179:73;:::i;:::-;32428:831;;;;;;;;:::o;33265:220::-;33405:34;33401:1;33393:6;33389:14;33382:58;33474:3;33469:2;33461:6;33457:15;33450:28;33265:220;:::o;33491:366::-;33633:3;33654:67;33718:2;33713:3;33654:67;:::i;:::-;33647:74;;33730:93;33819:3;33730:93;:::i;:::-;33848:2;33843:3;33839:12;33832:19;;33491:366;;;:::o;33863:419::-;34029:4;34067:2;34056:9;34052:18;34044:26;;34116:9;34110:4;34106:20;34102:1;34091:9;34087:17;34080:47;34144:131;34270:4;34144:131;:::i;:::-;34136:139;;33863:419;;;:::o;34288:807::-;34537:4;34575:3;34564:9;34560:19;34552:27;;34589:71;34657:1;34646:9;34642:17;34633:6;34589:71;:::i;:::-;34670:72;34738:2;34727:9;34723:18;34714:6;34670:72;:::i;:::-;34752:80;34828:2;34817:9;34813:18;34804:6;34752:80;:::i;:::-;34842;34918:2;34907:9;34903:18;34894:6;34842:80;:::i;:::-;34932:73;35000:3;34989:9;34985:19;34976:6;34932:73;:::i;:::-;35015;35083:3;35072:9;35068:19;35059:6;35015:73;:::i;:::-;34288:807;;;;;;;;;:::o;35101:663::-;35189:6;35197;35205;35254:2;35242:9;35233:7;35229:23;35225:32;35222:119;;;35260:79;;:::i;:::-;35222:119;35380:1;35405:64;35461:7;35452:6;35441:9;35437:22;35405:64;:::i;:::-;35395:74;;35351:128;35518:2;35544:64;35600:7;35591:6;35580:9;35576:22;35544:64;:::i;:::-;35534:74;;35489:129;35657:2;35683:64;35739:7;35730:6;35719:9;35715:22;35683:64;:::i;:::-;35673:74;;35628:129;35101:663;;;;;:::o

Swarm Source

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