ETH Price: $2,422.58 (+0.21%)

Token

PepeAI (PepeAI)
 

Overview

Max Total Supply

101,000,000,000 PepeAI

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.770591286485330306 PepeAI

Value
$0.00
0x110ce313df8f6954008c13ef9b7f1facc6036730
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:
PepeAI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

AI bot - https://t.me/Pepe_analisys_bot
Chat - https://t.me/PEPE_AI_ETH
Twitter - https://twitter.com/Pepe__Ai                                                                                  
Website - https://pepeai.info                                                                                              

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

pragma solidity ^0.8.0;

/**
 * @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.zeppelin.solutions/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, IERC20Metadata {
    mapping(address => uint256) private _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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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;
        _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;
        }
        _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 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 {}
}

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;
interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

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

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

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

contract PepeAI is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;

    address public immutable uniswapV2Pair;
    address public devWallet;
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    uint256 public swapTokensAtAmount;
    uint256 public buyDevFee;
    uint256 public buyLiquidityFee;
    uint256 public buyTotalFees;
    uint256 public sellDevFee;
    uint256 public sellLiquidityFee;
    uint256 public sellTotalFees;
    uint256 public maxWallet;

    bool public swapBackEnabled = true;
    bool public limitsInEffect = true;
    bool public tradingActive;
    bool private swapping;

    constructor() ERC20("PepeAI", "PepeAI") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), WETH);

        uint256 totalSupply = 1000000000e18;

        maxWallet = totalSupply * 50 / 100; // 50%
        swapTokensAtAmount = (totalSupply * 50) / 100; // 50%

        buyDevFee = 0;
        buyLiquidityFee = 0;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        sellDevFee = 0;
        sellLiquidityFee = 0;
        sellTotalFees = sellDevFee + sellLiquidityFee;

        devWallet = owner();

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(0x0000), true);

        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(address(0xdead), true);
        excludeFromMaxWallet(address(0x0000), true);

        _mint(msg.sender, totalSupply);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        bool isBuy = from == uniswapV2Pair;
        bool isSell = to == uniswapV2Pair;

        if (!tradingActive && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) require(false, "Trading has not started yet");

        if (limitsInEffect && !_isExcludedFromMaxWallet[to] && !swapping) {
            if (isBuy) {
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded (buy)");
            }
            if (!isBuy && !isSell) {
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded (transfer)");
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (canSwap && swapBackEnabled && !swapping && to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
   
     uint256 tokensForLiquidity = 0;

        if (takeFee) {
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees;
            }
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            if (tokensForLiquidity > 0) {
                super._transfer(address(this), uniswapV2Pair, tokensForLiquidity);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForUSDC(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

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

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            devWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }

        swapTokensForUSDC(contractBalance);
    }

    receive() external payable {}

    function rescue(address token) public onlyOwner {
        ERC20 Token = ERC20(token);
        uint256 balance = Token.balanceOf(address(this));
        if (balance > 0) Token.transfer(_msgSender(), balance);
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

    function updateSwapBackEnabled(bool enabled) external onlyOwner {
        swapBackEnabled = enabled;
    }

    function updateBuyFee(uint256 _devFee, uint256 _liquidityFee) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _devFee, uint256 _liquidityFee) external onlyOwner {
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;
        require(sellTotalFees <= 100, "Must keep fees at 15% or less");
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
        require(newAmount >= (totalSupply() * 1) / 100000, "< 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5000) / 100, "> 5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxWallet(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 5 / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newAmount * 1e18;
    }

    function manual (address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

    function enableTrading() public onlyOwner {
        tradingActive = true;
    }

    function enableLimits(bool _limitsInEffect) public onlyOwner {
        limitsInEffect = _limitsInEffect;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }

    function excludeFromMaxWallet(address account, bool excluded) public onlyOwner {
        _isExcludedFromMaxWallet[account] = excluded;
    }

    function isExcludedFromMaxWallet(address account) public view returns (bool) {
        return _isExcludedFromMaxWallet[account];
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_limitsInEffect","type":"bool"}],"name":"enableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055503480156200009c57600080fd5b506040518060400160405280600681526020017f50657065414900000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f506570654149000000000000000000000000000000000000000000000000000081525081600390816200011a919062000b7a565b5080600490816200012c919062000b7a565b5050506200014f62000143620004b260201b60201c565b620004ba60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e919062000ccb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016200026c92919062000d0e565b6020604051808303816000875af11580156200028c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b2919062000ccb565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060006b033b2e3c9fd0803ce80000009050606460328262000307919062000d6a565b62000313919062000de4565b60118190555060646032826200032a919062000d6a565b62000336919062000de4565b600a819055506000600b819055506000600c81905550600c54600b546200035e919062000e1c565b600d819055506000600e819055506000600f81905550600f54600e5462000386919062000e1c565b6010819055506200039c6200058060201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003fe620003f06200058060201b60201c565b6001620005aa60201b60201c565b62000411306001620005aa60201b60201c565b6200042661dead6001620005aa60201b60201c565b6200043a60006001620005aa60201b60201c565b6200045c6200044e6200058060201b60201c565b60016200069460201b60201c565b6200046f3060016200069460201b60201c565b6200048461dead60016200069460201b60201c565b62000498600060016200069460201b60201c565b620004aa33826200077e60201b60201c565b505062000f7a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005ba620004b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005e06200058060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006309062000eb8565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620006a4620004b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006ca6200058060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000723576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071a9062000eb8565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e79062000f2a565b60405180910390fd5b6200080460008383620008f660201b60201c565b806002600082825462000818919062000e1c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200086f919062000e1c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008d6919062000f5d565b60405180910390a3620008f260008383620008fb60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200098257607f821691505b6020821081036200099857620009976200093a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009c3565b62000a0e8683620009c3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a5b62000a5562000a4f8462000a26565b62000a30565b62000a26565b9050919050565b6000819050919050565b62000a778362000a3a565b62000a8f62000a868262000a62565b848454620009d0565b825550505050565b600090565b62000aa662000a97565b62000ab381848462000a6c565b505050565b5b8181101562000adb5762000acf60008262000a9c565b60018101905062000ab9565b5050565b601f82111562000b2a5762000af4816200099e565b62000aff84620009b3565b8101602085101562000b0f578190505b62000b2762000b1e85620009b3565b83018262000ab8565b50505b505050565b600082821c905092915050565b600062000b4f6000198460080262000b2f565b1980831691505092915050565b600062000b6a838362000b3c565b9150826002028217905092915050565b62000b858262000900565b67ffffffffffffffff81111562000ba15762000ba06200090b565b5b62000bad825462000969565b62000bba82828562000adf565b600060209050601f83116001811462000bf2576000841562000bdd578287015190505b62000be9858262000b5c565b86555062000c59565b601f19841662000c02866200099e565b60005b8281101562000c2c5784890151825560018201915060208501945060208101905062000c05565b8683101562000c4c578489015162000c48601f89168262000b3c565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c938262000c66565b9050919050565b62000ca58162000c86565b811462000cb157600080fd5b50565b60008151905062000cc58162000c9a565b92915050565b60006020828403121562000ce45762000ce362000c61565b5b600062000cf48482850162000cb4565b91505092915050565b62000d088162000c86565b82525050565b600060408201905062000d25600083018562000cfd565b62000d34602083018462000cfd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d778262000a26565b915062000d848362000a26565b925082820262000d948162000a26565b9150828204841483151762000dae5762000dad62000d3b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000df18262000a26565b915062000dfe8362000a26565b92508262000e115762000e1062000db5565b5b828204905092915050565b600062000e298262000a26565b915062000e368362000a26565b925082820190508082111562000e515762000e5062000d3b565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ea060208362000e57565b915062000ead8262000e68565b602082019050919050565b6000602082019050818103600083015262000ed38162000e91565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f12601f8362000e57565b915062000f1f8262000eda565b602082019050919050565b6000602082019050818103600083015262000f458162000f03565b9050919050565b62000f578162000a26565b82525050565b600060208201905062000f74600083018462000f4c565b92915050565b60805160a051613ee062000fd860003960008181610f6101528181611f9901528181611fec015281816122df015281816124e8015281816125960152612663015260008181610bb701528181612cc60152612ced0152613ee06000f3fe6080604052600436106102605760003560e01c80638a8c523c11610144578063c0246668116100b6578063e2f456051161007a578063e2f456051461091d578063f11a24d314610948578063f2fde38b14610973578063f63743421461099c578063f8b45b05146109c7578063f931d9d2146109f257610267565b8063c024666814610826578063d257b34f1461084f578063d2fcc0011461088c578063d85ba063146108b5578063dd62ed3e146108e057610267565b8063a0d82dc511610108578063a0d82dc514610702578063a457c2d71461072d578063a5cdee051461076a578063a9059cbb14610793578063ad5c4648146107d0578063bbc0c742146107fb57610267565b80638a8c523c1461063f5780638da5cb5b146106565780638ea5220f1461068157806395d89b41146106ac5780639c3b4fdc146106d757610267565b806349bd5a5e116101dd5780636a486a8e116101a15780636a486a8e146105315780636d0b96541461055c5780636dd3d39f1461058557806370a08231146105c2578063715018a6146105ff578063839006f21461061657610267565b806349bd5a5e1461044a5780634a62bb65146104755780634fbee193146104a0578063610e34b9146104dd57806364c0a2f81461050657610267565b80631816467f116102245780631816467f146103535780631c499ab01461037c57806323b872dd146103a5578063313ce567146103e2578063395093511461040d57610267565b806302dbd8f81461026c57806306fdde0314610295578063095ea7b3146102c05780631694505e146102fd57806318160ddd1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190612de0565b610a1b565b005b3480156102a157600080fd5b506102aa610b05565b6040516102b79190612eb0565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190612f30565b610b97565b6040516102f49190612f8b565b60405180910390f35b34801561030957600080fd5b50610312610bb5565b60405161031f9190613005565b60405180910390f35b34801561033457600080fd5b5061033d610bd9565b60405161034a919061302f565b60405180910390f35b34801561035f57600080fd5b5061037a6004803603810190610375919061304a565b610be3565b005b34801561038857600080fd5b506103a3600480360381019061039e9190613077565b610ca3565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906130a4565b610db2565b6040516103d99190612f8b565b60405180910390f35b3480156103ee57600080fd5b506103f7610eaa565b6040516104049190613113565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190612f30565b610eb3565b6040516104419190612f8b565b60405180910390f35b34801561045657600080fd5b5061045f610f5f565b60405161046c919061313d565b60405180910390f35b34801561048157600080fd5b5061048a610f83565b6040516104979190612f8b565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c2919061304a565b610f96565b6040516104d49190612f8b565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612de0565b610fec565b005b34801561051257600080fd5b5061051b6110d6565b6040516105289190612f8b565b60405180910390f35b34801561053d57600080fd5b506105466110e9565b604051610553919061302f565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190612f30565b6110ef565b005b34801561059157600080fd5b506105ac60048036038101906105a7919061304a565b611179565b6040516105b99190612f8b565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e4919061304a565b6111cf565b6040516105f6919061302f565b60405180910390f35b34801561060b57600080fd5b50610614611217565b005b34801561062257600080fd5b5061063d6004803603810190610638919061304a565b61129f565b005b34801561064b57600080fd5b50610654611433565b005b34801561066257600080fd5b5061066b6114cc565b604051610678919061313d565b60405180910390f35b34801561068d57600080fd5b506106966114f6565b6040516106a3919061313d565b60405180910390f35b3480156106b857600080fd5b506106c161151c565b6040516106ce9190612eb0565b60405180910390f35b3480156106e357600080fd5b506106ec6115ae565b6040516106f9919061302f565b60405180910390f35b34801561070e57600080fd5b506107176115b4565b604051610724919061302f565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190612f30565b6115ba565b6040516107619190612f8b565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c9190613184565b6116a5565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190612f30565b61173e565b6040516107c79190612f8b565b60405180910390f35b3480156107dc57600080fd5b506107e561175c565b6040516107f2919061313d565b60405180910390f35b34801561080757600080fd5b50610810611782565b60405161081d9190612f8b565b60405180910390f35b34801561083257600080fd5b5061084d600480360381019061084891906131b1565b611795565b005b34801561085b57600080fd5b5061087660048036038101906108719190613077565b61186c565b6040516108839190612f8b565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae91906131b1565b6119c1565b005b3480156108c157600080fd5b506108ca611a98565b6040516108d7919061302f565b60405180910390f35b3480156108ec57600080fd5b50610907600480360381019061090291906131f1565b611a9e565b604051610914919061302f565b60405180910390f35b34801561092957600080fd5b50610932611b25565b60405161093f919061302f565b60405180910390f35b34801561095457600080fd5b5061095d611b2b565b60405161096a919061302f565b60405180910390f35b34801561097f57600080fd5b5061099a6004803603810190610995919061304a565b611b31565b005b3480156109a857600080fd5b506109b1611c28565b6040516109be919061302f565b60405180910390f35b3480156109d357600080fd5b506109dc611c2e565b6040516109e9919061302f565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613184565b611c34565b005b610a23611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610a416114cc565b73ffffffffffffffffffffffffffffffffffffffff1614610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e9061327d565b60405180910390fd5b81600e8190555080600f81905550600f54600e54610ab591906132cc565b60108190555060646010541115610b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af89061334c565b60405180910390fd5b5050565b606060038054610b149061339b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b409061339b565b8015610b8d5780601f10610b6257610100808354040283529160200191610b8d565b820191906000526020600020905b815481529060010190602001808311610b7057829003601f168201915b5050505050905090565b6000610bab610ba4611ccd565b8484611cd5565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610beb611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610c096114cc565b73ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c569061327d565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cab611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610cc96114cc565b73ffffffffffffffffffffffffffffffffffffffff1614610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d169061327d565b60405180910390fd5b670de0b6b3a76400006103e86005610d35610bd9565b610d3f91906133cc565b610d49919061343d565b610d53919061343d565b811015610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c906134e0565b60405180910390fd5b670de0b6b3a764000081610da991906133cc565b60118190555050565b6000610dbf848484611e9e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e0a611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190613572565b60405180910390fd5b610e9e85610e96611ccd565b858403611cd5565b60019150509392505050565b60006012905090565b6000610f55610ec0611ccd565b848460016000610ece611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f5091906132cc565b611cd5565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601260019054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ff4611ccd565b73ffffffffffffffffffffffffffffffffffffffff166110126114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f9061327d565b60405180910390fd5b81600b8190555080600c81905550600c54600b5461108691906132cc565b600d81905550600f600d5411156110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c99061334c565b60405180910390fd5b5050565b601260009054906101000a900460ff1681565b60105481565b6110f7611ccd565b73ffffffffffffffffffffffffffffffffffffffff166111156114cc565b73ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111629061327d565b60405180910390fd5b61117582826126b0565b5050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61121f611ccd565b73ffffffffffffffffffffffffffffffffffffffff1661123d6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a9061327d565b60405180910390fd5b61129d600061280f565b565b6112a7611ccd565b73ffffffffffffffffffffffffffffffffffffffff166112c56114cc565b73ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113129061327d565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161135b919061313d565b602060405180830381865afa158015611378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139c91906135a7565b9050600081111561142e578173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6113cb611ccd565b836040518363ffffffff1660e01b81526004016113e99291906135d4565b6020604051808303816000875af1158015611408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142c9190613612565b505b505050565b61143b611ccd565b73ffffffffffffffffffffffffffffffffffffffff166114596114cc565b73ffffffffffffffffffffffffffffffffffffffff16146114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a69061327d565b60405180910390fd5b6001601260026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461152b9061339b565b80601f01602080910402602001604051908101604052809291908181526020018280546115579061339b565b80156115a45780601f10611579576101008083540402835291602001916115a4565b820191906000526020600020905b81548152906001019060200180831161158757829003601f168201915b5050505050905090565b600b5481565b600e5481565b600080600160006115c9611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906136b1565b60405180910390fd5b61169a611691611ccd565b85858403611cd5565b600191505092915050565b6116ad611ccd565b73ffffffffffffffffffffffffffffffffffffffff166116cb6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611721576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117189061327d565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b600061175261174b611ccd565b8484611e9e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260029054906101000a900460ff1681565b61179d611ccd565b73ffffffffffffffffffffffffffffffffffffffff166117bb6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118089061327d565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611876611ccd565b73ffffffffffffffffffffffffffffffffffffffff166118946114cc565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e19061327d565b60405180910390fd5b620186a060016118f8610bd9565b61190291906133cc565b61190c919061343d565b82101561194e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119459061371d565b60405180910390fd5b606461138861195b610bd9565b61196591906133cc565b61196f919061343d565b8211156119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890613789565b60405180910390fd5b81600a8190555060019050919050565b6119c9611ccd565b73ffffffffffffffffffffffffffffffffffffffff166119e76114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a349061327d565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600c5481565b611b39611ccd565b73ffffffffffffffffffffffffffffffffffffffff16611b576114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba49061327d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c139061381b565b60405180910390fd5b611c258161280f565b50565b600f5481565b60115481565b611c3c611ccd565b73ffffffffffffffffffffffffffffffffffffffff16611c5a6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca79061327d565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906138ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa9061393f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e91919061302f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f04906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390613a63565b60405180910390fd5b60008103611f9557611f90838360006128d5565b6126ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050601260029054906101000a900460ff161580156120a25750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120f85750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561213f57600061213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590613acf565b60405180910390fd5b5b601260019054906101000a900460ff1680156121a55750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121be5750601260039054906101000a900460ff16155b1561228d578115612222576011546121d5856111cf565b846121e091906132cc565b1115612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890613b3b565b60405180910390fd5b5b8115801561222e575080155b1561228c5760115461223f856111cf565b8461224a91906132cc565b111561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613ba7565b60405180910390fd5b5b5b6000612298306111cf565b90506000600a5482101590508080156122bd5750601260009054906101000a900460ff165b80156122d65750601260039054906101000a900460ff16155b801561232d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156123835750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123d95750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561241d576001601260036101000a81548160ff021916908315150217905550612401612b54565b6000601260036101000a81548160ff0219169083151502179055505b6000601260039054906101000a900460ff16159050600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124d35750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124dd57600090505b6000808215612698577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561254357506000601054115b156125945761257060646125626010548b612b7c90919063ffffffff16565b612b9290919063ffffffff16565b9150601054600f548361258391906133cc565b61258d919061343d565b905061263f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161480156125f157506000600d54115b1561263e5761261e6064612610600d548b612b7c90919063ffffffff16565b612b9290919063ffffffff16565b9150600d54600c548361263191906133cc565b61263b919061343d565b90505b5b6000821115612654576126538a30846128d5565b5b600081111561268957612688307f0000000000000000000000000000000000000000000000000000000000000000836128d5565b5b81886126959190613bc7565b97505b6126a38a8a8a6128d5565b505050505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690613c47565b60405180910390fd5b61272b60008383612ba8565b806002600082825461273d91906132cc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461279291906132cc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127f7919061302f565b60405180910390a361280b60008383612bad565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90613a63565b60405180910390fd5b6129be838383612ba8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b90613cd9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad791906132cc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b3b919061302f565b60405180910390a3612b4e848484612bad565b50505050565b6000612b5f306111cf565b905060008103612b6f5750612b7a565b612b7881612bb2565b505b565b60008183612b8a91906133cc565b905092915050565b60008183612ba0919061343d565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612bcf57612bce613cf9565b5b604051908082528060200260200182016040528015612bfd5781602001602082028036833780820191505090505b5090503081600081518110612c1557612c14613d28565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612c8657612c85613d28565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ceb307f000000000000000000000000000000000000000000000000000000000000000084611cd5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612d6f959493929190613e50565b600060405180830381600087803b158015612d8957600080fd5b505af1158015612d9d573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612dbd81612daa565b8114612dc857600080fd5b50565b600081359050612dda81612db4565b92915050565b60008060408385031215612df757612df6612da5565b5b6000612e0585828601612dcb565b9250506020612e1685828601612dcb565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e5a578082015181840152602081019050612e3f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e8282612e20565b612e8c8185612e2b565b9350612e9c818560208601612e3c565b612ea581612e66565b840191505092915050565b60006020820190508181036000830152612eca8184612e77565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612efd82612ed2565b9050919050565b612f0d81612ef2565b8114612f1857600080fd5b50565b600081359050612f2a81612f04565b92915050565b60008060408385031215612f4757612f46612da5565b5b6000612f5585828601612f1b565b9250506020612f6685828601612dcb565b9150509250929050565b60008115159050919050565b612f8581612f70565b82525050565b6000602082019050612fa06000830184612f7c565b92915050565b6000819050919050565b6000612fcb612fc6612fc184612ed2565b612fa6565b612ed2565b9050919050565b6000612fdd82612fb0565b9050919050565b6000612fef82612fd2565b9050919050565b612fff81612fe4565b82525050565b600060208201905061301a6000830184612ff6565b92915050565b61302981612daa565b82525050565b60006020820190506130446000830184613020565b92915050565b6000602082840312156130605761305f612da5565b5b600061306e84828501612f1b565b91505092915050565b60006020828403121561308d5761308c612da5565b5b600061309b84828501612dcb565b91505092915050565b6000806000606084860312156130bd576130bc612da5565b5b60006130cb86828701612f1b565b93505060206130dc86828701612f1b565b92505060406130ed86828701612dcb565b9150509250925092565b600060ff82169050919050565b61310d816130f7565b82525050565b60006020820190506131286000830184613104565b92915050565b61313781612ef2565b82525050565b6000602082019050613152600083018461312e565b92915050565b61316181612f70565b811461316c57600080fd5b50565b60008135905061317e81613158565b92915050565b60006020828403121561319a57613199612da5565b5b60006131a88482850161316f565b91505092915050565b600080604083850312156131c8576131c7612da5565b5b60006131d685828601612f1b565b92505060206131e78582860161316f565b9150509250929050565b6000806040838503121561320857613207612da5565b5b600061321685828601612f1b565b925050602061322785828601612f1b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613267602083612e2b565b915061327282613231565b602082019050919050565b600060208201905081810360008301526132968161325a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006132d782612daa565b91506132e283612daa565b92508282019050808211156132fa576132f961329d565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000613336601d83612e2b565b915061334182613300565b602082019050919050565b6000602082019050818103600083015261336581613329565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806133b357607f821691505b6020821081036133c6576133c561336c565b5b50919050565b60006133d782612daa565b91506133e283612daa565b92508282026133f081612daa565b915082820484148315176134075761340661329d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061344882612daa565b915061345383612daa565b9250826134635761346261340e565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006134ca602483612e2b565b91506134d58261346e565b604082019050919050565b600060208201905081810360008301526134f9816134bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061355c602883612e2b565b915061356782613500565b604082019050919050565b6000602082019050818103600083015261358b8161354f565b9050919050565b6000815190506135a181612db4565b92915050565b6000602082840312156135bd576135bc612da5565b5b60006135cb84828501613592565b91505092915050565b60006040820190506135e9600083018561312e565b6135f66020830184613020565b9392505050565b60008151905061360c81613158565b92915050565b60006020828403121561362857613627612da5565b5b6000613636848285016135fd565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061369b602583612e2b565b91506136a68261363f565b604082019050919050565b600060208201905081810360008301526136ca8161368e565b9050919050565b7f3c20302e3030312520746f74616c20737570706c792e00000000000000000000600082015250565b6000613707601683612e2b565b9150613712826136d1565b602082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f3e20352520746f74616c20737570706c792e0000000000000000000000000000600082015250565b6000613773601283612e2b565b915061377e8261373d565b602082019050919050565b600060208201905081810360008301526137a281613766565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613805602683612e2b565b9150613810826137a9565b604082019050919050565b60006020820190508181036000830152613834816137f8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613897602483612e2b565b91506138a28261383b565b604082019050919050565b600060208201905081810360008301526138c68161388a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613929602283612e2b565b9150613934826138cd565b604082019050919050565b600060208201905081810360008301526139588161391c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139bb602583612e2b565b91506139c68261395f565b604082019050919050565b600060208201905081810360008301526139ea816139ae565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a4d602383612e2b565b9150613a58826139f1565b604082019050919050565b60006020820190508181036000830152613a7c81613a40565b9050919050565b7f54726164696e6720686173206e6f742073746172746564207965740000000000600082015250565b6000613ab9601b83612e2b565b9150613ac482613a83565b602082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b7f4d61782077616c6c657420657863656564656420286275792900000000000000600082015250565b6000613b25601983612e2b565b9150613b3082613aef565b602082019050919050565b60006020820190508181036000830152613b5481613b18565b9050919050565b7f4d61782077616c6c657420657863656564656420287472616e73666572290000600082015250565b6000613b91601e83612e2b565b9150613b9c82613b5b565b602082019050919050565b60006020820190508181036000830152613bc081613b84565b9050919050565b6000613bd282612daa565b9150613bdd83612daa565b9250828203905081811115613bf557613bf461329d565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613c31601f83612e2b565b9150613c3c82613bfb565b602082019050919050565b60006020820190508181036000830152613c6081613c24565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613cc3602683612e2b565b9150613cce82613c67565b604082019050919050565b60006020820190508181036000830152613cf281613cb6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613d7c613d77613d7284613d57565b612fa6565b612daa565b9050919050565b613d8c81613d61565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613dc781612ef2565b82525050565b6000613dd98383613dbe565b60208301905092915050565b6000602082019050919050565b6000613dfd82613d92565b613e078185613d9d565b9350613e1283613dae565b8060005b83811015613e43578151613e2a8882613dcd565b9750613e3583613de5565b925050600181019050613e16565b5085935050505092915050565b600060a082019050613e656000830188613020565b613e726020830187613d83565b8181036040830152613e848186613df2565b9050613e93606083018561312e565b613ea06080830184613020565b969550505050505056fea26469706673582212208a0745273e27a2e2ee61da2eac0ff27c1e88bb4ceb32f7f273ef82102befec7364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80638a8c523c11610144578063c0246668116100b6578063e2f456051161007a578063e2f456051461091d578063f11a24d314610948578063f2fde38b14610973578063f63743421461099c578063f8b45b05146109c7578063f931d9d2146109f257610267565b8063c024666814610826578063d257b34f1461084f578063d2fcc0011461088c578063d85ba063146108b5578063dd62ed3e146108e057610267565b8063a0d82dc511610108578063a0d82dc514610702578063a457c2d71461072d578063a5cdee051461076a578063a9059cbb14610793578063ad5c4648146107d0578063bbc0c742146107fb57610267565b80638a8c523c1461063f5780638da5cb5b146106565780638ea5220f1461068157806395d89b41146106ac5780639c3b4fdc146106d757610267565b806349bd5a5e116101dd5780636a486a8e116101a15780636a486a8e146105315780636d0b96541461055c5780636dd3d39f1461058557806370a08231146105c2578063715018a6146105ff578063839006f21461061657610267565b806349bd5a5e1461044a5780634a62bb65146104755780634fbee193146104a0578063610e34b9146104dd57806364c0a2f81461050657610267565b80631816467f116102245780631816467f146103535780631c499ab01461037c57806323b872dd146103a5578063313ce567146103e2578063395093511461040d57610267565b806302dbd8f81461026c57806306fdde0314610295578063095ea7b3146102c05780631694505e146102fd57806318160ddd1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190612de0565b610a1b565b005b3480156102a157600080fd5b506102aa610b05565b6040516102b79190612eb0565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190612f30565b610b97565b6040516102f49190612f8b565b60405180910390f35b34801561030957600080fd5b50610312610bb5565b60405161031f9190613005565b60405180910390f35b34801561033457600080fd5b5061033d610bd9565b60405161034a919061302f565b60405180910390f35b34801561035f57600080fd5b5061037a6004803603810190610375919061304a565b610be3565b005b34801561038857600080fd5b506103a3600480360381019061039e9190613077565b610ca3565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906130a4565b610db2565b6040516103d99190612f8b565b60405180910390f35b3480156103ee57600080fd5b506103f7610eaa565b6040516104049190613113565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190612f30565b610eb3565b6040516104419190612f8b565b60405180910390f35b34801561045657600080fd5b5061045f610f5f565b60405161046c919061313d565b60405180910390f35b34801561048157600080fd5b5061048a610f83565b6040516104979190612f8b565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c2919061304a565b610f96565b6040516104d49190612f8b565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612de0565b610fec565b005b34801561051257600080fd5b5061051b6110d6565b6040516105289190612f8b565b60405180910390f35b34801561053d57600080fd5b506105466110e9565b604051610553919061302f565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190612f30565b6110ef565b005b34801561059157600080fd5b506105ac60048036038101906105a7919061304a565b611179565b6040516105b99190612f8b565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e4919061304a565b6111cf565b6040516105f6919061302f565b60405180910390f35b34801561060b57600080fd5b50610614611217565b005b34801561062257600080fd5b5061063d6004803603810190610638919061304a565b61129f565b005b34801561064b57600080fd5b50610654611433565b005b34801561066257600080fd5b5061066b6114cc565b604051610678919061313d565b60405180910390f35b34801561068d57600080fd5b506106966114f6565b6040516106a3919061313d565b60405180910390f35b3480156106b857600080fd5b506106c161151c565b6040516106ce9190612eb0565b60405180910390f35b3480156106e357600080fd5b506106ec6115ae565b6040516106f9919061302f565b60405180910390f35b34801561070e57600080fd5b506107176115b4565b604051610724919061302f565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190612f30565b6115ba565b6040516107619190612f8b565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c9190613184565b6116a5565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190612f30565b61173e565b6040516107c79190612f8b565b60405180910390f35b3480156107dc57600080fd5b506107e561175c565b6040516107f2919061313d565b60405180910390f35b34801561080757600080fd5b50610810611782565b60405161081d9190612f8b565b60405180910390f35b34801561083257600080fd5b5061084d600480360381019061084891906131b1565b611795565b005b34801561085b57600080fd5b5061087660048036038101906108719190613077565b61186c565b6040516108839190612f8b565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae91906131b1565b6119c1565b005b3480156108c157600080fd5b506108ca611a98565b6040516108d7919061302f565b60405180910390f35b3480156108ec57600080fd5b50610907600480360381019061090291906131f1565b611a9e565b604051610914919061302f565b60405180910390f35b34801561092957600080fd5b50610932611b25565b60405161093f919061302f565b60405180910390f35b34801561095457600080fd5b5061095d611b2b565b60405161096a919061302f565b60405180910390f35b34801561097f57600080fd5b5061099a6004803603810190610995919061304a565b611b31565b005b3480156109a857600080fd5b506109b1611c28565b6040516109be919061302f565b60405180910390f35b3480156109d357600080fd5b506109dc611c2e565b6040516109e9919061302f565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613184565b611c34565b005b610a23611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610a416114cc565b73ffffffffffffffffffffffffffffffffffffffff1614610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e9061327d565b60405180910390fd5b81600e8190555080600f81905550600f54600e54610ab591906132cc565b60108190555060646010541115610b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af89061334c565b60405180910390fd5b5050565b606060038054610b149061339b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b409061339b565b8015610b8d5780601f10610b6257610100808354040283529160200191610b8d565b820191906000526020600020905b815481529060010190602001808311610b7057829003601f168201915b5050505050905090565b6000610bab610ba4611ccd565b8484611cd5565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610beb611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610c096114cc565b73ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c569061327d565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cab611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610cc96114cc565b73ffffffffffffffffffffffffffffffffffffffff1614610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d169061327d565b60405180910390fd5b670de0b6b3a76400006103e86005610d35610bd9565b610d3f91906133cc565b610d49919061343d565b610d53919061343d565b811015610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c906134e0565b60405180910390fd5b670de0b6b3a764000081610da991906133cc565b60118190555050565b6000610dbf848484611e9e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e0a611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190613572565b60405180910390fd5b610e9e85610e96611ccd565b858403611cd5565b60019150509392505050565b60006012905090565b6000610f55610ec0611ccd565b848460016000610ece611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f5091906132cc565b611cd5565b6001905092915050565b7f0000000000000000000000007a4c1c04efb2ad9434433729bc8b2b0a53fc156081565b601260019054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ff4611ccd565b73ffffffffffffffffffffffffffffffffffffffff166110126114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f9061327d565b60405180910390fd5b81600b8190555080600c81905550600c54600b5461108691906132cc565b600d81905550600f600d5411156110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c99061334c565b60405180910390fd5b5050565b601260009054906101000a900460ff1681565b60105481565b6110f7611ccd565b73ffffffffffffffffffffffffffffffffffffffff166111156114cc565b73ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111629061327d565b60405180910390fd5b61117582826126b0565b5050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61121f611ccd565b73ffffffffffffffffffffffffffffffffffffffff1661123d6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a9061327d565b60405180910390fd5b61129d600061280f565b565b6112a7611ccd565b73ffffffffffffffffffffffffffffffffffffffff166112c56114cc565b73ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113129061327d565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161135b919061313d565b602060405180830381865afa158015611378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139c91906135a7565b9050600081111561142e578173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6113cb611ccd565b836040518363ffffffff1660e01b81526004016113e99291906135d4565b6020604051808303816000875af1158015611408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142c9190613612565b505b505050565b61143b611ccd565b73ffffffffffffffffffffffffffffffffffffffff166114596114cc565b73ffffffffffffffffffffffffffffffffffffffff16146114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a69061327d565b60405180910390fd5b6001601260026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461152b9061339b565b80601f01602080910402602001604051908101604052809291908181526020018280546115579061339b565b80156115a45780601f10611579576101008083540402835291602001916115a4565b820191906000526020600020905b81548152906001019060200180831161158757829003601f168201915b5050505050905090565b600b5481565b600e5481565b600080600160006115c9611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906136b1565b60405180910390fd5b61169a611691611ccd565b85858403611cd5565b600191505092915050565b6116ad611ccd565b73ffffffffffffffffffffffffffffffffffffffff166116cb6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611721576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117189061327d565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b600061175261174b611ccd565b8484611e9e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260029054906101000a900460ff1681565b61179d611ccd565b73ffffffffffffffffffffffffffffffffffffffff166117bb6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118089061327d565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611876611ccd565b73ffffffffffffffffffffffffffffffffffffffff166118946114cc565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e19061327d565b60405180910390fd5b620186a060016118f8610bd9565b61190291906133cc565b61190c919061343d565b82101561194e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119459061371d565b60405180910390fd5b606461138861195b610bd9565b61196591906133cc565b61196f919061343d565b8211156119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890613789565b60405180910390fd5b81600a8190555060019050919050565b6119c9611ccd565b73ffffffffffffffffffffffffffffffffffffffff166119e76114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a349061327d565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600c5481565b611b39611ccd565b73ffffffffffffffffffffffffffffffffffffffff16611b576114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba49061327d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c139061381b565b60405180910390fd5b611c258161280f565b50565b600f5481565b60115481565b611c3c611ccd565b73ffffffffffffffffffffffffffffffffffffffff16611c5a6114cc565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca79061327d565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906138ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa9061393f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e91919061302f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f04906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390613a63565b60405180910390fd5b60008103611f9557611f90838360006128d5565b6126ab565b60007f0000000000000000000000007a4c1c04efb2ad9434433729bc8b2b0a53fc156073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f0000000000000000000000007a4c1c04efb2ad9434433729bc8b2b0a53fc156073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050601260029054906101000a900460ff161580156120a25750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120f85750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561213f57600061213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590613acf565b60405180910390fd5b5b601260019054906101000a900460ff1680156121a55750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121be5750601260039054906101000a900460ff16155b1561228d578115612222576011546121d5856111cf565b846121e091906132cc565b1115612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890613b3b565b60405180910390fd5b5b8115801561222e575080155b1561228c5760115461223f856111cf565b8461224a91906132cc565b111561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613ba7565b60405180910390fd5b5b5b6000612298306111cf565b90506000600a5482101590508080156122bd5750601260009054906101000a900460ff165b80156122d65750601260039054906101000a900460ff16155b801561232d57507f0000000000000000000000007a4c1c04efb2ad9434433729bc8b2b0a53fc156073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156123835750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123d95750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561241d576001601260036101000a81548160ff021916908315150217905550612401612b54565b6000601260036101000a81548160ff0219169083151502179055505b6000601260039054906101000a900460ff16159050600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124d35750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124dd57600090505b6000808215612698577f0000000000000000000000007a4c1c04efb2ad9434433729bc8b2b0a53fc156073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561254357506000601054115b156125945761257060646125626010548b612b7c90919063ffffffff16565b612b9290919063ffffffff16565b9150601054600f548361258391906133cc565b61258d919061343d565b905061263f565b7f0000000000000000000000007a4c1c04efb2ad9434433729bc8b2b0a53fc156073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161480156125f157506000600d54115b1561263e5761261e6064612610600d548b612b7c90919063ffffffff16565b612b9290919063ffffffff16565b9150600d54600c548361263191906133cc565b61263b919061343d565b90505b5b6000821115612654576126538a30846128d5565b5b600081111561268957612688307f0000000000000000000000007a4c1c04efb2ad9434433729bc8b2b0a53fc1560836128d5565b5b81886126959190613bc7565b97505b6126a38a8a8a6128d5565b505050505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690613c47565b60405180910390fd5b61272b60008383612ba8565b806002600082825461273d91906132cc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461279291906132cc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127f7919061302f565b60405180910390a361280b60008383612bad565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90613a63565b60405180910390fd5b6129be838383612ba8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b90613cd9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad791906132cc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b3b919061302f565b60405180910390a3612b4e848484612bad565b50505050565b6000612b5f306111cf565b905060008103612b6f5750612b7a565b612b7881612bb2565b505b565b60008183612b8a91906133cc565b905092915050565b60008183612ba0919061343d565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612bcf57612bce613cf9565b5b604051908082528060200260200182016040528015612bfd5781602001602082028036833780820191505090505b5090503081600081518110612c1557612c14613d28565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612c8657612c85613d28565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ceb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611cd5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612d6f959493929190613e50565b600060405180830381600087803b158015612d8957600080fd5b505af1158015612d9d573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612dbd81612daa565b8114612dc857600080fd5b50565b600081359050612dda81612db4565b92915050565b60008060408385031215612df757612df6612da5565b5b6000612e0585828601612dcb565b9250506020612e1685828601612dcb565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e5a578082015181840152602081019050612e3f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e8282612e20565b612e8c8185612e2b565b9350612e9c818560208601612e3c565b612ea581612e66565b840191505092915050565b60006020820190508181036000830152612eca8184612e77565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612efd82612ed2565b9050919050565b612f0d81612ef2565b8114612f1857600080fd5b50565b600081359050612f2a81612f04565b92915050565b60008060408385031215612f4757612f46612da5565b5b6000612f5585828601612f1b565b9250506020612f6685828601612dcb565b9150509250929050565b60008115159050919050565b612f8581612f70565b82525050565b6000602082019050612fa06000830184612f7c565b92915050565b6000819050919050565b6000612fcb612fc6612fc184612ed2565b612fa6565b612ed2565b9050919050565b6000612fdd82612fb0565b9050919050565b6000612fef82612fd2565b9050919050565b612fff81612fe4565b82525050565b600060208201905061301a6000830184612ff6565b92915050565b61302981612daa565b82525050565b60006020820190506130446000830184613020565b92915050565b6000602082840312156130605761305f612da5565b5b600061306e84828501612f1b565b91505092915050565b60006020828403121561308d5761308c612da5565b5b600061309b84828501612dcb565b91505092915050565b6000806000606084860312156130bd576130bc612da5565b5b60006130cb86828701612f1b565b93505060206130dc86828701612f1b565b92505060406130ed86828701612dcb565b9150509250925092565b600060ff82169050919050565b61310d816130f7565b82525050565b60006020820190506131286000830184613104565b92915050565b61313781612ef2565b82525050565b6000602082019050613152600083018461312e565b92915050565b61316181612f70565b811461316c57600080fd5b50565b60008135905061317e81613158565b92915050565b60006020828403121561319a57613199612da5565b5b60006131a88482850161316f565b91505092915050565b600080604083850312156131c8576131c7612da5565b5b60006131d685828601612f1b565b92505060206131e78582860161316f565b9150509250929050565b6000806040838503121561320857613207612da5565b5b600061321685828601612f1b565b925050602061322785828601612f1b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613267602083612e2b565b915061327282613231565b602082019050919050565b600060208201905081810360008301526132968161325a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006132d782612daa565b91506132e283612daa565b92508282019050808211156132fa576132f961329d565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000613336601d83612e2b565b915061334182613300565b602082019050919050565b6000602082019050818103600083015261336581613329565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806133b357607f821691505b6020821081036133c6576133c561336c565b5b50919050565b60006133d782612daa565b91506133e283612daa565b92508282026133f081612daa565b915082820484148315176134075761340661329d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061344882612daa565b915061345383612daa565b9250826134635761346261340e565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006134ca602483612e2b565b91506134d58261346e565b604082019050919050565b600060208201905081810360008301526134f9816134bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061355c602883612e2b565b915061356782613500565b604082019050919050565b6000602082019050818103600083015261358b8161354f565b9050919050565b6000815190506135a181612db4565b92915050565b6000602082840312156135bd576135bc612da5565b5b60006135cb84828501613592565b91505092915050565b60006040820190506135e9600083018561312e565b6135f66020830184613020565b9392505050565b60008151905061360c81613158565b92915050565b60006020828403121561362857613627612da5565b5b6000613636848285016135fd565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061369b602583612e2b565b91506136a68261363f565b604082019050919050565b600060208201905081810360008301526136ca8161368e565b9050919050565b7f3c20302e3030312520746f74616c20737570706c792e00000000000000000000600082015250565b6000613707601683612e2b565b9150613712826136d1565b602082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f3e20352520746f74616c20737570706c792e0000000000000000000000000000600082015250565b6000613773601283612e2b565b915061377e8261373d565b602082019050919050565b600060208201905081810360008301526137a281613766565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613805602683612e2b565b9150613810826137a9565b604082019050919050565b60006020820190508181036000830152613834816137f8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613897602483612e2b565b91506138a28261383b565b604082019050919050565b600060208201905081810360008301526138c68161388a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613929602283612e2b565b9150613934826138cd565b604082019050919050565b600060208201905081810360008301526139588161391c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139bb602583612e2b565b91506139c68261395f565b604082019050919050565b600060208201905081810360008301526139ea816139ae565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a4d602383612e2b565b9150613a58826139f1565b604082019050919050565b60006020820190508181036000830152613a7c81613a40565b9050919050565b7f54726164696e6720686173206e6f742073746172746564207965740000000000600082015250565b6000613ab9601b83612e2b565b9150613ac482613a83565b602082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b7f4d61782077616c6c657420657863656564656420286275792900000000000000600082015250565b6000613b25601983612e2b565b9150613b3082613aef565b602082019050919050565b60006020820190508181036000830152613b5481613b18565b9050919050565b7f4d61782077616c6c657420657863656564656420287472616e73666572290000600082015250565b6000613b91601e83612e2b565b9150613b9c82613b5b565b602082019050919050565b60006020820190508181036000830152613bc081613b84565b9050919050565b6000613bd282612daa565b9150613bdd83612daa565b9250828203905081811115613bf557613bf461329d565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613c31601f83612e2b565b9150613c3c82613bfb565b602082019050919050565b60006020820190508181036000830152613c6081613c24565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613cc3602683612e2b565b9150613cce82613c67565b604082019050919050565b60006020820190508181036000830152613cf281613cb6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613d7c613d77613d7284613d57565b612fa6565b612daa565b9050919050565b613d8c81613d61565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613dc781612ef2565b82525050565b6000613dd98383613dbe565b60208301905092915050565b6000602082019050919050565b6000613dfd82613d92565b613e078185613d9d565b9350613e1283613dae565b8060005b83811015613e43578151613e2a8882613dcd565b9750613e3583613de5565b925050600181019050613e16565b5085935050505092915050565b600060a082019050613e656000830188613020565b613e726020830187613d83565b8181036040830152613e848186613df2565b9050613e93606083018561312e565b613ea06080830184613020565b969550505050505056fea26469706673582212208a0745273e27a2e2ee61da2eac0ff27c1e88bb4ceb32f7f273ef82102befec7364736f6c63430008110033

Deployed Bytecode Sourcemap

26448:7591:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32299:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8918:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11087:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26524:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10040:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31779:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32937:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11738:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9882:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12639:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26584:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27179:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33910:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32006:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27138:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27070:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33161:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33766:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10211:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2749:103;;;;;;;;;;;;;:::i;:::-;;31554:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33267:81;;;;;;;;;;;;;:::i;:::-;;2098:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26629:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9137:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26898:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27000:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13357:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33356:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10551:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26660:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27219:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33476:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32601:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33616:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26966:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10789:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26858:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26929:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3007:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27032:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27105:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31890:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32299:294;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32406:7:::1;32393:10;:20;;;;32443:13;32424:16;:32;;;;32496:16;;32483:10;;:29;;;;:::i;:::-;32467:13;:45;;;;32548:3;32531:13;;:20;;32523:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32299:294:::0;;:::o;8918:100::-;8972:13;9005:5;8998:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8918:100;:::o;11087:169::-;11170:4;11187:39;11196:12;:10;:12::i;:::-;11210:7;11219:6;11187:8;:39::i;:::-;11244:4;11237:11;;11087:169;;;;:::o;26524:51::-;;;:::o;10040:108::-;10101:7;10128:12;;10121:19;;10040:108;:::o;31779:103::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31865:9:::1;31853;;:21;;;;;;;;;;;;;;;;;;31779:103:::0;:::o;32937:216::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33061:4:::1;33053;33049:1;33033:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;33032:33;;;;:::i;:::-;33019:9;:46;;33011:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;33141:4;33129:9;:16;;;;:::i;:::-;33117:9;:28;;;;32937:216:::0;:::o;11738:492::-;11878:4;11895:36;11905:6;11913:9;11924:6;11895:9;:36::i;:::-;11944:24;11971:11;:19;11983:6;11971:19;;;;;;;;;;;;;;;:33;11991:12;:10;:12::i;:::-;11971:33;;;;;;;;;;;;;;;;11944:60;;12043:6;12023:16;:26;;12015:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12130:57;12139:6;12147:12;:10;:12::i;:::-;12180:6;12161:16;:25;12130:8;:57::i;:::-;12218:4;12211:11;;;11738:492;;;;;:::o;9882:93::-;9940:5;9965:2;9958:9;;9882:93;:::o;12639:215::-;12727:4;12744:80;12753:12;:10;:12::i;:::-;12767:7;12813:10;12776:11;:25;12788:12;:10;:12::i;:::-;12776:25;;;;;;;;;;;;;;;:34;12802:7;12776:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12744:8;:80::i;:::-;12842:4;12835:11;;12639:215;;;;:::o;26584:38::-;;;:::o;27179:33::-;;;;;;;;;;;;;:::o;33910:126::-;33976:4;34000:19;:28;34020:7;34000:28;;;;;;;;;;;;;;;;;;;;;;;;;33993:35;;33910:126;;;:::o;32006:285::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32110:7:::1;32098:9;:19;;;;32146:13;32128:15;:31;;;;32197:15;;32185:9;;:27;;;;:::i;:::-;32170:12;:42;;;;32247:2;32231:12;;:18;;32223:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32006:285:::0;;:::o;27138:34::-;;;;;;;;;;;;;:::o;27070:28::-;;;;:::o;33161:98::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33234:17:::1;33240:2;33244:6;33234:5;:17::i;:::-;33161:98:::0;;:::o;33766:136::-;33837:4;33861:24;:33;33886:7;33861:33;;;;;;;;;;;;;;;;;;;;;;;;;33854:40;;33766:136;;;:::o;10211:127::-;10285:7;10312:9;:18;10322:7;10312:18;;;;;;;;;;;;;;;;10305:25;;10211:127;;;:::o;2749:103::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2814:30:::1;2841:1;2814:18;:30::i;:::-;2749:103::o:0;31554:217::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31613:11:::1;31633:5;31613:26;;31650:15;31668:5;:15;;;31692:4;31668:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31650:48;;31723:1;31713:7;:11;31709:54;;;31726:5;:14;;;31741:12;:10;:12::i;:::-;31755:7;31726:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31709:54;31602:169;;31554:217:::0;:::o;33267:81::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33336:4:::1;33320:13;;:20;;;;;;;;;;;;;;;;;;33267:81::o:0;2098:87::-;2144:7;2171:6;;;;;;;;;;;2164:13;;2098:87;:::o;26629:24::-;;;;;;;;;;;;;:::o;9137:104::-;9193:13;9226:7;9219:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9137:104;:::o;26898:24::-;;;;:::o;27000:25::-;;;;:::o;13357:413::-;13450:4;13467:24;13494:11;:25;13506:12;:10;:12::i;:::-;13494:25;;;;;;;;;;;;;;;:34;13520:7;13494:34;;;;;;;;;;;;;;;;13467:61;;13567:15;13547:16;:35;;13539:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13660:67;13669:12;:10;:12::i;:::-;13683:7;13711:15;13692:16;:34;13660:8;:67::i;:::-;13758:4;13751:11;;;13357:413;;;;:::o;33356:112::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33445:15:::1;33428:14;;:32;;;;;;;;;;;;;;;;;;33356:112:::0;:::o;10551:175::-;10637:4;10654:42;10664:12;:10;:12::i;:::-;10678:9;10689:6;10654:9;:42::i;:::-;10714:4;10707:11;;10551:175;;;;:::o;26660:64::-;;;;;;;;;;;;;:::o;27219:25::-;;;;;;;;;;;;;:::o;33476:132::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33592:8:::1;33561:19;:28;33581:7;33561:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33476:132:::0;;:::o;32601:328::-;32682:4;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32742:6:::1;32737:1;32721:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32720:28;;;;:::i;:::-;32707:9;:41;;32699:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32832:3;32824:4;32808:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32807:28;;;;:::i;:::-;32794:9;:41;;32786:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;32890:9;32869:18;:30;;;;32917:4;32910:11;;32601:328:::0;;;:::o;33616:142::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33742:8:::1;33706:24;:33;33731:7;33706:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;33616:142:::0;;:::o;26966:27::-;;;;:::o;10789:151::-;10878:7;10905:11;:18;10917:5;10905:18;;;;;;;;;;;;;;;:27;10924:7;10905:27;;;;;;;;;;;;;;;;10898:34;;10789:151;;;;:::o;26858:33::-;;;;:::o;26929:30::-;;;;:::o;3007:201::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3116:1:::1;3096:22;;:8;:22;;::::0;3088:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3172:28;3191:8;3172:18;:28::i;:::-;3007:201:::0;:::o;27032:31::-;;;;:::o;27105:24::-;;;;:::o;31890:108::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31983:7:::1;31965:15;;:25;;;;;;;;;;;;;;;;;;31890:108:::0;:::o;938:98::-;991:7;1018:10;1011:17;;938:98;:::o;17041:380::-;17194:1;17177:19;;:5;:19;;;17169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17275:1;17256:21;;:7;:21;;;17248:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17359:6;17329:11;:18;17341:5;17329:18;;;;;;;;;;;;;;;:27;17348:7;17329:27;;;;;;;;;;;;;;;:36;;;;17397:7;17381:32;;17390:5;17381:32;;;17406:6;17381:32;;;;;;:::i;:::-;;;;;;;;17041:380;;;:::o;28454:2369::-;28602:1;28586:18;;:4;:18;;;28578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28679:1;28665:16;;:2;:16;;;28657:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28748:1;28738:6;:11;28734:93;;28766:28;28782:4;28788:2;28792:1;28766:15;:28::i;:::-;28809:7;;28734:93;28839:10;28860:13;28852:21;;:4;:21;;;28839:34;;28884:11;28904:13;28898:19;;:2;:19;;;28884:33;;28935:13;;;;;;;;;;;28934:14;:44;;;;;28953:19;:25;28973:4;28953:25;;;;;;;;;;;;;;;;;;;;;;;;;28952:26;28934:44;:72;;;;;28983:19;:23;29003:2;28983:23;;;;;;;;;;;;;;;;;;;;;;;;;28982:24;28934:72;28930:123;;;29016:5;29008:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;28930:123;29070:14;;;;;;;;;;;:47;;;;;29089:24;:28;29114:2;29089:28;;;;;;;;;;;;;;;;;;;;;;;;;29088:29;29070:47;:60;;;;;29122:8;;;;;;;;;;;29121:9;29070:60;29066:361;;;29151:5;29147:119;;;29211:9;;29194:13;29204:2;29194:9;:13::i;:::-;29185:6;:22;;;;:::i;:::-;:35;;29177:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29147:119;29285:5;29284:6;:17;;;;;29295:6;29294:7;29284:17;29280:136;;;29356:9;;29339:13;29349:2;29339:9;:13::i;:::-;29330:6;:22;;;;:::i;:::-;:35;;29322:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;29280:136;29066:361;29439:28;29470:24;29488:4;29470:9;:24::i;:::-;29439:55;;29505:12;29544:18;;29520:20;:42;;29505:57;;29577:7;:26;;;;;29588:15;;;;;;;;;;;29577:26;:39;;;;;29608:8;;;;;;;;;;;29607:9;29577:39;:62;;;;;29626:13;29620:19;;:2;:19;;;29577:62;:92;;;;;29644:19;:25;29664:4;29644:25;;;;;;;;;;;;;;;;;;;;;;;;;29643:26;29577:92;:120;;;;;29674:19;:23;29694:2;29674:23;;;;;;;;;;;;;;;;;;;;;;;;;29673:24;29577:120;29573:224;;;29725:4;29714:8;;:15;;;;;;;;;;;;;;;;;;29744:10;:8;:10::i;:::-;29780:5;29769:8;;:16;;;;;;;;;;;;;;;;;;29573:224;29809:12;29825:8;;;;;;;;;;;29824:9;29809:24;;29848:19;:25;29868:4;29848:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29877:19;:23;29897:2;29877:23;;;;;;;;;;;;;;;;;;;;;;;;;29848:52;29844:100;;;29927:5;29917:15;;29844:100;29956:12;29985:26;30032:7;30028:742;;;30066:13;30060:19;;:2;:19;;;:40;;;;;30099:1;30083:13;;:17;30060:40;30056:423;;;30128:34;30158:3;30128:25;30139:13;;30128:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;30121:41;;30230:13;;30210:16;;30203:4;:23;;;;:::i;:::-;30202:41;;;;:::i;:::-;30181:62;;30056:423;;;30290:13;30282:21;;:4;:21;;;:41;;;;;30322:1;30307:12;;:16;30282:41;30278:201;;;30351:33;30380:3;30351:24;30362:12;;30351:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;30344:40;;30451:12;;30432:15;;30425:4;:22;;;;:::i;:::-;30424:39;;;;:::i;:::-;30403:60;;30278:201;30056:423;30506:1;30499:4;:8;30495:91;;;30528:42;30544:4;30558;30565;30528:15;:42::i;:::-;30495:91;30625:1;30604:18;:22;30600:128;;;30647:65;30671:4;30678:13;30693:18;30647:15;:65::i;:::-;30600:128;30754:4;30744:14;;;;;:::i;:::-;;;30028:742;30782:33;30798:4;30804:2;30808:6;30782:15;:33::i;:::-;28567:2256;;;;;;;28454:2369;;;;:::o;15280:399::-;15383:1;15364:21;;:7;:21;;;15356:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;15434:49;15463:1;15467:7;15476:6;15434:20;:49::i;:::-;15512:6;15496:12;;:22;;;;;;;:::i;:::-;;;;;;;;15551:6;15529:9;:18;15539:7;15529:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;15594:7;15573:37;;15590:1;15573:37;;;15603:6;15573:37;;;;;;:::i;:::-;;;;;;;;15623:48;15651:1;15655:7;15664:6;15623:19;:48::i;:::-;15280:399;;:::o;3368:191::-;3442:16;3461:6;;;;;;;;;;;3442:25;;3487:8;3478:6;;:17;;;;;;;;;;;;;;;;;;3542:8;3511:40;;3532:8;3511:40;;;;;;;;;;;;3431:128;3368:191;:::o;14260:733::-;14418:1;14400:20;;:6;:20;;;14392:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14502:1;14481:23;;:9;:23;;;14473:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14557:47;14578:6;14586:9;14597:6;14557:20;:47::i;:::-;14617:21;14641:9;:17;14651:6;14641:17;;;;;;;;;;;;;;;;14617:41;;14694:6;14677:13;:23;;14669:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14815:6;14799:13;:22;14779:9;:17;14789:6;14779:17;;;;;;;;;;;;;;;:42;;;;14867:6;14843:9;:20;14853:9;14843:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14908:9;14891:35;;14900:6;14891:35;;;14919:6;14891:35;;;;;;:::i;:::-;;;;;;;;14939:46;14959:6;14967:9;14978:6;14939:19;:46::i;:::-;14381:612;14260:733;;;:::o;31296:213::-;31335:23;31361:24;31379:4;31361:9;:24::i;:::-;31335:50;;31419:1;31400:15;:20;31396:59;;31437:7;;;31396:59;31467:34;31485:15;31467:17;:34::i;:::-;31324:185;31296:213;:::o;22359:98::-;22417:7;22448:1;22444;:5;;;;:::i;:::-;22437:12;;22359:98;;;;:::o;22758:::-;22816:7;22847:1;22843;:5;;;;:::i;:::-;22836:12;;22758:98;;;;:::o;18021:125::-;;;;:::o;18750:124::-;;;;:::o;30831:457::-;30898:21;30936:1;30922:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30898:40;;30967:4;30949;30954:1;30949:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30993:4;;;;;;;;;;;30983;30988:1;30983:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;31010:62;31027:4;31042:15;31060:11;31010:8;:62::i;:::-;31085:15;:69;;;31169:11;31195:1;31211:4;31230:9;;;;;;;;;;;31254:15;31085:195;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30887:401;30831:457;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:329::-;5315:6;5364:2;5352:9;5343:7;5339:23;5335:32;5332:119;;;5370:79;;:::i;:::-;5332:119;5490:1;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5461:117;5256:329;;;;:::o;5591:::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:86::-;6586:7;6626:4;6619:5;6615:16;6604:27;;6551:86;;;:::o;6643:112::-;6726:22;6742:5;6726:22;:::i;:::-;6721:3;6714:35;6643:112;;:::o;6761:214::-;6850:4;6888:2;6877:9;6873:18;6865:26;;6901:67;6965:1;6954:9;6950:17;6941:6;6901:67;:::i;:::-;6761:214;;;;:::o;6981:118::-;7068:24;7086:5;7068:24;:::i;:::-;7063:3;7056:37;6981:118;;:::o;7105:222::-;7198:4;7236:2;7225:9;7221:18;7213:26;;7249:71;7317:1;7306:9;7302:17;7293:6;7249:71;:::i;:::-;7105:222;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:323::-;7650:6;7699:2;7687:9;7678:7;7674:23;7670:32;7667:119;;;7705:79;;:::i;:::-;7667:119;7825:1;7850:50;7892:7;7883:6;7872:9;7868:22;7850:50;:::i;:::-;7840:60;;7796:114;7594:323;;;;:::o;7923:468::-;7988:6;7996;8045:2;8033:9;8024:7;8020:23;8016:32;8013:119;;;8051:79;;:::i;:::-;8013:119;8171:1;8196:53;8241:7;8232:6;8221:9;8217:22;8196:53;:::i;:::-;8186:63;;8142:117;8298:2;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8269:115;7923:468;;;;;:::o;8397:474::-;8465:6;8473;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8775:2;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8746:118;8397:474;;;;;:::o;8877:182::-;9017:34;9013:1;9005:6;9001:14;8994:58;8877:182;:::o;9065:366::-;9207:3;9228:67;9292:2;9287:3;9228:67;:::i;:::-;9221:74;;9304:93;9393:3;9304:93;:::i;:::-;9422:2;9417:3;9413:12;9406:19;;9065:366;;;:::o;9437:419::-;9603:4;9641:2;9630:9;9626:18;9618:26;;9690:9;9684:4;9680:20;9676:1;9665:9;9661:17;9654:47;9718:131;9844:4;9718:131;:::i;:::-;9710:139;;9437:419;;;:::o;9862:180::-;9910:77;9907:1;9900:88;10007:4;10004:1;9997:15;10031:4;10028:1;10021:15;10048:191;10088:3;10107:20;10125:1;10107:20;:::i;:::-;10102:25;;10141:20;10159:1;10141:20;:::i;:::-;10136:25;;10184:1;10181;10177:9;10170:16;;10205:3;10202:1;10199:10;10196:36;;;10212:18;;:::i;:::-;10196:36;10048:191;;;;:::o;10245:179::-;10385:31;10381:1;10373:6;10369:14;10362:55;10245:179;:::o;10430:366::-;10572:3;10593:67;10657:2;10652:3;10593:67;:::i;:::-;10586:74;;10669:93;10758:3;10669:93;:::i;:::-;10787:2;10782:3;10778:12;10771:19;;10430:366;;;:::o;10802:419::-;10968:4;11006:2;10995:9;10991:18;10983:26;;11055:9;11049:4;11045:20;11041:1;11030:9;11026:17;11019:47;11083:131;11209:4;11083:131;:::i;:::-;11075:139;;10802:419;;;:::o;11227:180::-;11275:77;11272:1;11265:88;11372:4;11369:1;11362:15;11396:4;11393:1;11386:15;11413:320;11457:6;11494:1;11488:4;11484:12;11474:22;;11541:1;11535:4;11531:12;11562:18;11552:81;;11618:4;11610:6;11606:17;11596:27;;11552:81;11680:2;11672:6;11669:14;11649:18;11646:38;11643:84;;11699:18;;:::i;:::-;11643:84;11464:269;11413:320;;;:::o;11739:410::-;11779:7;11802:20;11820:1;11802:20;:::i;:::-;11797:25;;11836:20;11854:1;11836:20;:::i;:::-;11831:25;;11891:1;11888;11884:9;11913:30;11931:11;11913:30;:::i;:::-;11902:41;;12092:1;12083:7;12079:15;12076:1;12073:22;12053:1;12046:9;12026:83;12003:139;;12122:18;;:::i;:::-;12003:139;11787:362;11739:410;;;;:::o;12155:180::-;12203:77;12200:1;12193:88;12300:4;12297:1;12290:15;12324:4;12321:1;12314:15;12341:185;12381:1;12398:20;12416:1;12398:20;:::i;:::-;12393:25;;12432:20;12450:1;12432:20;:::i;:::-;12427:25;;12471:1;12461:35;;12476:18;;:::i;:::-;12461:35;12518:1;12515;12511:9;12506:14;;12341:185;;;;:::o;12532:223::-;12672:34;12668:1;12660:6;12656:14;12649:58;12741:6;12736:2;12728:6;12724:15;12717:31;12532:223;:::o;12761:366::-;12903:3;12924:67;12988:2;12983:3;12924:67;:::i;:::-;12917:74;;13000:93;13089:3;13000:93;:::i;:::-;13118:2;13113:3;13109:12;13102:19;;12761:366;;;:::o;13133:419::-;13299:4;13337:2;13326:9;13322:18;13314:26;;13386:9;13380:4;13376:20;13372:1;13361:9;13357:17;13350:47;13414:131;13540:4;13414:131;:::i;:::-;13406:139;;13133:419;;;:::o;13558:227::-;13698:34;13694:1;13686:6;13682:14;13675:58;13767:10;13762:2;13754:6;13750:15;13743:35;13558:227;:::o;13791:366::-;13933:3;13954:67;14018:2;14013:3;13954:67;:::i;:::-;13947:74;;14030:93;14119:3;14030:93;:::i;:::-;14148:2;14143:3;14139:12;14132:19;;13791:366;;;:::o;14163:419::-;14329:4;14367:2;14356:9;14352:18;14344:26;;14416:9;14410:4;14406:20;14402:1;14391:9;14387:17;14380:47;14444:131;14570:4;14444:131;:::i;:::-;14436:139;;14163:419;;;:::o;14588:143::-;14645:5;14676:6;14670:13;14661:22;;14692:33;14719:5;14692:33;:::i;:::-;14588:143;;;;:::o;14737:351::-;14807:6;14856:2;14844:9;14835:7;14831:23;14827:32;14824:119;;;14862:79;;:::i;:::-;14824:119;14982:1;15007:64;15063:7;15054:6;15043:9;15039:22;15007:64;:::i;:::-;14997:74;;14953:128;14737:351;;;;:::o;15094:332::-;15215:4;15253:2;15242:9;15238:18;15230:26;;15266:71;15334:1;15323:9;15319:17;15310:6;15266:71;:::i;:::-;15347:72;15415:2;15404:9;15400:18;15391:6;15347:72;:::i;:::-;15094:332;;;;;:::o;15432:137::-;15486:5;15517:6;15511:13;15502:22;;15533:30;15557:5;15533:30;:::i;:::-;15432:137;;;;:::o;15575:345::-;15642:6;15691:2;15679:9;15670:7;15666:23;15662:32;15659:119;;;15697:79;;:::i;:::-;15659:119;15817:1;15842:61;15895:7;15886:6;15875:9;15871:22;15842:61;:::i;:::-;15832:71;;15788:125;15575:345;;;;:::o;15926:224::-;16066:34;16062:1;16054:6;16050:14;16043:58;16135:7;16130:2;16122:6;16118:15;16111:32;15926:224;:::o;16156:366::-;16298:3;16319:67;16383:2;16378:3;16319:67;:::i;:::-;16312:74;;16395:93;16484:3;16395:93;:::i;:::-;16513:2;16508:3;16504:12;16497:19;;16156:366;;;:::o;16528:419::-;16694:4;16732:2;16721:9;16717:18;16709:26;;16781:9;16775:4;16771:20;16767:1;16756:9;16752:17;16745:47;16809:131;16935:4;16809:131;:::i;:::-;16801:139;;16528:419;;;:::o;16953:172::-;17093:24;17089:1;17081:6;17077:14;17070:48;16953:172;:::o;17131:366::-;17273:3;17294:67;17358:2;17353:3;17294:67;:::i;:::-;17287:74;;17370:93;17459:3;17370:93;:::i;:::-;17488:2;17483:3;17479:12;17472:19;;17131:366;;;:::o;17503:419::-;17669:4;17707:2;17696:9;17692:18;17684:26;;17756:9;17750:4;17746:20;17742:1;17731:9;17727:17;17720:47;17784:131;17910:4;17784:131;:::i;:::-;17776:139;;17503:419;;;:::o;17928:168::-;18068:20;18064:1;18056:6;18052:14;18045:44;17928:168;:::o;18102:366::-;18244:3;18265:67;18329:2;18324:3;18265:67;:::i;:::-;18258:74;;18341:93;18430:3;18341:93;:::i;:::-;18459:2;18454:3;18450:12;18443:19;;18102:366;;;:::o;18474:419::-;18640:4;18678:2;18667:9;18663:18;18655:26;;18727:9;18721:4;18717:20;18713:1;18702:9;18698:17;18691:47;18755:131;18881:4;18755:131;:::i;:::-;18747:139;;18474:419;;;:::o;18899:225::-;19039:34;19035:1;19027:6;19023:14;19016:58;19108:8;19103:2;19095:6;19091:15;19084:33;18899:225;:::o;19130:366::-;19272:3;19293:67;19357:2;19352:3;19293:67;:::i;:::-;19286:74;;19369:93;19458:3;19369:93;:::i;:::-;19487:2;19482:3;19478:12;19471:19;;19130:366;;;:::o;19502:419::-;19668:4;19706:2;19695:9;19691:18;19683:26;;19755:9;19749:4;19745:20;19741:1;19730:9;19726:17;19719:47;19783:131;19909:4;19783:131;:::i;:::-;19775:139;;19502:419;;;:::o;19927:223::-;20067:34;20063:1;20055:6;20051:14;20044:58;20136:6;20131:2;20123:6;20119:15;20112:31;19927:223;:::o;20156:366::-;20298:3;20319:67;20383:2;20378:3;20319:67;:::i;:::-;20312:74;;20395:93;20484:3;20395:93;:::i;:::-;20513:2;20508:3;20504:12;20497:19;;20156:366;;;:::o;20528:419::-;20694:4;20732:2;20721:9;20717:18;20709:26;;20781:9;20775:4;20771:20;20767:1;20756:9;20752:17;20745:47;20809:131;20935:4;20809:131;:::i;:::-;20801:139;;20528:419;;;:::o;20953:221::-;21093:34;21089:1;21081:6;21077:14;21070:58;21162:4;21157:2;21149:6;21145:15;21138:29;20953:221;:::o;21180:366::-;21322:3;21343:67;21407:2;21402:3;21343:67;:::i;:::-;21336:74;;21419:93;21508:3;21419:93;:::i;:::-;21537:2;21532:3;21528:12;21521:19;;21180:366;;;:::o;21552:419::-;21718:4;21756:2;21745:9;21741:18;21733:26;;21805:9;21799:4;21795:20;21791:1;21780:9;21776:17;21769:47;21833:131;21959:4;21833:131;:::i;:::-;21825:139;;21552:419;;;:::o;21977:224::-;22117:34;22113:1;22105:6;22101:14;22094:58;22186:7;22181:2;22173:6;22169:15;22162:32;21977:224;:::o;22207:366::-;22349:3;22370:67;22434:2;22429:3;22370:67;:::i;:::-;22363:74;;22446:93;22535:3;22446:93;:::i;:::-;22564:2;22559:3;22555:12;22548:19;;22207:366;;;:::o;22579:419::-;22745:4;22783:2;22772:9;22768:18;22760:26;;22832:9;22826:4;22822:20;22818:1;22807:9;22803:17;22796:47;22860:131;22986:4;22860:131;:::i;:::-;22852:139;;22579:419;;;:::o;23004:222::-;23144:34;23140:1;23132:6;23128:14;23121:58;23213:5;23208:2;23200:6;23196:15;23189:30;23004:222;:::o;23232:366::-;23374:3;23395:67;23459:2;23454:3;23395:67;:::i;:::-;23388:74;;23471:93;23560:3;23471:93;:::i;:::-;23589:2;23584:3;23580:12;23573:19;;23232:366;;;:::o;23604:419::-;23770:4;23808:2;23797:9;23793:18;23785:26;;23857:9;23851:4;23847:20;23843:1;23832:9;23828:17;23821:47;23885:131;24011:4;23885:131;:::i;:::-;23877:139;;23604:419;;;:::o;24029:177::-;24169:29;24165:1;24157:6;24153:14;24146:53;24029:177;:::o;24212:366::-;24354:3;24375:67;24439:2;24434:3;24375:67;:::i;:::-;24368:74;;24451:93;24540:3;24451:93;:::i;:::-;24569:2;24564:3;24560:12;24553:19;;24212:366;;;:::o;24584:419::-;24750:4;24788:2;24777:9;24773:18;24765:26;;24837:9;24831:4;24827:20;24823:1;24812:9;24808:17;24801:47;24865:131;24991:4;24865:131;:::i;:::-;24857:139;;24584:419;;;:::o;25009:175::-;25149:27;25145:1;25137:6;25133:14;25126:51;25009:175;:::o;25190:366::-;25332:3;25353:67;25417:2;25412:3;25353:67;:::i;:::-;25346:74;;25429:93;25518:3;25429:93;:::i;:::-;25547:2;25542:3;25538:12;25531:19;;25190:366;;;:::o;25562:419::-;25728:4;25766:2;25755:9;25751:18;25743:26;;25815:9;25809:4;25805:20;25801:1;25790:9;25786:17;25779:47;25843:131;25969:4;25843:131;:::i;:::-;25835:139;;25562:419;;;:::o;25987:180::-;26127:32;26123:1;26115:6;26111:14;26104:56;25987:180;:::o;26173:366::-;26315:3;26336:67;26400:2;26395:3;26336:67;:::i;:::-;26329:74;;26412:93;26501:3;26412:93;:::i;:::-;26530:2;26525:3;26521:12;26514:19;;26173:366;;;:::o;26545:419::-;26711:4;26749:2;26738:9;26734:18;26726:26;;26798:9;26792:4;26788:20;26784:1;26773:9;26769:17;26762:47;26826:131;26952:4;26826:131;:::i;:::-;26818:139;;26545:419;;;:::o;26970:194::-;27010:4;27030:20;27048:1;27030:20;:::i;:::-;27025:25;;27064:20;27082:1;27064:20;:::i;:::-;27059:25;;27108:1;27105;27101:9;27093:17;;27132:1;27126:4;27123:11;27120:37;;;27137:18;;:::i;:::-;27120:37;26970:194;;;;:::o;27170:181::-;27310:33;27306:1;27298:6;27294:14;27287:57;27170:181;:::o;27357:366::-;27499:3;27520:67;27584:2;27579:3;27520:67;:::i;:::-;27513:74;;27596:93;27685:3;27596:93;:::i;:::-;27714:2;27709:3;27705:12;27698:19;;27357:366;;;:::o;27729:419::-;27895:4;27933:2;27922:9;27918:18;27910:26;;27982:9;27976:4;27972:20;27968:1;27957:9;27953:17;27946:47;28010:131;28136:4;28010:131;:::i;:::-;28002:139;;27729:419;;;:::o;28154:225::-;28294:34;28290:1;28282:6;28278:14;28271:58;28363:8;28358:2;28350:6;28346:15;28339:33;28154:225;:::o;28385:366::-;28527:3;28548:67;28612:2;28607:3;28548:67;:::i;:::-;28541:74;;28624:93;28713:3;28624:93;:::i;:::-;28742:2;28737:3;28733:12;28726:19;;28385:366;;;:::o;28757:419::-;28923:4;28961:2;28950:9;28946:18;28938:26;;29010:9;29004:4;29000:20;28996:1;28985:9;28981:17;28974:47;29038:131;29164:4;29038:131;:::i;:::-;29030:139;;28757:419;;;:::o;29182:180::-;29230:77;29227:1;29220:88;29327:4;29324:1;29317:15;29351:4;29348:1;29341:15;29368:180;29416:77;29413:1;29406:88;29513:4;29510:1;29503:15;29537:4;29534:1;29527:15;29554:85;29599:7;29628:5;29617:16;;29554:85;;;:::o;29645:158::-;29703:9;29736:61;29754:42;29763:32;29789:5;29763:32;:::i;:::-;29754:42;:::i;:::-;29736:61;:::i;:::-;29723:74;;29645:158;;;:::o;29809:147::-;29904:45;29943:5;29904:45;:::i;:::-;29899:3;29892:58;29809:147;;:::o;29962:114::-;30029:6;30063:5;30057:12;30047:22;;29962:114;;;:::o;30082:184::-;30181:11;30215:6;30210:3;30203:19;30255:4;30250:3;30246:14;30231:29;;30082:184;;;;:::o;30272:132::-;30339:4;30362:3;30354:11;;30392:4;30387:3;30383:14;30375:22;;30272:132;;;:::o;30410:108::-;30487:24;30505:5;30487:24;:::i;:::-;30482:3;30475:37;30410:108;;:::o;30524:179::-;30593:10;30614:46;30656:3;30648:6;30614:46;:::i;:::-;30692:4;30687:3;30683:14;30669:28;;30524:179;;;;:::o;30709:113::-;30779:4;30811;30806:3;30802:14;30794:22;;30709:113;;;:::o;30858:732::-;30977:3;31006:54;31054:5;31006:54;:::i;:::-;31076:86;31155:6;31150:3;31076:86;:::i;:::-;31069:93;;31186:56;31236:5;31186:56;:::i;:::-;31265:7;31296:1;31281:284;31306:6;31303:1;31300:13;31281:284;;;31382:6;31376:13;31409:63;31468:3;31453:13;31409:63;:::i;:::-;31402:70;;31495:60;31548:6;31495:60;:::i;:::-;31485:70;;31341:224;31328:1;31325;31321:9;31316:14;;31281:284;;;31285:14;31581:3;31574:10;;30982:608;;;30858:732;;;;:::o;31596:831::-;31859:4;31897:3;31886:9;31882:19;31874:27;;31911:71;31979:1;31968:9;31964:17;31955:6;31911:71;:::i;:::-;31992:80;32068:2;32057:9;32053:18;32044:6;31992:80;:::i;:::-;32119:9;32113:4;32109:20;32104:2;32093:9;32089:18;32082:48;32147:108;32250:4;32241:6;32147:108;:::i;:::-;32139:116;;32265:72;32333:2;32322:9;32318:18;32309:6;32265:72;:::i;:::-;32347:73;32415:3;32404:9;32400:19;32391:6;32347:73;:::i;:::-;31596:831;;;;;;;;:::o

Swarm Source

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