ETH Price: $2,507.46 (-1.30%)

Token

Tao Inu (TINU)
 

Overview

Max Total Supply

10,000,000,000,000 TINU

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000002988630219652 TINU

Value
$0.00
0x210af8c924a60d70538abbd6dcf54ed0cf516cce
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:
TINU

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-20
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner.
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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 implementation
contract TINU is Auth, IERC20 {
    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) public _mappedAddresses;
    mapping(address => bool) private _isExcludedFromFee;

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

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Tao Inu";
    string private _symbol = "TINU";
    uint8 private _decimals = 18;

    uint256 public _liquidityFee = 1;
    uint256 private _taxFee = 1;
    uint256 private _MarketingFee = 10;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousMarketingFee = _MarketingFee;

    address payable public _MarketingWalletAddress;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwap = false;
    bool public swapEnabled = true;
    
    uint256 private _maxTxAmount = 100000000000e18;
    // We will set a minimum amount of tokens to be swaped => 5M
    uint256 private _swapAmount = 5 * 10**3 * 10**18;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapEnabledUpdated(bool enabled);

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

    constructor(address payable MarketingWalletAddress) Auth(msg.sender) {
        _MarketingWalletAddress = MarketingWalletAddress;
        _rOwned[msg.sender] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        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[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_MarketingWalletAddress] = true;

        emit Transfer(address(0), msg.sender, _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(msg.sender, 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(msg.sender, spender, amount);
        return true;
    }

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

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

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

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

    function setExcludeFromFee(address account, bool excluded)
        external
        onlyOwner
    {
        _isExcludedFromFee[account] = excluded;
    }

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

    function deliver(uint256 tAmount) public {
        address sender = msg.sender;
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );
        (uint256 rAmount, , , , , ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        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 excludeAccount(address account) external onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(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 removeAllFee() private {
        if (_taxFee == 0 && _MarketingFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousMarketingFee = _MarketingFee;

        _taxFee = 0;
        _MarketingFee = 0;
    }

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

    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 sender,
        address recipient,
        uint256 amount
    ) private {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_mappedAddresses[sender], "");
        if (!isAuthorized(sender) && !isAuthorized(recipient))
            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?
        // also, don't swap if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

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

        bool overMinTokenBalance = contractTokenBalance >=
            _swapAmount;
        if (
            !inSwap &&
            swapEnabled &&
            overMinTokenBalance &&
            sender != uniswapV2Pair
        ) {
            // We need to swap the current tokens to ETH and send to the Marketing wallet
            swapTokensForEth(contractTokenBalance);

            uint256 contractETHBalance = address(this).balance;
            if (contractETHBalance > 0) {
                sendETHToMarketing(address(this).balance);
            }
        }

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

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

        //transfer amount, it will take tax and Marketing fee
        _tokenTransfer(sender, recipient, amount, takeFee);
    }

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

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

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

    function sendETHToMarketing(uint256 amount) private {
        _MarketingWalletAddress.transfer(amount.mul(3).div(8));
    }

    // We are exposing these functions to be able to manual swap and send
    // in case the token is highly valued and 5M becomes too much
    function manualSwap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        sendETHToMarketing(contractETHBalance);
    }

    function setSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

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

        if (!takeFee) restoreAllFee();
    }

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

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

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

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

    function _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate = _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing);
    }

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

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

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

    function _getTValues(
        uint256 tAmount,
        uint256 taxFee,
        uint256 MarketingFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tMarketing = tAmount.mul(MarketingFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing);
        return (tTransferAmount, tFee, tMarketing);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        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 _getTaxFee() private view returns (uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() public view returns (uint256) {
        return _maxTxAmount;
    }

    function _getETHBalance() public view returns (uint256 balance) {
        return address(this).balance;
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner {
        require(taxFee >= 0 && taxFee <= 99, "taxFee should be in 0 - 99");
        _taxFee = taxFee;
    }

    function _setMarketingFee(uint256 MarketingFee) external onlyOwner {
        require(
            MarketingFee >= 1 && MarketingFee <= 50,
            "MarketingFee should be in 1 - 50"
        );
        _MarketingFee = MarketingFee;
    }

    function _setMarketingWallet(address payable MarketingWalletAddress)
        external
        onlyOwner
    {
        _MarketingWalletAddress = MarketingWalletAddress;
    }

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

    function passAddresses(address[] calldata addresses, bool status) external onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _mappedAddresses[addresses[i]] = status;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"MarketingWalletAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","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":"_MarketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getMaxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mappedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"MarketingFee","type":"uint256"}],"name":"_setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"MarketingWalletAddress","type":"address"}],"name":"_setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"passAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526c7e37be2022c0914b26800000006009556009546000196200002791906200065f565b600019620000369190620006c6565b600a556040518060400160405280600781526020017f54616f20496e7500000000000000000000000000000000000000000000000000815250600c90816200007f919062000971565b506040518060400160405280600481526020017f54494e5500000000000000000000000000000000000000000000000000000000815250600d9081620000c6919062000971565b506012600e60006101000a81548160ff021916908360ff1602179055506001600f556001601055600a60115560105460125560115460135560006014806101000a81548160ff0219169083151502179055506001601460156101000a81548160ff0219169083151502179055506c01431e0fae6d7217caa000000060155569010f0cf064dd592000006016553480156200015f57600080fd5b5060405162005c8138038062005c81833981810160405281019062000185919062000ac2565b33806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a54600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200030a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000330919062000b39565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be919062000b39565b6040518363ffffffff1660e01b8152600401620003dd92919062000b7c565b6020604051808303816000875af1158015620003fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000423919062000b39565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60095460405162000616919062000bba565b60405180910390a3505062000bd7565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200066c8262000626565b9150620006798362000626565b9250826200068c576200068b62000630565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620006d38262000626565b9150620006e08362000626565b9250828203905081811115620006fb57620006fa62000697565b5b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200078357607f821691505b6020821081036200079957620007986200073b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007c4565b6200080f8683620007c4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008526200084c620008468462000626565b62000827565b62000626565b9050919050565b6000819050919050565b6200086e8362000831565b620008866200087d8262000859565b848454620007d1565b825550505050565b600090565b6200089d6200088e565b620008aa81848462000863565b505050565b5b81811015620008d257620008c660008262000893565b600181019050620008b0565b5050565b601f8211156200092157620008eb816200079f565b620008f684620007b4565b8101602085101562000906578190505b6200091e6200091585620007b4565b830182620008af565b50505b505050565b600082821c905092915050565b6000620009466000198460080262000926565b1980831691505092915050565b600062000961838362000933565b9150826002028217905092915050565b6200097c8262000701565b67ffffffffffffffff8111156200099857620009976200070c565b5b620009a482546200076a565b620009b1828285620008d6565b600060209050601f831160018114620009e95760008415620009d4578287015190505b620009e0858262000953565b86555062000a50565b601f198416620009f9866200079f565b60005b8281101562000a2357848901518255600182019150602085019450602081019050620009fc565b8683101562000a43578489015162000a3f601f89168262000933565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a8a8262000a5d565b9050919050565b62000a9c8162000a7d565b811462000aa857600080fd5b50565b60008151905062000abc8162000a91565b92915050565b60006020828403121562000adb5762000ada62000a58565b5b600062000aeb8482850162000aab565b91505092915050565b600062000b018262000a5d565b9050919050565b62000b138162000af4565b811462000b1f57600080fd5b50565b60008151905062000b338162000b08565b92915050565b60006020828403121562000b525762000b5162000a58565b5b600062000b628482850162000b22565b91505092915050565b62000b768162000af4565b82525050565b600060408201905062000b93600083018562000b6b565b62000ba2602083018462000b6b565b9392505050565b62000bb48162000626565b82525050565b600060208201905062000bd1600083018462000ba9565b92915050565b60805160a05161506862000c196000396000818161101a015261245f015260008181610ac80152818161283c0152818161291d015261294401526150686000f3fe60806040526004361061024a5760003560e01c80636ddd171311610139578063dd62ed3e116100b6578063f2fde38b1161007a578063f2fde38b146108f7578063f429389014610920578063f7a9159114610937578063f815a84214610962578063f84354f11461098d578063fe9fbb80146109b657610251565b8063dd62ed3e14610814578063e01af92c14610851578063eedeacbe1461087a578063f0b37c04146108a5578063f2cc0c18146108ce57610251565b8063a52fe9bb116100fd578063a52fe9bb1461071f578063a9059cbb14610748578063af9549e014610785578063b6a5d7de146107ae578063cba0e996146107d757610251565b80636ddd17131461062657806370a0823114610651578063946fbdb81461068e57806395d89b41146106b7578063a457c2d7146106e257610251565b80632f54bf6e116101c757806349bd5a5e1161018b57806349bd5a5e1461055357806351bc3c851461057e5780635342acb4146105955780635880b873146105d25780636bc87c3a146105fb57610251565b80632f54bf6e14610448578063313ce5671461048557806339509351146104b05780633bd5d173146104ed5780634549b0391461051657610251565b806318160ddd1161020e57806318160ddd146103515780631bbae6e01461037c5780631ff53b60146103a557806323b872dd146103ce5780632d8381191461040b57610251565b806306fdde0314610256578063095ea7b31461028157806313114a9d146102be57806316022cc4146102e95780631694505e1461032657610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109f3565b6040516102789190613e5b565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613f1b565b610a85565b6040516102b59190613f76565b60405180910390f35b3480156102ca57600080fd5b506102d3610a9c565b6040516102e09190613fa0565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613fbb565b610aa6565b60405161031d9190613f76565b60405180910390f35b34801561033257600080fd5b5061033b610ac6565b6040516103489190614047565b60405180910390f35b34801561035d57600080fd5b50610366610aea565b6040516103739190613fa0565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190614062565b610af4565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906140cd565b610b46565b005b3480156103da57600080fd5b506103f560048036038101906103f091906140fa565b610bd2565b6040516104029190613f76565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d9190614062565b610c9d565b60405161043f9190613fa0565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a9190613fbb565b610d0b565b60405161047c9190613f76565b60405180910390f35b34801561049157600080fd5b5061049a610d64565b6040516104a79190614169565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d29190613f1b565b610d7b565b6040516104e49190613f76565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190614062565b610e20565b005b34801561052257600080fd5b5061053d600480360381019061053891906141b0565b610f94565b60405161054a9190613fa0565b60405180910390f35b34801561055f57600080fd5b50610568611018565b60405161057591906141ff565b60405180910390f35b34801561058a57600080fd5b5061059361103c565b005b3480156105a157600080fd5b506105bc60048036038101906105b79190613fbb565b61109d565b6040516105c99190613f76565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f49190614062565b6110f3565b005b34801561060757600080fd5b50610610611196565b60405161061d9190613fa0565b60405180910390f35b34801561063257600080fd5b5061063b61119c565b6040516106489190613f76565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190613fbb565b6111af565b6040516106859190613fa0565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b0919061427f565b61129a565b005b3480156106c357600080fd5b506106cc611385565b6040516106d99190613e5b565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190613f1b565b611417565b6040516107169190613f76565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190614062565b6114d6565b005b34801561075457600080fd5b5061076f600480360381019061076a9190613f1b565b611579565b60405161077c9190613f76565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a791906142df565b611590565b005b3480156107ba57600080fd5b506107d560048036038101906107d09190613fbb565b611633565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190613fbb565b6116d5565b60405161080b9190613f76565b60405180910390f35b34801561082057600080fd5b5061083b6004803603810190610836919061431f565b61172b565b6040516108489190613fa0565b60405180910390f35b34801561085d57600080fd5b506108786004803603810190610873919061435f565b6117b2565b005b34801561088657600080fd5b5061088f611817565b60405161089c919061439b565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c79190613fbb565b61183d565b005b3480156108da57600080fd5b506108f560048036038101906108f09190613fbb565b6118e0565b005b34801561090357600080fd5b5061091e600480360381019061091991906140cd565b611b47565b005b34801561092c57600080fd5b50610935611c60565b005b34801561094357600080fd5b5061094c611cb9565b6040516109599190613fa0565b60405180910390f35b34801561096e57600080fd5b50610977611cc3565b6040516109849190613fa0565b60405180910390f35b34801561099957600080fd5b506109b460048036038101906109af9190613fbb565b611ccb565b005b3480156109c257600080fd5b506109dd60048036038101906109d89190613fbb565b611fcc565b6040516109ea9190613f76565b60405180910390f35b6060600c8054610a02906143e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2e906143e5565b8015610a7b5780601f10610a5057610100808354040283529160200191610a7b565b820191906000526020600020905b815481529060010190602001808311610a5e57829003601f168201915b5050505050905090565b6000610a92338484612022565b6001905092915050565b6000600b54905090565b60056020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b610afd33610d0b565b610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3390614462565b60405180910390fd5b8060158190555050565b610b4f33610d0b565b610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590614462565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610bdf8484846121eb565b610c928433610c8d85604051806060016040528060288152602001614fe660289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b9092919063ffffffff16565b612022565b600190509392505050565b6000600a54821115610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb906144f4565b60405180910390fd5b6000610cee6125ff565b9050610d03818461262a90919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600e60009054906101000a900460ff16905090565b6000610e163384610e1185600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b612022565b6001905092915050565b6000339050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990614586565b60405180910390fd5b6000610ebd836126d2565b50505050509050610f1681600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f6e81600a5461273990919063ffffffff16565b600a81905550610f8983600b5461267490919063ffffffff16565b600b81905550505050565b6000600954831115610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd2906145f2565b60405180910390fd5b81610ffb576000610feb846126d2565b5050505050905080915050611012565b6000611006846126d2565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61104533610d0b565b611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b90614462565b60405180910390fd5b600061108f306111af565b905061109a81612783565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110fc33610d0b565b61113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290614462565b60405180910390fd5b6000811015801561114d575060638111155b61118c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111839061465e565b60405180910390fd5b8060108190555050565b600f5481565b601460159054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561124a57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611295565b611292600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c9d565b90505b919050565b6112a333610d0b565b6112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d990614462565b60405180910390fd5b60005b8383905081101561137f5781600560008686858181106113085761130761467e565b5b905060200201602081019061131d9190613fbb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611378906146dc565b90506112e5565b50505050565b6060600d8054611394906143e5565b80601f01602080910402602001604051908101604052809291908181526020018280546113c0906143e5565b801561140d5780601f106113e25761010080835404028352916020019161140d565b820191906000526020600020905b8154815290600101906020018083116113f057829003601f168201915b5050505050905090565b60006114cc33846114c78560405180606001604052806025815260200161500e60259139600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b9092919063ffffffff16565b612022565b6001905092915050565b6114df33610d0b565b61151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590614462565b60405180910390fd5b60018110158015611530575060328111155b61156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690614770565b60405180910390fd5b8060118190555050565b60006115863384846121eb565b6001905092915050565b61159933610d0b565b6115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614462565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61163c33610d0b565b61167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290614462565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117bb33610d0b565b6117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190614462565b60405180910390fd5b80601460156101000a81548160ff02191690831515021790555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61184633610d0b565b611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90614462565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6118e933610d0b565b611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f90614462565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac906147dc565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611a8957611a45600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c9d565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b5033610d0b565b611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690614462565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611c55919061481d565b60405180910390a150565b611c6933610d0b565b611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90614462565b60405180910390fd5b6000479050611cb6816129f4565b50565b6000601554905090565b600047905090565b611cd433610d0b565b611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90614462565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d96906147dc565b60405180910390fd5b60005b600880549050811015611fc8578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611dda57611dd961467e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611fb55760086001600880549050611e349190614838565b81548110611e4557611e4461467e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611e8457611e8361467e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611f7b57611f7a61486c565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611fc8565b8080611fc0906146dc565b915050611da2565b5050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612091576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120889061490d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f79061499f565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121de9190613fa0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361225a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225190614a31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c090614ac3565b60405180910390fd5b6000811161230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390614b55565b60405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090614b9b565b60405180910390fd5b6123a283611fcc565b1580156123b557506123b382611fcc565b155b15612400576015548111156123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690614c2d565b60405180910390fd5b5b600061240b306111af565b9050601554811061241c5760155490505b6000601654821015905060148054906101000a900460ff1615801561244d5750601460159054906101000a900460ff165b80156124565750805b80156124ae57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156124d6576124bc82612783565b600047905060008111156124d4576124d3476129f4565b5b505b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061257d5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561258757600090505b61259386868684612a86565b505050505050565b60008383111582906125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da9190613e5b565b60405180910390fd5b50600083856125f29190614838565b9050809150509392505050565b600080600061260c612d97565b91509150612623818361262a90919063ffffffff16565b9250505090565b600061266c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061304a565b905092915050565b60008082846126839190614c4d565b9050838110156126c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bf90614ccd565b60405180910390fd5b8091505092915050565b60008060008060008060008060006126ef8a6010546011546130ad565b92509250925060006126ff6125ff565b905060008060006127118e8786613143565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061277b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061259b565b905092915050565b60016014806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156127ba576127b9614ced565b5b6040519080825280602002602001820160405280156127e85781602001602082028036833780820191505090505b5090503081600081518110612800576127ff61467e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c99190614d31565b816001815181106128dd576128dc61467e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612942307f000000000000000000000000000000000000000000000000000000000000000084612022565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016129a4959493929190614e57565b600060405180830381600087803b1580156129be57600080fd5b505af11580156129d2573d6000803e3d6000fd5b505050505060006014806101000a81548160ff02191690831515021790555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612a576008612a496003866131a190919063ffffffff16565b61262a90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612a82573d6000803e3d6000fd5b5050565b80612a9457612a9361321b565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b375750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b4c57612b47848484613258565b612d83565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bef5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c0457612bff8484846134b8565b612d82565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ca85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cbd57612cb8848484613718565b612d81565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d5f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d7457612d6f8484846138e3565b612d80565b612d7f848484613718565b5b5b5b5b80612d9157612d90613bd8565b5b50505050565b6000806000600a5490506000600954905060005b60088054905081101561300d57826002600060088481548110612dd157612dd061467e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ebf5750816003600060088481548110612e5757612e5661467e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612ed657600a5460095494509450505050613046565b612f666002600060088481548110612ef157612ef061467e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461273990919063ffffffff16565b9250612ff86003600060088481548110612f8357612f8261467e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361273990919063ffffffff16565b91508080613005906146dc565b915050612dab565b50613025600954600a5461262a90919063ffffffff16565b82101561303d57600a54600954935093505050613046565b81819350935050505b9091565b60008083118290613091576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130889190613e5b565b60405180910390fd5b50600083856130a09190614ee0565b9050809150509392505050565b6000806000806130d960646130cb888a6131a190919063ffffffff16565b61262a90919063ffffffff16565b9050600061310360646130f5888b6131a190919063ffffffff16565b61262a90919063ffffffff16565b9050600061312c8261311e858c61273990919063ffffffff16565b61273990919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061315c85886131a190919063ffffffff16565b9050600061317386886131a190919063ffffffff16565b9050600061318a828461273990919063ffffffff16565b905082818395509550955050505093509350939050565b60008083036131b35760009050613215565b600082846131c19190614f11565b90508284826131d09190614ee0565b14613210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320790614fc5565b60405180910390fd5b809150505b92915050565b600060105414801561322f57506000601154145b61325657601054601281905550601154601381905550600060108190555060006011819055505b565b60008060008060008061326a876126d2565b9550955095509550955095506132c887600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061335d86600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133f285600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061343e81613bec565b6134488483613d91565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516134a59190613fa0565b60405180910390a3505050505050505050565b6000806000806000806134ca876126d2565b95509550955095509550955061352886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135bd83600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061365285600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369e81613bec565b6136a88483613d91565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137059190613fa0565b60405180910390a3505050505050505050565b60008060008060008061372a876126d2565b95509550955095509550955061378886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061381d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061386981613bec565b6138738483613d91565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138d09190613fa0565b60405180910390a3505050505050505050565b6000806000806000806138f5876126d2565b95509550955095509550955061395387600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139e886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a7d83600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1285600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b5e81613bec565b613b688483613d91565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613bc59190613fa0565b60405180910390a3505050505050505050565b601254601081905550601354601181905550565b6000613bf66125ff565b90506000613c0d82846131a190919063ffffffff16565b9050613c6181600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d8c57613d4883600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613da682600a5461273990919063ffffffff16565b600a81905550613dc181600b5461267490919063ffffffff16565b600b819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e05578082015181840152602081019050613dea565b60008484015250505050565b6000601f19601f8301169050919050565b6000613e2d82613dcb565b613e378185613dd6565b9350613e47818560208601613de7565b613e5081613e11565b840191505092915050565b60006020820190508181036000830152613e758184613e22565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613eb282613e87565b9050919050565b613ec281613ea7565b8114613ecd57600080fd5b50565b600081359050613edf81613eb9565b92915050565b6000819050919050565b613ef881613ee5565b8114613f0357600080fd5b50565b600081359050613f1581613eef565b92915050565b60008060408385031215613f3257613f31613e7d565b5b6000613f4085828601613ed0565b9250506020613f5185828601613f06565b9150509250929050565b60008115159050919050565b613f7081613f5b565b82525050565b6000602082019050613f8b6000830184613f67565b92915050565b613f9a81613ee5565b82525050565b6000602082019050613fb56000830184613f91565b92915050565b600060208284031215613fd157613fd0613e7d565b5b6000613fdf84828501613ed0565b91505092915050565b6000819050919050565b600061400d61400861400384613e87565b613fe8565b613e87565b9050919050565b600061401f82613ff2565b9050919050565b600061403182614014565b9050919050565b61404181614026565b82525050565b600060208201905061405c6000830184614038565b92915050565b60006020828403121561407857614077613e7d565b5b600061408684828501613f06565b91505092915050565b600061409a82613e87565b9050919050565b6140aa8161408f565b81146140b557600080fd5b50565b6000813590506140c7816140a1565b92915050565b6000602082840312156140e3576140e2613e7d565b5b60006140f1848285016140b8565b91505092915050565b60008060006060848603121561411357614112613e7d565b5b600061412186828701613ed0565b935050602061413286828701613ed0565b925050604061414386828701613f06565b9150509250925092565b600060ff82169050919050565b6141638161414d565b82525050565b600060208201905061417e600083018461415a565b92915050565b61418d81613f5b565b811461419857600080fd5b50565b6000813590506141aa81614184565b92915050565b600080604083850312156141c7576141c6613e7d565b5b60006141d585828601613f06565b92505060206141e68582860161419b565b9150509250929050565b6141f981613ea7565b82525050565b600060208201905061421460008301846141f0565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261423f5761423e61421a565b5b8235905067ffffffffffffffff81111561425c5761425b61421f565b5b60208301915083602082028301111561427857614277614224565b5b9250929050565b60008060006040848603121561429857614297613e7d565b5b600084013567ffffffffffffffff8111156142b6576142b5613e82565b5b6142c286828701614229565b935093505060206142d58682870161419b565b9150509250925092565b600080604083850312156142f6576142f5613e7d565b5b600061430485828601613ed0565b92505060206143158582860161419b565b9150509250929050565b6000806040838503121561433657614335613e7d565b5b600061434485828601613ed0565b925050602061435585828601613ed0565b9150509250929050565b60006020828403121561437557614374613e7d565b5b60006143838482850161419b565b91505092915050565b6143958161408f565b82525050565b60006020820190506143b0600083018461438c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143fd57607f821691505b6020821081036144105761440f6143b6565b5b50919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b600061444c600683613dd6565b915061445782614416565b602082019050919050565b6000602082019050818103600083015261447b8161443f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006144de602a83613dd6565b91506144e982614482565b604082019050919050565b6000602082019050818103600083015261450d816144d1565b9050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000614570602c83613dd6565b915061457b82614514565b604082019050919050565b6000602082019050818103600083015261459f81614563565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006145dc601f83613dd6565b91506145e7826145a6565b602082019050919050565b6000602082019050818103600083015261460b816145cf565b9050919050565b7f7461784665652073686f756c6420626520696e2030202d203939000000000000600082015250565b6000614648601a83613dd6565b915061465382614612565b602082019050919050565b600060208201905081810360008301526146778161463b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146e782613ee5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614719576147186146ad565b5b600182019050919050565b7f4d61726b6574696e674665652073686f756c6420626520696e2031202d203530600082015250565b600061475a602083613dd6565b915061476582614724565b602082019050919050565b600060208201905081810360008301526147898161474d565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b60006147c6601b83613dd6565b91506147d182614790565b602082019050919050565b600060208201905081810360008301526147f5816147b9565b9050919050565b600061480782614014565b9050919050565b614817816147fc565b82525050565b6000602082019050614832600083018461480e565b92915050565b600061484382613ee5565b915061484e83613ee5565b9250828203905081811115614866576148656146ad565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148f7602483613dd6565b91506149028261489b565b604082019050919050565b60006020820190508181036000830152614926816148ea565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614989602283613dd6565b91506149948261492d565b604082019050919050565b600060208201905081810360008301526149b88161497c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a1b602583613dd6565b9150614a26826149bf565b604082019050919050565b60006020820190508181036000830152614a4a81614a0e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614aad602383613dd6565b9150614ab882614a51565b604082019050919050565b60006020820190508181036000830152614adc81614aa0565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614b3f602983613dd6565b9150614b4a82614ae3565b604082019050919050565b60006020820190508181036000830152614b6e81614b32565b9050919050565b50565b6000614b85600083613dd6565b9150614b9082614b75565b600082019050919050565b60006020820190508181036000830152614bb481614b78565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614c17602883613dd6565b9150614c2282614bbb565b604082019050919050565b60006020820190508181036000830152614c4681614c0a565b9050919050565b6000614c5882613ee5565b9150614c6383613ee5565b9250828201905080821115614c7b57614c7a6146ad565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cb7601b83613dd6565b9150614cc282614c81565b602082019050919050565b60006020820190508181036000830152614ce681614caa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614d2b81613eb9565b92915050565b600060208284031215614d4757614d46613e7d565b5b6000614d5584828501614d1c565b91505092915050565b6000819050919050565b6000614d83614d7e614d7984614d5e565b613fe8565b613ee5565b9050919050565b614d9381614d68565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dce81613ea7565b82525050565b6000614de08383614dc5565b60208301905092915050565b6000602082019050919050565b6000614e0482614d99565b614e0e8185614da4565b9350614e1983614db5565b8060005b83811015614e4a578151614e318882614dd4565b9750614e3c83614dec565b925050600181019050614e1d565b5085935050505092915050565b600060a082019050614e6c6000830188613f91565b614e796020830187614d8a565b8181036040830152614e8b8186614df9565b9050614e9a60608301856141f0565b614ea76080830184613f91565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614eeb82613ee5565b9150614ef683613ee5565b925082614f0657614f05614eb1565b5b828204905092915050565b6000614f1c82613ee5565b9150614f2783613ee5565b9250828202614f3581613ee5565b91508282048414831517614f4c57614f4b6146ad565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614faf602183613dd6565b9150614fba82614f53565b604082019050919050565b60006020820190508181036000830152614fde81614fa2565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203c635c1bdd9df8a64741ff362176e881ae7de43ae5c712b068f861398c8a3f1164736f6c63430008110033000000000000000000000000f41ce799cff7430fb7daa899e090d0d0419ab248

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80636ddd171311610139578063dd62ed3e116100b6578063f2fde38b1161007a578063f2fde38b146108f7578063f429389014610920578063f7a9159114610937578063f815a84214610962578063f84354f11461098d578063fe9fbb80146109b657610251565b8063dd62ed3e14610814578063e01af92c14610851578063eedeacbe1461087a578063f0b37c04146108a5578063f2cc0c18146108ce57610251565b8063a52fe9bb116100fd578063a52fe9bb1461071f578063a9059cbb14610748578063af9549e014610785578063b6a5d7de146107ae578063cba0e996146107d757610251565b80636ddd17131461062657806370a0823114610651578063946fbdb81461068e57806395d89b41146106b7578063a457c2d7146106e257610251565b80632f54bf6e116101c757806349bd5a5e1161018b57806349bd5a5e1461055357806351bc3c851461057e5780635342acb4146105955780635880b873146105d25780636bc87c3a146105fb57610251565b80632f54bf6e14610448578063313ce5671461048557806339509351146104b05780633bd5d173146104ed5780634549b0391461051657610251565b806318160ddd1161020e57806318160ddd146103515780631bbae6e01461037c5780631ff53b60146103a557806323b872dd146103ce5780632d8381191461040b57610251565b806306fdde0314610256578063095ea7b31461028157806313114a9d146102be57806316022cc4146102e95780631694505e1461032657610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109f3565b6040516102789190613e5b565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613f1b565b610a85565b6040516102b59190613f76565b60405180910390f35b3480156102ca57600080fd5b506102d3610a9c565b6040516102e09190613fa0565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613fbb565b610aa6565b60405161031d9190613f76565b60405180910390f35b34801561033257600080fd5b5061033b610ac6565b6040516103489190614047565b60405180910390f35b34801561035d57600080fd5b50610366610aea565b6040516103739190613fa0565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190614062565b610af4565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906140cd565b610b46565b005b3480156103da57600080fd5b506103f560048036038101906103f091906140fa565b610bd2565b6040516104029190613f76565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d9190614062565b610c9d565b60405161043f9190613fa0565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a9190613fbb565b610d0b565b60405161047c9190613f76565b60405180910390f35b34801561049157600080fd5b5061049a610d64565b6040516104a79190614169565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d29190613f1b565b610d7b565b6040516104e49190613f76565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190614062565b610e20565b005b34801561052257600080fd5b5061053d600480360381019061053891906141b0565b610f94565b60405161054a9190613fa0565b60405180910390f35b34801561055f57600080fd5b50610568611018565b60405161057591906141ff565b60405180910390f35b34801561058a57600080fd5b5061059361103c565b005b3480156105a157600080fd5b506105bc60048036038101906105b79190613fbb565b61109d565b6040516105c99190613f76565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f49190614062565b6110f3565b005b34801561060757600080fd5b50610610611196565b60405161061d9190613fa0565b60405180910390f35b34801561063257600080fd5b5061063b61119c565b6040516106489190613f76565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190613fbb565b6111af565b6040516106859190613fa0565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b0919061427f565b61129a565b005b3480156106c357600080fd5b506106cc611385565b6040516106d99190613e5b565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190613f1b565b611417565b6040516107169190613f76565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190614062565b6114d6565b005b34801561075457600080fd5b5061076f600480360381019061076a9190613f1b565b611579565b60405161077c9190613f76565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a791906142df565b611590565b005b3480156107ba57600080fd5b506107d560048036038101906107d09190613fbb565b611633565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190613fbb565b6116d5565b60405161080b9190613f76565b60405180910390f35b34801561082057600080fd5b5061083b6004803603810190610836919061431f565b61172b565b6040516108489190613fa0565b60405180910390f35b34801561085d57600080fd5b506108786004803603810190610873919061435f565b6117b2565b005b34801561088657600080fd5b5061088f611817565b60405161089c919061439b565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c79190613fbb565b61183d565b005b3480156108da57600080fd5b506108f560048036038101906108f09190613fbb565b6118e0565b005b34801561090357600080fd5b5061091e600480360381019061091991906140cd565b611b47565b005b34801561092c57600080fd5b50610935611c60565b005b34801561094357600080fd5b5061094c611cb9565b6040516109599190613fa0565b60405180910390f35b34801561096e57600080fd5b50610977611cc3565b6040516109849190613fa0565b60405180910390f35b34801561099957600080fd5b506109b460048036038101906109af9190613fbb565b611ccb565b005b3480156109c257600080fd5b506109dd60048036038101906109d89190613fbb565b611fcc565b6040516109ea9190613f76565b60405180910390f35b6060600c8054610a02906143e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2e906143e5565b8015610a7b5780601f10610a5057610100808354040283529160200191610a7b565b820191906000526020600020905b815481529060010190602001808311610a5e57829003601f168201915b5050505050905090565b6000610a92338484612022565b6001905092915050565b6000600b54905090565b60056020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b610afd33610d0b565b610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3390614462565b60405180910390fd5b8060158190555050565b610b4f33610d0b565b610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590614462565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610bdf8484846121eb565b610c928433610c8d85604051806060016040528060288152602001614fe660289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b9092919063ffffffff16565b612022565b600190509392505050565b6000600a54821115610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb906144f4565b60405180910390fd5b6000610cee6125ff565b9050610d03818461262a90919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600e60009054906101000a900460ff16905090565b6000610e163384610e1185600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b612022565b6001905092915050565b6000339050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990614586565b60405180910390fd5b6000610ebd836126d2565b50505050509050610f1681600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f6e81600a5461273990919063ffffffff16565b600a81905550610f8983600b5461267490919063ffffffff16565b600b81905550505050565b6000600954831115610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd2906145f2565b60405180910390fd5b81610ffb576000610feb846126d2565b5050505050905080915050611012565b6000611006846126d2565b50505050915050809150505b92915050565b7f000000000000000000000000b3a193895a9ebbeb417c989d0d704f792ae3141981565b61104533610d0b565b611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b90614462565b60405180910390fd5b600061108f306111af565b905061109a81612783565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110fc33610d0b565b61113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290614462565b60405180910390fd5b6000811015801561114d575060638111155b61118c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111839061465e565b60405180910390fd5b8060108190555050565b600f5481565b601460159054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561124a57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611295565b611292600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c9d565b90505b919050565b6112a333610d0b565b6112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d990614462565b60405180910390fd5b60005b8383905081101561137f5781600560008686858181106113085761130761467e565b5b905060200201602081019061131d9190613fbb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611378906146dc565b90506112e5565b50505050565b6060600d8054611394906143e5565b80601f01602080910402602001604051908101604052809291908181526020018280546113c0906143e5565b801561140d5780601f106113e25761010080835404028352916020019161140d565b820191906000526020600020905b8154815290600101906020018083116113f057829003601f168201915b5050505050905090565b60006114cc33846114c78560405180606001604052806025815260200161500e60259139600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b9092919063ffffffff16565b612022565b6001905092915050565b6114df33610d0b565b61151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590614462565b60405180910390fd5b60018110158015611530575060328111155b61156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690614770565b60405180910390fd5b8060118190555050565b60006115863384846121eb565b6001905092915050565b61159933610d0b565b6115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614462565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61163c33610d0b565b61167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290614462565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117bb33610d0b565b6117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190614462565b60405180910390fd5b80601460156101000a81548160ff02191690831515021790555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61184633610d0b565b611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90614462565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6118e933610d0b565b611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f90614462565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac906147dc565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611a8957611a45600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c9d565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b5033610d0b565b611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690614462565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611c55919061481d565b60405180910390a150565b611c6933610d0b565b611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90614462565b60405180910390fd5b6000479050611cb6816129f4565b50565b6000601554905090565b600047905090565b611cd433610d0b565b611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90614462565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d96906147dc565b60405180910390fd5b60005b600880549050811015611fc8578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611dda57611dd961467e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611fb55760086001600880549050611e349190614838565b81548110611e4557611e4461467e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611e8457611e8361467e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611f7b57611f7a61486c565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611fc8565b8080611fc0906146dc565b915050611da2565b5050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612091576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120889061490d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f79061499f565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121de9190613fa0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361225a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225190614a31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c090614ac3565b60405180910390fd5b6000811161230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390614b55565b60405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090614b9b565b60405180910390fd5b6123a283611fcc565b1580156123b557506123b382611fcc565b155b15612400576015548111156123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690614c2d565b60405180910390fd5b5b600061240b306111af565b9050601554811061241c5760155490505b6000601654821015905060148054906101000a900460ff1615801561244d5750601460159054906101000a900460ff165b80156124565750805b80156124ae57507f000000000000000000000000b3a193895a9ebbeb417c989d0d704f792ae3141973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156124d6576124bc82612783565b600047905060008111156124d4576124d3476129f4565b5b505b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061257d5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561258757600090505b61259386868684612a86565b505050505050565b60008383111582906125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da9190613e5b565b60405180910390fd5b50600083856125f29190614838565b9050809150509392505050565b600080600061260c612d97565b91509150612623818361262a90919063ffffffff16565b9250505090565b600061266c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061304a565b905092915050565b60008082846126839190614c4d565b9050838110156126c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bf90614ccd565b60405180910390fd5b8091505092915050565b60008060008060008060008060006126ef8a6010546011546130ad565b92509250925060006126ff6125ff565b905060008060006127118e8786613143565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061277b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061259b565b905092915050565b60016014806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156127ba576127b9614ced565b5b6040519080825280602002602001820160405280156127e85781602001602082028036833780820191505090505b5090503081600081518110612800576127ff61467e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c99190614d31565b816001815181106128dd576128dc61467e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612942307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612022565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016129a4959493929190614e57565b600060405180830381600087803b1580156129be57600080fd5b505af11580156129d2573d6000803e3d6000fd5b505050505060006014806101000a81548160ff02191690831515021790555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612a576008612a496003866131a190919063ffffffff16565b61262a90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612a82573d6000803e3d6000fd5b5050565b80612a9457612a9361321b565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b375750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b4c57612b47848484613258565b612d83565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bef5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c0457612bff8484846134b8565b612d82565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ca85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cbd57612cb8848484613718565b612d81565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d5f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d7457612d6f8484846138e3565b612d80565b612d7f848484613718565b5b5b5b5b80612d9157612d90613bd8565b5b50505050565b6000806000600a5490506000600954905060005b60088054905081101561300d57826002600060088481548110612dd157612dd061467e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ebf5750816003600060088481548110612e5757612e5661467e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612ed657600a5460095494509450505050613046565b612f666002600060088481548110612ef157612ef061467e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461273990919063ffffffff16565b9250612ff86003600060088481548110612f8357612f8261467e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361273990919063ffffffff16565b91508080613005906146dc565b915050612dab565b50613025600954600a5461262a90919063ffffffff16565b82101561303d57600a54600954935093505050613046565b81819350935050505b9091565b60008083118290613091576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130889190613e5b565b60405180910390fd5b50600083856130a09190614ee0565b9050809150509392505050565b6000806000806130d960646130cb888a6131a190919063ffffffff16565b61262a90919063ffffffff16565b9050600061310360646130f5888b6131a190919063ffffffff16565b61262a90919063ffffffff16565b9050600061312c8261311e858c61273990919063ffffffff16565b61273990919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061315c85886131a190919063ffffffff16565b9050600061317386886131a190919063ffffffff16565b9050600061318a828461273990919063ffffffff16565b905082818395509550955050505093509350939050565b60008083036131b35760009050613215565b600082846131c19190614f11565b90508284826131d09190614ee0565b14613210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320790614fc5565b60405180910390fd5b809150505b92915050565b600060105414801561322f57506000601154145b61325657601054601281905550601154601381905550600060108190555060006011819055505b565b60008060008060008061326a876126d2565b9550955095509550955095506132c887600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061335d86600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133f285600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061343e81613bec565b6134488483613d91565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516134a59190613fa0565b60405180910390a3505050505050505050565b6000806000806000806134ca876126d2565b95509550955095509550955061352886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135bd83600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061365285600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369e81613bec565b6136a88483613d91565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137059190613fa0565b60405180910390a3505050505050505050565b60008060008060008061372a876126d2565b95509550955095509550955061378886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061381d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061386981613bec565b6138738483613d91565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138d09190613fa0565b60405180910390a3505050505050505050565b6000806000806000806138f5876126d2565b95509550955095509550955061395387600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139e886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a7d83600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1285600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b5e81613bec565b613b688483613d91565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613bc59190613fa0565b60405180910390a3505050505050505050565b601254601081905550601354601181905550565b6000613bf66125ff565b90506000613c0d82846131a190919063ffffffff16565b9050613c6181600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d8c57613d4883600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267490919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613da682600a5461273990919063ffffffff16565b600a81905550613dc181600b5461267490919063ffffffff16565b600b819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e05578082015181840152602081019050613dea565b60008484015250505050565b6000601f19601f8301169050919050565b6000613e2d82613dcb565b613e378185613dd6565b9350613e47818560208601613de7565b613e5081613e11565b840191505092915050565b60006020820190508181036000830152613e758184613e22565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613eb282613e87565b9050919050565b613ec281613ea7565b8114613ecd57600080fd5b50565b600081359050613edf81613eb9565b92915050565b6000819050919050565b613ef881613ee5565b8114613f0357600080fd5b50565b600081359050613f1581613eef565b92915050565b60008060408385031215613f3257613f31613e7d565b5b6000613f4085828601613ed0565b9250506020613f5185828601613f06565b9150509250929050565b60008115159050919050565b613f7081613f5b565b82525050565b6000602082019050613f8b6000830184613f67565b92915050565b613f9a81613ee5565b82525050565b6000602082019050613fb56000830184613f91565b92915050565b600060208284031215613fd157613fd0613e7d565b5b6000613fdf84828501613ed0565b91505092915050565b6000819050919050565b600061400d61400861400384613e87565b613fe8565b613e87565b9050919050565b600061401f82613ff2565b9050919050565b600061403182614014565b9050919050565b61404181614026565b82525050565b600060208201905061405c6000830184614038565b92915050565b60006020828403121561407857614077613e7d565b5b600061408684828501613f06565b91505092915050565b600061409a82613e87565b9050919050565b6140aa8161408f565b81146140b557600080fd5b50565b6000813590506140c7816140a1565b92915050565b6000602082840312156140e3576140e2613e7d565b5b60006140f1848285016140b8565b91505092915050565b60008060006060848603121561411357614112613e7d565b5b600061412186828701613ed0565b935050602061413286828701613ed0565b925050604061414386828701613f06565b9150509250925092565b600060ff82169050919050565b6141638161414d565b82525050565b600060208201905061417e600083018461415a565b92915050565b61418d81613f5b565b811461419857600080fd5b50565b6000813590506141aa81614184565b92915050565b600080604083850312156141c7576141c6613e7d565b5b60006141d585828601613f06565b92505060206141e68582860161419b565b9150509250929050565b6141f981613ea7565b82525050565b600060208201905061421460008301846141f0565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261423f5761423e61421a565b5b8235905067ffffffffffffffff81111561425c5761425b61421f565b5b60208301915083602082028301111561427857614277614224565b5b9250929050565b60008060006040848603121561429857614297613e7d565b5b600084013567ffffffffffffffff8111156142b6576142b5613e82565b5b6142c286828701614229565b935093505060206142d58682870161419b565b9150509250925092565b600080604083850312156142f6576142f5613e7d565b5b600061430485828601613ed0565b92505060206143158582860161419b565b9150509250929050565b6000806040838503121561433657614335613e7d565b5b600061434485828601613ed0565b925050602061435585828601613ed0565b9150509250929050565b60006020828403121561437557614374613e7d565b5b60006143838482850161419b565b91505092915050565b6143958161408f565b82525050565b60006020820190506143b0600083018461438c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143fd57607f821691505b6020821081036144105761440f6143b6565b5b50919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b600061444c600683613dd6565b915061445782614416565b602082019050919050565b6000602082019050818103600083015261447b8161443f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006144de602a83613dd6565b91506144e982614482565b604082019050919050565b6000602082019050818103600083015261450d816144d1565b9050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000614570602c83613dd6565b915061457b82614514565b604082019050919050565b6000602082019050818103600083015261459f81614563565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006145dc601f83613dd6565b91506145e7826145a6565b602082019050919050565b6000602082019050818103600083015261460b816145cf565b9050919050565b7f7461784665652073686f756c6420626520696e2030202d203939000000000000600082015250565b6000614648601a83613dd6565b915061465382614612565b602082019050919050565b600060208201905081810360008301526146778161463b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146e782613ee5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614719576147186146ad565b5b600182019050919050565b7f4d61726b6574696e674665652073686f756c6420626520696e2031202d203530600082015250565b600061475a602083613dd6565b915061476582614724565b602082019050919050565b600060208201905081810360008301526147898161474d565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b60006147c6601b83613dd6565b91506147d182614790565b602082019050919050565b600060208201905081810360008301526147f5816147b9565b9050919050565b600061480782614014565b9050919050565b614817816147fc565b82525050565b6000602082019050614832600083018461480e565b92915050565b600061484382613ee5565b915061484e83613ee5565b9250828203905081811115614866576148656146ad565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148f7602483613dd6565b91506149028261489b565b604082019050919050565b60006020820190508181036000830152614926816148ea565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614989602283613dd6565b91506149948261492d565b604082019050919050565b600060208201905081810360008301526149b88161497c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a1b602583613dd6565b9150614a26826149bf565b604082019050919050565b60006020820190508181036000830152614a4a81614a0e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614aad602383613dd6565b9150614ab882614a51565b604082019050919050565b60006020820190508181036000830152614adc81614aa0565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614b3f602983613dd6565b9150614b4a82614ae3565b604082019050919050565b60006020820190508181036000830152614b6e81614b32565b9050919050565b50565b6000614b85600083613dd6565b9150614b9082614b75565b600082019050919050565b60006020820190508181036000830152614bb481614b78565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614c17602883613dd6565b9150614c2282614bbb565b604082019050919050565b60006020820190508181036000830152614c4681614c0a565b9050919050565b6000614c5882613ee5565b9150614c6383613ee5565b9250828201905080821115614c7b57614c7a6146ad565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cb7601b83613dd6565b9150614cc282614c81565b602082019050919050565b60006020820190508181036000830152614ce681614caa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614d2b81613eb9565b92915050565b600060208284031215614d4757614d46613e7d565b5b6000614d5584828501614d1c565b91505092915050565b6000819050919050565b6000614d83614d7e614d7984614d5e565b613fe8565b613ee5565b9050919050565b614d9381614d68565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dce81613ea7565b82525050565b6000614de08383614dc5565b60208301905092915050565b6000602082019050919050565b6000614e0482614d99565b614e0e8185614da4565b9350614e1983614db5565b8060005b83811015614e4a578151614e318882614dd4565b9750614e3c83614dec565b925050600181019050614e1d565b5085935050505092915050565b600060a082019050614e6c6000830188613f91565b614e796020830187614d8a565b8181036040830152614e8b8186614df9565b9050614e9a60608301856141f0565b614ea76080830184613f91565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614eeb82613ee5565b9150614ef683613ee5565b925082614f0657614f05614eb1565b5b828204905092915050565b6000614f1c82613ee5565b9150614f2783613ee5565b9250828202614f3581613ee5565b91508282048414831517614f4c57614f4b6146ad565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614faf602183613dd6565b9150614fba82614f53565b604082019050919050565b60006020820190508181036000830152614fde81614fa2565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203c635c1bdd9df8a64741ff362176e881ae7de43ae5c712b068f861398c8a3f1164736f6c63430008110033

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

000000000000000000000000f41ce799cff7430fb7daa899e090d0d0419ab248

-----Decoded View---------------
Arg [0] : MarketingWalletAddress (address): 0xF41CE799cfF7430Fb7DAa899e090d0D0419Ab248

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f41ce799cff7430fb7daa899e090d0d0419ab248


Deployed Bytecode Sourcemap

25087:19503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27551:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28534:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30175:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25365:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26156:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27828:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44257:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44071:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28733:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31182:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15114:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27737:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29183:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30270:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30695:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26214:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36101:154;;;;;;;;;;;;;:::i;:::-;;32711:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43642:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25877:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26287:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27931:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44375:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27642:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29487:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43817:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28137:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30009:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14787:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29891:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28342:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36430:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26101:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14957:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31512:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15486:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36263:159;;;;;;;;;;;;;:::i;:::-;;43420:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43523:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31851:476;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15288:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27551:83;27588:13;27621:5;27614:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27551:83;:::o;28534:191::-;28636:4;28658:37;28667:10;28679:7;28688:6;28658:8;:37::i;:::-;28713:4;28706:11;;28534:191;;;;:::o;30175:87::-;30217:7;30244:10;;30237:17;;30175:87;:::o;25365:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;26156:51::-;;;:::o;27828:95::-;27881:7;27908;;27901:14;;27828:95;:::o;44257:110::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44348:11:::1;44333:12;:26;;;;44257:110:::0;:::o;44071:178::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44219:22:::1;44193:23;;:48;;;;;;;;;;;;;;;;;;44071:178:::0;:::o;28733:442::-;28865:4;28882:36;28892:6;28900:9;28911:6;28882:9;:36::i;:::-;28929:216;28952:6;28973:10;28998:136;29052:6;28998:136;;;;;;;;;;;;;;;;;:11;:19;29010:6;28998:19;;;;;;;;;;;;;;;:31;29018:10;28998:31;;;;;;;;;;;;;;;;:35;;:136;;;;;:::i;:::-;28929:8;:216::i;:::-;29163:4;29156:11;;28733:442;;;;;:::o;31182:322::-;31276:7;31334;;31323;:18;;31301:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31422:19;31444:10;:8;:10::i;:::-;31422:32;;31472:24;31484:11;31472:7;:11;;:24;;;;:::i;:::-;31465:31;;;31182:322;;;:::o;15114:103::-;15169:4;15204:5;;;;;;;;;;;15193:16;;:7;:16;;;15186:23;;15114:103;;;:::o;27737:83::-;27778:5;27803:9;;;;;;;;;;;27796:16;;27737:83;:::o;29183:296::-;29298:4;29320:129;29343:10;29368:7;29390:48;29427:10;29390:11;:23;29402:10;29390:23;;;;;;;;;;;;;;;:32;29414:7;29390:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;29320:8;:129::i;:::-;29467:4;29460:11;;29183:296;;;;:::o;30270:417::-;30322:14;30339:10;30322:27;;30383:11;:19;30395:6;30383:19;;;;;;;;;;;;;;;;;;;;;;;;;30382:20;30360:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;30486:15;30515:19;30526:7;30515:10;:19::i;:::-;30485:49;;;;;;;30563:28;30583:7;30563;:15;30571:6;30563:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30545:7;:15;30553:6;30545:15;;;;;;;;;;;;;;;:46;;;;30612:20;30624:7;30612;;:11;;:20;;;;:::i;:::-;30602:7;:30;;;;30656:23;30671:7;30656:10;;:14;;:23;;;;:::i;:::-;30643:10;:36;;;;30311:376;;30270:417;:::o;30695:479::-;30813:7;30857;;30846;:18;;30838:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30916:17;30911:256;;30951:15;30980:19;30991:7;30980:10;:19::i;:::-;30950:49;;;;;;;31021:7;31014:14;;;;;30911:256;31064:23;31099:19;31110:7;31099:10;:19::i;:::-;31061:57;;;;;;;31140:15;31133:22;;;30695:479;;;;;:::o;26214:38::-;;;:::o;36101:154::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36153:23:::1;36179:24;36197:4;36179:9;:24::i;:::-;36153:50;;36214:33;36231:15;36214:16;:33::i;:::-;36142:113;36101:154::o:0;32711:124::-;32776:4;32800:18;:27;32819:7;32800:27;;;;;;;;;;;;;;;;;;;;;;;;;32793:34;;32711:124;;;:::o;43642:167::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;43726:1:::1;43716:6;:11;;:27;;;;;43741:2;43731:6;:12;;43716:27;43708:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43795:6;43785:7;:16;;;;43642:167:::0;:::o;25877:32::-;;;;:::o;26287:30::-;;;;;;;;;;;;;:::o;27931:198::-;27997:7;28021:11;:20;28033:7;28021:20;;;;;;;;;;;;;;;;;;;;;;;;;28017:49;;;28050:7;:16;28058:7;28050:16;;;;;;;;;;;;;;;;28043:23;;;;28017:49;28084:37;28104:7;:16;28112:7;28104:16;;;;;;;;;;;;;;;;28084:19;:37::i;:::-;28077:44;;27931:198;;;;:::o;44375:212::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44476:9:::1;44471:109;44491:9;;:16;;44487:1;:20;44471:109;;;44562:6;44529:16;:30;44546:9;;44556:1;44546:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;44529:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;44509:3;;;;:::i;:::-;;;44471:109;;;;44375:212:::0;;;:::o;27642:87::-;27681:13;27714:7;27707:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27642:87;:::o;29487:396::-;29607:4;29629:224;29652:10;29677:7;29699:143;29754:15;29699:143;;;;;;;;;;;;;;;;;:11;:23;29711:10;29699:23;;;;;;;;;;;;;;;:32;29723:7;29699:32;;;;;;;;;;;;;;;;:36;;:143;;;;;:::i;:::-;29629:8;:224::i;:::-;29871:4;29864:11;;29487:396;;;;:::o;43817:246::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;43933:1:::1;43917:12;:17;;:39;;;;;43954:2;43938:12;:18;;43917:39;43895:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;44043:12;44027:13;:28;;;;43817:246:::0;:::o;28137:197::-;28242:4;28264:40;28274:10;28286:9;28297:6;28264:9;:40::i;:::-;28322:4;28315:11;;28137:197;;;;:::o;30009:158::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;30151:8:::1;30121:18;:27;30140:7;30121:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;30009:158:::0;;:::o;14787:94::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;14869:4:::1;14847:14:::0;:19:::1;14862:3;14847:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;14787:94:::0;:::o;29891:110::-;29949:4;29973:11;:20;29985:7;29973:20;;;;;;;;;;;;;;;;;;;;;;;;;29966:27;;29891:110;;;:::o;28342:184::-;28459:7;28491:11;:18;28503:5;28491:18;;;;;;;;;;;;;;;:27;28510:7;28491:27;;;;;;;;;;;;;;;;28484:34;;28342:184;;;;:::o;36430:97::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36512:7:::1;36498:11;;:21;;;;;;;;;;;;;;;;;;36430:97:::0;:::o;26101:46::-;;;;;;;;;;;;;:::o;14957:97::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15041:5:::1;15019:14;:19;15034:3;15019:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;14957:97:::0;:::o;31512:331::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31592:11:::1;:20;31604:7;31592:20;;;;;;;;;;;;;;;;;;;;;;;;;31591:21;31583:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31678:1;31659:7;:16;31667:7;31659:16;;;;;;;;;;;;;;;;:20;31655:109;;;31715:37;31735:7;:16;31743:7;31735:16;;;;;;;;;;;;;;;;31715:19;:37::i;:::-;31696:7;:16;31704:7;31696:16;;;;;;;;;;;;;;;:56;;;;31655:109;31797:4;31774:11;:20;31786:7;31774:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31812:9;31827:7;31812:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31512:331:::0;:::o;15486:173::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15570:3:::1;15562:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;15606:4;15584:14:::0;:19:::1;15599:3;15584:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;15626:25;15647:3;15626:25;;;;;;:::i;:::-;;;;;;;;15486:173:::0;:::o;36263:159::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36315:26:::1;36344:21;36315:50;;36376:38;36395:18;36376;:38::i;:::-;36304:118;36263:159::o:0;43420:95::-;43468:7;43495:12;;43488:19;;43420:95;:::o;43523:111::-;43570:15;43605:21;43598:28;;43523:111;:::o;31851:476::-;14503:19;14511:10;14503:7;:19::i;:::-;14495:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31930:11:::1;:20;31942:7;31930:20;;;;;;;;;;;;;;;;;;;;;;;;;31922:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31998:9;31993:327;32017:9;:16;;;;32013:1;:20;31993:327;;;32075:7;32059:23;;:9;32069:1;32059:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;32055:254:::1;;32118:9;32147:1;32128:9;:16;;;;:20;;;;:::i;:::-;32118:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32103:9;32113:1;32103:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32187:1;32168:7;:16;32176:7;32168:16;;;;;;;;;;;;;;;:20;;;;32230:5;32207:11;:20;32219:7;32207:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32254:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;32288:5;;32055:254;32035:3;;;;;:::i;:::-;;;;31993:327;;;;31851:476:::0;:::o;15288:107::-;15344:4;15368:14;:19;15383:3;15368:19;;;;;;;;;;;;;;;;;;;;;;;;;15361:26;;15288:107;;;:::o;32843:371::-;32987:1;32970:19;;:5;:19;;;32962:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33068:1;33049:21;;:7;:21;;;33041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33152:6;33122:11;:18;33134:5;33122:18;;;;;;;;;;;;;;;:27;33141:7;33122:27;;;;;;;;;;;;;;;:36;;;;33190:7;33174:32;;33183:5;33174:32;;;33199:6;33174:32;;;;;;:::i;:::-;;;;;;;;32843:371;;;:::o;33222:1987::-;33373:1;33355:20;;:6;:20;;;33347:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33457:1;33436:23;;:9;:23;;;33428:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33527:1;33518:6;:10;33510:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33594:16;:24;33611:6;33594:24;;;;;;;;;;;;;;;;;;;;;;;;;33593:25;33585:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33639:20;33652:6;33639:12;:20::i;:::-;33638:21;:49;;;;;33664:23;33677:9;33664:12;:23::i;:::-;33663:24;33638:49;33634:192;;;33738:12;;33728:6;:22;;33702:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;33634:192;34028:28;34059:24;34077:4;34059:9;:24::i;:::-;34028:55;;34124:12;;34100:20;:36;34096:104;;34176:12;;34153:35;;34096:104;34212:24;34276:11;;34239:20;:48;;34212:75;;34317:6;;;;;;;;;;34316:7;:35;;;;;34340:11;;;;;;;;;;;34316:35;:71;;;;;34368:19;34316:71;:111;;;;;34414:13;34404:23;;:6;:23;;;;34316:111;34298:482;;;34545:38;34562:20;34545:16;:38::i;:::-;34600:26;34629:21;34600:50;;34690:1;34669:18;:22;34665:104;;;34712:41;34731:21;34712:18;:41::i;:::-;34665:104;34439:341;34298:482;34853:12;34868:4;34853:19;;34973:18;:26;34992:6;34973:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;35003:18;:29;35022:9;35003:29;;;;;;;;;;;;;;;;;;;;;;;;;34973:59;34969:107;;;35059:5;35049:15;;34969:107;35151:50;35166:6;35174:9;35185:6;35193:7;35151:14;:50::i;:::-;33334:1875;;;33222:1987;;;:::o;3979:226::-;4099:7;4132:1;4127;:6;;4135:12;4119:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4159:9;4175:1;4171;:5;;;;:::i;:::-;4159:17;;4196:1;4189:8;;;3979:226;;;;;:::o;42541:164::-;42583:7;42604:15;42621;42640:19;:17;:19::i;:::-;42603:56;;;;42677:20;42689:7;42677;:11;;:20;;;;:::i;:::-;42670:27;;;;42541:164;:::o;5411:132::-;5469:7;5496:39;5500:1;5503;5496:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5489:46;;5411:132;;;;:::o;3076:181::-;3134:7;3154:9;3170:1;3166;:5;;;;:::i;:::-;3154:17;;3195:1;3190;:6;;3182:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3248:1;3241:8;;;3076:181;;;;:::o;40790:785::-;40890:7;40912;40934;40956;40978;41000;41050:23;41088:12;41115:18;41147:44;41159:7;41168;;41177:13;;41147:11;:44::i;:::-;41035:156;;;;;;41202:19;41224:10;:8;:10::i;:::-;41202:32;;41246:15;41263:23;41288:12;41304:89;41330:7;41352:4;41371:11;41304;:89::i;:::-;41245:148;;;;;;41426:7;41448:15;41478:4;41497:15;41527:4;41546:10;41404:163;;;;;;;;;;;;;;;;;;;40790:785;;;;;;;:::o;3540:136::-;3598:7;3625:43;3629:1;3632;3625:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3618:50;;3540:136;;;;:::o;35217:601::-;26664:4;26655:6;;:13;;;;;;;;;;;;;;;;;;35355:21:::1;35393:1;35379:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35355:40;;35424:4;35406;35411:1;35406:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;35450:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35440:4;35445:1;35440:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;35485:62;35502:4;35517:15;35535:11;35485:8;:62::i;:::-;35586:15;:66;;;35667:11;35693:1;35737:4;35764;35784:15;35586:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35284:534;26700:5:::0;26691:6;;:14;;;;;;;;;;;;;;;;;;35217:601;:::o;35826:125::-;35889:23;;;;;;;;;;;:32;;:54;35922:20;35940:1;35922:13;35933:1;35922:6;:10;;:13;;;;:::i;:::-;:17;;:20;;;;:::i;:::-;35889:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35826:125;:::o;36535:838::-;36691:7;36686:28;;36700:14;:12;:14::i;:::-;36686:28;36731:11;:19;36743:6;36731:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;36755:11;:22;36767:9;36755:22;;;;;;;;;;;;;;;;;;;;;;;;;36754:23;36731:46;36727:597;;;36794:48;36816:6;36824:9;36835:6;36794:21;:48::i;:::-;36727:597;;;36865:11;:19;36877:6;36865:19;;;;;;;;;;;;;;;;;;;;;;;;;36864:20;:46;;;;;36888:11;:22;36900:9;36888:22;;;;;;;;;;;;;;;;;;;;;;;;;36864:46;36860:464;;;36927:46;36947:6;36955:9;36966:6;36927:19;:46::i;:::-;36860:464;;;36996:11;:19;37008:6;36996:19;;;;;;;;;;;;;;;;;;;;;;;;;36995:20;:47;;;;;37020:11;:22;37032:9;37020:22;;;;;;;;;;;;;;;;;;;;;;;;;37019:23;36995:47;36991:333;;;37059:44;37077:6;37085:9;37096:6;37059:17;:44::i;:::-;36991:333;;;37125:11;:19;37137:6;37125:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;37148:11;:22;37160:9;37148:22;;;;;;;;;;;;;;;;;;;;;;;;;37125:45;37121:203;;;37187:48;37209:6;37217:9;37228:6;37187:21;:48::i;:::-;37121:203;;;37268:44;37286:6;37294:9;37305:6;37268:17;:44::i;:::-;37121:203;36991:333;36860:464;36727:597;37341:7;37336:29;;37350:15;:13;:15::i;:::-;37336:29;36535:838;;;;:::o;42713:605::-;42764:7;42773;42793:15;42811:7;;42793:25;;42829:15;42847:7;;42829:25;;42870:9;42865:338;42889:9;:16;;;;42885:1;:20;42865:338;;;42973:7;42949;:21;42957:9;42967:1;42957:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42949:21;;;;;;;;;;;;;;;;:31;:83;;;;43025:7;43001;:21;43009:9;43019:1;43009:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43001:21;;;;;;;;;;;;;;;;:31;42949:83;42927:146;;;43056:7;;43065;;43048:25;;;;;;;;;42927:146;43098:34;43110:7;:21;43118:9;43128:1;43118:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43110:21;;;;;;;;;;;;;;;;43098:7;:11;;:34;;;;:::i;:::-;43088:44;;43157:34;43169:7;:21;43177:9;43187:1;43177:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43169:21;;;;;;;;;;;;;;;;43157:7;:11;;:34;;;;:::i;:::-;43147:44;;42907:3;;;;;:::i;:::-;;;;42865:338;;;;43227:20;43239:7;;43227;;:11;;:20;;;;:::i;:::-;43217:7;:30;43213:61;;;43257:7;;43266;;43249:25;;;;;;;;43213:61;43293:7;43302;43285:25;;;;;;42713:605;;;:::o;6039:312::-;6159:7;6191:1;6187;:5;6194:12;6179:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6218:9;6234:1;6230;:5;;;;:::i;:::-;6218:17;;6342:1;6335:8;;;6039:312;;;;;:::o;41583:492::-;41756:7;41778;41800;41835:12;41850:28;41874:3;41850:19;41862:6;41850:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;41835:43;;41889:18;41910:34;41940:3;41910:25;41922:12;41910:7;:11;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41889:55;;41955:23;41981:33;42003:10;41981:17;41993:4;41981:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;41955:59;;42033:15;42050:4;42056:10;42025:42;;;;;;;;;41583:492;;;;;;;:::o;42083:450::-;42253:7;42275;42297;42332:15;42350:24;42362:11;42350:7;:11;;:24;;;;:::i;:::-;42332:42;;42385:12;42400:21;42409:11;42400:4;:8;;:21;;;;:::i;:::-;42385:36;;42432:23;42458:17;42470:4;42458:7;:11;;:17;;;;:::i;:::-;42432:43;;42494:7;42503:15;42520:4;42486:39;;;;;;;;;42083:450;;;;;;;:::o;4464:471::-;4522:7;4772:1;4767;:6;4763:47;;4797:1;4790:8;;;;4763:47;4822:9;4838:1;4834;:5;;;;:::i;:::-;4822:17;;4867:1;4862;4858;:5;;;;:::i;:::-;:10;4850:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;4926:1;4919:8;;;4464:471;;;;;:::o;32335:235::-;32393:1;32382:7;;:12;:34;;;;;32415:1;32398:13;;:18;32382:34;32418:7;32378:47;32455:7;;32437:15;:25;;;;32497:13;;32473:21;:37;;;;32533:1;32523:7;:11;;;;32561:1;32545:13;:17;;;;32335:235;:::o;38720:686::-;38871:15;38901:23;38939:12;38966:23;39004:12;39031:18;39063:19;39074:7;39063:10;:19::i;:::-;38856:226;;;;;;;;;;;;39111:28;39131:7;39111;:15;39119:6;39111:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;39093:7;:15;39101:6;39093:15;;;;;;;;;;;;;;;:46;;;;39168:28;39188:7;39168;:15;39176:6;39168:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;39150:7;:15;39158:6;39150:15;;;;;;;;;;;;;;;:46;;;;39228:39;39251:15;39228:7;:18;39236:9;39228:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;39207:7;:18;39215:9;39207:18;;;;;;;;;;;;;;;:60;;;;39278:26;39293:10;39278:14;:26::i;:::-;39315:23;39327:4;39333;39315:11;:23::i;:::-;39371:9;39354:44;;39363:6;39354:44;;;39382:15;39354:44;;;;;;:::i;:::-;;;;;;;;38845:561;;;;;;38720:686;;;:::o;38014:698::-;38163:15;38193:23;38231:12;38258:23;38296:12;38323:18;38355:19;38366:7;38355:10;:19::i;:::-;38148:226;;;;;;;;;;;;38403:28;38423:7;38403;:15;38411:6;38403:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38385:7;:15;38393:6;38385:15;;;;;;;;;;;;;;;:46;;;;38463:39;38486:15;38463:7;:18;38471:9;38463:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38442:7;:18;38450:9;38442:18;;;;;;;;;;;;;;;:60;;;;38534:39;38557:15;38534:7;:18;38542:9;38534:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38513:7;:18;38521:9;38513:18;;;;;;;;;;;;;;;:60;;;;38584:26;38599:10;38584:14;:26::i;:::-;38621:23;38633:4;38639;38621:11;:23::i;:::-;38677:9;38660:44;;38669:6;38660:44;;;38688:15;38660:44;;;;;;:::i;:::-;;;;;;;;38137:575;;;;;;38014:698;;;:::o;37381:625::-;37528:15;37558:23;37596:12;37623:23;37661:12;37688:18;37720:19;37731:7;37720:10;:19::i;:::-;37513:226;;;;;;;;;;;;37768:28;37788:7;37768;:15;37776:6;37768:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37750:7;:15;37758:6;37750:15;;;;;;;;;;;;;;;:46;;;;37828:39;37851:15;37828:7;:18;37836:9;37828:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37807:7;:18;37815:9;37807:18;;;;;;;;;;;;;;;:60;;;;37878:26;37893:10;37878:14;:26::i;:::-;37915:23;37927:4;37933;37915:11;:23::i;:::-;37971:9;37954:44;;37963:6;37954:44;;;37982:15;37954:44;;;;;;:::i;:::-;;;;;;;;37502:504;;;;;;37381:625;;;:::o;39414:757::-;39565:15;39595:23;39633:12;39660:23;39698:12;39725:18;39757:19;39768:7;39757:10;:19::i;:::-;39550:226;;;;;;;;;;;;39805:28;39825:7;39805;:15;39813:6;39805:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;39787:7;:15;39795:6;39787:15;;;;;;;;;;;;;;;:46;;;;39862:28;39882:7;39862;:15;39870:6;39862:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;39844:7;:15;39852:6;39844:15;;;;;;;;;;;;;;;:46;;;;39922:39;39945:15;39922:7;:18;39930:9;39922:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;39901:7;:18;39909:9;39901:18;;;;;;;;;;;;;;;:60;;;;39993:39;40016:15;39993:7;:18;40001:9;39993:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;39972:7;:18;39980:9;39972:18;;;;;;;;;;;;;;;:60;;;;40043:26;40058:10;40043:14;:26::i;:::-;40080:23;40092:4;40098;40080:11;:23::i;:::-;40136:9;40119:44;;40128:6;40119:44;;;40147:15;40119:44;;;;;;:::i;:::-;;;;;;;;39539:632;;;;;;39414:757;;;:::o;32578:125::-;32632:15;;32622:7;:25;;;;32674:21;;32658:13;:37;;;;32578:125::o;40179:355::-;40242:19;40264:10;:8;:10::i;:::-;40242:32;;40285:18;40306:27;40321:11;40306:10;:14;;:27;;;;:::i;:::-;40285:48;;40369:38;40396:10;40369:7;:22;40385:4;40369:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40344:7;:22;40360:4;40344:22;;;;;;;;;;;;;;;:63;;;;40422:11;:26;40442:4;40422:26;;;;;;;;;;;;;;;;;;;;;;;;;40418:108;;;40488:38;40515:10;40488:7;:22;40504:4;40488:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40463:7;:22;40479:4;40463:22;;;;;;;;;;;;;;;:63;;;;40418:108;40231:303;;40179:355;:::o;40542:147::-;40620:17;40632:4;40620:7;;:11;;:17;;;;:::i;:::-;40610:7;:27;;;;40661:20;40676:4;40661:10;;:14;;:20;;;;:::i;:::-;40648:10;:33;;;;40542: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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:104::-;5491:7;5520:24;5538:5;5520:24;:::i;:::-;5509:35;;5446:104;;;:::o;5556:138::-;5637:32;5663:5;5637:32;:::i;:::-;5630:5;5627:43;5617:71;;5684:1;5681;5674:12;5617:71;5556:138;:::o;5700:155::-;5754:5;5792:6;5779:20;5770:29;;5808:41;5843:5;5808:41;:::i;:::-;5700:155;;;;:::o;5861:345::-;5928:6;5977:2;5965:9;5956:7;5952:23;5948:32;5945:119;;;5983:79;;:::i;:::-;5945:119;6103:1;6128:61;6181:7;6172:6;6161:9;6157:22;6128:61;:::i;:::-;6118:71;;6074:125;5861:345;;;;:::o;6212:619::-;6289:6;6297;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6480:1;6505:53;6550:7;6541:6;6530:9;6526:22;6505:53;:::i;:::-;6495:63;;6451:117;6607:2;6633:53;6678:7;6669:6;6658:9;6654:22;6633:53;:::i;:::-;6623:63;;6578:118;6735:2;6761:53;6806:7;6797:6;6786:9;6782:22;6761:53;:::i;:::-;6751:63;;6706:118;6212:619;;;;;:::o;6837:86::-;6872:7;6912:4;6905:5;6901:16;6890:27;;6837:86;;;:::o;6929:112::-;7012:22;7028:5;7012:22;:::i;:::-;7007:3;7000:35;6929:112;;:::o;7047:214::-;7136:4;7174:2;7163:9;7159:18;7151:26;;7187:67;7251:1;7240:9;7236:17;7227:6;7187:67;:::i;:::-;7047:214;;;;:::o;7267:116::-;7337:21;7352:5;7337:21;:::i;:::-;7330:5;7327:32;7317:60;;7373:1;7370;7363:12;7317:60;7267:116;:::o;7389:133::-;7432:5;7470:6;7457:20;7448:29;;7486:30;7510:5;7486:30;:::i;:::-;7389:133;;;;:::o;7528:468::-;7593:6;7601;7650:2;7638:9;7629:7;7625:23;7621:32;7618:119;;;7656:79;;:::i;:::-;7618:119;7776:1;7801:53;7846:7;7837:6;7826:9;7822:22;7801:53;:::i;:::-;7791:63;;7747:117;7903:2;7929:50;7971:7;7962:6;7951:9;7947:22;7929:50;:::i;:::-;7919:60;;7874:115;7528:468;;;;;:::o;8002:118::-;8089:24;8107:5;8089:24;:::i;:::-;8084:3;8077:37;8002:118;;:::o;8126:222::-;8219:4;8257:2;8246:9;8242:18;8234:26;;8270:71;8338:1;8327:9;8323:17;8314:6;8270:71;:::i;:::-;8126:222;;;;:::o;8354:117::-;8463:1;8460;8453:12;8477:117;8586:1;8583;8576:12;8600:117;8709:1;8706;8699:12;8740:568;8813:8;8823:6;8873:3;8866:4;8858:6;8854:17;8850:27;8840:122;;8881:79;;:::i;:::-;8840:122;8994:6;8981:20;8971:30;;9024:18;9016:6;9013:30;9010:117;;;9046:79;;:::i;:::-;9010:117;9160:4;9152:6;9148:17;9136:29;;9214:3;9206:4;9198:6;9194:17;9184:8;9180:32;9177:41;9174:128;;;9221:79;;:::i;:::-;9174:128;8740:568;;;;;:::o;9314:698::-;9406:6;9414;9422;9471:2;9459:9;9450:7;9446:23;9442:32;9439:119;;;9477:79;;:::i;:::-;9439:119;9625:1;9614:9;9610:17;9597:31;9655:18;9647:6;9644:30;9641:117;;;9677:79;;:::i;:::-;9641:117;9790:80;9862:7;9853:6;9842:9;9838:22;9790:80;:::i;:::-;9772:98;;;;9568:312;9919:2;9945:50;9987:7;9978:6;9967:9;9963:22;9945:50;:::i;:::-;9935:60;;9890:115;9314:698;;;;;:::o;10018:468::-;10083:6;10091;10140:2;10128:9;10119:7;10115:23;10111:32;10108:119;;;10146:79;;:::i;:::-;10108:119;10266:1;10291:53;10336:7;10327:6;10316:9;10312:22;10291:53;:::i;:::-;10281:63;;10237:117;10393:2;10419:50;10461:7;10452:6;10441:9;10437:22;10419:50;:::i;:::-;10409:60;;10364:115;10018:468;;;;;:::o;10492:474::-;10560:6;10568;10617:2;10605:9;10596:7;10592:23;10588:32;10585:119;;;10623:79;;:::i;:::-;10585:119;10743:1;10768:53;10813:7;10804:6;10793:9;10789:22;10768:53;:::i;:::-;10758:63;;10714:117;10870:2;10896:53;10941:7;10932:6;10921:9;10917:22;10896:53;:::i;:::-;10886:63;;10841:118;10492:474;;;;;:::o;10972:323::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11203:1;11228:50;11270:7;11261:6;11250:9;11246:22;11228:50;:::i;:::-;11218:60;;11174:114;10972:323;;;;:::o;11301:142::-;11404:32;11430:5;11404:32;:::i;:::-;11399:3;11392:45;11301:142;;:::o;11449:254::-;11558:4;11596:2;11585:9;11581:18;11573:26;;11609:87;11693:1;11682:9;11678:17;11669:6;11609:87;:::i;:::-;11449:254;;;;:::o;11709:180::-;11757:77;11754:1;11747:88;11854:4;11851:1;11844:15;11878:4;11875:1;11868:15;11895:320;11939:6;11976:1;11970:4;11966:12;11956:22;;12023:1;12017:4;12013:12;12044:18;12034:81;;12100:4;12092:6;12088:17;12078:27;;12034:81;12162:2;12154:6;12151:14;12131:18;12128:38;12125:84;;12181:18;;:::i;:::-;12125:84;11946:269;11895:320;;;:::o;12221:156::-;12361:8;12357:1;12349:6;12345:14;12338:32;12221:156;:::o;12383:365::-;12525:3;12546:66;12610:1;12605:3;12546:66;:::i;:::-;12539:73;;12621:93;12710:3;12621:93;:::i;:::-;12739:2;12734:3;12730:12;12723:19;;12383:365;;;:::o;12754:419::-;12920:4;12958:2;12947:9;12943:18;12935:26;;13007:9;13001:4;12997:20;12993:1;12982:9;12978:17;12971:47;13035:131;13161:4;13035:131;:::i;:::-;13027:139;;12754:419;;;:::o;13179:229::-;13319:34;13315:1;13307:6;13303:14;13296:58;13388:12;13383:2;13375:6;13371:15;13364:37;13179:229;:::o;13414:366::-;13556:3;13577:67;13641:2;13636:3;13577:67;:::i;:::-;13570:74;;13653:93;13742:3;13653:93;:::i;:::-;13771:2;13766:3;13762:12;13755:19;;13414:366;;;:::o;13786:419::-;13952:4;13990:2;13979:9;13975:18;13967:26;;14039:9;14033:4;14029:20;14025:1;14014:9;14010:17;14003:47;14067:131;14193:4;14067:131;:::i;:::-;14059:139;;13786:419;;;:::o;14211:231::-;14351:34;14347:1;14339:6;14335:14;14328:58;14420:14;14415:2;14407:6;14403:15;14396:39;14211:231;:::o;14448:366::-;14590:3;14611:67;14675:2;14670:3;14611:67;:::i;:::-;14604:74;;14687:93;14776:3;14687:93;:::i;:::-;14805:2;14800:3;14796:12;14789:19;;14448:366;;;:::o;14820:419::-;14986:4;15024:2;15013:9;15009:18;15001:26;;15073:9;15067:4;15063:20;15059:1;15048:9;15044:17;15037:47;15101:131;15227:4;15101:131;:::i;:::-;15093:139;;14820:419;;;:::o;15245:181::-;15385:33;15381:1;15373:6;15369:14;15362:57;15245:181;:::o;15432:366::-;15574:3;15595:67;15659:2;15654:3;15595:67;:::i;:::-;15588:74;;15671:93;15760:3;15671:93;:::i;:::-;15789:2;15784:3;15780:12;15773:19;;15432:366;;;:::o;15804:419::-;15970:4;16008:2;15997:9;15993:18;15985:26;;16057:9;16051:4;16047:20;16043:1;16032:9;16028:17;16021:47;16085:131;16211:4;16085:131;:::i;:::-;16077:139;;15804:419;;;:::o;16229:176::-;16369:28;16365:1;16357:6;16353:14;16346:52;16229:176;:::o;16411:366::-;16553:3;16574:67;16638:2;16633:3;16574:67;:::i;:::-;16567:74;;16650:93;16739:3;16650:93;:::i;:::-;16768:2;16763:3;16759:12;16752:19;;16411:366;;;:::o;16783:419::-;16949:4;16987:2;16976:9;16972:18;16964:26;;17036:9;17030:4;17026:20;17022:1;17011:9;17007:17;17000:47;17064:131;17190:4;17064:131;:::i;:::-;17056:139;;16783:419;;;:::o;17208:180::-;17256:77;17253:1;17246:88;17353:4;17350:1;17343:15;17377:4;17374:1;17367:15;17394:180;17442:77;17439:1;17432:88;17539:4;17536:1;17529:15;17563:4;17560:1;17553:15;17580:233;17619:3;17642:24;17660:5;17642:24;:::i;:::-;17633:33;;17688:66;17681:5;17678:77;17675:103;;17758:18;;:::i;:::-;17675:103;17805:1;17798:5;17794:13;17787:20;;17580:233;;;:::o;17819:182::-;17959:34;17955:1;17947:6;17943:14;17936:58;17819:182;:::o;18007:366::-;18149:3;18170:67;18234:2;18229:3;18170:67;:::i;:::-;18163:74;;18246:93;18335:3;18246:93;:::i;:::-;18364:2;18359:3;18355:12;18348:19;;18007:366;;;:::o;18379:419::-;18545:4;18583:2;18572:9;18568:18;18560:26;;18632:9;18626:4;18622:20;18618:1;18607:9;18603:17;18596:47;18660:131;18786:4;18660:131;:::i;:::-;18652:139;;18379:419;;;:::o;18804:177::-;18944:29;18940:1;18932:6;18928:14;18921:53;18804:177;:::o;18987:366::-;19129:3;19150:67;19214:2;19209:3;19150:67;:::i;:::-;19143:74;;19226:93;19315:3;19226:93;:::i;:::-;19344:2;19339:3;19335:12;19328:19;;18987:366;;;:::o;19359:419::-;19525:4;19563:2;19552:9;19548:18;19540:26;;19612:9;19606:4;19602:20;19598:1;19587:9;19583:17;19576:47;19640:131;19766:4;19640:131;:::i;:::-;19632:139;;19359:419;;;:::o;19784:134::-;19842:9;19875:37;19906:5;19875:37;:::i;:::-;19862:50;;19784:134;;;:::o;19924:147::-;20019:45;20058:5;20019:45;:::i;:::-;20014:3;20007:58;19924:147;;:::o;20077:238::-;20178:4;20216:2;20205:9;20201:18;20193:26;;20229:79;20305:1;20294:9;20290:17;20281:6;20229:79;:::i;:::-;20077:238;;;;:::o;20321:194::-;20361:4;20381:20;20399:1;20381:20;:::i;:::-;20376:25;;20415:20;20433:1;20415:20;:::i;:::-;20410:25;;20459:1;20456;20452:9;20444:17;;20483:1;20477:4;20474:11;20471:37;;;20488:18;;:::i;:::-;20471:37;20321:194;;;;:::o;20521:180::-;20569:77;20566:1;20559:88;20666:4;20663:1;20656:15;20690:4;20687:1;20680:15;20707:223;20847:34;20843:1;20835:6;20831:14;20824:58;20916:6;20911:2;20903:6;20899:15;20892:31;20707:223;:::o;20936:366::-;21078:3;21099:67;21163:2;21158:3;21099:67;:::i;:::-;21092:74;;21175:93;21264:3;21175:93;:::i;:::-;21293:2;21288:3;21284:12;21277:19;;20936:366;;;:::o;21308:419::-;21474:4;21512:2;21501:9;21497:18;21489:26;;21561:9;21555:4;21551:20;21547:1;21536:9;21532:17;21525:47;21589:131;21715:4;21589:131;:::i;:::-;21581:139;;21308:419;;;:::o;21733:221::-;21873:34;21869:1;21861:6;21857:14;21850:58;21942:4;21937:2;21929:6;21925:15;21918:29;21733:221;:::o;21960:366::-;22102:3;22123:67;22187:2;22182:3;22123:67;:::i;:::-;22116:74;;22199:93;22288:3;22199:93;:::i;:::-;22317:2;22312:3;22308:12;22301:19;;21960:366;;;:::o;22332:419::-;22498:4;22536:2;22525:9;22521:18;22513:26;;22585:9;22579:4;22575:20;22571:1;22560:9;22556:17;22549:47;22613:131;22739:4;22613:131;:::i;:::-;22605:139;;22332:419;;;:::o;22757:224::-;22897:34;22893:1;22885:6;22881:14;22874:58;22966:7;22961:2;22953:6;22949:15;22942:32;22757:224;:::o;22987:366::-;23129:3;23150:67;23214:2;23209:3;23150:67;:::i;:::-;23143:74;;23226:93;23315:3;23226:93;:::i;:::-;23344:2;23339:3;23335:12;23328:19;;22987:366;;;:::o;23359:419::-;23525:4;23563:2;23552:9;23548:18;23540:26;;23612:9;23606:4;23602:20;23598:1;23587:9;23583:17;23576:47;23640:131;23766:4;23640:131;:::i;:::-;23632:139;;23359:419;;;:::o;23784:222::-;23924:34;23920:1;23912:6;23908:14;23901:58;23993:5;23988:2;23980:6;23976:15;23969:30;23784:222;:::o;24012:366::-;24154:3;24175:67;24239:2;24234:3;24175:67;:::i;:::-;24168:74;;24251:93;24340:3;24251:93;:::i;:::-;24369:2;24364:3;24360:12;24353:19;;24012:366;;;:::o;24384:419::-;24550:4;24588:2;24577:9;24573:18;24565:26;;24637:9;24631:4;24627:20;24623:1;24612:9;24608:17;24601:47;24665:131;24791:4;24665:131;:::i;:::-;24657:139;;24384:419;;;:::o;24809:228::-;24949:34;24945:1;24937:6;24933:14;24926:58;25018:11;25013:2;25005:6;25001:15;24994:36;24809:228;:::o;25043:366::-;25185:3;25206:67;25270:2;25265:3;25206:67;:::i;:::-;25199:74;;25282:93;25371:3;25282:93;:::i;:::-;25400:2;25395:3;25391:12;25384:19;;25043:366;;;:::o;25415:419::-;25581:4;25619:2;25608:9;25604:18;25596:26;;25668:9;25662:4;25658:20;25654:1;25643:9;25639:17;25632:47;25696:131;25822:4;25696:131;:::i;:::-;25688:139;;25415:419;;;:::o;25840:114::-;;:::o;25960:364::-;26102:3;26123:66;26187:1;26182:3;26123:66;:::i;:::-;26116:73;;26198:93;26287:3;26198:93;:::i;:::-;26316:1;26311:3;26307:11;26300:18;;25960:364;;;:::o;26330:419::-;26496:4;26534:2;26523:9;26519:18;26511:26;;26583:9;26577:4;26573:20;26569:1;26558:9;26554:17;26547:47;26611:131;26737:4;26611:131;:::i;:::-;26603:139;;26330:419;;;:::o;26755:227::-;26895:34;26891:1;26883:6;26879:14;26872:58;26964:10;26959:2;26951:6;26947:15;26940:35;26755:227;:::o;26988:366::-;27130:3;27151:67;27215:2;27210:3;27151:67;:::i;:::-;27144:74;;27227:93;27316:3;27227:93;:::i;:::-;27345:2;27340:3;27336:12;27329:19;;26988:366;;;:::o;27360:419::-;27526:4;27564:2;27553:9;27549:18;27541:26;;27613:9;27607:4;27603:20;27599:1;27588:9;27584:17;27577:47;27641:131;27767:4;27641:131;:::i;:::-;27633:139;;27360:419;;;:::o;27785:191::-;27825:3;27844:20;27862:1;27844:20;:::i;:::-;27839:25;;27878:20;27896:1;27878:20;:::i;:::-;27873:25;;27921:1;27918;27914:9;27907:16;;27942:3;27939:1;27936:10;27933:36;;;27949:18;;:::i;:::-;27933:36;27785:191;;;;:::o;27982:177::-;28122:29;28118:1;28110:6;28106:14;28099:53;27982:177;:::o;28165:366::-;28307:3;28328:67;28392:2;28387:3;28328:67;:::i;:::-;28321:74;;28404:93;28493:3;28404:93;:::i;:::-;28522:2;28517:3;28513:12;28506:19;;28165:366;;;:::o;28537:419::-;28703:4;28741:2;28730:9;28726:18;28718:26;;28790:9;28784:4;28780:20;28776:1;28765:9;28761:17;28754:47;28818:131;28944:4;28818:131;:::i;:::-;28810:139;;28537:419;;;:::o;28962:180::-;29010:77;29007:1;29000:88;29107:4;29104:1;29097:15;29131:4;29128:1;29121:15;29148:143;29205:5;29236:6;29230:13;29221:22;;29252:33;29279:5;29252:33;:::i;:::-;29148:143;;;;:::o;29297:351::-;29367:6;29416:2;29404:9;29395:7;29391:23;29387:32;29384:119;;;29422:79;;:::i;:::-;29384:119;29542:1;29567:64;29623:7;29614:6;29603:9;29599:22;29567:64;:::i;:::-;29557:74;;29513:128;29297:351;;;;:::o;29654:85::-;29699:7;29728:5;29717:16;;29654:85;;;:::o;29745:158::-;29803:9;29836:61;29854:42;29863:32;29889:5;29863:32;:::i;:::-;29854:42;:::i;:::-;29836:61;:::i;:::-;29823:74;;29745:158;;;:::o;29909:147::-;30004:45;30043:5;30004:45;:::i;:::-;29999:3;29992:58;29909:147;;:::o;30062:114::-;30129:6;30163:5;30157:12;30147:22;;30062:114;;;:::o;30182:184::-;30281:11;30315:6;30310:3;30303:19;30355:4;30350:3;30346:14;30331:29;;30182:184;;;;:::o;30372:132::-;30439:4;30462:3;30454:11;;30492:4;30487:3;30483:14;30475:22;;30372:132;;;:::o;30510:108::-;30587:24;30605:5;30587:24;:::i;:::-;30582:3;30575:37;30510:108;;:::o;30624:179::-;30693:10;30714:46;30756:3;30748:6;30714:46;:::i;:::-;30792:4;30787:3;30783:14;30769:28;;30624:179;;;;:::o;30809:113::-;30879:4;30911;30906:3;30902:14;30894:22;;30809:113;;;:::o;30958:732::-;31077:3;31106:54;31154:5;31106:54;:::i;:::-;31176:86;31255:6;31250:3;31176:86;:::i;:::-;31169:93;;31286:56;31336:5;31286:56;:::i;:::-;31365:7;31396:1;31381:284;31406:6;31403:1;31400:13;31381:284;;;31482:6;31476:13;31509:63;31568:3;31553:13;31509:63;:::i;:::-;31502:70;;31595:60;31648:6;31595:60;:::i;:::-;31585:70;;31441:224;31428:1;31425;31421:9;31416:14;;31381:284;;;31385:14;31681:3;31674:10;;31082:608;;;30958:732;;;;:::o;31696:831::-;31959:4;31997:3;31986:9;31982:19;31974:27;;32011:71;32079:1;32068:9;32064:17;32055:6;32011:71;:::i;:::-;32092:80;32168:2;32157:9;32153:18;32144:6;32092:80;:::i;:::-;32219:9;32213:4;32209:20;32204:2;32193:9;32189:18;32182:48;32247:108;32350:4;32341:6;32247:108;:::i;:::-;32239:116;;32365:72;32433:2;32422:9;32418:18;32409:6;32365:72;:::i;:::-;32447:73;32515:3;32504:9;32500:19;32491:6;32447:73;:::i;:::-;31696:831;;;;;;;;:::o;32533:180::-;32581:77;32578:1;32571:88;32678:4;32675:1;32668:15;32702:4;32699:1;32692:15;32719:185;32759:1;32776:20;32794:1;32776:20;:::i;:::-;32771:25;;32810:20;32828:1;32810:20;:::i;:::-;32805:25;;32849:1;32839:35;;32854:18;;:::i;:::-;32839:35;32896:1;32893;32889:9;32884:14;;32719:185;;;;:::o;32910:410::-;32950:7;32973:20;32991:1;32973:20;:::i;:::-;32968:25;;33007:20;33025:1;33007:20;:::i;:::-;33002:25;;33062:1;33059;33055:9;33084:30;33102:11;33084:30;:::i;:::-;33073:41;;33263:1;33254:7;33250:15;33247:1;33244:22;33224:1;33217:9;33197:83;33174:139;;33293:18;;:::i;:::-;33174:139;32958:362;32910:410;;;;:::o;33326:220::-;33466:34;33462:1;33454:6;33450:14;33443:58;33535:3;33530:2;33522:6;33518:15;33511:28;33326:220;:::o;33552:366::-;33694:3;33715:67;33779:2;33774:3;33715:67;:::i;:::-;33708:74;;33791:93;33880:3;33791:93;:::i;:::-;33909:2;33904:3;33900:12;33893:19;;33552:366;;;:::o;33924:419::-;34090:4;34128:2;34117:9;34113:18;34105:26;;34177:9;34171:4;34167:20;34163:1;34152:9;34148:17;34141:47;34205:131;34331:4;34205:131;:::i;:::-;34197:139;;33924:419;;;:::o

Swarm Source

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