ETH Price: $3,078.40 (-1.37%)

Token

Donald (TRUMP)
 

Overview

Max Total Supply

1,000,000,000,000 TRUMP

Holders

721

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
maddymommy.eth
Balance
0.000000221 TRUMP

Value
$0.00
0x35ac249ae981d322b257d8a03792cb0819759fdb
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:
Token

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-28
*/

//SPDX-License-Identifier: Unlicensed
pragma solidity >=0.7.0 <0.9.0;
abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    mapping(address => uint256) public _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

contract Token is ERC20 {
    using Address for address;

    mapping(address => uint256) cooldown;
    mapping(address => bool) isCooldownExempt;
    mapping(address => bool) isFeeExempt;
    mapping(address => bool) isMaxWalletExempt;
    mapping(address => bool) lpHolder;
    mapping(address => bool) lpPairs;

    address public owner;
    address public autoLiquidityReceiver;
    address public treasuryFeeReceiver;
    address public pair;

    uint256 _totalSupply = 1_000_000_000_000 * (10**9); // total supply amount
    uint256 totalFee;
    uint256 feeAmount;
    uint256 burnedTokens;
    uint feeDenominator = 1000;
    bool tradingOpen;
    struct IFees {
        uint16 liquidityFee;
        uint16 treasuryFee;
        uint16 totalFee;
    }
    struct ICooldown {
        bool buycooldownEnabled;
        bool sellcooldownEnabled;
        uint8 cooldownLimit;
        uint8 cooldownTime;
    }
    struct ITransactionSettings {
        uint256 maxTxAmount;
        uint256 maxWalletAmount;
        bool txLimits;
    }     
    struct ILiquiditySettings {
        uint256 liquidityFeeAccumulator;
        uint256 treasuryFees;
        uint256 numTokensToSwap;
        uint256 lastSwap;
        uint8 swapInterval;
        bool swapEnabled;
        bool inSwap;
        bool feesEnabled;
        bool autoLiquifyEnabled;
    } 
    ICooldown public cooldownInfo;
    IFees public BuyFees;
    IFees public MaxFees;
    IFees public SellFees;
    IFees public TransferFees;
    ILiquiditySettings public LiquiditySettings;
    ITransactionSettings TransactionSettings;
    IUniswapV2Router02 public router;
    modifier onlyOwner() {
        require(isOwner(msg.sender), "You are not the owner");
        _;
    }
    modifier swapping() {
        LiquiditySettings.inSwap = true;
        _;
        LiquiditySettings.inSwap = false;
    }

    constructor(string memory name, string memory symbol, address lpReceiver, address treasuryReceiver) ERC20(name, symbol) {
        owner = _msgSender();
        setFeeReceivers(lpReceiver, treasuryReceiver);
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this));
        lpHolder[_msgSender()] = true;
        lpPairs[pair] = true;

        _approve(address(this), address(router), type(uint256).max);
        _approve(_msgSender(), address(router), type(uint256).max);

        isMaxWalletExempt[_msgSender()] = true;
        isMaxWalletExempt[address(this)] = true;
        isMaxWalletExempt[pair] = true;

        isFeeExempt[address(this)] = true;
        isFeeExempt[_msgSender()] = true;

        isCooldownExempt[_msgSender()] = true;
        isCooldownExempt[pair] = true;
        isCooldownExempt[address(this)] = true;
        isCooldownExempt[address(router)] = true;

        cooldownInfo.buycooldownEnabled = true;
        cooldownInfo.sellcooldownEnabled = true;
        cooldownInfo.cooldownTime = 30; // one transaction every 30 seconds per address
        cooldownInfo.cooldownLimit = 60; // cooldown cannot go over 60 seconds

        TransactionSettings.txLimits = true; // limits in effect

        TransactionSettings.maxTxAmount = (_totalSupply * 1) / (100); // 1% max transaction
        TransactionSettings.maxWalletAmount = (_totalSupply * 2) / 100; // 2% max wallet

        BuyFees = IFees({
            liquidityFee: 0,
            treasuryFee: 10,
            totalFee: 10 // 1%
        });
        SellFees = IFees({
            liquidityFee: 0,
            treasuryFee: 10,
            totalFee: 10 // 1%
        });    
        MaxFees.totalFee = 100; // 20% roundtrip

        LiquiditySettings.swapEnabled = true;
        LiquiditySettings.autoLiquifyEnabled = true;
        LiquiditySettings.swapInterval = 5;
        LiquiditySettings.numTokensToSwap = (_totalSupply * (10)) / (10000);
        LiquiditySettings.feesEnabled = true;

        _mint(_msgSender(), _totalSupply);
    }
    
    receive() external payable {}

    // =============================================================
    //                      OWNERSHIP OPERATIONS
    // =============================================================   
    function renounceOwnership(bool keepLimits) public onlyOwner {
        emit OwnershipRenounced();
        setExemptions(owner, false, false, false, false);
        limitsInEffect(keepLimits);
        owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address, use renounceOwnership Function");
        emit OwnershipTransferred(owner, newOwner);

        if(balanceOf(owner) > 0) _basicTransfer(owner, newOwner, balanceOf(owner));
        setExemptions(owner, false, false, false, false);
        setExemptions(newOwner, true, true, true, false);

        owner = newOwner;
    }

    // =============================================================
    //                      ADMIN OPERATIONS
    // =============================================================  

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        require(amountPercentage <= 100);
        uint256 amountEth = address(this).balance;
        payable(treasuryFeeReceiver).transfer(
            (amountEth * amountPercentage) / 100
        );
        LiquiditySettings.treasuryFees += amountEth * amountPercentage;
    }

    function clearStuckTokens(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0) && _token != address(this));
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }

    function setWalletLimits(uint256 percent, uint256 divisor, bool txOrWallet) external onlyOwner() {
        if(txOrWallet){
            require(percent >= 1 && divisor <= 1000, "Max Transaction must be set above .1%");
            TransactionSettings.maxTxAmount = (_totalSupply * percent) / (divisor);
            emit TxLimitUpdated(TransactionSettings.maxTxAmount);
        } else {
            require(percent >= 1 && divisor <= 100, "Max Wallet must be set above 1%");
            TransactionSettings.maxWalletAmount = (_totalSupply * percent) / divisor;
            emit WalletLimitUpdated(TransactionSettings.maxWalletAmount);
        }
    }

    function setExemptions(address holder, bool lpHolders, bool feeExempt, bool maxWalletExempt, bool CooldownExempt) public onlyOwner(){
        isMaxWalletExempt[holder] = maxWalletExempt;
        isCooldownExempt[holder] = CooldownExempt;
        isFeeExempt[holder] = feeExempt;
        lpHolder[holder] = lpHolders;
    }

    function limitsInEffect(bool limit) public onlyOwner() {
        TransactionSettings.txLimits = limit;
        emit LimitsLifted(limit);
    }

    function setPair(address pairing, bool lpPair) external onlyOwner {
        lpPairs[pairing] = lpPair;
    }

    function setCooldownEnabled(bool buy, bool sell, uint8 _cooldown) external onlyOwner() {
        require(_cooldown <= cooldownInfo.cooldownLimit, "Cooldown time must be below cooldown limit");
        cooldownInfo.cooldownTime = _cooldown;
        cooldownInfo.buycooldownEnabled = buy;
        cooldownInfo.sellcooldownEnabled = sell;
    }

    function launch() internal {
        tradingOpen = true;
        emit Launched();
    }

    function setBuyFees(uint16 _liquidityFee, uint16 _treasuryFee) external onlyOwner {
        require(_liquidityFee + _treasuryFee <= MaxFees.totalFee);
        BuyFees = IFees({
            liquidityFee: _liquidityFee,
            treasuryFee: _treasuryFee,
            totalFee: _liquidityFee + _treasuryFee
        });
    }
    
    function setTransferFees(uint16 _liquidityFee, uint16 _treasuryFee) external onlyOwner {
        require(_liquidityFee + _treasuryFee <= MaxFees.totalFee);
        TransferFees = IFees({
            liquidityFee: _liquidityFee,
            treasuryFee: _treasuryFee,
            totalFee: _liquidityFee + _treasuryFee
        });
    }

    function setSellFees(uint16 _liquidityFee, uint16 _treasuryFee) external onlyOwner {
        require(_liquidityFee + _treasuryFee <= MaxFees.totalFee);
        SellFees = IFees({
            liquidityFee: _liquidityFee,
            treasuryFee: _treasuryFee,
            totalFee: _liquidityFee + _treasuryFee
        });
    } 

    function setMaxFees(uint16 _totalFee) external onlyOwner {
        require(_totalFee <= MaxFees.totalFee);
        MaxFees.totalFee = _totalFee;
    }

    function setFeesEnabled(bool enabled) public onlyOwner {
        LiquiditySettings.feesEnabled = enabled;
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _treasuryFeeReceiver) public onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        treasuryFeeReceiver = _treasuryFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, bool enabled, uint8 interval, uint256 _amount) public onlyOwner{
        LiquiditySettings.swapEnabled = _enabled;
        LiquiditySettings.swapInterval = interval;
        LiquiditySettings.autoLiquifyEnabled = enabled;
        LiquiditySettings.numTokensToSwap = (_totalSupply * (_amount)) / (10000);
    }
    // =============================================================
    //                      INTERNAL OPERATIONS
    // ============================================================= 

    function limits(address from, address to) private view returns (bool) {
        return !isOwner(from)
            && !isOwner(to)
            && tx.origin != owner
            && !lpHolder[from]
            && !lpHolder[to]
            && to != address(0xdead)
            && from != address(this);
    }

    function _transfer(address from, address to, uint256 amount ) internal override {
        if(!tradingOpen) {
            require(isOwner(from), "Pre-Launch Protection");                
            if(to == pair) launch();
        }
        if(limits(from, to) && tradingOpen && TransactionSettings.txLimits){
            if(!isMaxWalletExempt[to]){
                require(amount <= TransactionSettings.maxTxAmount && balanceOf(to) + amount <= TransactionSettings.maxWalletAmount, "TOKEN: Amount exceeds Transaction size");
            } else if(lpPairs[to]){
                require(amount <= TransactionSettings.maxTxAmount, "TOKEN: Amount exceeds Transaction size");
            }
            if (lpPairs[from] && !isCooldownExempt[to] && cooldownInfo.buycooldownEnabled) {
                require(cooldown[to] < block.timestamp, "Recipient must wait until cooldown is over");
                cooldown[to] = block.timestamp + (cooldownInfo.cooldownTime);
            } else if (!isCooldownExempt[from] && cooldownInfo.sellcooldownEnabled){
                require(cooldown[from] <= block.timestamp, "Sender must wait until cooldown is over");
                cooldown[from] = block.timestamp + (cooldownInfo.cooldownTime);
            } 
        }
        if (shouldSwapBack()) {
            swapBack();
        }

        uint256 amountReceived = shouldTakeFee(from) ? takeFee(from, to, amount) : amount;
        _basicTransfer(from, to, amountReceived);
    }

    function _basicTransfer(address from, address to, uint256 amount) internal {
        super._transfer(from, to, amount);
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return LiquiditySettings.feesEnabled && !isFeeExempt[sender];
    }

    function takeFee(address sender, address receiver, uint256 amount) internal returns (uint256) {
        if (isFeeExempt[receiver]) {
            return amount;
        }
        if(lpPairs[receiver]) {            
            totalFee = SellFees.totalFee;         
        } else if(lpPairs[sender]){
            totalFee = BuyFees.totalFee;
        } else {
            totalFee = TransferFees.totalFee;
        }

        feeAmount = (amount * totalFee) / feeDenominator;
        if (LiquiditySettings.autoLiquifyEnabled) {
            LiquiditySettings.liquidityFeeAccumulator += (feeAmount * (BuyFees.liquidityFee + SellFees.liquidityFee)) / ((BuyFees.totalFee + SellFees.totalFee) + (BuyFees.liquidityFee + SellFees.liquidityFee));
        }
        _basicTransfer(sender, address(this), feeAmount); 
        return amount - feeAmount;
    }

    function shouldSwapBack() internal view returns (bool) {
        return
            !lpPairs[_msgSender()] &&
            !LiquiditySettings.inSwap &&
            LiquiditySettings.swapEnabled &&
            block.timestamp >= LiquiditySettings.lastSwap + LiquiditySettings.swapInterval &&
            _balances[address(this)] >= LiquiditySettings.numTokensToSwap;
    }
 
    function swapBack() internal swapping {
        LiquiditySettings.lastSwap = block.timestamp;
        if (LiquiditySettings.liquidityFeeAccumulator >= LiquiditySettings.numTokensToSwap && LiquiditySettings.autoLiquifyEnabled) {
            LiquiditySettings.liquidityFeeAccumulator -= LiquiditySettings.numTokensToSwap;
            uint256 amountToLiquify = LiquiditySettings.numTokensToSwap / 2;

            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = router.WETH();

            uint256 balanceBefore = address(this).balance;

            router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                amountToLiquify,
                0,
                path,
                address(this),
                block.timestamp
            );

            uint256 amountEth = address(this).balance - (balanceBefore);

            router.addLiquidityETH{value: amountEth}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );

        } else {
            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = router.WETH();

            router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                LiquiditySettings.numTokensToSwap,
                0,
                path,
                address(this),
                block.timestamp
            );
            uint256 balance = address(this).balance;

            (bool treasury, ) = payable(treasuryFeeReceiver).call{ value: balance, gas: 30000}("");
            if(treasury) LiquiditySettings.treasuryFees += balance;

        }
    }

    // =============================================================
    //                      PUBLIC OPERATIONS
    // ============================================================= 

    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

    function getTransactionAmounts() external view returns(uint maxTransaction, uint maxWallet, bool transactionLimits){
        if(TransactionSettings.txLimits){
            maxTransaction = TransactionSettings.maxTxAmount / 10**9;
            maxWallet = TransactionSettings.maxWalletAmount / 10**9;
            transactionLimits = TransactionSettings.txLimits;
        } else {
            maxTransaction = totalSupply();
            maxWallet = totalSupply();
            transactionLimits = false;
        }
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function amountBurned() external view returns(uint256 amount) {
        amount = burnedTokens;
    }

    function burn(uint256 amount) external {
        _burn(_msgSender(), amount);
        burnedTokens = _totalSupply - totalSupply();
    }

    function airDropTokens(address[] memory addresses, uint256[] memory amounts) external {
        require(addresses.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < addresses.length; i++) {
            require(balanceOf(_msgSender()) >= amounts[i]);
            _basicTransfer(_msgSender(), addresses[i], amounts[i]*10**9);
        }
    }

    event Launched();
    event WalletLimitUpdated(uint256 amount);
    event TxLimitUpdated(uint256 amount);
    event LimitsLifted(bool limits);
    event OwnershipRenounced();
    event OwnershipTransferred(address oldOwner, address newOwner);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"lpReceiver","type":"address"},{"internalType":"address","name":"treasuryReceiver","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":[],"name":"Launched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"limits","type":"bool"}],"name":"LimitsLifted","type":"event"},{"anonymous":false,"inputs":[],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TxLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WalletLimitUpdated","type":"event"},{"inputs":[],"name":"BuyFees","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiquiditySettings","outputs":[{"internalType":"uint256","name":"liquidityFeeAccumulator","type":"uint256"},{"internalType":"uint256","name":"treasuryFees","type":"uint256"},{"internalType":"uint256","name":"numTokensToSwap","type":"uint256"},{"internalType":"uint256","name":"lastSwap","type":"uint256"},{"internalType":"uint8","name":"swapInterval","type":"uint8"},{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"inSwap","type":"bool"},{"internalType":"bool","name":"feesEnabled","type":"bool"},{"internalType":"bool","name":"autoLiquifyEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxFees","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellFees","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TransferFees","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDropTokens","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":[],"name":"amountBurned","outputs":[{"internalType":"uint256","name":"amount","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":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"clearStuckTokens","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownInfo","outputs":[{"internalType":"bool","name":"buycooldownEnabled","type":"bool"},{"internalType":"bool","name":"sellcooldownEnabled","type":"bool"},{"internalType":"uint8","name":"cooldownLimit","type":"uint8"},{"internalType":"uint8","name":"cooldownTime","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTransactionAmounts","outputs":[{"internalType":"uint256","name":"maxTransaction","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"},{"internalType":"bool","name":"transactionLimits","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"limit","type":"bool"}],"name":"limitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"keepLimits","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_liquidityFee","type":"uint16"},{"internalType":"uint16","name":"_treasuryFee","type":"uint16"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"bool","name":"sell","type":"bool"},{"internalType":"uint8","name":"_cooldown","type":"uint8"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"lpHolders","type":"bool"},{"internalType":"bool","name":"feeExempt","type":"bool"},{"internalType":"bool","name":"maxWalletExempt","type":"bool"},{"internalType":"bool","name":"CooldownExempt","type":"bool"}],"name":"setExemptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_treasuryFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_totalFee","type":"uint16"}],"name":"setMaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairing","type":"address"},{"internalType":"bool","name":"lpPair","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_liquidityFee","type":"uint16"},{"internalType":"uint16","name":"_treasuryFee","type":"uint16"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint8","name":"interval","type":"uint8"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_liquidityFee","type":"uint16"},{"internalType":"uint16","name":"_treasuryFee","type":"uint16"}],"name":"setTransferFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"},{"internalType":"bool","name":"txOrWallet","type":"bool"}],"name":"setWalletLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052683635c9adc5dea00000600f556103e86013553480156200002457600080fd5b5060405162003a4438038062003a44833981016040819052620000479162000909565b835184908490620000609060039060208501906200076a565b508051620000769060049060208401906200076a565b50620000829150503390565b600b80546001600160a01b0319166001600160a01b0392909216919091179055620000ae8282620004f1565b602280546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200010e57600080fd5b505afa15801562000123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001499190620008e4565b6001600160a01b031663c9c65396602260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001a657600080fd5b505afa158015620001bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e19190620008e4565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156200022957600080fd5b505af11580156200023e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002649190620008e4565b600e80546001600160a01b0319166001600160a01b0392909216919091179055600160096000620002923390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e5482168152600a90935291208054909216600117909155602254620002ed913091166000196200057f565b62000307336022546001600160a01b03166000196200057f565b336000818152600860209081526040808320805460ff199081166001908117909255308086528386208054831684179055600e80546001600160a01b039081168852858820805485168617905582885260078752858820805485168617905597875284872080548416851790556006909552838620805483168417905593548616855282852080548216831790559284528184208054841682179055602254909416835290912080548216831790556015805463ffffffff1916631e3c01011790556021805490911682179055600f54606491620003e69190620009d6565b620003f29190620009b3565b601f55600f5460649062000408906002620009d6565b620004149190620009b3565b602090815560408051606080820183526000808352600a8386018190529284018390526016805465ffffffffffff19908116640a000a00009081179092558551938401865291835294820183905292018190526018805490921690921790556017805461ffff60201b1916646400000000179055601e805464ff0000ffff1916640100000105179055600f5461271091620004b09190620009d6565b620004bc9190620009b3565b601c55601e805463ff00000019166301000000179055620004e7620004de3390565b600f54620006a7565b5050505062000a61565b600b546001600160a01b03163314620005515760405162461bcd60e51b815260206004820152601560248201527f596f7520617265206e6f7420746865206f776e6572000000000000000000000060448201526064015b60405180910390fd5b600c80546001600160a01b039384166001600160a01b031991821617909155600d8054929093169116179055565b6001600160a01b038316620005e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000548565b6001600160a01b038216620006465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000548565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620006ff5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000548565b806002600082825462000713919062000998565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b8280546200077890620009f8565b90600052602060002090601f0160209004810192826200079c5760008555620007e7565b82601f10620007b757805160ff1916838001178555620007e7565b82800160010185558215620007e7579182015b82811115620007e7578251825591602001919060010190620007ca565b50620007f5929150620007f9565b5090565b5b80821115620007f55760008155600101620007fa565b80516001600160a01b03811681146200082857600080fd5b919050565b600082601f8301126200083f57600080fd5b81516001600160401b03808211156200085c576200085c62000a4b565b604051601f8301601f19908116603f0116810190828211818310171562000887576200088762000a4b565b81604052838152602092508683858801011115620008a457600080fd5b600091505b83821015620008c85785820183015181830184015290820190620008a9565b83821115620008da5760008385830101525b9695505050505050565b600060208284031215620008f757600080fd5b620009028262000810565b9392505050565b600080600080608085870312156200092057600080fd5b84516001600160401b03808211156200093857600080fd5b62000946888389016200082d565b955060208701519150808211156200095d57600080fd5b506200096c878288016200082d565b9350506200097d6040860162000810565b91506200098d6060860162000810565b905092959194509250565b60008219821115620009ae57620009ae62000a35565b500190565b600082620009d157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620009f357620009f362000a35565b500290565b600181811c9082168062000a0d57607f821691505b6020821081141562000a2f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b612fd38062000a716000396000f3fe60806040526004361061026a5760003560e01c806386a22eff11610144578063b2c57fff116100b6578063dc7703671161007a578063dc77036714610895578063dd62ed3e146108c5578063f2421d2c146108e5578063f2fde38b14610915578063f887ea4014610935578063ff787dc61461095557600080fd5b8063b2c57fff14610776578063b7b69ec514610815578063c40fedc614610835578063ca33e64c14610855578063ccd721311461087557600080fd5b80639ab005f9116101085780639ab005f9146106b6578063a457c2d7146106d6578063a4b45c00146106f6578063a8aa1b3114610716578063a901dd9214610736578063a9059cbb1461075657600080fd5b806386a22eff146105e05780638c9dcf9e146106005780638da5cb5b1461062057806395d89b411461064057806395f93d481461065557600080fd5b80633c310f5e116101dd57806355fb28e4116101a157806355fb28e4146104db578063674a29cb146104fb5780636ebcf6071461052d57806370a082311461055a5780637303df9a146105905780637e926b4b146105c057600080fd5b80633c310f5e1461044657806342966c6814610466578063461a4450146104865780634c57f8d2146104a65780635290d773146104c657600080fd5b806323b872dd1161022f57806323b872dd146103635780632af10fac146103835780632ecd7e8f146103bb5780632f54bf6e146103db578063313ce5671461040a578063395093511461042657600080fd5b8062167e931461027657806306fdde03146102d0578063095ea7b3146102f257806318160ddd146103225780631da1db5e1461034157600080fd5b3661027157005b600080fd5b34801561028257600080fd5b506019546102a69061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060015b60405180910390f35b3480156102dc57600080fd5b506102e5610975565b6040516102c79190612cb4565b3480156102fe57600080fd5b5061031261030d366004612a08565b610a07565b60405190151581526020016102c7565b34801561032e57600080fd5b506002545b6040519081526020016102c7565b34801561034d57600080fd5b5061036161035c366004612c1b565b610a1f565b005b34801561036f57600080fd5b5061031261037e366004612928565b610ad5565b34801561038f57600080fd5b50600d546103a3906001600160a01b031681565b6040516001600160a01b0390911681526020016102c7565b3480156103c757600080fd5b506103616103d6366004612be8565b610afb565b3480156103e757600080fd5b506103126103f63660046128b5565b600b546001600160a01b0391821691161490565b34801561041657600080fd5b50604051600981526020016102c7565b34801561043257600080fd5b50610312610441366004612a08565b610bc2565b34801561045257600080fd5b50610361610461366004612be8565b610be4565b34801561047257600080fd5b50610361610481366004612c1b565b610cab565b34801561049257600080fd5b506103616104a1366004612b37565b610ccb565b3480156104b257600080fd5b506103616104c1366004612a34565b610da4565b3480156104d257600080fd5b50601254610333565b3480156104e757600080fd5b506103616104f6366004612997565b610e97565b34801561050757600080fd5b50610510610f2d565b6040805193845260208401929092521515908201526060016102c7565b34801561053957600080fd5b506103336105483660046128b5565b60006020819052908152604090205481565b34801561056657600080fd5b506103336105753660046128b5565b6001600160a01b031660009081526020819052604090205490565b34801561059c57600080fd5b506017546102a69061ffff80821691620100008104821691600160201b9091041683565b3480156105cc57600080fd5b506103616105db366004612afd565b610f84565b3480156105ec57600080fd5b506103616105fb366004612969565b61100d565b34801561060c57600080fd5b5061036161061b366004612afd565b611062565b34801561062c57600080fd5b50600b546103a3906001600160a01b031681565b34801561064c57600080fd5b506102e56110d3565b34801561066157600080fd5b5060155461068b9060ff808216916101008104821691620100008204811691630100000090041684565b604080519415158552921515602085015260ff918216928401929092521660608201526080016102c7565b3480156106c257600080fd5b506103616106d1366004612b7e565b6110e2565b3480156106e257600080fd5b506103126106f1366004612a08565b611160565b34801561070257600080fd5b506103616107113660046128ef565b6111e6565b34801561072257600080fd5b50600e546103a3906001600160a01b031681565b34801561074257600080fd5b50610361610751366004612afd565b61123e565b34801561076257600080fd5b50610312610771366004612a08565b611286565b34801561078257600080fd5b50601a54601b54601c54601d54601e546107c7949392919060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041689565b60408051998a5260208a019890985296880195909552606087019390935260ff9091166080860152151560a0850152151560c0840152151560e08301521515610100820152610120016102c7565b34801561082157600080fd5b50610361610830366004612be8565b611294565b34801561084157600080fd5b506103126108503660046128ef565b61135b565b34801561086157600080fd5b50600c546103a3906001600160a01b031681565b34801561088157600080fd5b50610361610890366004612c4d565b6114ba565b3480156108a157600080fd5b506016546102a69061ffff80821691620100008104821691600160201b9091041683565b3480156108d157600080fd5b506103336108e03660046128ef565b611658565b3480156108f157600080fd5b506018546102a69061ffff80821691620100008104821691600160201b9091041683565b34801561092157600080fd5b506103616109303660046128b5565b611683565b34801561094157600080fd5b506022546103a3906001600160a01b031681565b34801561096157600080fd5b50610361610970366004612bcd565b611812565b60606003805461098490612eda565b80601f01602080910402602001604051908101604052809291908181526020018280546109b090612eda565b80156109fd5780601f106109d2576101008083540402835291602001916109fd565b820191906000526020600020905b8154815290600101906020018083116109e057829003601f168201915b5050505050905090565b600033610a1581858561187d565b5060019392505050565b600b546001600160a01b03163314610a525760405162461bcd60e51b8152600401610a4990612d4f565b60405180910390fd5b6064811115610a6057600080fd5b600d5447906001600160a01b03166108fc6064610a7d8585612ea4565b610a879190612e82565b6040518115909202916000818181858888f19350505050158015610aaf573d6000803e3d6000fd5b50610aba8282612ea4565b601b8054600090610acc908490612e6a565b90915550505050565b600033610ae38582856119a1565b610aee858585611a1b565b60019150505b9392505050565b600b546001600160a01b03163314610b255760405162461bcd60e51b8152600401610a4990612d4f565b601754600160201b900461ffff16610b3d8284612e44565b61ffff161115610b4c57600080fd5b6040805160608101825261ffff808516825283166020820152908101610b728385612e44565b61ffff908116909152815160168054602085015160409095015192841663ffffffff199091161762010000948416949094029390931765ffff000000001916600160201b91909216021790555050565b600033610a15818585610bd58383611658565b610bdf9190612e6a565b61187d565b600b546001600160a01b03163314610c0e5760405162461bcd60e51b8152600401610a4990612d4f565b601754600160201b900461ffff16610c268284612e44565b61ffff161115610c3557600080fd5b6040805160608101825261ffff808516825283166020820152908101610c5b8385612e44565b61ffff908116909152815160188054602085015160409095015192841663ffffffff199091161762010000948416949094029390931765ffff000000001916600160201b91909216021790555050565b610cb53382611da7565b600254600f54610cc59190612ec3565b60125550565b600b546001600160a01b03163314610cf55760405162461bcd60e51b8152600401610a4990612d4f565b60155460ff6201000090910481169082161115610d675760405162461bcd60e51b815260206004820152602a60248201527f436f6f6c646f776e2074696d65206d7573742062652062656c6f7720636f6f6c604482015269191bdddb881b1a5b5a5d60b21b6064820152608401610a49565b6015805463ff0000ff1916630100000060ff939093169290920260ff1916919091179215159290921761ff00191661010091151591909102179055565b8051825114610ded5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610a49565b60005b82518160ff161015610e9257818160ff1681518110610e1157610e11612f4b565b6020026020010151610e236105753390565b1015610e2e57600080fd5b610e8033848360ff1681518110610e4757610e47612f4b565b6020026020010151848460ff1681518110610e6457610e64612f4b565b6020026020010151633b9aca00610e7b9190612ea4565b611ed9565b80610e8a81612f15565b915050610df0565b505050565b600b546001600160a01b03163314610ec15760405162461bcd60e51b8152600401610a4990612d4f565b6001600160a01b039094166000908152600860209081526040808320805494151560ff1995861617905560068252808320805497151597851697909717909655600781528582208054941515948416949094179093556009909252929020805491151591909216179055565b6021546000908190819060ff1615610f7657601f54610f5190633b9aca0090612e82565b602054909350610f6690633b9aca0090612e82565b60215490925060ff169050909192565b505060025491829150600090565b600b546001600160a01b03163314610fae5760405162461bcd60e51b8152600401610a4990612d4f565b6040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce90600090a1600b54610ff1906001600160a01b03166000808080610e97565b610ffa81611062565b50600b80546001600160a01b0319169055565b600b546001600160a01b031633146110375760405162461bcd60e51b8152600401610a4990612d4f565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b600b546001600160a01b0316331461108c5760405162461bcd60e51b8152600401610a4990612d4f565b6021805460ff19168215159081179091556040519081527f190cf1bdfcaea87520373223c818b71931f9b786e469403c9c0c0cdae19763e79060200160405180910390a150565b60606004805461098490612eda565b600b546001600160a01b0316331461110c5760405162461bcd60e51b8152600401610a4990612d4f565b601e805460ff841664ff0000ffff199091166101008715150264ff000000ff19161717600160201b85151502179055600f546127109061114d908390612ea4565b6111579190612e82565b601c5550505050565b6000338161116e8286611658565b9050838110156111ce5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a49565b6111db828686840361187d565b506001949350505050565b600b546001600160a01b031633146112105760405162461bcd60e51b8152600401610a4990612d4f565b600c80546001600160a01b039384166001600160a01b031991821617909155600d8054929093169116179055565b600b546001600160a01b031633146112685760405162461bcd60e51b8152600401610a4990612d4f565b601e805491151563010000000263ff00000019909216919091179055565b600033610a15818585611a1b565b600b546001600160a01b031633146112be5760405162461bcd60e51b8152600401610a4990612d4f565b601754600160201b900461ffff166112d68284612e44565b61ffff1611156112e557600080fd5b6040805160608101825261ffff80851682528316602082015290810161130b8385612e44565b61ffff908116909152815160198054602085015160409095015192841663ffffffff199091161762010000948416949094029390931765ffff000000001916600160201b91909216021790555050565b600b546000906001600160a01b031633146113885760405162461bcd60e51b8152600401610a4990612d4f565b6001600160a01b038316158015906113a957506001600160a01b0383163014155b6113b257600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156113f457600080fd5b505afa158015611408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142c9190612c34565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561147a57600080fd5b505af115801561148e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b29190612b1a565b949350505050565b600b546001600160a01b031633146114e45760405162461bcd60e51b8152600401610a4990612d4f565b80156115ae57600183101580156114fd57506103e88211155b6115575760405162461bcd60e51b815260206004820152602560248201527f4d6178205472616e73616374696f6e206d757374206265207365742061626f7660448201526465202e312560d81b6064820152608401610a49565b8183600f546115669190612ea4565b6115709190612e82565b601f8190556040519081527fa53407ff336a78b145e1a297adce2a5d7a54e6c31d13b4e69e04aad80b07b44b906020015b60405180910390a1505050565b600183101580156115c0575060648211155b61160c5760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574206d757374206265207365742061626f7665203125006044820152606401610a49565b8183600f5461161b9190612ea4565b6116259190612e82565b60208181556040519182527f199db6b3f784dbaaa5df3981a282a84eb13409a543eaaeb8e8f309c467b45e1891016115a1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600b546001600160a01b031633146116ad5760405162461bcd60e51b8152600401610a4990612d4f565b6001600160a01b0381166117385760405162461bcd60e51b815260206004820152604660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573732c207573652072656e6f756e63654f776e6572736869702046756064820152653731ba34b7b760d11b608482015260a401610a49565b600b54604080516001600160a01b03928316815291831660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a1600b546001600160a01b0316600090815260208190526040902054156117c657600b546001600160a01b03166000818152602081905260409020546117c691908390611ed9565b600b546117e0906001600160a01b03166000808080610e97565b6117f08160018060016000610e97565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b0316331461183c5760405162461bcd60e51b8152600401610a4990612d4f565b60175461ffff600160201b9091048116908216111561185a57600080fd5b6017805461ffff909216600160201b0265ffff0000000019909216919091179055565b6001600160a01b0383166118df5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a49565b6001600160a01b0382166119405760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a49565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006119ad8484611658565b90506000198114611a155781811015611a085760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a49565b611a15848484840361187d565b50505050565b60145460ff16611a9857600b546001600160a01b03848116911614611a7a5760405162461bcd60e51b815260206004820152601560248201527428393296a630bab731b410283937ba32b1ba34b7b760591b6044820152606401610a49565b600e546001600160a01b0383811691161415611a9857611a98611ee4565b611aa28383611f1c565b8015611ab0575060145460ff165b8015611abe575060215460ff165b15611d65576001600160a01b03821660009081526008602052604090205460ff16611b4157601f548111801590611b20575060205481611b13846001600160a01b031660009081526020819052604090205490565b611b1d9190612e6a565b11155b611b3c5760405162461bcd60e51b8152600401610a4990612d09565b611b84565b6001600160a01b0382166000908152600a602052604090205460ff1615611b8457601f54811115611b845760405162461bcd60e51b8152600401610a4990612d09565b6001600160a01b0383166000908152600a602052604090205460ff168015611bc557506001600160a01b03821660009081526006602052604090205460ff16155b8015611bd3575060155460ff165b15611c87576001600160a01b0382166000908152600560205260409020544211611c525760405162461bcd60e51b815260206004820152602a60248201527f526563697069656e74206d757374207761697420756e74696c20636f6f6c646f6044820152693bb71034b99037bb32b960b11b6064820152608401610a49565b601554611c69906301000000900460ff1642612e6a565b6001600160a01b038316600090815260056020526040902055611d65565b6001600160a01b03831660009081526006602052604090205460ff16158015611cb75750601554610100900460ff165b15611d65576001600160a01b038316600090815260056020526040902054421015611d345760405162461bcd60e51b815260206004820152602760248201527f53656e646572206d757374207761697420756e74696c20636f6f6c646f776e2060448201526634b99037bb32b960c91b6064820152608401610a49565b601554611d4b906301000000900460ff1642612e6a565b6001600160a01b0384166000908152600560205260409020555b611d6d611fe4565b15611d7a57611d7a612060565b6000611d85846124ba565b611d8f5781611d9a565b611d9a8484846124f5565b9050611a15848483611ed9565b6001600160a01b038216611e075760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a49565b6001600160a01b03821660009081526020819052604090205481811015611e7b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a49565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b610e92838383612677565b6014805460ff191660011790556040517fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c890600090a1565b6000611f3683600b546001600160a01b0391821691161490565b158015611f515750600b546001600160a01b03838116911614155b8015611f685750600b546001600160a01b03163214155b8015611f8d57506001600160a01b03831660009081526009602052604090205460ff16155b8015611fb257506001600160a01b03821660009081526009602052604090205460ff16155b8015611fc957506001600160a01b03821661dead14155b8015610af457506001600160a01b0383163014159392505050565b336000908152600a602052604081205460ff1615801561200d5750601e5462010000900460ff16155b80156120205750601e54610100900460ff165b801561203e5750601e54601d5461203a9160ff1690612e6a565b4210155b801561205b5750601c543060009081526020819052604090205410155b905090565b601e805462ff000019166201000017905542601d55601c54601a54108015906120925750601e54600160201b900460ff165b156122d857601c54601a80546000906120ac908490612ec3565b9091555050601c546000906120c390600290612e82565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106120fd576120fd612f4b565b6001600160a01b03928316602091820292909201810191909152602254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561215157600080fd5b505afa158015612165573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218991906128d2565b8160018151811061219c5761219c612f4b565b6001600160a01b03928316602091820292909201015260225460405163791ac94760e01b81524792919091169063791ac947906121e6908690600090879030904290600401612d7e565b600060405180830381600087803b15801561220057600080fd5b505af1158015612214573d6000803e3d6000fd5b50505050600081476122269190612ec3565b602254600c5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c4016060604051808303818588803b15801561229357600080fd5b505af11580156122a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122cc9190612c86565b505050505050506124ac565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061230d5761230d612f4b565b6001600160a01b03928316602091820292909201810191909152602254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561236157600080fd5b505afa158015612375573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239991906128d2565b816001815181106123ac576123ac612f4b565b6001600160a01b039283166020918202929092010152602254601c5460405163791ac94760e01b8152919092169163791ac947916123f69190600090869030904290600401612d7e565b600060405180830381600087803b15801561241057600080fd5b505af1158015612424573d6000803e3d6000fd5b5050600d54604051479350600092506001600160a01b039091169061753090849084818181858888f193505050503d806000811461247e576040519150601f19603f3d011682016040523d82523d6000602084013e612483565b606091505b5050905080156124a85781601a60010160008282546124a29190612e6a565b90915550505b5050505b601e805462ff000019169055565b601e546000906301000000900460ff1680156124ef57506001600160a01b03821660009081526007602052604090205460ff16155b92915050565b6001600160a01b03821660009081526007602052604081205460ff161561251d575080610af4565b6001600160a01b0383166000908152600a602052604090205460ff161561255457601854600160201b900461ffff1660105561259d565b6001600160a01b0384166000908152600a602052604090205460ff161561258b57601654600160201b900461ffff1660105561259d565b601954600160201b900461ffff166010555b6013546010546125ad9084612ea4565b6125b79190612e82565b601155601e54600160201b900460ff161561265d576018546016546125e39161ffff9081169116612e44565b6018546016546126069161ffff600160201b918290048116929190910416612e44565b6126109190612e44565b60185460165461ffff9283169261262a9281169116612e44565b61ffff1660115461263b9190612ea4565b6126459190612e82565b601a8054600090612657908490612e6a565b90915550505b61266a8430601154611ed9565b6011546114b29083612ec3565b6001600160a01b0383166126db5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a49565b6001600160a01b03821661273d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a49565b6001600160a01b038316600090815260208190526040902054818110156127b55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a49565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611a15565b600082601f83011261282c57600080fd5b8135602061284161283c83612e20565b612def565b80838252828201915082860187848660051b890101111561286157600080fd5b60005b8581101561288057813584529284019290840190600101612864565b5090979650505050505050565b803561ffff8116811461289f57600080fd5b919050565b803560ff8116811461289f57600080fd5b6000602082840312156128c757600080fd5b8135610af481612f77565b6000602082840312156128e457600080fd5b8151610af481612f77565b6000806040838503121561290257600080fd5b823561290d81612f77565b9150602083013561291d81612f77565b809150509250929050565b60008060006060848603121561293d57600080fd5b833561294881612f77565b9250602084013561295881612f77565b929592945050506040919091013590565b6000806040838503121561297c57600080fd5b823561298781612f77565b9150602083013561291d81612f8f565b600080600080600060a086880312156129af57600080fd5b85356129ba81612f77565b945060208601356129ca81612f8f565b935060408601356129da81612f8f565b925060608601356129ea81612f8f565b915060808601356129fa81612f8f565b809150509295509295909350565b60008060408385031215612a1b57600080fd5b8235612a2681612f77565b946020939093013593505050565b60008060408385031215612a4757600080fd5b823567ffffffffffffffff80821115612a5f57600080fd5b818501915085601f830112612a7357600080fd5b81356020612a8361283c83612e20565b8083825282820191508286018a848660051b8901011115612aa357600080fd5b600096505b84871015612acf578035612abb81612f77565b835260019690960195918301918301612aa8565b5096505086013592505080821115612ae657600080fd5b50612af38582860161281b565b9150509250929050565b600060208284031215612b0f57600080fd5b8135610af481612f8f565b600060208284031215612b2c57600080fd5b8151610af481612f8f565b600080600060608486031215612b4c57600080fd5b8335612b5781612f8f565b92506020840135612b6781612f8f565b9150612b75604085016128a4565b90509250925092565b60008060008060808587031215612b9457600080fd5b8435612b9f81612f8f565b93506020850135612baf81612f8f565b9250612bbd604086016128a4565b9396929550929360600135925050565b600060208284031215612bdf57600080fd5b610af48261288d565b60008060408385031215612bfb57600080fd5b612c048361288d565b9150612c126020840161288d565b90509250929050565b600060208284031215612c2d57600080fd5b5035919050565b600060208284031215612c4657600080fd5b5051919050565b600080600060608486031215612c6257600080fd5b83359250602084013591506040840135612c7b81612f8f565b809150509250925092565b600080600060608486031215612c9b57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015612ce157858101830151858201604001528201612cc5565b81811115612cf3576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f544f4b454e3a20416d6f756e742065786365656473205472616e73616374696f6040820152656e2073697a6560d01b606082015260800190565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612dce5784516001600160a01b031683529383019391830191600101612da9565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612e1857612e18612f61565b604052919050565b600067ffffffffffffffff821115612e3a57612e3a612f61565b5060051b60200190565b600061ffff808316818516808303821115612e6157612e61612f35565b01949350505050565b60008219821115612e7d57612e7d612f35565b500190565b600082612e9f57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612ebe57612ebe612f35565b500290565b600082821015612ed557612ed5612f35565b500390565b600181811c90821680612eee57607f821691505b60208210811415612f0f57634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff811415612f2c57612f2c612f35565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612f8c57600080fd5b50565b8015158114612f8c57600080fdfea26469706673582212209c8c0074d3458ea9367e6a452725384d74f06a2076a37f7293848d871927d72b64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000ace5e4f391646204d7757899539b11f8478ec1d5000000000000000000000000ace5e4f391646204d7757899539b11f8478ec1d50000000000000000000000000000000000000000000000000000000000000006446f6e616c64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055452554d50000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061026a5760003560e01c806386a22eff11610144578063b2c57fff116100b6578063dc7703671161007a578063dc77036714610895578063dd62ed3e146108c5578063f2421d2c146108e5578063f2fde38b14610915578063f887ea4014610935578063ff787dc61461095557600080fd5b8063b2c57fff14610776578063b7b69ec514610815578063c40fedc614610835578063ca33e64c14610855578063ccd721311461087557600080fd5b80639ab005f9116101085780639ab005f9146106b6578063a457c2d7146106d6578063a4b45c00146106f6578063a8aa1b3114610716578063a901dd9214610736578063a9059cbb1461075657600080fd5b806386a22eff146105e05780638c9dcf9e146106005780638da5cb5b1461062057806395d89b411461064057806395f93d481461065557600080fd5b80633c310f5e116101dd57806355fb28e4116101a157806355fb28e4146104db578063674a29cb146104fb5780636ebcf6071461052d57806370a082311461055a5780637303df9a146105905780637e926b4b146105c057600080fd5b80633c310f5e1461044657806342966c6814610466578063461a4450146104865780634c57f8d2146104a65780635290d773146104c657600080fd5b806323b872dd1161022f57806323b872dd146103635780632af10fac146103835780632ecd7e8f146103bb5780632f54bf6e146103db578063313ce5671461040a578063395093511461042657600080fd5b8062167e931461027657806306fdde03146102d0578063095ea7b3146102f257806318160ddd146103225780631da1db5e1461034157600080fd5b3661027157005b600080fd5b34801561028257600080fd5b506019546102a69061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060015b60405180910390f35b3480156102dc57600080fd5b506102e5610975565b6040516102c79190612cb4565b3480156102fe57600080fd5b5061031261030d366004612a08565b610a07565b60405190151581526020016102c7565b34801561032e57600080fd5b506002545b6040519081526020016102c7565b34801561034d57600080fd5b5061036161035c366004612c1b565b610a1f565b005b34801561036f57600080fd5b5061031261037e366004612928565b610ad5565b34801561038f57600080fd5b50600d546103a3906001600160a01b031681565b6040516001600160a01b0390911681526020016102c7565b3480156103c757600080fd5b506103616103d6366004612be8565b610afb565b3480156103e757600080fd5b506103126103f63660046128b5565b600b546001600160a01b0391821691161490565b34801561041657600080fd5b50604051600981526020016102c7565b34801561043257600080fd5b50610312610441366004612a08565b610bc2565b34801561045257600080fd5b50610361610461366004612be8565b610be4565b34801561047257600080fd5b50610361610481366004612c1b565b610cab565b34801561049257600080fd5b506103616104a1366004612b37565b610ccb565b3480156104b257600080fd5b506103616104c1366004612a34565b610da4565b3480156104d257600080fd5b50601254610333565b3480156104e757600080fd5b506103616104f6366004612997565b610e97565b34801561050757600080fd5b50610510610f2d565b6040805193845260208401929092521515908201526060016102c7565b34801561053957600080fd5b506103336105483660046128b5565b60006020819052908152604090205481565b34801561056657600080fd5b506103336105753660046128b5565b6001600160a01b031660009081526020819052604090205490565b34801561059c57600080fd5b506017546102a69061ffff80821691620100008104821691600160201b9091041683565b3480156105cc57600080fd5b506103616105db366004612afd565b610f84565b3480156105ec57600080fd5b506103616105fb366004612969565b61100d565b34801561060c57600080fd5b5061036161061b366004612afd565b611062565b34801561062c57600080fd5b50600b546103a3906001600160a01b031681565b34801561064c57600080fd5b506102e56110d3565b34801561066157600080fd5b5060155461068b9060ff808216916101008104821691620100008204811691630100000090041684565b604080519415158552921515602085015260ff918216928401929092521660608201526080016102c7565b3480156106c257600080fd5b506103616106d1366004612b7e565b6110e2565b3480156106e257600080fd5b506103126106f1366004612a08565b611160565b34801561070257600080fd5b506103616107113660046128ef565b6111e6565b34801561072257600080fd5b50600e546103a3906001600160a01b031681565b34801561074257600080fd5b50610361610751366004612afd565b61123e565b34801561076257600080fd5b50610312610771366004612a08565b611286565b34801561078257600080fd5b50601a54601b54601c54601d54601e546107c7949392919060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041689565b60408051998a5260208a019890985296880195909552606087019390935260ff9091166080860152151560a0850152151560c0840152151560e08301521515610100820152610120016102c7565b34801561082157600080fd5b50610361610830366004612be8565b611294565b34801561084157600080fd5b506103126108503660046128ef565b61135b565b34801561086157600080fd5b50600c546103a3906001600160a01b031681565b34801561088157600080fd5b50610361610890366004612c4d565b6114ba565b3480156108a157600080fd5b506016546102a69061ffff80821691620100008104821691600160201b9091041683565b3480156108d157600080fd5b506103336108e03660046128ef565b611658565b3480156108f157600080fd5b506018546102a69061ffff80821691620100008104821691600160201b9091041683565b34801561092157600080fd5b506103616109303660046128b5565b611683565b34801561094157600080fd5b506022546103a3906001600160a01b031681565b34801561096157600080fd5b50610361610970366004612bcd565b611812565b60606003805461098490612eda565b80601f01602080910402602001604051908101604052809291908181526020018280546109b090612eda565b80156109fd5780601f106109d2576101008083540402835291602001916109fd565b820191906000526020600020905b8154815290600101906020018083116109e057829003601f168201915b5050505050905090565b600033610a1581858561187d565b5060019392505050565b600b546001600160a01b03163314610a525760405162461bcd60e51b8152600401610a4990612d4f565b60405180910390fd5b6064811115610a6057600080fd5b600d5447906001600160a01b03166108fc6064610a7d8585612ea4565b610a879190612e82565b6040518115909202916000818181858888f19350505050158015610aaf573d6000803e3d6000fd5b50610aba8282612ea4565b601b8054600090610acc908490612e6a565b90915550505050565b600033610ae38582856119a1565b610aee858585611a1b565b60019150505b9392505050565b600b546001600160a01b03163314610b255760405162461bcd60e51b8152600401610a4990612d4f565b601754600160201b900461ffff16610b3d8284612e44565b61ffff161115610b4c57600080fd5b6040805160608101825261ffff808516825283166020820152908101610b728385612e44565b61ffff908116909152815160168054602085015160409095015192841663ffffffff199091161762010000948416949094029390931765ffff000000001916600160201b91909216021790555050565b600033610a15818585610bd58383611658565b610bdf9190612e6a565b61187d565b600b546001600160a01b03163314610c0e5760405162461bcd60e51b8152600401610a4990612d4f565b601754600160201b900461ffff16610c268284612e44565b61ffff161115610c3557600080fd5b6040805160608101825261ffff808516825283166020820152908101610c5b8385612e44565b61ffff908116909152815160188054602085015160409095015192841663ffffffff199091161762010000948416949094029390931765ffff000000001916600160201b91909216021790555050565b610cb53382611da7565b600254600f54610cc59190612ec3565b60125550565b600b546001600160a01b03163314610cf55760405162461bcd60e51b8152600401610a4990612d4f565b60155460ff6201000090910481169082161115610d675760405162461bcd60e51b815260206004820152602a60248201527f436f6f6c646f776e2074696d65206d7573742062652062656c6f7720636f6f6c604482015269191bdddb881b1a5b5a5d60b21b6064820152608401610a49565b6015805463ff0000ff1916630100000060ff939093169290920260ff1916919091179215159290921761ff00191661010091151591909102179055565b8051825114610ded5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610a49565b60005b82518160ff161015610e9257818160ff1681518110610e1157610e11612f4b565b6020026020010151610e236105753390565b1015610e2e57600080fd5b610e8033848360ff1681518110610e4757610e47612f4b565b6020026020010151848460ff1681518110610e6457610e64612f4b565b6020026020010151633b9aca00610e7b9190612ea4565b611ed9565b80610e8a81612f15565b915050610df0565b505050565b600b546001600160a01b03163314610ec15760405162461bcd60e51b8152600401610a4990612d4f565b6001600160a01b039094166000908152600860209081526040808320805494151560ff1995861617905560068252808320805497151597851697909717909655600781528582208054941515948416949094179093556009909252929020805491151591909216179055565b6021546000908190819060ff1615610f7657601f54610f5190633b9aca0090612e82565b602054909350610f6690633b9aca0090612e82565b60215490925060ff169050909192565b505060025491829150600090565b600b546001600160a01b03163314610fae5760405162461bcd60e51b8152600401610a4990612d4f565b6040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce90600090a1600b54610ff1906001600160a01b03166000808080610e97565b610ffa81611062565b50600b80546001600160a01b0319169055565b600b546001600160a01b031633146110375760405162461bcd60e51b8152600401610a4990612d4f565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b600b546001600160a01b0316331461108c5760405162461bcd60e51b8152600401610a4990612d4f565b6021805460ff19168215159081179091556040519081527f190cf1bdfcaea87520373223c818b71931f9b786e469403c9c0c0cdae19763e79060200160405180910390a150565b60606004805461098490612eda565b600b546001600160a01b0316331461110c5760405162461bcd60e51b8152600401610a4990612d4f565b601e805460ff841664ff0000ffff199091166101008715150264ff000000ff19161717600160201b85151502179055600f546127109061114d908390612ea4565b6111579190612e82565b601c5550505050565b6000338161116e8286611658565b9050838110156111ce5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a49565b6111db828686840361187d565b506001949350505050565b600b546001600160a01b031633146112105760405162461bcd60e51b8152600401610a4990612d4f565b600c80546001600160a01b039384166001600160a01b031991821617909155600d8054929093169116179055565b600b546001600160a01b031633146112685760405162461bcd60e51b8152600401610a4990612d4f565b601e805491151563010000000263ff00000019909216919091179055565b600033610a15818585611a1b565b600b546001600160a01b031633146112be5760405162461bcd60e51b8152600401610a4990612d4f565b601754600160201b900461ffff166112d68284612e44565b61ffff1611156112e557600080fd5b6040805160608101825261ffff80851682528316602082015290810161130b8385612e44565b61ffff908116909152815160198054602085015160409095015192841663ffffffff199091161762010000948416949094029390931765ffff000000001916600160201b91909216021790555050565b600b546000906001600160a01b031633146113885760405162461bcd60e51b8152600401610a4990612d4f565b6001600160a01b038316158015906113a957506001600160a01b0383163014155b6113b257600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156113f457600080fd5b505afa158015611408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142c9190612c34565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561147a57600080fd5b505af115801561148e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b29190612b1a565b949350505050565b600b546001600160a01b031633146114e45760405162461bcd60e51b8152600401610a4990612d4f565b80156115ae57600183101580156114fd57506103e88211155b6115575760405162461bcd60e51b815260206004820152602560248201527f4d6178205472616e73616374696f6e206d757374206265207365742061626f7660448201526465202e312560d81b6064820152608401610a49565b8183600f546115669190612ea4565b6115709190612e82565b601f8190556040519081527fa53407ff336a78b145e1a297adce2a5d7a54e6c31d13b4e69e04aad80b07b44b906020015b60405180910390a1505050565b600183101580156115c0575060648211155b61160c5760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574206d757374206265207365742061626f7665203125006044820152606401610a49565b8183600f5461161b9190612ea4565b6116259190612e82565b60208181556040519182527f199db6b3f784dbaaa5df3981a282a84eb13409a543eaaeb8e8f309c467b45e1891016115a1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600b546001600160a01b031633146116ad5760405162461bcd60e51b8152600401610a4990612d4f565b6001600160a01b0381166117385760405162461bcd60e51b815260206004820152604660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573732c207573652072656e6f756e63654f776e6572736869702046756064820152653731ba34b7b760d11b608482015260a401610a49565b600b54604080516001600160a01b03928316815291831660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a1600b546001600160a01b0316600090815260208190526040902054156117c657600b546001600160a01b03166000818152602081905260409020546117c691908390611ed9565b600b546117e0906001600160a01b03166000808080610e97565b6117f08160018060016000610e97565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b0316331461183c5760405162461bcd60e51b8152600401610a4990612d4f565b60175461ffff600160201b9091048116908216111561185a57600080fd5b6017805461ffff909216600160201b0265ffff0000000019909216919091179055565b6001600160a01b0383166118df5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a49565b6001600160a01b0382166119405760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a49565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006119ad8484611658565b90506000198114611a155781811015611a085760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a49565b611a15848484840361187d565b50505050565b60145460ff16611a9857600b546001600160a01b03848116911614611a7a5760405162461bcd60e51b815260206004820152601560248201527428393296a630bab731b410283937ba32b1ba34b7b760591b6044820152606401610a49565b600e546001600160a01b0383811691161415611a9857611a98611ee4565b611aa28383611f1c565b8015611ab0575060145460ff165b8015611abe575060215460ff165b15611d65576001600160a01b03821660009081526008602052604090205460ff16611b4157601f548111801590611b20575060205481611b13846001600160a01b031660009081526020819052604090205490565b611b1d9190612e6a565b11155b611b3c5760405162461bcd60e51b8152600401610a4990612d09565b611b84565b6001600160a01b0382166000908152600a602052604090205460ff1615611b8457601f54811115611b845760405162461bcd60e51b8152600401610a4990612d09565b6001600160a01b0383166000908152600a602052604090205460ff168015611bc557506001600160a01b03821660009081526006602052604090205460ff16155b8015611bd3575060155460ff165b15611c87576001600160a01b0382166000908152600560205260409020544211611c525760405162461bcd60e51b815260206004820152602a60248201527f526563697069656e74206d757374207761697420756e74696c20636f6f6c646f6044820152693bb71034b99037bb32b960b11b6064820152608401610a49565b601554611c69906301000000900460ff1642612e6a565b6001600160a01b038316600090815260056020526040902055611d65565b6001600160a01b03831660009081526006602052604090205460ff16158015611cb75750601554610100900460ff165b15611d65576001600160a01b038316600090815260056020526040902054421015611d345760405162461bcd60e51b815260206004820152602760248201527f53656e646572206d757374207761697420756e74696c20636f6f6c646f776e2060448201526634b99037bb32b960c91b6064820152608401610a49565b601554611d4b906301000000900460ff1642612e6a565b6001600160a01b0384166000908152600560205260409020555b611d6d611fe4565b15611d7a57611d7a612060565b6000611d85846124ba565b611d8f5781611d9a565b611d9a8484846124f5565b9050611a15848483611ed9565b6001600160a01b038216611e075760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a49565b6001600160a01b03821660009081526020819052604090205481811015611e7b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a49565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b610e92838383612677565b6014805460ff191660011790556040517fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c890600090a1565b6000611f3683600b546001600160a01b0391821691161490565b158015611f515750600b546001600160a01b03838116911614155b8015611f685750600b546001600160a01b03163214155b8015611f8d57506001600160a01b03831660009081526009602052604090205460ff16155b8015611fb257506001600160a01b03821660009081526009602052604090205460ff16155b8015611fc957506001600160a01b03821661dead14155b8015610af457506001600160a01b0383163014159392505050565b336000908152600a602052604081205460ff1615801561200d5750601e5462010000900460ff16155b80156120205750601e54610100900460ff165b801561203e5750601e54601d5461203a9160ff1690612e6a565b4210155b801561205b5750601c543060009081526020819052604090205410155b905090565b601e805462ff000019166201000017905542601d55601c54601a54108015906120925750601e54600160201b900460ff165b156122d857601c54601a80546000906120ac908490612ec3565b9091555050601c546000906120c390600290612e82565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106120fd576120fd612f4b565b6001600160a01b03928316602091820292909201810191909152602254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561215157600080fd5b505afa158015612165573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218991906128d2565b8160018151811061219c5761219c612f4b565b6001600160a01b03928316602091820292909201015260225460405163791ac94760e01b81524792919091169063791ac947906121e6908690600090879030904290600401612d7e565b600060405180830381600087803b15801561220057600080fd5b505af1158015612214573d6000803e3d6000fd5b50505050600081476122269190612ec3565b602254600c5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c4016060604051808303818588803b15801561229357600080fd5b505af11580156122a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122cc9190612c86565b505050505050506124ac565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061230d5761230d612f4b565b6001600160a01b03928316602091820292909201810191909152602254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561236157600080fd5b505afa158015612375573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239991906128d2565b816001815181106123ac576123ac612f4b565b6001600160a01b039283166020918202929092010152602254601c5460405163791ac94760e01b8152919092169163791ac947916123f69190600090869030904290600401612d7e565b600060405180830381600087803b15801561241057600080fd5b505af1158015612424573d6000803e3d6000fd5b5050600d54604051479350600092506001600160a01b039091169061753090849084818181858888f193505050503d806000811461247e576040519150601f19603f3d011682016040523d82523d6000602084013e612483565b606091505b5050905080156124a85781601a60010160008282546124a29190612e6a565b90915550505b5050505b601e805462ff000019169055565b601e546000906301000000900460ff1680156124ef57506001600160a01b03821660009081526007602052604090205460ff16155b92915050565b6001600160a01b03821660009081526007602052604081205460ff161561251d575080610af4565b6001600160a01b0383166000908152600a602052604090205460ff161561255457601854600160201b900461ffff1660105561259d565b6001600160a01b0384166000908152600a602052604090205460ff161561258b57601654600160201b900461ffff1660105561259d565b601954600160201b900461ffff166010555b6013546010546125ad9084612ea4565b6125b79190612e82565b601155601e54600160201b900460ff161561265d576018546016546125e39161ffff9081169116612e44565b6018546016546126069161ffff600160201b918290048116929190910416612e44565b6126109190612e44565b60185460165461ffff9283169261262a9281169116612e44565b61ffff1660115461263b9190612ea4565b6126459190612e82565b601a8054600090612657908490612e6a565b90915550505b61266a8430601154611ed9565b6011546114b29083612ec3565b6001600160a01b0383166126db5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a49565b6001600160a01b03821661273d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a49565b6001600160a01b038316600090815260208190526040902054818110156127b55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a49565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611a15565b600082601f83011261282c57600080fd5b8135602061284161283c83612e20565b612def565b80838252828201915082860187848660051b890101111561286157600080fd5b60005b8581101561288057813584529284019290840190600101612864565b5090979650505050505050565b803561ffff8116811461289f57600080fd5b919050565b803560ff8116811461289f57600080fd5b6000602082840312156128c757600080fd5b8135610af481612f77565b6000602082840312156128e457600080fd5b8151610af481612f77565b6000806040838503121561290257600080fd5b823561290d81612f77565b9150602083013561291d81612f77565b809150509250929050565b60008060006060848603121561293d57600080fd5b833561294881612f77565b9250602084013561295881612f77565b929592945050506040919091013590565b6000806040838503121561297c57600080fd5b823561298781612f77565b9150602083013561291d81612f8f565b600080600080600060a086880312156129af57600080fd5b85356129ba81612f77565b945060208601356129ca81612f8f565b935060408601356129da81612f8f565b925060608601356129ea81612f8f565b915060808601356129fa81612f8f565b809150509295509295909350565b60008060408385031215612a1b57600080fd5b8235612a2681612f77565b946020939093013593505050565b60008060408385031215612a4757600080fd5b823567ffffffffffffffff80821115612a5f57600080fd5b818501915085601f830112612a7357600080fd5b81356020612a8361283c83612e20565b8083825282820191508286018a848660051b8901011115612aa357600080fd5b600096505b84871015612acf578035612abb81612f77565b835260019690960195918301918301612aa8565b5096505086013592505080821115612ae657600080fd5b50612af38582860161281b565b9150509250929050565b600060208284031215612b0f57600080fd5b8135610af481612f8f565b600060208284031215612b2c57600080fd5b8151610af481612f8f565b600080600060608486031215612b4c57600080fd5b8335612b5781612f8f565b92506020840135612b6781612f8f565b9150612b75604085016128a4565b90509250925092565b60008060008060808587031215612b9457600080fd5b8435612b9f81612f8f565b93506020850135612baf81612f8f565b9250612bbd604086016128a4565b9396929550929360600135925050565b600060208284031215612bdf57600080fd5b610af48261288d565b60008060408385031215612bfb57600080fd5b612c048361288d565b9150612c126020840161288d565b90509250929050565b600060208284031215612c2d57600080fd5b5035919050565b600060208284031215612c4657600080fd5b5051919050565b600080600060608486031215612c6257600080fd5b83359250602084013591506040840135612c7b81612f8f565b809150509250925092565b600080600060608486031215612c9b57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015612ce157858101830151858201604001528201612cc5565b81811115612cf3576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f544f4b454e3a20416d6f756e742065786365656473205472616e73616374696f6040820152656e2073697a6560d01b606082015260800190565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612dce5784516001600160a01b031683529383019391830191600101612da9565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612e1857612e18612f61565b604052919050565b600067ffffffffffffffff821115612e3a57612e3a612f61565b5060051b60200190565b600061ffff808316818516808303821115612e6157612e61612f35565b01949350505050565b60008219821115612e7d57612e7d612f35565b500190565b600082612e9f57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612ebe57612ebe612f35565b500290565b600082821015612ed557612ed5612f35565b500390565b600181811c90821680612eee57607f821691505b60208210811415612f0f57634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff811415612f2c57612f2c612f35565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612f8c57600080fd5b50565b8015158114612f8c57600080fdfea26469706673582212209c8c0074d3458ea9367e6a452725384d74f06a2076a37f7293848d871927d72b64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000ace5e4f391646204d7757899539b11f8478ec1d5000000000000000000000000ace5e4f391646204d7757899539b11f8478ec1d50000000000000000000000000000000000000000000000000000000000000006446f6e616c64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055452554d50000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Donald
Arg [1] : symbol (string): TRUMP
Arg [2] : lpReceiver (address): 0xacE5E4f391646204d7757899539B11f8478eC1d5
Arg [3] : treasuryReceiver (address): 0xacE5E4f391646204d7757899539B11f8478eC1d5

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000ace5e4f391646204d7757899539b11f8478ec1d5
Arg [3] : 000000000000000000000000ace5e4f391646204d7757899539b11f8478ec1d5
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 446f6e616c640000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 5452554d50000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38432:16781:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39948:25;;;;;;;;;;-1:-1:-1;39948:25:0;;;;;;;;;;;;;;;-1:-1:-1;;;39948:25:0;;;;;;;;;;18904:6:1;18937:15;;;18919:34;;18989:15;;;18984:2;18969:18;;18962:43;19041:15;;19021:18;;;19014:43;;;;18882:2;18867:18;39948:25:0;;;;;;;;19416:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21767:201::-;;;;;;;;;;-1:-1:-1;21767:201:0;;;;;:::i;:::-;;:::i;:::-;;;9878:14:1;;9871:22;9853:41;;9841:2;9826:18;21767:201:0;9713:187:1;20536:108:0;;;;;;;;;;-1:-1:-1;20624:12:0;;20536:108;;;19214:25:1;;;19202:2;19187:18;20536:108:0;19068:177:1;43698:358:0;;;;;;;;;;-1:-1:-1;43698:358:0;;;;;:::i;:::-;;:::i;:::-;;22548:295;;;;;;;;;;-1:-1:-1;22548:295:0;;;;;:::i;:::-;;:::i;38831:34::-;;;;;;;;;;-1:-1:-1;38831:34:0;;;;-1:-1:-1;;;;;38831:34:0;;;;;;-1:-1:-1;;;;;8469:32:1;;;8451:51;;8439:2;8424:18;38831:34:0;8305:203:1;46108:332:0;;;;;;;;;;-1:-1:-1;46108:332:0;;;;;:::i;:::-;;:::i;54211:103::-;;;;;;;;;;-1:-1:-1;54211:103:0;;;;;:::i;:::-;54301:5;;-1:-1:-1;;;;;54290:16:0;;;54301:5;;54290:16;;54211:103;53579:92;;;;;;;;;;-1:-1:-1;53579:92:0;;53662:1;21514:36:1;;21502:2;21487:18;53579:92:0;21372:184:1;23252:238:0;;;;;;;;;;-1:-1:-1;23252:238:0;;;;;:::i;:::-;;:::i;46802:334::-;;;;;;;;;;-1:-1:-1;46802:334:0;;;;;:::i;:::-;;:::i;54432:139::-;;;;;;;;;;-1:-1:-1;54432:139:0;;;;;:::i;:::-;;:::i;45656:346::-;;;;;;;;;;-1:-1:-1;45656:346:0;;;;;:::i;:::-;;:::i;54579:376::-;;;;;;;;;;-1:-1:-1;54579:376:0;;;;;:::i;:::-;;:::i;54322:102::-;;;;;;;;;;-1:-1:-1;54404:12:0;;54322:102;;45050:327;;;;;;;;;;-1:-1:-1;45050:327:0;;;;;:::i;:::-;;:::i;53679:524::-;;;;;;;;;;;;;:::i;:::-;;;;20431:25:1;;;20487:2;20472:18;;20465:34;;;;20542:14;20535:22;20515:18;;;20508:50;20419:2;20404:18;53679:524:0;20235:329:1;18694:44:0;;;;;;;;;;-1:-1:-1;18694:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;20707:127;;;;;;;;;;-1:-1:-1;20707:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;20808:18:0;20781:7;20808:18;;;;;;;;;;;;20707:127;39893:20;;;;;;;;;;-1:-1:-1;39893:20:0;;;;;;;;;;;;;;;-1:-1:-1;;;39893:20:0;;;;;;42789:230;;;;;;;;;;-1:-1:-1;42789:230:0;;;;;:::i;:::-;;:::i;45538:110::-;;;;;;;;;;-1:-1:-1;45538:110:0;;;;;:::i;:::-;;:::i;45385:145::-;;;;;;;;;;-1:-1:-1;45385:145:0;;;;;:::i;:::-;;:::i;38761:20::-;;;;;;;;;;-1:-1:-1;38761:20:0;;;;-1:-1:-1;;;;;38761:20:0;;;19635:104;;;;;;;;;;;;;:::i;39830:29::-;;;;;;;;;;-1:-1:-1;39830:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10141:14:1;;10134:22;10116:41;;10200:14;;10193:22;10188:2;10173:18;;10166:50;10264:4;10252:17;;;10232:18;;;10225:45;;;;10306:17;10301:2;10286:18;;10279:45;10103:3;10088:19;39830:29:0;9905:425:1;47657:358:0;;;;;;;;;;-1:-1:-1;47657:358:0;;;;;:::i;:::-;;:::i;23993:436::-;;;;;;;;;;-1:-1:-1;23993:436:0;;;;;:::i;:::-;;:::i;47427:222::-;;;;;;;;;;-1:-1:-1;47427:222:0;;;;;:::i;:::-;;:::i;38872:19::-;;;;;;;;;;-1:-1:-1;38872:19:0;;;;-1:-1:-1;;;;;38872:19:0;;;47306:113;;;;;;;;;;-1:-1:-1;47306:113:0;;;;;:::i;:::-;;:::i;21040:193::-;;;;;;;;;;-1:-1:-1;21040:193:0;;;;;:::i;:::-;;:::i;39980:43::-;;;;;;;;;;-1:-1:-1;39980:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39980:43:0;;;;;;;;;;20912:25:1;;;20968:2;20953:18;;20946:34;;;;20996:18;;;20989:34;;;;21054:2;21039:18;;21032:34;;;;21115:4;21103:17;;;21097:3;21082:19;;21075:46;21165:14;21158:22;21152:3;21137:19;;21130:51;21225:14;21218:22;21212:3;21197:19;;21190:51;21285:14;21278:22;21272:3;21257:19;;21250:51;21345:14;21338:22;21332:3;21317:19;;21310:51;20899:3;20884:19;39980:43:0;20569:798:1;46452:342:0;;;;;;;;;;-1:-1:-1;46452:342:0;;;;;:::i;:::-;;:::i;44064:312::-;;;;;;;;;;-1:-1:-1;44064:312:0;;;;;:::i;:::-;;:::i;38788:36::-;;;;;;;;;;-1:-1:-1;38788:36:0;;;;-1:-1:-1;;;;;38788:36:0;;;44384:658;;;;;;;;;;-1:-1:-1;44384:658:0;;;;;:::i;:::-;;:::i;39866:20::-;;;;;;;;;;-1:-1:-1;39866:20:0;;;;;;;;;;;;;;;-1:-1:-1;;;39866:20:0;;;;;;21296:151;;;;;;;;;;-1:-1:-1;21296:151:0;;;;;:::i;:::-;;:::i;39920:21::-;;;;;;;;;;-1:-1:-1;39920:21:0;;;;;;;;;;;;;;;-1:-1:-1;;;39920:21:0;;;;;;43027:473;;;;;;;;;;-1:-1:-1;43027:473:0;;;;;:::i;:::-;;:::i;40077:32::-;;;;;;;;;;-1:-1:-1;40077:32:0;;;;-1:-1:-1;;;;;40077:32:0;;;47145:153;;;;;;;;;;-1:-1:-1;47145:153:0;;;;;:::i;:::-;;:::i;19416:100::-;19470:13;19503:5;19496:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19416:100;:::o;21767:201::-;21850:4;193:10;21906:32;193:10;21922:7;21931:6;21906:8;:32::i;:::-;-1:-1:-1;21956:4:0;;21767:201;-1:-1:-1;;;21767:201:0:o;43698:358::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;;;;;;;;;43809:3:::1;43789:16;:23;;43781:32;;;::::0;::::1;;43884:19;::::0;43844:21:::1;::::0;-1:-1:-1;;;;;43884:19:0::1;43876:99;43961:3;43929:28;43941:16:::0;43844:21;43929:28:::1;:::i;:::-;43928:36;;;;:::i;:::-;43876:99;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;44020:28:0::1;44032:16:::0;44020:9;:28:::1;:::i;:::-;43986:30:::0;:62;;:30:::1;::::0;:62:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;43698:358:0:o;22548:295::-;22679:4;193:10;22737:38;22753:4;193:10;22768:6;22737:15;:38::i;:::-;22786:27;22796:4;22802:2;22806:6;22786:9;:27::i;:::-;22831:4;22824:11;;;22548:295;;;;;;:::o;46108:332::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;46241:7:::1;:16:::0;-1:-1:-1;;;46241:16:0;::::1;;;46209:28;46225:12:::0;46209:13;:28:::1;:::i;:::-;:48;;;;46201:57;;;::::0;::::1;;46279:153;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;46392:28:::1;46355:12:::0;46314:13;46392:28:::1;:::i;:::-;46279:153;::::0;;::::1;::::0;;;46269:163;;:7:::1;:163:::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;46269:163:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;46269:163:0::1;-1:-1:-1::0;;;46269:163:0;;;::::1;;;::::0;;-1:-1:-1;;46108:332:0:o;23252:238::-;23340:4;193:10;23396:64;193:10;23412:7;23449:10;23421:25;193:10;23412:7;23421:9;:25::i;:::-;:38;;;;:::i;:::-;23396:8;:64::i;46802:334::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;46936:7:::1;:16:::0;-1:-1:-1;;;46936:16:0;::::1;;;46904:28;46920:12:::0;46904:13;:28:::1;:::i;:::-;:48;;;;46896:57;;;::::0;::::1;;46975:153;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;47088:28:::1;47051:12:::0;47010:13;47088:28:::1;:::i;:::-;46975:153;::::0;;::::1;::::0;;;46964:164;;:8:::1;:164:::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;46964:164:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;46964:164:0::1;-1:-1:-1::0;;;46964:164:0;;;::::1;;;::::0;;-1:-1:-1;;46802:334:0:o;54432:139::-;54482:27;193:10;54502:6;54482:5;:27::i;:::-;20624:12;;54535;;:28;;;;:::i;:::-;54520:12;:43;-1:-1:-1;54432:139:0:o;45656:346::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;45775:12:::1;:26:::0;::::1;::::0;;;::::1;::::0;::::1;45762:39:::0;;::::1;;;45754:94;;;::::0;-1:-1:-1;;;45754:94:0;;13832:2:1;45754:94:0::1;::::0;::::1;13814:21:1::0;13871:2;13851:18;;;13844:30;13910:34;13890:18;;;13883:62;-1:-1:-1;;;13961:18:1;;;13954:40;14011:19;;45754:94:0::1;13630:406:1::0;45754:94:0::1;45859:12;:37:::0;;-1:-1:-1;;45907:37:0;45859;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;45907:37:0;;;;;;::::1;;::::0;;;::::1;-1:-1:-1::0;;45955:39:0::1;45859:37;45955:39:::0;::::1;;::::0;;;::::1;;::::0;;45656:346::o;54579:376::-;54704:7;:14;54684:9;:16;:34;54676:68;;;;-1:-1:-1;;;54676:68:0;;16523:2:1;54676:68:0;;;16505:21:1;16562:2;16542:18;;;16535:30;-1:-1:-1;;;16581:18:1;;;16574:51;16642:18;;54676:68:0;16321:345:1;54676:68:0;54760:7;54755:193;54777:9;:16;54773:1;:20;;;54755:193;;;54850:7;54858:1;54850:10;;;;;;;;;;:::i;:::-;;;;;;;54823:23;54833:12;193:10;;105:107;54823:23;:37;;54815:46;;;;;;54876:60;193:10;54905:9;54915:1;54905:12;;;;;;;;;;:::i;:::-;;;;;;;54919:7;54927:1;54919:10;;;;;;;;;;:::i;:::-;;;;;;;54930:5;54919:16;;;;:::i;:::-;54876:14;:60::i;:::-;54795:3;;;;:::i;:::-;;;;54755:193;;;;54579:376;;:::o;45050:327::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45193:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:43;;;::::1;;-1:-1:-1::0;;45193:43:0;;::::1;;::::0;;45247:16:::1;:24:::0;;;;;:41;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;45299:11:::1;:19:::0;;;;;:31;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;45341:8:::1;:16:::0;;;;;;:28;;;::::1;;::::0;;;::::1;;::::0;;45050:327::o;53679:524::-;53808:28;;53734:19;;;;;;53808:28;;53805:391;;;53869:19;:31;:39;;53903:5;;53869:39;:::i;:::-;53935:35;;53852:56;;-1:-1:-1;53935:43:0;;53973:5;;53935:43;:::i;:::-;54013:28;;53923:55;;-1:-1:-1;54013:28:0;;;-1:-1:-1;53679:524:0;;;:::o;53805:391::-;-1:-1:-1;;20624:12:0;;;;;-1:-1:-1;54179:5:0;;53679:524::o;42789:230::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;42866:20:::1;::::0;::::1;::::0;;;::::1;42911:5;::::0;42897:48:::1;::::0;-1:-1:-1;;;;;42911:5:0::1;;::::0;;;42897:13:::1;:48::i;:::-;42956:26;42971:10;42956:14;:26::i;:::-;-1:-1:-1::0;42993:5:0::1;:18:::0;;-1:-1:-1;;;;;;42993:18:0::1;::::0;;42789:230::o;45538:110::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45615:16:0;;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:25;;-1:-1:-1;;45615:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45538:110::o;45385:145::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;45451:28;:36;;-1:-1:-1;;45451:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;45503:19:::1;::::0;9853:41:1;;;45503:19:0::1;::::0;9841:2:1;9826:18;45503:19:0::1;;;;;;;45385:145:::0;:::o;19635:104::-;19691:13;19724:7;19717:14;;;;;:::i;47657:358::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;47775:29;:40;;::::1;47826:41:::0;::::1;-1:-1:-1::0;;47878:46:0;;;47775:40:::1;::::0;::::1;;;-1:-1:-1::0;;47878:46:0;;;-1:-1:-1;;;47878:46:0;::::1;;;;::::0;;47972:12:::1;::::0;48001:5:::1;::::0;47972:24:::1;::::0;47988:7;;47972:24:::1;:::i;:::-;47971:36;;;;:::i;:::-;47935:33:::0;:72;-1:-1:-1;;;;47657:358:0:o;23993:436::-;24086:4;193:10;24086:4;24169:25;193:10;24186:7;24169:9;:25::i;:::-;24142:52;;24233:15;24213:16;:35;;24205:85;;;;-1:-1:-1;;;24205:85:0;;18494:2:1;24205:85:0;;;18476:21:1;18533:2;18513:18;;;18506:30;18572:34;18552:18;;;18545:62;-1:-1:-1;;;18623:18:1;;;18616:35;18668:19;;24205:85:0;18292:401:1;24205:85:0;24326:60;24335:5;24342:7;24370:15;24351:16;:34;24326:8;:60::i;:::-;-1:-1:-1;24417:4:0;;23993:436;-1:-1:-1;;;;23993:436:0:o;47427:222::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;47542:21:::1;:46:::0;;-1:-1:-1;;;;;47542:46:0;;::::1;-1:-1:-1::0;;;;;;47542:46:0;;::::1;;::::0;;;47599:19:::1;:42:::0;;;;;::::1;::::0;::::1;;::::0;;47427:222::o;47306:113::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;47372:29;:39;;;::::1;;::::0;::::1;-1:-1:-1::0;;47372:39:0;;::::1;::::0;;;::::1;::::0;;47306:113::o;21040:193::-;21119:4;193:10;21175:28;193:10;21192:2;21196:6;21175:9;:28::i;46452:342::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;46590:7:::1;:16:::0;-1:-1:-1;;;46590:16:0;::::1;;;46558:28;46574:12:::0;46558:13;:28:::1;:::i;:::-;:48;;;;46550:57;;;::::0;::::1;;46633:153;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;46746:28:::1;46709:12:::0;46668:13;46746:28:::1;:::i;:::-;46633:153;::::0;;::::1;::::0;;;46618:168;;:12:::1;:168:::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;46618:168:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;46618:168:0::1;-1:-1:-1::0;;;46618:168:0;;;::::1;;;::::0;;-1:-1:-1;;46452:342:0:o;44064:312::-;54301:5;;44147:10;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44178:20:0;::::1;::::0;;::::1;::::0;:47:::1;;-1:-1:-1::0;;;;;;44202:23:0;::::1;44220:4;44202:23;;44178:47;44170:56;;;::::0;::::1;;44264:39;::::0;-1:-1:-1;;;44264:39:0;;44297:4:::1;44264:39;::::0;::::1;8451:51:1::0;44237:24:0::1;::::0;-1:-1:-1;;;;;44264:24:0;::::1;::::0;::::1;::::0;8424:18:1;;44264:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44322:46;::::0;-1:-1:-1;;;44322:46:0;;-1:-1:-1;;;;;9014:32:1;;;44322:46:0::1;::::0;::::1;8996:51:1::0;9063:18;;;9056:34;;;44237:66:0;;-1:-1:-1;44322:23:0;;::::1;::::0;::::1;::::0;8969:18:1;;44322:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44314:54:::0;44064:312;-1:-1:-1;;;;44064:312:0:o;44384:658::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;44495:10:::1;44492:543;;;44540:1;44529:7;:12;;:31;;;;;44556:4;44545:7;:15;;44529:31;44521:81;;;::::0;-1:-1:-1;;;44521:81:0;;15407:2:1;44521:81:0::1;::::0;::::1;15389:21:1::0;15446:2;15426:18;;;15419:30;15485:34;15465:18;;;15458:62;-1:-1:-1;;;15536:18:1;;;15529:35;15581:19;;44521:81:0::1;15205:401:1::0;44521:81:0::1;44679:7;44667;44652:12;;:22;;;;:::i;:::-;44651:36;;;;:::i;:::-;44617:19;:70:::0;;;44707:47:::1;::::0;19214:25:1;;;44707:47:0::1;::::0;19202:2:1;19187:18;44707:47:0::1;;;;;;;;54755:193:::0;54579:376;;:::o;44492:543::-:1;44806:1;44795:7;:12;;:30;;;;;44822:3;44811:7;:14;;44795:30;44787:74;;;::::0;-1:-1:-1;;;44787:74:0;;16163:2:1;44787:74:0::1;::::0;::::1;16145:21:1::0;16202:2;16182:18;;;16175:30;16241:33;16221:18;;;16214:61;16292:18;;44787:74:0::1;15961:355:1::0;44787:74:0::1;44941:7;44930;44915:12;;:22;;;;:::i;:::-;44914:34;;;;:::i;:::-;44876:35:::0;:72;;;44968:55:::1;::::0;19214:25:1;;;44968:55:0::1;::::0;19187:18:1;44968:55:0::1;19068:177:1::0;21296:151:0;-1:-1:-1;;;;;21412:18:0;;;21385:7;21412:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21296:151::o;43027:473::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43108:22:0;::::1;43100:105;;;::::0;-1:-1:-1;;;43100:105:0;;12189:2:1;43100:105:0::1;::::0;::::1;12171:21:1::0;12228:2;12208:18;;;12201:30;12267:34;12247:18;;;12240:62;12338:34;12318:18;;;12311:62;-1:-1:-1;;;12389:19:1;;;12382:37;12436:19;;43100:105:0::1;11987:474:1::0;43100:105:0::1;43242:5;::::0;43221:37:::1;::::0;;-1:-1:-1;;;;;43242:5:0;;::::1;8725:34:1::0;;8795:15;;;8790:2;8775:18;;8768:43;43221:37:0::1;::::0;8660:18:1;43221:37:0::1;;;;;;;43284:5;::::0;-1:-1:-1;;;;;43284:5:0::1;43293:1;20808:18:::0;;;;;;;;;;;43274:20;43271:74:::1;;43311:5;::::0;-1:-1:-1;;;;;43311:5:0::1;20781:7:::0;20808:18;;;;;;;;;;;43296:49:::1;::::0;43311:5;43318:8;;54876:14;:60::i;43296:49::-:1;43370:5;::::0;43356:48:::1;::::0;-1:-1:-1;;;;;43370:5:0::1;;::::0;;;43356:13:::1;:48::i;:::-;43415;43429:8;43439:4;43445::::0;43451::::1;43457:5;43415:13;:48::i;:::-;43476:5;:16:::0;;-1:-1:-1;;;;;;43476:16:0::1;-1:-1:-1::0;;;;;43476:16:0;;;::::1;::::0;;;::::1;::::0;;43027:473::o;47145:153::-;54301:5;;-1:-1:-1;;;;;54301:5:0;40164:10;54290:16;40148:53;;;;-1:-1:-1;;;40148:53:0;;;;;;;:::i;:::-;47234:7:::1;:16:::0;::::1;-1:-1:-1::0;;;47234:16:0;;::::1;::::0;::::1;47221:29:::0;;::::1;;;47213:38;;;::::0;::::1;;47262:7;:28:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;47262:28:0::1;-1:-1:-1::0;;47262:28:0;;::::1;::::0;;;::::1;::::0;;47145:153::o;28020:380::-;-1:-1:-1;;;;;28156:19:0;;28148:68;;;;-1:-1:-1;;;28148:68:0;;17681:2:1;28148:68:0;;;17663:21:1;17720:2;17700:18;;;17693:30;17759:34;17739:18;;;17732:62;-1:-1:-1;;;17810:18:1;;;17803:34;17854:19;;28148:68:0;17479:400:1;28148:68:0;-1:-1:-1;;;;;28235:21:0;;28227:68;;;;-1:-1:-1;;;28227:68:0;;13071:2:1;28227:68:0;;;13053:21:1;13110:2;13090:18;;;13083:30;13149:34;13129:18;;;13122:62;-1:-1:-1;;;13200:18:1;;;13193:32;13242:19;;28227:68:0;12869:398:1;28227:68:0;-1:-1:-1;;;;;28308:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28360:32;;19214:25:1;;;28360:32:0;;19187:18:1;28360:32:0;;;;;;;28020:380;;;:::o;28691:453::-;28826:24;28853:25;28863:5;28870:7;28853:9;:25::i;:::-;28826:52;;-1:-1:-1;;28893:16:0;:37;28889:248;;28975:6;28955:16;:26;;28947:68;;;;-1:-1:-1;;;28947:68:0;;13474:2:1;28947:68:0;;;13456:21:1;13513:2;13493:18;;;13486:30;13552:31;13532:18;;;13525:59;13601:18;;28947:68:0;13272:353:1;28947:68:0;29059:51;29068:5;29075:7;29103:6;29084:16;:25;29059:8;:51::i;:::-;28815:329;28691:453;;;:::o;48533:1490::-;48628:11;;;;48624:145;;54301:5;;-1:-1:-1;;;;;54290:16:0;;;54301:5;;54290:16;48656:47;;;;-1:-1:-1;;;48656:47:0;;15813:2:1;48656:47:0;;;15795:21:1;15852:2;15832:18;;;15825:30;-1:-1:-1;;;15871:18:1;;;15864:51;15932:18;;48656:47:0;15611:345:1;48656:47:0;48743:4;;-1:-1:-1;;;;;48737:10:0;;;48743:4;;48737:10;48734:23;;;48749:8;:6;:8::i;:::-;48782:16;48789:4;48795:2;48782:6;:16::i;:::-;:31;;;;-1:-1:-1;48802:11:0;;;;48782:31;:63;;;;-1:-1:-1;48817:28:0;;;;48782:63;48779:1023;;;-1:-1:-1;;;;;48865:21:0;;;;;;:17;:21;;;;;;;;48861:366;;48924:19;:31;48914:41;;;;;:106;;-1:-1:-1;48985:35:0;;48975:6;48959:13;48969:2;-1:-1:-1;;;;;20808:18:0;20781:7;20808:18;;;;;;;;;;;;20707:127;48959:13;:22;;;;:::i;:::-;:61;;48914:106;48906:157;;;;-1:-1:-1;;;48906:157:0;;;;;;;:::i;:::-;48861:366;;;-1:-1:-1;;;;;49088:11:0;;;;;;:7;:11;;;;;;;;49085:142;;;49137:19;:31;49127:41;;;49119:92;;;;-1:-1:-1;;;49119:92:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49245:13:0;;;;;;:7;:13;;;;;;;;:38;;;;-1:-1:-1;;;;;;49263:20:0;;;;;;:16;:20;;;;;;;;49262:21;49245:38;:73;;;;-1:-1:-1;49287:12:0;:31;;;49245:73;49241:549;;;-1:-1:-1;;;;;49347:12:0;;;;;;:8;:12;;;;;;49362:15;-1:-1:-1;49339:85:0;;;;-1:-1:-1;;;49339:85:0;;11778:2:1;49339:85:0;;;11760:21:1;11817:2;11797:18;;;11790:30;11856:34;11836:18;;;11829:62;-1:-1:-1;;;11907:18:1;;;11900:40;11957:19;;49339:85:0;11576:406:1;49339:85:0;49477:12;:25;49458:45;;49477:25;;;;;49458:15;:45;:::i;:::-;-1:-1:-1;;;;;49443:12:0;;;;;;:8;:12;;;;;:60;49241:549;;;-1:-1:-1;;;;;49530:22:0;;;;;;:16;:22;;;;;;;;49529:23;:59;;;;-1:-1:-1;49556:12:0;:32;;;;;;49529:59;49525:265;;;-1:-1:-1;;;;;49616:14:0;;;;;;:8;:14;;;;;;49634:15;-1:-1:-1;49616:33:0;49608:85;;;;-1:-1:-1;;;49608:85:0;;18086:2:1;49608:85:0;;;18068:21:1;18125:2;18105:18;;;18098:30;18164:34;18144:18;;;18137:62;-1:-1:-1;;;18215:18:1;;;18208:37;18262:19;;49608:85:0;17884:403:1;49608:85:0;49748:12;:25;49729:45;;49748:25;;;;;49729:15;:45;:::i;:::-;-1:-1:-1;;;;;49712:14:0;;;;;;:8;:14;;;;;:62;49525:265;49816:16;:14;:16::i;:::-;49812:59;;;49849:10;:8;:10::i;:::-;49883:22;49908:19;49922:4;49908:13;:19::i;:::-;:56;;49958:6;49908:56;;;49930:25;49938:4;49944:2;49948:6;49930:7;:25::i;:::-;49883:81;;49975:40;49990:4;49996:2;50000:14;49975;:40::i;26907:675::-;-1:-1:-1;;;;;26991:21:0;;26983:67;;;;-1:-1:-1;;;26983:67:0;;16873:2:1;26983:67:0;;;16855:21:1;16912:2;16892:18;;;16885:30;16951:34;16931:18;;;16924:62;-1:-1:-1;;;17002:18:1;;;16995:31;17043:19;;26983:67:0;16671:397:1;26983:67:0;-1:-1:-1;;;;;27150:18:0;;27125:22;27150:18;;;;;;;;;;;27187:24;;;;27179:71;;;;-1:-1:-1;;;27179:71:0;;12668:2:1;27179:71:0;;;12650:21:1;12707:2;12687:18;;;12680:30;12746:34;12726:18;;;12719:62;-1:-1:-1;;;12797:18:1;;;12790:32;12839:19;;27179:71:0;12466:398:1;27179:71:0;-1:-1:-1;;;;;27286:18:0;;:9;:18;;;;;;;;;;;27307:23;;;27286:44;;27425:12;:22;;;;;;;27476:37;19214:25:1;;;27286:9:0;;:18;27476:37;;19187:18:1;27476:37:0;;;;;;;54755:193;54579:376;;:::o;50031:127::-;50117:33;50133:4;50139:2;50143:6;50117:15;:33::i;46010:90::-;46048:11;:18;;-1:-1:-1;;46048:18:0;46062:4;46048:18;;;46082:10;;;;46048:11;;46082:10;46010:90::o;48213:312::-;48277:4;48302:13;48310:4;54301:5;;-1:-1:-1;;;;;54290:16:0;;;54301:5;;54290:16;;54211:103;48302:13;48301:14;:43;;;;-1:-1:-1;54301:5:0;;-1:-1:-1;;;;;54290:16:0;;;54301:5;;54290:16;48332:12;48301:43;:78;;;;-1:-1:-1;48374:5:0;;-1:-1:-1;;;;;48374:5:0;48361:9;:18;;48301:78;:110;;;;-1:-1:-1;;;;;;48397:14:0;;;;;;:8;:14;;;;;;;;48396:15;48301:110;:140;;;;-1:-1:-1;;;;;;48429:12:0;;;;;;:8;:12;;;;;;;;48428:13;48301:140;:178;;;;-1:-1:-1;;;;;;48458:21:0;;48472:6;48458:21;;48301:178;:216;;;;-1:-1:-1;;;;;;48496:21:0;;48512:4;48496:21;;48294:223;48213:312;-1:-1:-1;;;48213:312:0:o;51193:377::-;193:10;51242:4;51280:21;;;:7;:21;;;;;;;;51279:22;:64;;;;-1:-1:-1;51319:24:0;;;;;;;51318:25;51279:64;:110;;;;-1:-1:-1;51360:29:0;;;;;;;51279:110;:205;;;;-1:-1:-1;51454:30:0;;51425:26;;:59;;51454:30;;;51425:59;:::i;:::-;51406:15;:78;;51279:205;:283;;;;-1:-1:-1;51529:33:0;;51519:4;51501:9;:24;;;;;;;;;;;:61;;51279:283;51259:303;;51193:377;:::o;51579:1802::-;40258:24;:31;;-1:-1:-1;;40258:31:0;;;;;51657:15:::1;51628:26:::0;:44;51732:33;;40258:17;51687:41;:78:::1;::::0;::::1;::::0;:118:::1;;-1:-1:-1::0;51769:36:0;;-1:-1:-1;;;51769:36:0;::::1;;;51687:118;51683:1691;;;51867:33:::0;;:17:::1;51822:78:::0;;:41:::1;::::0;:78:::1;::::0;51867:33;;51822:78:::1;:::i;:::-;::::0;;;-1:-1:-1;;51941:33:0;;51915:23:::1;::::0;51941:37:::1;::::0;51977:1:::1;::::0;51941:37:::1;:::i;:::-;52019:16;::::0;;52033:1:::1;52019:16:::0;;;;;::::1;::::0;;51915:63;;-1:-1:-1;51995:21:0::1;::::0;52019:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;52019:16:0::1;51995:40;;52068:4;52050;52055:1;52050:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52050:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;52098:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;52098:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;52050:7;;52098:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52088:4;52093:1;52088:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52088:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;52190:6:::1;::::0;:215:::1;::::0;-1:-1:-1;;;52190:215:0;;52152:21:::1;::::0;52190:6;;;::::1;::::0;:57:::1;::::0;:215:::1;::::0;52266:15;;52128:21:::1;::::0;52320:4;;52351::::1;::::0;52375:15:::1;::::0;52190:215:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52422:17;52467:13;52442:21;:39;;;;:::i;:::-;52498:6;::::0;52663:21:::1;::::0;52498:235:::1;::::0;-1:-1:-1;;;52498:235:0;;52565:4:::1;52498:235;::::0;::::1;9442:34:1::0;9492:18;;;9485:34;;;52498:6:0::1;9535:18:1::0;;;9528:34;;;9578:18;;;9571:34;-1:-1:-1;;;;;52663:21:0;;::::1;9621:19:1::0;;;9614:44;52703:15:0::1;9674:19:1::0;;;9667:35;52422:59:0;;-1:-1:-1;52498:6:0::1;::::0;:22:::1;::::0;52422:59;;9376:19:1;;52498:235:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;51807:940;;;;51683:1691;;;52792:16;::::0;;52806:1:::1;52792:16:::0;;;;;::::1;::::0;;52768:21:::1;::::0;52792:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;52792:16:0::1;52768:40;;52841:4;52823;52828:1;52823:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52823:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;52871:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;52871:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;52823:7;;52871:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52861:4;52866:1;52861:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52861:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;52901:6:::1;::::0;52977:33;;52901:233:::1;::::0;-1:-1:-1;;;52901:233:0;;:6;;;::::1;::::0;:57:::1;::::0;:233:::1;::::0;52977:33;52901:6:::1;::::0;53049:4;;53080::::1;::::0;53104:15:::1;::::0;52901:233:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;53233:19:0::1;::::0;53225:66:::1;::::0;53167:21:::1;::::0;-1:-1:-1;53149:15:0::1;::::0;-1:-1:-1;;;;;;53233:19:0;;::::1;::::0;53281:5:::1;::::0;53167:21;;53149:15;53225:66;53149:15;53225:66;53167:21;53233:19;53281:5;53225:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53205:86;;;53309:8;53306:54;;;53353:7;53319:17;:30;;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;53306:54:0::1;52753:621;;;51683:1691;40312:24:::0;:32;;-1:-1:-1;;40312:32:0;;;51579:1802::o;50166:147::-;50252:29;;50228:4;;50252:29;;;;;:53;;;;-1:-1:-1;;;;;;50286:19:0;;;;;;:11;:19;;;;;;;;50285:20;50252:53;50245:60;50166:147;-1:-1:-1;;50166:147:0:o;50321:864::-;-1:-1:-1;;;;;50430:21:0;;50406:7;50430:21;;;:11;:21;;;;;;;;50426:67;;;-1:-1:-1;50475:6:0;50468:13;;50426:67;-1:-1:-1;;;;;50506:17:0;;;;;;:7;:17;;;;;;;;50503:242;;;50563:8;:17;-1:-1:-1;;;50563:17:0;;;;50552:8;:28;50503:242;;;-1:-1:-1;;;;;50610:15:0;;;;;;:7;:15;;;;;;;;50607:138;;;50652:7;:16;-1:-1:-1;;;50652:16:0;;;;50641:8;:27;50607:138;;;50712:12;:21;-1:-1:-1;;;50712:21:0;;;;50701:8;:32;50607:138;50791:14;;50779:8;;50770:17;;:6;:17;:::i;:::-;50769:36;;;;:::i;:::-;50757:9;:48;50820:36;;-1:-1:-1;;;50820:36:0;;;;50816:266;;;51047:8;:21;51024:7;:20;:44;;51047:21;;;;;51024:20;:44;:::i;:::-;51002:8;:17;50983:7;:16;:36;;51002:17;-1:-1:-1;;;51002:17:0;;;;;;;50983:16;;;;;:36;:::i;:::-;50982:87;;;;:::i;:::-;50955:8;:21;50932:7;:20;50918:152;;;;;50932:44;;50955:21;;;50932:20;:44;:::i;:::-;50919:58;;:9;;:58;;;;:::i;:::-;50918:152;;;;:::i;:::-;50873:17;:197;;:41;;:197;;;;;:::i;:::-;;;;-1:-1:-1;;50816:266:0;51092:48;51107:6;51123:4;51130:9;;51092:14;:48::i;:::-;51168:9;;51159:18;;:6;:18;:::i;24899:840::-;-1:-1:-1;;;;;25030:18:0;;25022:68;;;;-1:-1:-1;;;25022:68:0;;17275:2:1;25022:68:0;;;17257:21:1;17314:2;17294:18;;;17287:30;17353:34;17333:18;;;17326:62;-1:-1:-1;;;17404:18:1;;;17397:35;17449:19;;25022:68:0;17073:401:1;25022:68:0;-1:-1:-1;;;;;25109:16:0;;25101:64;;;;-1:-1:-1;;;25101:64:0;;11374:2:1;25101:64:0;;;11356:21:1;11413:2;11393:18;;;11386:30;11452:34;11432:18;;;11425:62;-1:-1:-1;;;11503:18:1;;;11496:33;11546:19;;25101:64:0;11172:399:1;25101:64:0;-1:-1:-1;;;;;25251:15:0;;25229:19;25251:15;;;;;;;;;;;25285:21;;;;25277:72;;;;-1:-1:-1;;;25277:72:0;;14243:2:1;25277:72:0;;;14225:21:1;14282:2;14262:18;;;14255:30;14321:34;14301:18;;;14294:62;-1:-1:-1;;;14372:18:1;;;14365:36;14418:19;;25277:72:0;14041:402:1;25277:72:0;-1:-1:-1;;;;;25385:15:0;;;:9;:15;;;;;;;;;;;25403:20;;;25385:38;;25603:13;;;;;;;;;;:23;;;;;;25655:26;;19214:25:1;;;25603:13:0;;25655:26;;19187:18:1;25655:26:0;;;;;;;25694:37;54579:376;14:673:1;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:163;509:2;506:1;503:9;495:163;;;566:17;;554:30;;604:12;;;;636;;;;527:1;520:9;495:163;;;-1:-1:-1;676:5:1;;14:673;-1:-1:-1;;;;;;;14:673:1:o;692:159::-;759:20;;819:6;808:18;;798:29;;788:57;;841:1;838;831:12;788:57;692:159;;;:::o;856:156::-;922:20;;982:4;971:16;;961:27;;951:55;;1002:1;999;992:12;1017:247;1076:6;1129:2;1117:9;1108:7;1104:23;1100:32;1097:52;;;1145:1;1142;1135:12;1097:52;1184:9;1171:23;1203:31;1228:5;1203:31;:::i;1269:251::-;1339:6;1392:2;1380:9;1371:7;1367:23;1363:32;1360:52;;;1408:1;1405;1398:12;1360:52;1440:9;1434:16;1459:31;1484:5;1459:31;:::i;1525:388::-;1593:6;1601;1654:2;1642:9;1633:7;1629:23;1625:32;1622:52;;;1670:1;1667;1660:12;1622:52;1709:9;1696:23;1728:31;1753:5;1728:31;:::i;:::-;1778:5;-1:-1:-1;1835:2:1;1820:18;;1807:32;1848:33;1807:32;1848:33;:::i;:::-;1900:7;1890:17;;;1525:388;;;;;:::o;1918:456::-;1995:6;2003;2011;2064:2;2052:9;2043:7;2039:23;2035:32;2032:52;;;2080:1;2077;2070:12;2032:52;2119:9;2106:23;2138:31;2163:5;2138:31;:::i;:::-;2188:5;-1:-1:-1;2245:2:1;2230:18;;2217:32;2258:33;2217:32;2258:33;:::i;:::-;1918:456;;2310:7;;-1:-1:-1;;;2364:2:1;2349:18;;;;2336:32;;1918:456::o;2379:382::-;2444:6;2452;2505:2;2493:9;2484:7;2480:23;2476:32;2473:52;;;2521:1;2518;2511:12;2473:52;2560:9;2547:23;2579:31;2604:5;2579:31;:::i;:::-;2629:5;-1:-1:-1;2686:2:1;2671:18;;2658:32;2699:30;2658:32;2699:30;:::i;2766:789::-;2849:6;2857;2865;2873;2881;2934:3;2922:9;2913:7;2909:23;2905:33;2902:53;;;2951:1;2948;2941:12;2902:53;2990:9;2977:23;3009:31;3034:5;3009:31;:::i;:::-;3059:5;-1:-1:-1;3116:2:1;3101:18;;3088:32;3129:30;3088:32;3129:30;:::i;:::-;3178:7;-1:-1:-1;3237:2:1;3222:18;;3209:32;3250:30;3209:32;3250:30;:::i;:::-;3299:7;-1:-1:-1;3358:2:1;3343:18;;3330:32;3371:30;3330:32;3371:30;:::i;:::-;3420:7;-1:-1:-1;3479:3:1;3464:19;;3451:33;3493:30;3451:33;3493:30;:::i;:::-;3542:7;3532:17;;;2766:789;;;;;;;;:::o;3560:315::-;3628:6;3636;3689:2;3677:9;3668:7;3664:23;3660:32;3657:52;;;3705:1;3702;3695:12;3657:52;3744:9;3731:23;3763:31;3788:5;3763:31;:::i;:::-;3813:5;3865:2;3850:18;;;;3837:32;;-1:-1:-1;;;3560:315:1:o;3880:1226::-;3998:6;4006;4059:2;4047:9;4038:7;4034:23;4030:32;4027:52;;;4075:1;4072;4065:12;4027:52;4115:9;4102:23;4144:18;4185:2;4177:6;4174:14;4171:34;;;4201:1;4198;4191:12;4171:34;4239:6;4228:9;4224:22;4214:32;;4284:7;4277:4;4273:2;4269:13;4265:27;4255:55;;4306:1;4303;4296:12;4255:55;4342:2;4329:16;4364:4;4388:60;4404:43;4444:2;4404:43;:::i;4388:60::-;4470:3;4494:2;4489:3;4482:15;4522:2;4517:3;4513:12;4506:19;;4553:2;4549;4545:11;4601:7;4596:2;4590;4587:1;4583:10;4579:2;4575:19;4571:28;4568:41;4565:61;;;4622:1;4619;4612:12;4565:61;4644:1;4635:10;;4654:238;4668:2;4665:1;4662:9;4654:238;;;4739:3;4726:17;4756:31;4781:5;4756:31;:::i;:::-;4800:18;;4686:1;4679:9;;;;;4838:12;;;;4870;;4654:238;;;-1:-1:-1;4911:5:1;-1:-1:-1;;4954:18:1;;4941:32;;-1:-1:-1;;4985:16:1;;;4982:36;;;5014:1;5011;5004:12;4982:36;;5037:63;5092:7;5081:8;5070:9;5066:24;5037:63;:::i;:::-;5027:73;;;3880:1226;;;;;:::o;5111:241::-;5167:6;5220:2;5208:9;5199:7;5195:23;5191:32;5188:52;;;5236:1;5233;5226:12;5188:52;5275:9;5262:23;5294:28;5316:5;5294:28;:::i;5357:245::-;5424:6;5477:2;5465:9;5456:7;5452:23;5448:32;5445:52;;;5493:1;5490;5483:12;5445:52;5525:9;5519:16;5544:28;5566:5;5544:28;:::i;5607:446::-;5676:6;5684;5692;5745:2;5733:9;5724:7;5720:23;5716:32;5713:52;;;5761:1;5758;5751:12;5713:52;5800:9;5787:23;5819:28;5841:5;5819:28;:::i;:::-;5866:5;-1:-1:-1;5923:2:1;5908:18;;5895:32;5936:30;5895:32;5936:30;:::i;:::-;5985:7;-1:-1:-1;6011:36:1;6043:2;6028:18;;6011:36;:::i;:::-;6001:46;;5607:446;;;;;:::o;6058:515::-;6136:6;6144;6152;6160;6213:3;6201:9;6192:7;6188:23;6184:33;6181:53;;;6230:1;6227;6220:12;6181:53;6269:9;6256:23;6288:28;6310:5;6288:28;:::i;:::-;6335:5;-1:-1:-1;6392:2:1;6377:18;;6364:32;6405:30;6364:32;6405:30;:::i;:::-;6454:7;-1:-1:-1;6480:36:1;6512:2;6497:18;;6480:36;:::i;:::-;6058:515;;;;-1:-1:-1;6470:46:1;;6563:2;6548:18;6535:32;;-1:-1:-1;;6058:515:1:o;6578:184::-;6636:6;6689:2;6677:9;6668:7;6664:23;6660:32;6657:52;;;6705:1;6702;6695:12;6657:52;6728:28;6746:9;6728:28;:::i;6767:256::-;6833:6;6841;6894:2;6882:9;6873:7;6869:23;6865:32;6862:52;;;6910:1;6907;6900:12;6862:52;6933:28;6951:9;6933:28;:::i;:::-;6923:38;;6980:37;7013:2;7002:9;6998:18;6980:37;:::i;:::-;6970:47;;6767:256;;;;;:::o;7028:180::-;7087:6;7140:2;7128:9;7119:7;7115:23;7111:32;7108:52;;;7156:1;7153;7146:12;7108:52;-1:-1:-1;7179:23:1;;7028:180;-1:-1:-1;7028:180:1:o;7213:184::-;7283:6;7336:2;7324:9;7315:7;7311:23;7307:32;7304:52;;;7352:1;7349;7342:12;7304:52;-1:-1:-1;7375:16:1;;7213:184;-1:-1:-1;7213:184:1:o;7402:377::-;7476:6;7484;7492;7545:2;7533:9;7524:7;7520:23;7516:32;7513:52;;;7561:1;7558;7551:12;7513:52;7597:9;7584:23;7574:33;;7654:2;7643:9;7639:18;7626:32;7616:42;;7708:2;7697:9;7693:18;7680:32;7721:28;7743:5;7721:28;:::i;:::-;7768:5;7758:15;;;7402:377;;;;;:::o;7784:306::-;7872:6;7880;7888;7941:2;7929:9;7920:7;7916:23;7912:32;7909:52;;;7957:1;7954;7947:12;7909:52;7986:9;7980:16;7970:26;;8036:2;8025:9;8021:18;8015:25;8005:35;;8080:2;8069:9;8065:18;8059:25;8049:35;;7784:306;;;;;:::o;10570:597::-;10682:4;10711:2;10740;10729:9;10722:21;10772:6;10766:13;10815:6;10810:2;10799:9;10795:18;10788:34;10840:1;10850:140;10864:6;10861:1;10858:13;10850:140;;;10959:14;;;10955:23;;10949:30;10925:17;;;10944:2;10921:26;10914:66;10879:10;;10850:140;;;11008:6;11005:1;11002:13;10999:91;;;11078:1;11073:2;11064:6;11053:9;11049:22;11045:31;11038:42;10999:91;-1:-1:-1;11151:2:1;11130:15;-1:-1:-1;;11126:29:1;11111:45;;;;11158:2;11107:54;;10570:597;-1:-1:-1;;;10570:597:1:o;14448:402::-;14650:2;14632:21;;;14689:2;14669:18;;;14662:30;14728:34;14723:2;14708:18;;14701:62;-1:-1:-1;;;14794:2:1;14779:18;;14772:36;14840:3;14825:19;;14448:402::o;14855:345::-;15057:2;15039:21;;;15096:2;15076:18;;;15069:30;-1:-1:-1;;;15130:2:1;15115:18;;15108:51;15191:2;15176:18;;14855:345::o;19250:980::-;19512:4;19560:3;19549:9;19545:19;19591:6;19580:9;19573:25;19617:2;19655:6;19650:2;19639:9;19635:18;19628:34;19698:3;19693:2;19682:9;19678:18;19671:31;19722:6;19757;19751:13;19788:6;19780;19773:22;19826:3;19815:9;19811:19;19804:26;;19865:2;19857:6;19853:15;19839:29;;19886:1;19896:195;19910:6;19907:1;19904:13;19896:195;;;19975:13;;-1:-1:-1;;;;;19971:39:1;19959:52;;20066:15;;;;20031:12;;;;20007:1;19925:9;19896:195;;;-1:-1:-1;;;;;;;20147:32:1;;;;20142:2;20127:18;;20120:60;-1:-1:-1;;;20211:3:1;20196:19;20189:35;20108:3;19250:980;-1:-1:-1;;;19250:980:1:o;21561:275::-;21632:2;21626:9;21697:2;21678:13;;-1:-1:-1;;21674:27:1;21662:40;;21732:18;21717:34;;21753:22;;;21714:62;21711:88;;;21779:18;;:::i;:::-;21815:2;21808:22;21561:275;;-1:-1:-1;21561:275:1:o;21841:183::-;21901:4;21934:18;21926:6;21923:30;21920:56;;;21956:18;;:::i;:::-;-1:-1:-1;22001:1:1;21997:14;22013:4;21993:25;;21841:183::o;22029:224::-;22068:3;22096:6;22129:2;22126:1;22122:10;22159:2;22156:1;22152:10;22190:3;22186:2;22182:12;22177:3;22174:21;22171:47;;;22198:18;;:::i;:::-;22234:13;;22029:224;-1:-1:-1;;;;22029:224:1:o;22258:128::-;22298:3;22329:1;22325:6;22322:1;22319:13;22316:39;;;22335:18;;:::i;:::-;-1:-1:-1;22371:9:1;;22258:128::o;22391:217::-;22431:1;22457;22447:132;;22501:10;22496:3;22492:20;22489:1;22482:31;22536:4;22533:1;22526:15;22564:4;22561:1;22554:15;22447:132;-1:-1:-1;22593:9:1;;22391:217::o;22613:168::-;22653:7;22719:1;22715;22711:6;22707:14;22704:1;22701:21;22696:1;22689:9;22682:17;22678:45;22675:71;;;22726:18;;:::i;:::-;-1:-1:-1;22766:9:1;;22613:168::o;22786:125::-;22826:4;22854:1;22851;22848:8;22845:34;;;22859:18;;:::i;:::-;-1:-1:-1;22896:9:1;;22786:125::o;22916:380::-;22995:1;22991:12;;;;23038;;;23059:61;;23113:4;23105:6;23101:17;23091:27;;23059:61;23166:2;23158:6;23155:14;23135:18;23132:38;23129:161;;;23212:10;23207:3;23203:20;23200:1;23193:31;23247:4;23244:1;23237:15;23275:4;23272:1;23265:15;23129:161;;22916:380;;;:::o;23301:175::-;23338:3;23382:4;23375:5;23371:16;23411:4;23402:7;23399:17;23396:43;;;23419:18;;:::i;:::-;23468:1;23455:15;;23301:175;-1:-1:-1;;23301:175:1:o;23481:127::-;23542:10;23537:3;23533:20;23530:1;23523:31;23573:4;23570:1;23563:15;23597:4;23594:1;23587:15;23613:127;23674:10;23669:3;23665:20;23662:1;23655:31;23705:4;23702:1;23695:15;23729:4;23726:1;23719:15;23745:127;23806:10;23801:3;23797:20;23794:1;23787:31;23837:4;23834:1;23827:15;23861:4;23858:1;23851:15;23877:131;-1:-1:-1;;;;;23952:31:1;;23942:42;;23932:70;;23998:1;23995;23988:12;23932:70;23877:131;:::o;24013:118::-;24099:5;24092:13;24085:21;24078:5;24075:32;24065:60;;24121:1;24118;24111:12

Swarm Source

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