ETH Price: $3,072.59 (-1.56%)

Token

Membot (MEMBOT)
 

Overview

Max Total Supply

1,000,000,000 MEMBOT

Holders

676

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
867,996.014504045509060777 MEMBOT

Value
$0.00
0x33bd3c0429309e344ef40dffab31114de60abd31
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:
Membot

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
//                                                                              
//             @@@@@@@@                                          @@@@@@@@          
//            /@@@@@@@@@                                        @@@@@@@@@,         
//            @@@@@@@@@@&                                      @@@@@@@@@@@         
//           *@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%&@@@@@@@@@@@         
//           @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@        
//          .@@@@@@@@*          @@@@@@@@@@@@@@@@@@@@@@@@          /@@@@@@@@        
//          @@@@@#               @@@@@@@@@@@@@@@@@@@@@@               &@@@@@       
//         *@@@@                  /@@@@@@@@@@@@@@@@@@*                 /@@@@       
//      /@@@@@@@                                                        @@@@@@@*   
//    @@@@@@@@@*      @@@@@@@/                            &@@@@@@@      *@@@@@@@@& 
//    @@@@@@@@@       @@@@@@@@                            @@@@@@@@       @@@@@@@@@ 
//   *@@@@@@@@@      .@@@@@@@@                            @@@@@@@@       @@@@@@@@@ 
//   *@@@@@@@@@      *@@@@@@@@                            @@@@@@@@       @@@@@@@@@ 
//    @@@@@@@@@      .@@@@@@@@                            @@@@@@@@       @@@@@@@@@ 
//    @@@@@@@@@       @@@@@@@@                            @@@@@@@@      ,@@@@@@@@@ 
//      @@@@@@@&                                                        @@@@@@@@   
//         /@@@@                   &@@@@@@@@@@@@@@@@#                   @@@@       
//          @@@@@                &@@@@@@@@@@@@@@@@@@@@(               .@@@@%       
//           (@@@@@@            &@@@@@@@@@@@@@@@@@@@@@@(           ,@@@@@@,        
//             ,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@           
//                  (@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,                                                                                                                                                                             
// 
//           The #1 Discord trading tool, sniper & wallet - https://discord.gg/membot
//                   https://twitter.com/MembotETH | https://membot.tools
// 
 
pragma solidity 0.8.20;

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

contract Membot is ERC20, Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    bool private swapping;

    address public immutable revShareWallet;

    uint256 public maxTransactionAmount;
    uint256 immutable public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => bool) blacklisted;

    uint256 public buyTotalFees;
    uint256 public buyRevShareFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellRevShareFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForRevShare;
    uint256 public tokensForLiquidity;

    // Exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // Store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Membot", "MEMBOT") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D //Uniswap V2 Router
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        // Creates the Uniswap Pair
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyRevShareFee = 8; // Lowered to 4% after launch
        uint256 _buyLiquidityFee = 2; // Lowered to 1% after launch

        uint256 _sellRevShareFee = 8; // Lowered to 4% after launch
        uint256 _sellLiquidityFee = 2; // Lowered to 1% after launch

        uint256 totalSupply = 1_000_000_000 * 1e18; // 1 million

        maxTransactionAmount = 5000000 * 1e18; // 0.5%
        maxWallet = 5000000 * 1e18; // 0.5% 
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% 

        buyRevShareFee = _buyRevShareFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyRevShareFee + buyLiquidityFee;

        sellRevShareFee = _sellRevShareFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellRevShareFee + sellLiquidityFee;

        revShareWallet = address(0x621761e815c634cE1143a1dCd186221644884A6f ); // Set as revShare wallet - Helper Contract

        // Exclude from paying fees or having max transaction amount if; is owner, is deployer, is dead address. 
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // Will enable trading, once this is toggeled, it will not be able to be turned off.
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // Trigger this post launch once price is more stable. Made to avoid whales and snipers hogging supply.
    function updateLimitsAndFees() external onlyOwner {
        maxTransactionAmount = 10_000_000 * (10**18); // 1%
        maxWallet = 25_000_000 * (10**18); // 2.5%
    
        buyRevShareFee = 4; // 4%
        buyLiquidityFee = 1; // 1%
        buyTotalFees = 5;

        sellRevShareFee = 4; // 4%
        sellLiquidityFee = 1; // 1%
        sellTotalFees = 5;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function isBlacklisted(address account) public view returns (bool) {
        return blacklisted[account];
    }

    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");
        require(!blacklisted[from],"Sender blacklisted");
        require(!blacklisted[to],"Receiver blacklisted");

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

        if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // Buying
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                // Selling
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // Only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // Sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForRevShare += (fees * sellRevShareFee) / sellTotalFees;
            }
            // Buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForRevShare += (fees * buyRevShareFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

        // Make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // Accept any amount of ETH; ignore slippage
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForRevShare;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance - initialETHBalance;

        uint256 ethForRevShare = (ethBalance * tokensForRevShare) / (totalTokensToSwap - (tokensForLiquidity / 2));
        
        uint256 ethForLiquidity = ethBalance - ethForRevShare;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        tokensForLiquidity = 0;
        tokensForRevShare = 0;

        (success, ) = address(revShareWallet).call{value: address(this).balance}("");
    }
        
    // The helper contract will also be used to be able to call the 5 functions below. 
    // Any functions that have to do with ETH or Tokens will be sent directly to the helper contract. 
    // This means that the split of 80% to the team, and 20% to the holders is intact.
    modifier onlyHelper() {
        require(revShareWallet == _msgSender(), "Token: caller is not the Helper");
        _;
    }

    // @Helper - Callable by Helper contract in-case tokens get's stuck in the token contract.
    function withdrawStuckToken(address _token, address _to) external onlyHelper {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }

    // @Helper - Callable by Helper contract in-case ETH get's stuck in the token contract.
    function withdrawStuckEth(address toAddr) external onlyHelper {
        (bool success, ) = toAddr.call{
            value: address(this).balance
        } ("");
        require(success);
    }

    // @Helper - Blacklist v3 pools; can unblacklist() down the road to suit project and community
    function blacklistLiquidityPool(address lpAddress) public onlyHelper {
        require(
            lpAddress != address(uniswapV2Pair) && lpAddress != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D), 
            "Cannot blacklist token's v2 router or v2 pool."
        );
        blacklisted[lpAddress] = true;
    }

    // @Helper - Unblacklist address; not affected by blacklistRenounced incase team wants to unblacklist v3 pools down the road
    function unblacklist(address _addr) public onlyHelper {
        blacklisted[_addr] = false;
    }

}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lpAddress","type":"address"}],"name":"blacklistLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRevShareFee","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":"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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"revShareWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_addr","type":"address"}],"name":"unblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateLimitsAndFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddr","type":"address"}],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101006040525f60085f6101000a81548160ff0219169083151502179055505f600860016101000a81548160ff02191690831515021790555034801562000044575f80fd5b506040518060400160405280600681526020017f4d656d626f7400000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4d454d424f5400000000000000000000000000000000000000000000000000008152508160039081620000c2919062000c50565b508060049081620000d4919062000c50565b505050620000f7620000eb620004c460201b60201c565b620004cb60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001228160016200058e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001c6919062000d99565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000252919062000d99565b6040518363ffffffff1660e01b81526004016200027192919062000dda565b6020604051808303815f875af11580156200028e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002b4919062000d99565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620002fc60a05160016200058e60201b60201c565b6200031160a05160016200067560201b60201c565b5f600890505f600290505f600890505f600290505f6b033b2e3c9fd0803ce800000090506a0422ca8b0a00a4250000006006819055506a0422ca8b0a00a4250000006007819055506127106005826200036b919062000e32565b62000377919062000ea9565b60e0818152505084600b8190555083600c81905550600c54600b546200039e919062000ee0565b600a8190555082600e8190555081600f81905550600f54600e54620003c4919062000ee0565b600d8190555073621761e815c634ce1143a1dcd186221644884a6f73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505062000434620004266200071360201b60201c565b60016200073b60201b60201c565b620004473060016200073b60201b60201c565b6200045c61dead60016200073b60201b60201c565b6200047e620004706200071360201b60201c565b60016200058e60201b60201c565b620004913060016200058e60201b60201c565b620004a661dead60016200058e60201b60201c565b620004b833826200087260201b60201c565b50505050505062001069565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200059e620004c460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005c46200071360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200061d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006149062000f78565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200074b620004c460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007716200071360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c19062000f78565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000866919062000fb4565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008da906200101d565b60405180910390fd5b620008f65f8383620009e260201b60201c565b8060025f82825462000909919062000ee0565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546200095d919062000ee0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009c391906200104e565b60405180910390a3620009de5f8383620009e760201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a6857607f821691505b60208210810362000a7e5762000a7d62000a23565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000ae27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aa5565b62000aee868362000aa5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b3862000b3262000b2c8462000b06565b62000b0f565b62000b06565b9050919050565b5f819050919050565b62000b538362000b18565b62000b6b62000b628262000b3f565b84845462000ab1565b825550505050565b5f90565b62000b8162000b73565b62000b8e81848462000b48565b505050565b5b8181101562000bb55762000ba95f8262000b77565b60018101905062000b94565b5050565b601f82111562000c045762000bce8162000a84565b62000bd98462000a96565b8101602085101562000be9578190505b62000c0162000bf88562000a96565b83018262000b93565b50505b505050565b5f82821c905092915050565b5f62000c265f198460080262000c09565b1980831691505092915050565b5f62000c40838362000c15565b9150826002028217905092915050565b62000c5b82620009ec565b67ffffffffffffffff81111562000c775762000c76620009f6565b5b62000c83825462000a50565b62000c9082828562000bb9565b5f60209050601f83116001811462000cc6575f841562000cb1578287015190505b62000cbd858262000c33565b86555062000d2c565b601f19841662000cd68662000a84565b5f5b8281101562000cff5784890151825560018201915060208501945060208101905062000cd8565b8683101562000d1f578489015162000d1b601f89168262000c15565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000d638262000d38565b9050919050565b62000d758162000d57565b811462000d80575f80fd5b50565b5f8151905062000d938162000d6a565b92915050565b5f6020828403121562000db15762000db062000d34565b5b5f62000dc08482850162000d83565b91505092915050565b62000dd48162000d57565b82525050565b5f60408201905062000def5f83018562000dc9565b62000dfe602083018462000dc9565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000e3e8262000b06565b915062000e4b8362000b06565b925082820262000e5b8162000b06565b9150828204841483151762000e755762000e7462000e05565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000eb58262000b06565b915062000ec28362000b06565b92508262000ed55762000ed462000e7c565b5b828204905092915050565b5f62000eec8262000b06565b915062000ef98362000b06565b925082820190508082111562000f145762000f1362000e05565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000f6060208362000f1a565b915062000f6d8262000f2a565b602082019050919050565b5f6020820190508181035f83015262000f918162000f52565b9050919050565b5f8115159050919050565b62000fae8162000f98565b82525050565b5f60208201905062000fc95f83018462000fa3565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001005601f8362000f1a565b9150620010128262000fcf565b602082019050919050565b5f6020820190508181035f830152620010368162000ff7565b9050919050565b620010488162000b06565b82525050565b5f602082019050620010635f8301846200103d565b92915050565b60805160a05160c05160e051614535620011065f395f8181611aeb0152818161251501528181612d710152612da501525f8181610ef101528181610fbf0152818161100101528181611592015281816119410152612ed301525f8181610ca4015281816112d401526119b801525f8181610ac40152818161300d015281816130ec01528181613113015281816131a901526131d001526145355ff3fe60806040526004361061025f575f3560e01c80637ca8448a11610143578063c0246668116100b5578063e2f4560511610079578063e2f45605146108e6578063f11a24d314610910578063f2fde38b1461093a578063f637434214610962578063f8b45b051461098c578063fe575a87146109b657610266565b8063c024666814610806578063c8c8ebe41461082e578063d85ba06314610858578063dd62ed3e14610882578063e19b2823146108be57610266565b80639c6868af116101075780639c6868af146106ea578063a457c2d714610700578063a9059cbb1461073c578063b62496f514610778578063bbc0c742146107b4578063bc205ad3146107de57610266565b80637ca8448a146106305780638a8c523c146106585780638da5cb5b1461066e57806395d89b41146106985780639a7a23d6146106c257610266565b8063313ce567116101dc5780636ddd1713116101a05780636ddd17131461053a57806370a0823114610564578063715018a6146105a05780637571336a146105b657806375e3661e146105de578063782c4e991461060657610266565b8063313ce56714610444578063395093511461046e57806349bd5a5e146104aa5780634fbee193146104d45780636a486a8e1461051057610266565b806318160ddd1161022357806318160ddd1461036057806319eab0421461038a5780631a8145bb146103b457806323b872dd146103de57806324b9f3c11461041a57610266565b806306fdde031461026a578063095ea7b31461029457806310d5de53146102d0578063156c2f351461030c5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109f2565b60405161028b919061330b565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906133bc565b610a82565b6040516102c79190613414565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061342d565b610a9f565b6040516103039190613414565b60405180910390f35b348015610317575f80fd5b50610320610abc565b60405161032d9190613467565b60405180910390f35b348015610341575f80fd5b5061034a610ac2565b60405161035791906134db565b60405180910390f35b34801561036b575f80fd5b50610374610ae6565b6040516103819190613467565b60405180910390f35b348015610395575f80fd5b5061039e610aef565b6040516103ab9190613467565b60405180910390f35b3480156103bf575f80fd5b506103c8610af5565b6040516103d59190613467565b60405180910390f35b3480156103e9575f80fd5b5061040460048036038101906103ff91906134f4565b610afb565b6040516104119190613414565b60405180910390f35b348015610425575f80fd5b5061042e610bed565b60405161043b9190613467565b60405180910390f35b34801561044f575f80fd5b50610458610bf3565b604051610465919061355f565b60405180910390f35b348015610479575f80fd5b50610494600480360381019061048f91906133bc565b610bfb565b6040516104a19190613414565b60405180910390f35b3480156104b5575f80fd5b506104be610ca2565b6040516104cb9190613587565b60405180910390f35b3480156104df575f80fd5b506104fa60048036038101906104f5919061342d565b610cc6565b6040516105079190613414565b60405180910390f35b34801561051b575f80fd5b50610524610d18565b6040516105319190613467565b60405180910390f35b348015610545575f80fd5b5061054e610d1e565b60405161055b9190613414565b60405180910390f35b34801561056f575f80fd5b5061058a6004803603810190610585919061342d565b610d31565b6040516105979190613467565b60405180910390f35b3480156105ab575f80fd5b506105b4610d76565b005b3480156105c1575f80fd5b506105dc60048036038101906105d791906135ca565b610dfd565b005b3480156105e9575f80fd5b5061060460048036038101906105ff919061342d565b610ed1565b005b348015610611575f80fd5b5061061a610fbd565b6040516106279190613587565b60405180910390f35b34801561063b575f80fd5b506106566004803603810190610651919061342d565b610fe1565b005b348015610663575f80fd5b5061066c6110eb565b005b348015610679575f80fd5b5061068261119e565b60405161068f9190613587565b60405180910390f35b3480156106a3575f80fd5b506106ac6111c6565b6040516106b9919061330b565b60405180910390f35b3480156106cd575f80fd5b506106e860048036038101906106e391906135ca565b611256565b005b3480156106f5575f80fd5b506106fe61136e565b005b34801561070b575f80fd5b50610726600480360381019061072191906133bc565b611440565b6040516107339190613414565b60405180910390f35b348015610747575f80fd5b50610762600480360381019061075d91906133bc565b611526565b60405161076f9190613414565b60405180910390f35b348015610783575f80fd5b5061079e6004803603810190610799919061342d565b611543565b6040516107ab9190613414565b60405180910390f35b3480156107bf575f80fd5b506107c8611560565b6040516107d59190613414565b60405180910390f35b3480156107e9575f80fd5b5061080460048036038101906107ff9190613608565b611572565b005b348015610811575f80fd5b5061082c600480360381019061082791906135ca565b611771565b005b348015610839575f80fd5b50610842611893565b60405161084f9190613467565b60405180910390f35b348015610863575f80fd5b5061086c611899565b6040516108799190613467565b60405180910390f35b34801561088d575f80fd5b506108a860048036038101906108a39190613608565b61189f565b6040516108b59190613467565b60405180910390f35b3480156108c9575f80fd5b506108e460048036038101906108df919061342d565b611921565b005b3480156108f1575f80fd5b506108fa611ae9565b6040516109079190613467565b60405180910390f35b34801561091b575f80fd5b50610924611b0d565b6040516109319190613467565b60405180910390f35b348015610945575f80fd5b50610960600480360381019061095b919061342d565b611b13565b005b34801561096d575f80fd5b50610976611c09565b6040516109839190613467565b60405180910390f35b348015610997575f80fd5b506109a0611c0f565b6040516109ad9190613467565b60405180910390f35b3480156109c1575f80fd5b506109dc60048036038101906109d7919061342d565b611c15565b6040516109e99190613414565b60405180910390f35b606060038054610a0190613673565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d90613673565b8015610a785780601f10610a4f57610100808354040283529160200191610a78565b820191905f5260205f20905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b5f610a95610a8e611c67565b8484611c6e565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600b5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b600e5481565b60115481565b5f610b07848484611e31565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b4e611c67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490613713565b60405180910390fd5b610be185610bd9611c67565b858403611c6e565b60019150509392505050565b60105481565b5f6012905090565b5f610c98610c07611c67565b848460015f610c14611c67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c93919061375e565b611c6e565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b600860019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d7e611c67565b73ffffffffffffffffffffffffffffffffffffffff16610d9c61119e565b73ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de9906137db565b60405180910390fd5b610dfb5f61295d565b565b610e05611c67565b73ffffffffffffffffffffffffffffffffffffffff16610e2361119e565b73ffffffffffffffffffffffffffffffffffffffff1614610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e70906137db565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610ed9611c67565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90613843565b60405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610fe9611c67565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d90613843565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff164760405161109b9061388e565b5f6040518083038185875af1925050503d805f81146110d5576040519150601f19603f3d011682016040523d82523d5f602084013e6110da565b606091505b50509050806110e7575f80fd5b5050565b6110f3611c67565b73ffffffffffffffffffffffffffffffffffffffff1661111161119e565b73ffffffffffffffffffffffffffffffffffffffff1614611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e906137db565b60405180910390fd5b600160085f6101000a81548160ff0219169083151502179055506001600860016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111d590613673565b80601f016020809104026020016040519081016040528092919081815260200182805461120190613673565b801561124c5780601f106112235761010080835404028352916020019161124c565b820191905f5260205f20905b81548152906001019060200180831161122f57829003601f168201915b5050505050905090565b61125e611c67565b73ffffffffffffffffffffffffffffffffffffffff1661127c61119e565b73ffffffffffffffffffffffffffffffffffffffff16146112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c9906137db565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790613912565b60405180910390fd5b61136a8282612a20565b5050565b611376611c67565b73ffffffffffffffffffffffffffffffffffffffff1661139461119e565b73ffffffffffffffffffffffffffffffffffffffff16146113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e1906137db565b60405180910390fd5b6a084595161401484a0000006006819055506a14adf4b7320334b90000006007819055506004600b819055506001600c819055506005600a819055506004600e819055506001600f819055506005600d81905550565b5f8060015f61144d611c67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906139a0565b60405180910390fd5b61151b611512611c67565b85858403611c6e565b600191505092915050565b5f611539611532611c67565b8484611e31565b6001905092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900460ff1681565b61157a611c67565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90613843565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90613a08565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116af9190613587565b602060405180830381865afa1580156116ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ee9190613a3a565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161172b929190613a65565b6020604051808303815f875af1158015611747573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061176b9190613aa0565b50505050565b611779611c67565b73ffffffffffffffffffffffffffffffffffffffff1661179761119e565b73ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e4906137db565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118879190613414565b60405180910390a25050565b60065481565b600a5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611929611c67565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90613843565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611a525750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890613b3b565b60405180910390fd5b600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5481565b611b1b611c67565b73ffffffffffffffffffffffffffffffffffffffff16611b3961119e565b73ffffffffffffffffffffffffffffffffffffffff1614611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b86906137db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613bc9565b60405180910390fd5b611c068161295d565b50565b600f5481565b60075481565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd390613c57565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4190613ce5565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e249190613467565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9690613d73565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0490613e01565b60405180910390fd5b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e90613e69565b60405180910390fd5b60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890613ed1565b60405180910390fd5b5f81036120385761203383835f612abe565b612958565b61204061119e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120ae575061207e61119e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120e657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612120575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121395750600560149054906101000a900460ff16155b156125065760085f9054906101000a900460ff1661222c5760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806121ec575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290613f39565b60405180910390fd5b5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156122c9575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561237057600654811115612313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a90613fc7565b60405180910390fd5b60075461231f83610d31565b8261232a919061375e565b111561236b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123629061402f565b60405180910390fd5b612505565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561240d575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561245c57600654811115612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e906140bd565b60405180910390fd5b612504565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612503576007546124b683610d31565b826124c1919061375e565b1115612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f99061402f565b60405180910390fd5b5b5b5b5b5f61251030610d31565b90505f7f000000000000000000000000000000000000000000000000000000000000000082101590508080156125525750600860019054906101000a900460ff165b801561256b5750600560149054906101000a900460ff16155b80156125be575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612611575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612664575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126a7576001600560146101000a81548160ff02191690831515021790555061268c612d33565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612756575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561275f575f90505b5f81156129485760145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127bd57505f600d54115b15612847576064600d54866127d291906140db565b6127dc9190614149565b9050600d54600f54826127ef91906140db565b6127f99190614149565b60115f828254612809919061375e565b92505081905550600d54600e548261282191906140db565b61282b9190614149565b60105f82825461283b919061375e565b92505081905550612925565b60145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561289e57505f600a54115b15612924576064600a54866128b391906140db565b6128bd9190614149565b9050600a54600c54826128d091906140db565b6128da9190614149565b60115f8282546128ea919061375e565b92505081905550600a54600b548261290291906140db565b61290c9190614149565b60105f82825461291c919061375e565b925050819055505b5b5f81111561293957612938873083612abe565b5b80856129459190614179565b94505b612953878787612abe565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2390613d73565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9190613e01565b60405180910390fd5b612ba5838383612f66565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1f9061421c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612cb6919061375e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d1a9190613467565b60405180910390a3612d2d848484612f6b565b50505050565b5f612d3d30610d31565b90505f601054601154612d50919061375e565b90505f80831480612d6057505f82145b15612d6d57505050612f64565b60147f0000000000000000000000000000000000000000000000000000000000000000612d9a91906140db565b831115612dd15760147f0000000000000000000000000000000000000000000000000000000000000000612dce91906140db565b92505b5f60028360115486612de391906140db565b612ded9190614149565b612df79190614149565b90505f8185612e069190614179565b90505f479050612e1582612f70565b5f8147612e229190614179565b90505f6002601154612e349190614149565b87612e3f9190614179565b60105483612e4d91906140db565b612e579190614149565b90505f8183612e669190614179565b90505f86118015612e7657505f81115b15612ec357612e8586826131a3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601154604051612eba9392919061423a565b60405180910390a15b5f6011819055505f6010819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1647604051612f159061388e565b5f6040518083038185875af1925050503d805f8114612f4f576040519150601f19603f3d011682016040523d82523d5f602084013e612f54565b606091505b5050809750505050505050505050505b565b505050565b505050565b5f600267ffffffffffffffff811115612f8c57612f8b61426f565b5b604051908082528060200260200182016040528015612fba5781602001602082028036833780820191505090505b50905030815f81518110612fd157612fd061429c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613074573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061309891906142dd565b816001815181106130ac576130ab61429c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613111307f000000000000000000000000000000000000000000000000000000000000000084611c6e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131729594939291906143f8565b5f604051808303815f87803b158015613189575f80fd5b505af115801561319b573d5f803e3d5ffd5b505050505050565b6131ce307f000000000000000000000000000000000000000000000000000000000000000084611c6e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061321761119e565b426040518863ffffffff1660e01b815260040161323996959493929190614450565b60606040518083038185885af1158015613255573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061327a91906144af565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156132b857808201518184015260208101905061329d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6132dd82613281565b6132e7818561328b565b93506132f781856020860161329b565b613300816132c3565b840191505092915050565b5f6020820190508181035f83015261332381846132d3565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6133588261332f565b9050919050565b6133688161334e565b8114613372575f80fd5b50565b5f813590506133838161335f565b92915050565b5f819050919050565b61339b81613389565b81146133a5575f80fd5b50565b5f813590506133b681613392565b92915050565b5f80604083850312156133d2576133d161332b565b5b5f6133df85828601613375565b92505060206133f0858286016133a8565b9150509250929050565b5f8115159050919050565b61340e816133fa565b82525050565b5f6020820190506134275f830184613405565b92915050565b5f602082840312156134425761344161332b565b5b5f61344f84828501613375565b91505092915050565b61346181613389565b82525050565b5f60208201905061347a5f830184613458565b92915050565b5f819050919050565b5f6134a361349e6134998461332f565b613480565b61332f565b9050919050565b5f6134b482613489565b9050919050565b5f6134c5826134aa565b9050919050565b6134d5816134bb565b82525050565b5f6020820190506134ee5f8301846134cc565b92915050565b5f805f6060848603121561350b5761350a61332b565b5b5f61351886828701613375565b935050602061352986828701613375565b925050604061353a868287016133a8565b9150509250925092565b5f60ff82169050919050565b61355981613544565b82525050565b5f6020820190506135725f830184613550565b92915050565b6135818161334e565b82525050565b5f60208201905061359a5f830184613578565b92915050565b6135a9816133fa565b81146135b3575f80fd5b50565b5f813590506135c4816135a0565b92915050565b5f80604083850312156135e0576135df61332b565b5b5f6135ed85828601613375565b92505060206135fe858286016135b6565b9150509250929050565b5f806040838503121561361e5761361d61332b565b5b5f61362b85828601613375565b925050602061363c85828601613375565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061368a57607f821691505b60208210810361369d5761369c613646565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6136fd60288361328b565b9150613708826136a3565b604082019050919050565b5f6020820190508181035f83015261372a816136f1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61376882613389565b915061377383613389565b925082820190508082111561378b5761378a613731565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137c560208361328b565b91506137d082613791565b602082019050919050565b5f6020820190508181035f8301526137f2816137b9565b9050919050565b7f546f6b656e3a2063616c6c6572206973206e6f74207468652048656c706572005f82015250565b5f61382d601f8361328b565b9150613838826137f9565b602082019050919050565b5f6020820190508181035f83015261385a81613821565b9050919050565b5f81905092915050565b50565b5f6138795f83613861565b91506138848261386b565b5f82019050919050565b5f6138988261386e565b9150819050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6138fc60398361328b565b9150613907826138a2565b604082019050919050565b5f6020820190508181035f830152613929816138f0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61398a60258361328b565b915061399582613930565b604082019050919050565b5f6020820190508181035f8301526139b78161397e565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f6139f2601a8361328b565b91506139fd826139be565b602082019050919050565b5f6020820190508181035f830152613a1f816139e6565b9050919050565b5f81519050613a3481613392565b92915050565b5f60208284031215613a4f57613a4e61332b565b5b5f613a5c84828501613a26565b91505092915050565b5f604082019050613a785f830185613578565b613a856020830184613458565b9392505050565b5f81519050613a9a816135a0565b92915050565b5f60208284031215613ab557613ab461332b565b5b5f613ac284828501613a8c565b91505092915050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f75745f8201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b5f613b25602e8361328b565b9150613b3082613acb565b604082019050919050565b5f6020820190508181035f830152613b5281613b19565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613bb360268361328b565b9150613bbe82613b59565b604082019050919050565b5f6020820190508181035f830152613be081613ba7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c4160248361328b565b9150613c4c82613be7565b604082019050919050565b5f6020820190508181035f830152613c6e81613c35565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ccf60228361328b565b9150613cda82613c75565b604082019050919050565b5f6020820190508181035f830152613cfc81613cc3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613d5d60258361328b565b9150613d6882613d03565b604082019050919050565b5f6020820190508181035f830152613d8a81613d51565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613deb60238361328b565b9150613df682613d91565b604082019050919050565b5f6020820190508181035f830152613e1881613ddf565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f613e5360128361328b565b9150613e5e82613e1f565b602082019050919050565b5f6020820190508181035f830152613e8081613e47565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f613ebb60148361328b565b9150613ec682613e87565b602082019050919050565b5f6020820190508181035f830152613ee881613eaf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613f2360168361328b565b9150613f2e82613eef565b602082019050919050565b5f6020820190508181035f830152613f5081613f17565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613fb160358361328b565b9150613fbc82613f57565b604082019050919050565b5f6020820190508181035f830152613fde81613fa5565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61401960138361328b565b915061402482613fe5565b602082019050919050565b5f6020820190508181035f8301526140468161400d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6140a760368361328b565b91506140b28261404d565b604082019050919050565b5f6020820190508181035f8301526140d48161409b565b9050919050565b5f6140e582613389565b91506140f083613389565b92508282026140fe81613389565b9150828204841483151761411557614114613731565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61415382613389565b915061415e83613389565b92508261416e5761416d61411c565b5b828204905092915050565b5f61418382613389565b915061418e83613389565b92508282039050818111156141a6576141a5613731565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61420660268361328b565b9150614211826141ac565b604082019050919050565b5f6020820190508181035f830152614233816141fa565b9050919050565b5f60608201905061424d5f830186613458565b61425a6020830185613458565b6142676040830184613458565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142d78161335f565b92915050565b5f602082840312156142f2576142f161332b565b5b5f6142ff848285016142c9565b91505092915050565b5f819050919050565b5f61432b61432661432184614308565b613480565b613389565b9050919050565b61433b81614311565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143738161334e565b82525050565b5f614384838361436a565b60208301905092915050565b5f602082019050919050565b5f6143a682614341565b6143b0818561434b565b93506143bb8361435b565b805f5b838110156143eb5781516143d28882614379565b97506143dd83614390565b9250506001810190506143be565b5085935050505092915050565b5f60a08201905061440b5f830188613458565b6144186020830187614332565b818103604083015261442a818661439c565b90506144396060830185613578565b6144466080830184613458565b9695505050505050565b5f60c0820190506144635f830189613578565b6144706020830188613458565b61447d6040830187614332565b61448a6060830186614332565b6144976080830185613578565b6144a460a0830184613458565b979650505050505050565b5f805f606084860312156144c6576144c561332b565b5b5f6144d386828701613a26565b93505060206144e486828701613a26565b92505060406144f586828701613a26565b915050925092509256fea26469706673582212201dd4c0260b0f0aa324bb6d155bf57a1b4681d65657612eefb16f6b0a274c37aa64736f6c63430008140033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c80637ca8448a11610143578063c0246668116100b5578063e2f4560511610079578063e2f45605146108e6578063f11a24d314610910578063f2fde38b1461093a578063f637434214610962578063f8b45b051461098c578063fe575a87146109b657610266565b8063c024666814610806578063c8c8ebe41461082e578063d85ba06314610858578063dd62ed3e14610882578063e19b2823146108be57610266565b80639c6868af116101075780639c6868af146106ea578063a457c2d714610700578063a9059cbb1461073c578063b62496f514610778578063bbc0c742146107b4578063bc205ad3146107de57610266565b80637ca8448a146106305780638a8c523c146106585780638da5cb5b1461066e57806395d89b41146106985780639a7a23d6146106c257610266565b8063313ce567116101dc5780636ddd1713116101a05780636ddd17131461053a57806370a0823114610564578063715018a6146105a05780637571336a146105b657806375e3661e146105de578063782c4e991461060657610266565b8063313ce56714610444578063395093511461046e57806349bd5a5e146104aa5780634fbee193146104d45780636a486a8e1461051057610266565b806318160ddd1161022357806318160ddd1461036057806319eab0421461038a5780631a8145bb146103b457806323b872dd146103de57806324b9f3c11461041a57610266565b806306fdde031461026a578063095ea7b31461029457806310d5de53146102d0578063156c2f351461030c5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109f2565b60405161028b919061330b565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906133bc565b610a82565b6040516102c79190613414565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061342d565b610a9f565b6040516103039190613414565b60405180910390f35b348015610317575f80fd5b50610320610abc565b60405161032d9190613467565b60405180910390f35b348015610341575f80fd5b5061034a610ac2565b60405161035791906134db565b60405180910390f35b34801561036b575f80fd5b50610374610ae6565b6040516103819190613467565b60405180910390f35b348015610395575f80fd5b5061039e610aef565b6040516103ab9190613467565b60405180910390f35b3480156103bf575f80fd5b506103c8610af5565b6040516103d59190613467565b60405180910390f35b3480156103e9575f80fd5b5061040460048036038101906103ff91906134f4565b610afb565b6040516104119190613414565b60405180910390f35b348015610425575f80fd5b5061042e610bed565b60405161043b9190613467565b60405180910390f35b34801561044f575f80fd5b50610458610bf3565b604051610465919061355f565b60405180910390f35b348015610479575f80fd5b50610494600480360381019061048f91906133bc565b610bfb565b6040516104a19190613414565b60405180910390f35b3480156104b5575f80fd5b506104be610ca2565b6040516104cb9190613587565b60405180910390f35b3480156104df575f80fd5b506104fa60048036038101906104f5919061342d565b610cc6565b6040516105079190613414565b60405180910390f35b34801561051b575f80fd5b50610524610d18565b6040516105319190613467565b60405180910390f35b348015610545575f80fd5b5061054e610d1e565b60405161055b9190613414565b60405180910390f35b34801561056f575f80fd5b5061058a6004803603810190610585919061342d565b610d31565b6040516105979190613467565b60405180910390f35b3480156105ab575f80fd5b506105b4610d76565b005b3480156105c1575f80fd5b506105dc60048036038101906105d791906135ca565b610dfd565b005b3480156105e9575f80fd5b5061060460048036038101906105ff919061342d565b610ed1565b005b348015610611575f80fd5b5061061a610fbd565b6040516106279190613587565b60405180910390f35b34801561063b575f80fd5b506106566004803603810190610651919061342d565b610fe1565b005b348015610663575f80fd5b5061066c6110eb565b005b348015610679575f80fd5b5061068261119e565b60405161068f9190613587565b60405180910390f35b3480156106a3575f80fd5b506106ac6111c6565b6040516106b9919061330b565b60405180910390f35b3480156106cd575f80fd5b506106e860048036038101906106e391906135ca565b611256565b005b3480156106f5575f80fd5b506106fe61136e565b005b34801561070b575f80fd5b50610726600480360381019061072191906133bc565b611440565b6040516107339190613414565b60405180910390f35b348015610747575f80fd5b50610762600480360381019061075d91906133bc565b611526565b60405161076f9190613414565b60405180910390f35b348015610783575f80fd5b5061079e6004803603810190610799919061342d565b611543565b6040516107ab9190613414565b60405180910390f35b3480156107bf575f80fd5b506107c8611560565b6040516107d59190613414565b60405180910390f35b3480156107e9575f80fd5b5061080460048036038101906107ff9190613608565b611572565b005b348015610811575f80fd5b5061082c600480360381019061082791906135ca565b611771565b005b348015610839575f80fd5b50610842611893565b60405161084f9190613467565b60405180910390f35b348015610863575f80fd5b5061086c611899565b6040516108799190613467565b60405180910390f35b34801561088d575f80fd5b506108a860048036038101906108a39190613608565b61189f565b6040516108b59190613467565b60405180910390f35b3480156108c9575f80fd5b506108e460048036038101906108df919061342d565b611921565b005b3480156108f1575f80fd5b506108fa611ae9565b6040516109079190613467565b60405180910390f35b34801561091b575f80fd5b50610924611b0d565b6040516109319190613467565b60405180910390f35b348015610945575f80fd5b50610960600480360381019061095b919061342d565b611b13565b005b34801561096d575f80fd5b50610976611c09565b6040516109839190613467565b60405180910390f35b348015610997575f80fd5b506109a0611c0f565b6040516109ad9190613467565b60405180910390f35b3480156109c1575f80fd5b506109dc60048036038101906109d7919061342d565b611c15565b6040516109e99190613414565b60405180910390f35b606060038054610a0190613673565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d90613673565b8015610a785780601f10610a4f57610100808354040283529160200191610a78565b820191905f5260205f20905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b5f610a95610a8e611c67565b8484611c6e565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600b5481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b600e5481565b60115481565b5f610b07848484611e31565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b4e611c67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490613713565b60405180910390fd5b610be185610bd9611c67565b858403611c6e565b60019150509392505050565b60105481565b5f6012905090565b5f610c98610c07611c67565b848460015f610c14611c67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c93919061375e565b611c6e565b6001905092915050565b7f000000000000000000000000f5cbda728ed45dfea6755c1914a43621e7c8a54481565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b600860019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d7e611c67565b73ffffffffffffffffffffffffffffffffffffffff16610d9c61119e565b73ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de9906137db565b60405180910390fd5b610dfb5f61295d565b565b610e05611c67565b73ffffffffffffffffffffffffffffffffffffffff16610e2361119e565b73ffffffffffffffffffffffffffffffffffffffff1614610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e70906137db565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610ed9611c67565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000621761e815c634ce1143a1dcd186221644884a6f73ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90613843565b60405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b7f000000000000000000000000621761e815c634ce1143a1dcd186221644884a6f81565b610fe9611c67565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000621761e815c634ce1143a1dcd186221644884a6f73ffffffffffffffffffffffffffffffffffffffff1614611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d90613843565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff164760405161109b9061388e565b5f6040518083038185875af1925050503d805f81146110d5576040519150601f19603f3d011682016040523d82523d5f602084013e6110da565b606091505b50509050806110e7575f80fd5b5050565b6110f3611c67565b73ffffffffffffffffffffffffffffffffffffffff1661111161119e565b73ffffffffffffffffffffffffffffffffffffffff1614611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e906137db565b60405180910390fd5b600160085f6101000a81548160ff0219169083151502179055506001600860016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111d590613673565b80601f016020809104026020016040519081016040528092919081815260200182805461120190613673565b801561124c5780601f106112235761010080835404028352916020019161124c565b820191905f5260205f20905b81548152906001019060200180831161122f57829003601f168201915b5050505050905090565b61125e611c67565b73ffffffffffffffffffffffffffffffffffffffff1661127c61119e565b73ffffffffffffffffffffffffffffffffffffffff16146112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c9906137db565b60405180910390fd5b7f000000000000000000000000f5cbda728ed45dfea6755c1914a43621e7c8a54473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790613912565b60405180910390fd5b61136a8282612a20565b5050565b611376611c67565b73ffffffffffffffffffffffffffffffffffffffff1661139461119e565b73ffffffffffffffffffffffffffffffffffffffff16146113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e1906137db565b60405180910390fd5b6a084595161401484a0000006006819055506a14adf4b7320334b90000006007819055506004600b819055506001600c819055506005600a819055506004600e819055506001600f819055506005600d81905550565b5f8060015f61144d611c67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906139a0565b60405180910390fd5b61151b611512611c67565b85858403611c6e565b600191505092915050565b5f611539611532611c67565b8484611e31565b6001905092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900460ff1681565b61157a611c67565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000621761e815c634ce1143a1dcd186221644884a6f73ffffffffffffffffffffffffffffffffffffffff1614611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90613843565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90613a08565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116af9190613587565b602060405180830381865afa1580156116ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ee9190613a3a565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161172b929190613a65565b6020604051808303815f875af1158015611747573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061176b9190613aa0565b50505050565b611779611c67565b73ffffffffffffffffffffffffffffffffffffffff1661179761119e565b73ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e4906137db565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118879190613414565b60405180910390a25050565b60065481565b600a5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611929611c67565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000621761e815c634ce1143a1dcd186221644884a6f73ffffffffffffffffffffffffffffffffffffffff16146119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90613843565b60405180910390fd5b7f000000000000000000000000f5cbda728ed45dfea6755c1914a43621e7c8a54473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611a525750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890613b3b565b60405180910390fd5b600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b7f0000000000000000000000000000000000000000000069e10de76676d080000081565b600c5481565b611b1b611c67565b73ffffffffffffffffffffffffffffffffffffffff16611b3961119e565b73ffffffffffffffffffffffffffffffffffffffff1614611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b86906137db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613bc9565b60405180910390fd5b611c068161295d565b50565b600f5481565b60075481565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd390613c57565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4190613ce5565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e249190613467565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9690613d73565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0490613e01565b60405180910390fd5b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e90613e69565b60405180910390fd5b60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890613ed1565b60405180910390fd5b5f81036120385761203383835f612abe565b612958565b61204061119e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120ae575061207e61119e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120e657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612120575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121395750600560149054906101000a900460ff16155b156125065760085f9054906101000a900460ff1661222c5760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806121ec575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290613f39565b60405180910390fd5b5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156122c9575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561237057600654811115612313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a90613fc7565b60405180910390fd5b60075461231f83610d31565b8261232a919061375e565b111561236b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123629061402f565b60405180910390fd5b612505565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561240d575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561245c57600654811115612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e906140bd565b60405180910390fd5b612504565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612503576007546124b683610d31565b826124c1919061375e565b1115612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f99061402f565b60405180910390fd5b5b5b5b5b5f61251030610d31565b90505f7f0000000000000000000000000000000000000000000069e10de76676d080000082101590508080156125525750600860019054906101000a900460ff165b801561256b5750600560149054906101000a900460ff16155b80156125be575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612611575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612664575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126a7576001600560146101000a81548160ff02191690831515021790555061268c612d33565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612756575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561275f575f90505b5f81156129485760145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127bd57505f600d54115b15612847576064600d54866127d291906140db565b6127dc9190614149565b9050600d54600f54826127ef91906140db565b6127f99190614149565b60115f828254612809919061375e565b92505081905550600d54600e548261282191906140db565b61282b9190614149565b60105f82825461283b919061375e565b92505081905550612925565b60145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561289e57505f600a54115b15612924576064600a54866128b391906140db565b6128bd9190614149565b9050600a54600c54826128d091906140db565b6128da9190614149565b60115f8282546128ea919061375e565b92505081905550600a54600b548261290291906140db565b61290c9190614149565b60105f82825461291c919061375e565b925050819055505b5b5f81111561293957612938873083612abe565b5b80856129459190614179565b94505b612953878787612abe565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2390613d73565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9190613e01565b60405180910390fd5b612ba5838383612f66565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1f9061421c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612cb6919061375e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d1a9190613467565b60405180910390a3612d2d848484612f6b565b50505050565b5f612d3d30610d31565b90505f601054601154612d50919061375e565b90505f80831480612d6057505f82145b15612d6d57505050612f64565b60147f0000000000000000000000000000000000000000000069e10de76676d0800000612d9a91906140db565b831115612dd15760147f0000000000000000000000000000000000000000000069e10de76676d0800000612dce91906140db565b92505b5f60028360115486612de391906140db565b612ded9190614149565b612df79190614149565b90505f8185612e069190614179565b90505f479050612e1582612f70565b5f8147612e229190614179565b90505f6002601154612e349190614149565b87612e3f9190614179565b60105483612e4d91906140db565b612e579190614149565b90505f8183612e669190614179565b90505f86118015612e7657505f81115b15612ec357612e8586826131a3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601154604051612eba9392919061423a565b60405180910390a15b5f6011819055505f6010819055507f000000000000000000000000621761e815c634ce1143a1dcd186221644884a6f73ffffffffffffffffffffffffffffffffffffffff1647604051612f159061388e565b5f6040518083038185875af1925050503d805f8114612f4f576040519150601f19603f3d011682016040523d82523d5f602084013e612f54565b606091505b5050809750505050505050505050505b565b505050565b505050565b5f600267ffffffffffffffff811115612f8c57612f8b61426f565b5b604051908082528060200260200182016040528015612fba5781602001602082028036833780820191505090505b50905030815f81518110612fd157612fd061429c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613074573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061309891906142dd565b816001815181106130ac576130ab61429c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613111307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c6e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131729594939291906143f8565b5f604051808303815f87803b158015613189575f80fd5b505af115801561319b573d5f803e3d5ffd5b505050505050565b6131ce307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c6e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061321761119e565b426040518863ffffffff1660e01b815260040161323996959493929190614450565b60606040518083038185885af1158015613255573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061327a91906144af565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156132b857808201518184015260208101905061329d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6132dd82613281565b6132e7818561328b565b93506132f781856020860161329b565b613300816132c3565b840191505092915050565b5f6020820190508181035f83015261332381846132d3565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6133588261332f565b9050919050565b6133688161334e565b8114613372575f80fd5b50565b5f813590506133838161335f565b92915050565b5f819050919050565b61339b81613389565b81146133a5575f80fd5b50565b5f813590506133b681613392565b92915050565b5f80604083850312156133d2576133d161332b565b5b5f6133df85828601613375565b92505060206133f0858286016133a8565b9150509250929050565b5f8115159050919050565b61340e816133fa565b82525050565b5f6020820190506134275f830184613405565b92915050565b5f602082840312156134425761344161332b565b5b5f61344f84828501613375565b91505092915050565b61346181613389565b82525050565b5f60208201905061347a5f830184613458565b92915050565b5f819050919050565b5f6134a361349e6134998461332f565b613480565b61332f565b9050919050565b5f6134b482613489565b9050919050565b5f6134c5826134aa565b9050919050565b6134d5816134bb565b82525050565b5f6020820190506134ee5f8301846134cc565b92915050565b5f805f6060848603121561350b5761350a61332b565b5b5f61351886828701613375565b935050602061352986828701613375565b925050604061353a868287016133a8565b9150509250925092565b5f60ff82169050919050565b61355981613544565b82525050565b5f6020820190506135725f830184613550565b92915050565b6135818161334e565b82525050565b5f60208201905061359a5f830184613578565b92915050565b6135a9816133fa565b81146135b3575f80fd5b50565b5f813590506135c4816135a0565b92915050565b5f80604083850312156135e0576135df61332b565b5b5f6135ed85828601613375565b92505060206135fe858286016135b6565b9150509250929050565b5f806040838503121561361e5761361d61332b565b5b5f61362b85828601613375565b925050602061363c85828601613375565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061368a57607f821691505b60208210810361369d5761369c613646565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6136fd60288361328b565b9150613708826136a3565b604082019050919050565b5f6020820190508181035f83015261372a816136f1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61376882613389565b915061377383613389565b925082820190508082111561378b5761378a613731565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137c560208361328b565b91506137d082613791565b602082019050919050565b5f6020820190508181035f8301526137f2816137b9565b9050919050565b7f546f6b656e3a2063616c6c6572206973206e6f74207468652048656c706572005f82015250565b5f61382d601f8361328b565b9150613838826137f9565b602082019050919050565b5f6020820190508181035f83015261385a81613821565b9050919050565b5f81905092915050565b50565b5f6138795f83613861565b91506138848261386b565b5f82019050919050565b5f6138988261386e565b9150819050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6138fc60398361328b565b9150613907826138a2565b604082019050919050565b5f6020820190508181035f830152613929816138f0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61398a60258361328b565b915061399582613930565b604082019050919050565b5f6020820190508181035f8301526139b78161397e565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f6139f2601a8361328b565b91506139fd826139be565b602082019050919050565b5f6020820190508181035f830152613a1f816139e6565b9050919050565b5f81519050613a3481613392565b92915050565b5f60208284031215613a4f57613a4e61332b565b5b5f613a5c84828501613a26565b91505092915050565b5f604082019050613a785f830185613578565b613a856020830184613458565b9392505050565b5f81519050613a9a816135a0565b92915050565b5f60208284031215613ab557613ab461332b565b5b5f613ac284828501613a8c565b91505092915050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f75745f8201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b5f613b25602e8361328b565b9150613b3082613acb565b604082019050919050565b5f6020820190508181035f830152613b5281613b19565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613bb360268361328b565b9150613bbe82613b59565b604082019050919050565b5f6020820190508181035f830152613be081613ba7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c4160248361328b565b9150613c4c82613be7565b604082019050919050565b5f6020820190508181035f830152613c6e81613c35565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ccf60228361328b565b9150613cda82613c75565b604082019050919050565b5f6020820190508181035f830152613cfc81613cc3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613d5d60258361328b565b9150613d6882613d03565b604082019050919050565b5f6020820190508181035f830152613d8a81613d51565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613deb60238361328b565b9150613df682613d91565b604082019050919050565b5f6020820190508181035f830152613e1881613ddf565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f613e5360128361328b565b9150613e5e82613e1f565b602082019050919050565b5f6020820190508181035f830152613e8081613e47565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f613ebb60148361328b565b9150613ec682613e87565b602082019050919050565b5f6020820190508181035f830152613ee881613eaf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613f2360168361328b565b9150613f2e82613eef565b602082019050919050565b5f6020820190508181035f830152613f5081613f17565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613fb160358361328b565b9150613fbc82613f57565b604082019050919050565b5f6020820190508181035f830152613fde81613fa5565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61401960138361328b565b915061402482613fe5565b602082019050919050565b5f6020820190508181035f8301526140468161400d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6140a760368361328b565b91506140b28261404d565b604082019050919050565b5f6020820190508181035f8301526140d48161409b565b9050919050565b5f6140e582613389565b91506140f083613389565b92508282026140fe81613389565b9150828204841483151761411557614114613731565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61415382613389565b915061415e83613389565b92508261416e5761416d61411c565b5b828204905092915050565b5f61418382613389565b915061418e83613389565b92508282039050818111156141a6576141a5613731565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61420660268361328b565b9150614211826141ac565b604082019050919050565b5f6020820190508181035f830152614233816141fa565b9050919050565b5f60608201905061424d5f830186613458565b61425a6020830185613458565b6142676040830184613458565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142d78161335f565b92915050565b5f602082840312156142f2576142f161332b565b5b5f6142ff848285016142c9565b91505092915050565b5f819050919050565b5f61432b61432661432184614308565b613480565b613389565b9050919050565b61433b81614311565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143738161334e565b82525050565b5f614384838361436a565b60208301905092915050565b5f602082019050919050565b5f6143a682614341565b6143b0818561434b565b93506143bb8361435b565b805f5b838110156143eb5781516143d28882614379565b97506143dd83614390565b9250506001810190506143be565b5085935050505092915050565b5f60a08201905061440b5f830188613458565b6144186020830187614332565b818103604083015261442a818661439c565b90506144396060830185613578565b6144466080830184613458565b9695505050505050565b5f60c0820190506144635f830189613578565b6144706020830188613458565b61447d6040830187614332565b61448a6060830186614332565b6144976080830185613578565b6144a460a0830184613458565b979650505050505050565b5f805f606084860312156144c6576144c561332b565b5b5f6144d386828701613a26565b93505060206144e486828701613a26565b92505060406144f586828701613a26565b915050925092509256fea26469706673582212201dd4c0260b0f0aa324bb6d155bf57a1b4681d65657612eefb16f6b0a274c37aa64736f6c63430008140033

Deployed Bytecode Sourcemap

33108:13990:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11067:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13234:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34051:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33671:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33151:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12187:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33781:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33897:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13885:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33858:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12029:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14786:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33209:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38565:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33746:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33497:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12358:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4584:103;;;;;;;;;;;;;:::i;:::-;;37692:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46994:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33284:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46223:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37077:112;;;;;;;;;;;;;:::i;:::-;;3933:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11286:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38057:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37306:378;;;;;;;;;;;;;:::i;:::-;;15504:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12698:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34272:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33457:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45833:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37867:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33332:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33637:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12936:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46528:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33374:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33707:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4842:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33818:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33424:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38699:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11067:100;11121:13;11154:5;11147:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11067:100;:::o;13234:169::-;13317:4;13334:39;13343:12;:10;:12::i;:::-;13357:7;13366:6;13334:8;:39::i;:::-;13391:4;13384:11;;13234:169;;;;:::o;34051:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;33671:29::-;;;;:::o;33151:51::-;;;:::o;12187:108::-;12248:7;12275:12;;12268:19;;12187:108;:::o;33781:30::-;;;;:::o;33897:33::-;;;;:::o;13885:492::-;14025:4;14042:36;14052:6;14060:9;14071:6;14042:9;:36::i;:::-;14091:24;14118:11;:19;14130:6;14118:19;;;;;;;;;;;;;;;:33;14138:12;:10;:12::i;:::-;14118:33;;;;;;;;;;;;;;;;14091:60;;14190:6;14170:16;:26;;14162:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;14277:57;14286:6;14294:12;:10;:12::i;:::-;14327:6;14308:16;:25;14277:8;:57::i;:::-;14365:4;14358:11;;;13885:492;;;;;:::o;33858:32::-;;;;:::o;12029:93::-;12087:5;12112:2;12105:9;;12029:93;:::o;14786:215::-;14874:4;14891:80;14900:12;:10;:12::i;:::-;14914:7;14960:10;14923:11;:25;14935:12;:10;:12::i;:::-;14923:25;;;;;;;;;;;;;;;:34;14949:7;14923:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14891:8;:80::i;:::-;14989:4;14982:11;;14786:215;;;;:::o;33209:38::-;;;:::o;38565:126::-;38631:4;38655:19;:28;38675:7;38655:28;;;;;;;;;;;;;;;;;;;;;;;;;38648:35;;38565:126;;;:::o;33746:28::-;;;;:::o;33497:31::-;;;;;;;;;;;;;:::o;12358:127::-;12432:7;12459:9;:18;12469:7;12459:18;;;;;;;;;;;;;;;;12452:25;;12358:127;;;:::o;4584:103::-;4164:12;:10;:12::i;:::-;4153:23;;:7;:5;:7::i;:::-;:23;;;4145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4649:30:::1;4676:1;4649:18;:30::i;:::-;4584:103::o:0;37692:167::-;4164:12;:10;:12::i;:::-;4153:23;;:7;:5;:7::i;:::-;:23;;;4145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37847:4:::1;37805:31;:39;37837:6;37805:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37692:167:::0;;:::o;46994:99::-;45661:12;:10;:12::i;:::-;45643:30;;:14;:30;;;45635:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;47080:5:::1;47059:11;:18;47071:5;47059:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;46994:99:::0;:::o;33284:39::-;;;:::o;46223:197::-;45661:12;:10;:12::i;:::-;45643:30;;:14;:30;;;45635:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;46297:12:::1;46315:6;:11;;46348:21;46315:70;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46296:89;;;46404:7;46396:16;;;::::0;::::1;;46285:135;46223:197:::0;:::o;37077:112::-;4164:12;:10;:12::i;:::-;4153:23;;:7;:5;:7::i;:::-;:23;;;4145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37148:4:::1;37132:13;;:20;;;;;;;;;;;;;;;;;;37177:4;37163:11;;:18;;;;;;;;;;;;;;;;;;37077:112::o:0;3933:87::-;3979:7;4006:6;;;;;;;;;;;3999:13;;3933:87;:::o;11286:104::-;11342:13;11375:7;11368:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11286:104;:::o;38057:304::-;4164:12;:10;:12::i;:::-;4153:23;;:7;:5;:7::i;:::-;:23;;;4145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38201:13:::1;38193:21;;:4;:21;;::::0;38171:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38312:41;38341:4;38347:5;38312:28;:41::i;:::-;38057:304:::0;;:::o;37306:378::-;4164:12;:10;:12::i;:::-;4153:23;;:7;:5;:7::i;:::-;:23;;;4145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37390:21:::1;37367:20;:44;;;;37440:21;37428:9;:33;;;;37503:1;37486:14;:18;;;;37539:1;37521:15;:19;;;;37572:1;37557:12;:16;;;;37604:1;37586:15;:19;;;;37641:1;37622:16;:20;;;;37675:1;37659:13;:17;;;;37306:378::o:0;15504:413::-;15597:4;15614:24;15641:11;:25;15653:12;:10;:12::i;:::-;15641:25;;;;;;;;;;;;;;;:34;15667:7;15641:34;;;;;;;;;;;;;;;;15614:61;;15714:15;15694:16;:35;;15686:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15807:67;15816:12;:10;:12::i;:::-;15830:7;15858:15;15839:16;:34;15807:8;:67::i;:::-;15905:4;15898:11;;;15504:413;;;;:::o;12698:175::-;12784:4;12801:42;12811:12;:10;:12::i;:::-;12825:9;12836:6;12801:9;:42::i;:::-;12861:4;12854:11;;12698:175;;;;:::o;34272:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33457:33::-;;;;;;;;;;;;;:::o;45833:289::-;45661:12;:10;:12::i;:::-;45643:30;;:14;:30;;;45635:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;45947:1:::1;45929:20;;:6;:20;;::::0;45921:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45991:24;46025:6;46018:24;;;46051:4;46018:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45991:66;;46075:6;46068:23;;;46092:3;46097:16;46068:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45910:212;45833:289:::0;;:::o;37867:182::-;4164:12;:10;:12::i;:::-;4153:23;;:7;:5;:7::i;:::-;:23;;;4145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37983:8:::1;37952:19;:28;37972:7;37952:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38023:7;38007:34;;;38032:8;38007:34;;;;;;:::i;:::-;;;;;;;;37867:182:::0;;:::o;33332:35::-;;;;:::o;33637:27::-;;;;:::o;12936:151::-;13025:7;13052:11;:18;13064:5;13052:18;;;;;;;;;;;;;;;:27;13071:7;13052:27;;;;;;;;;;;;;;;;13045:34;;12936:151;;;;:::o;46528:328::-;45661:12;:10;:12::i;:::-;45643:30;;:14;:30;;;45635:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;46651:13:::1;46630:35;;:9;:35;;;;:103;;;;;46690:42;46669:64;;:9;:64;;;;46630:103;46608:200;;;;;;;;;;;;:::i;:::-;;;;;;;;;46844:4;46819:11;:22;46831:9;46819:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46528:328:::0;:::o;33374:43::-;;;:::o;33707:30::-;;;;:::o;4842:201::-;4164:12;:10;:12::i;:::-;4153:23;;:7;:5;:7::i;:::-;:23;;;4145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4951:1:::1;4931:22;;:8;:22;;::::0;4923:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5007:28;5026:8;5007:18;:28::i;:::-;4842:201:::0;:::o;33818:31::-;;;;:::o;33424:24::-;;;;:::o;38699:113::-;38760:4;38784:11;:20;38796:7;38784:20;;;;;;;;;;;;;;;;;;;;;;;;;38777:27;;38699:113;;;:::o;2800:98::-;2853:7;2880:10;2873:17;;2800:98;:::o;19188:380::-;19341:1;19324:19;;:5;:19;;;19316:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19422:1;19403:21;;:7;:21;;;19395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19506:6;19476:11;:18;19488:5;19476:18;;;;;;;;;;;;;;;:27;19495:7;19476:27;;;;;;;;;;;;;;;:36;;;;19544:7;19528:32;;19537:5;19528:32;;;19553:6;19528:32;;;;;;:::i;:::-;;;;;;;;19188:380;;;:::o;38820:3834::-;38968:1;38952:18;;:4;:18;;;38944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39045:1;39031:16;;:2;:16;;;39023:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39107:11;:17;39119:4;39107:17;;;;;;;;;;;;;;;;;;;;;;;;;39106:18;39098:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;39166:11;:15;39178:2;39166:15;;;;;;;;;;;;;;;;;;;;;;;;;39165:16;39157:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;39232:1;39222:6;:11;39218:93;;39250:28;39266:4;39272:2;39276:1;39250:15;:28::i;:::-;39293:7;;39218:93;39353:7;:5;:7::i;:::-;39345:15;;:4;:15;;;;:49;;;;;39387:7;:5;:7::i;:::-;39381:13;;:2;:13;;;;39345:49;:86;;;;;39429:1;39415:16;;:2;:16;;;;39345:86;:128;;;;;39466:6;39452:21;;:2;:21;;;;39345:128;:158;;;;;39495:8;;;;;;;;;;;39494:9;39345:158;39323:1642;;;39543:13;;;;;;;;;;;39538:223;;39615:19;:25;39635:4;39615:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39644:19;:23;39664:2;39644:23;;;;;;;;;;;;;;;;;;;;;;;;;39615:52;39581:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;39538:223;39834:25;:31;39860:4;39834:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;39891:31;:35;39923:2;39891:35;;;;;;;;;;;;;;;;;;;;;;;;;39890:36;39834:92;39808:1146;;;40013:20;;40003:6;:30;;39969:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;40221:9;;40204:13;40214:2;40204:9;:13::i;:::-;40195:6;:22;;;;:::i;:::-;:35;;40161:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39808:1146;;;40398:25;:29;40424:2;40398:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;40453:31;:37;40485:4;40453:37;;;;;;;;;;;;;;;;;;;;;;;;;40452:38;40398:92;40372:582;;;40577:20;;40567:6;:30;;40533:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;40372:582;;;40734:31;:35;40766:2;40734:35;;;;;;;;;;;;;;;;;;;;;;;;;40729:225;;40854:9;;40837:13;40847:2;40837:9;:13::i;:::-;40828:6;:22;;;;:::i;:::-;:35;;40794:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40729:225;40372:582;39808:1146;39323:1642;40977:28;41008:24;41026:4;41008:9;:24::i;:::-;40977:55;;41045:12;41084:18;41060:20;:42;;41045:57;;41133:7;:35;;;;;41157:11;;;;;;;;;;;41133:35;:61;;;;;41186:8;;;;;;;;;;;41185:9;41133:61;:110;;;;;41212:25;:31;41238:4;41212:31;;;;;;;;;;;;;;;;;;;;;;;;;41211:32;41133:110;:153;;;;;41261:19;:25;41281:4;41261:25;;;;;;;;;;;;;;;;;;;;;;;;;41260:26;41133:153;:194;;;;;41304:19;:23;41324:2;41304:23;;;;;;;;;;;;;;;;;;;;;;;;;41303:24;41133:194;41115:326;;;41365:4;41354:8;;:15;;;;;;;;;;;;;;;;;;41386:10;:8;:10::i;:::-;41424:5;41413:8;;:16;;;;;;;;;;;;;;;;;;41115:326;41453:12;41469:8;;;;;;;;;;;41468:9;41453:24;;41579:19;:25;41599:4;41579:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41608:19;:23;41628:2;41608:23;;;;;;;;;;;;;;;;;;;;;;;;;41579:52;41575:100;;;41658:5;41648:15;;41575:100;41687:12;41792:7;41788:813;;;41841:25;:29;41867:2;41841:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41890:1;41874:13;;:17;41841:50;41837:615;;;41946:3;41929:13;;41920:6;:22;;;;:::i;:::-;41919:30;;;;:::i;:::-;41912:37;;42018:13;;41998:16;;41991:4;:23;;;;:::i;:::-;41990:41;;;;:::i;:::-;41968:18;;:63;;;;;;;:::i;:::-;;;;;;;;42098:13;;42079:15;;42072:4;:22;;;;:::i;:::-;42071:40;;;;:::i;:::-;42050:17;;:61;;;;;;;:::i;:::-;;;;;;;;41837:615;;;42170:25;:31;42196:4;42170:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42220:1;42205:12;;:16;42170:51;42166:286;;;42275:3;42259:12;;42250:6;:21;;;;:::i;:::-;42249:29;;;;:::i;:::-;42242:36;;42346:12;;42327:15;;42320:4;:22;;;;:::i;:::-;42319:39;;;;:::i;:::-;42297:18;;:61;;;;;;;:::i;:::-;;;;;;;;42424:12;;42406:14;;42399:4;:21;;;;:::i;:::-;42398:38;;;;:::i;:::-;42377:17;;:59;;;;;;;:::i;:::-;;;;;;;;42166:286;41837:615;42479:1;42472:4;:8;42468:91;;;42501:42;42517:4;42531;42538;42501:15;:42::i;:::-;42468:91;42585:4;42575:14;;;;;:::i;:::-;;;41788:813;42613:33;42629:4;42635:2;42639:6;42613:15;:33::i;:::-;38933:3721;;;;38820:3834;;;;:::o;5203:191::-;5277:16;5296:6;;;;;;;;;;;5277:25;;5322:8;5313:6;;:17;;;;;;;;;;;;;;;;;;5377:8;5346:40;;5367:8;5346:40;;;;;;;;;;;;5266:128;5203:191;:::o;38369:188::-;38486:5;38452:25;:31;38478:4;38452:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38543:5;38509:40;;38537:4;38509:40;;;;;;;;;;;;38369:188;;:::o;16407:733::-;16565:1;16547:20;;:6;:20;;;16539:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16649:1;16628:23;;:9;:23;;;16620:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16704:47;16725:6;16733:9;16744:6;16704:20;:47::i;:::-;16764:21;16788:9;:17;16798:6;16788:17;;;;;;;;;;;;;;;;16764:41;;16841:6;16824:13;:23;;16816:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16962:6;16946:13;:22;16926:9;:17;16936:6;16926:17;;;;;;;;;;;;;;;:42;;;;17014:6;16990:9;:20;17000:9;16990:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17055:9;17038:35;;17047:6;17038:35;;;17066:6;17038:35;;;;;;:::i;:::-;;;;;;;;17086:46;17106:6;17114:9;17125:6;17086:19;:46::i;:::-;16528:612;16407:733;;;:::o;43797:1508::-;43836:23;43862:24;43880:4;43862:9;:24::i;:::-;43836:50;;43897:25;43959:17;;43925:18;;:51;;;;:::i;:::-;43897:79;;43987:12;44035:1;44016:15;:20;:46;;;;44061:1;44040:17;:22;44016:46;44012:85;;;44079:7;;;;;44012:85;44152:2;44131:18;:23;;;;:::i;:::-;44113:15;:41;44109:115;;;44210:2;44189:18;:23;;;;:::i;:::-;44171:41;;44109:115;44285:23;44398:1;44365:17;44330:18;;44312:15;:36;;;;:::i;:::-;44311:71;;;;:::i;:::-;:88;;;;:::i;:::-;44285:114;;44410:26;44457:15;44439;:33;;;;:::i;:::-;44410:62;;44485:25;44513:21;44485:49;;44547:36;44564:18;44547:16;:36::i;:::-;44596:18;44641:17;44617:21;:41;;;;:::i;:::-;44596:62;;44671:22;44774:1;44753:18;;:22;;;;:::i;:::-;44732:17;:44;;;;:::i;:::-;44710:17;;44697:10;:30;;;;:::i;:::-;44696:81;;;;:::i;:::-;44671:106;;44798:23;44837:14;44824:10;:27;;;;:::i;:::-;44798:53;;44886:1;44868:15;:19;:42;;;;;44909:1;44891:15;:19;44868:42;44864:278;;;44927:46;44940:15;44957;44927:12;:46::i;:::-;44993:137;45026:18;45063:15;45097:18;;44993:137;;;;;;;;:::i;:::-;;;;;;;;44864:278;45175:1;45154:18;:22;;;;45207:1;45187:17;:21;;;;45243:14;45235:28;;45271:21;45235:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45221:76;;;;;43825:1480;;;;;;;;;43797:1508;:::o;20168:125::-;;;;:::o;20897:124::-;;;;:::o;42662:606::-;42788:21;42826:1;42812:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42788:40;;42857:4;42839;42844:1;42839:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42883:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42873:4;42878:1;42873:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42918:62;42935:4;42950:15;42968:11;42918:8;:62::i;:::-;43019:15;:66;;;43100:11;43126:1;43187:4;43214;43234:15;43019:241;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42717:551;42662:606;:::o;43276:513::-;43424:62;43441:4;43456:15;43474:11;43424:8;:62::i;:::-;43529:15;:31;;;43568:9;43601:4;43621:11;43647:1;43690;43733:7;:5;:7::i;:::-;43755:15;43529:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43276:513;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:118::-;6253:24;6271:5;6253:24;:::i;:::-;6248:3;6241:37;6166:118;;:::o;6290:222::-;6383:4;6421:2;6410:9;6406:18;6398:26;;6434:71;6502:1;6491:9;6487:17;6478:6;6434:71;:::i;:::-;6290:222;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:474::-;7321:6;7329;7378:2;7366:9;7357:7;7353:23;7349:32;7346:119;;;7384:79;;:::i;:::-;7346:119;7504:1;7529:53;7574:7;7565:6;7554:9;7550:22;7529:53;:::i;:::-;7519:63;;7475:117;7631:2;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7602:118;7253:474;;;;;:::o;7733:180::-;7781:77;7778:1;7771:88;7878:4;7875:1;7868:15;7902:4;7899:1;7892:15;7919:320;7963:6;8000:1;7994:4;7990:12;7980:22;;8047:1;8041:4;8037:12;8068:18;8058:81;;8124:4;8116:6;8112:17;8102:27;;8058:81;8186:2;8178:6;8175:14;8155:18;8152:38;8149:84;;8205:18;;:::i;:::-;8149:84;7970:269;7919:320;;;:::o;8245:227::-;8385:34;8381:1;8373:6;8369:14;8362:58;8454:10;8449:2;8441:6;8437:15;8430:35;8245:227;:::o;8478:366::-;8620:3;8641:67;8705:2;8700:3;8641:67;:::i;:::-;8634:74;;8717:93;8806:3;8717:93;:::i;:::-;8835:2;8830:3;8826:12;8819:19;;8478:366;;;:::o;8850:419::-;9016:4;9054:2;9043:9;9039:18;9031:26;;9103:9;9097:4;9093:20;9089:1;9078:9;9074:17;9067:47;9131:131;9257:4;9131:131;:::i;:::-;9123:139;;8850:419;;;:::o;9275:180::-;9323:77;9320:1;9313:88;9420:4;9417:1;9410:15;9444:4;9441:1;9434:15;9461:191;9501:3;9520:20;9538:1;9520:20;:::i;:::-;9515:25;;9554:20;9572:1;9554:20;:::i;:::-;9549:25;;9597:1;9594;9590:9;9583:16;;9618:3;9615:1;9612:10;9609:36;;;9625:18;;:::i;:::-;9609:36;9461:191;;;;:::o;9658:182::-;9798:34;9794:1;9786:6;9782:14;9775:58;9658:182;:::o;9846:366::-;9988:3;10009:67;10073:2;10068:3;10009:67;:::i;:::-;10002:74;;10085:93;10174:3;10085:93;:::i;:::-;10203:2;10198:3;10194:12;10187:19;;9846:366;;;:::o;10218:419::-;10384:4;10422:2;10411:9;10407:18;10399:26;;10471:9;10465:4;10461:20;10457:1;10446:9;10442:17;10435:47;10499:131;10625:4;10499:131;:::i;:::-;10491:139;;10218:419;;;:::o;10643:181::-;10783:33;10779:1;10771:6;10767:14;10760:57;10643:181;:::o;10830:366::-;10972:3;10993:67;11057:2;11052:3;10993:67;:::i;:::-;10986:74;;11069:93;11158:3;11069:93;:::i;:::-;11187:2;11182:3;11178:12;11171:19;;10830:366;;;:::o;11202:419::-;11368:4;11406:2;11395:9;11391:18;11383:26;;11455:9;11449:4;11445:20;11441:1;11430:9;11426:17;11419:47;11483:131;11609:4;11483:131;:::i;:::-;11475:139;;11202:419;;;:::o;11627:147::-;11728:11;11765:3;11750:18;;11627:147;;;;:::o;11780:114::-;;:::o;11900:398::-;12059:3;12080:83;12161:1;12156:3;12080:83;:::i;:::-;12073:90;;12172:93;12261:3;12172:93;:::i;:::-;12290:1;12285:3;12281:11;12274:18;;11900:398;;;:::o;12304:379::-;12488:3;12510:147;12653:3;12510:147;:::i;:::-;12503:154;;12674:3;12667:10;;12304:379;;;:::o;12689:244::-;12829:34;12825:1;12817:6;12813:14;12806:58;12898:27;12893:2;12885:6;12881:15;12874:52;12689:244;:::o;12939:366::-;13081:3;13102:67;13166:2;13161:3;13102:67;:::i;:::-;13095:74;;13178:93;13267:3;13178:93;:::i;:::-;13296:2;13291:3;13287:12;13280:19;;12939:366;;;:::o;13311:419::-;13477:4;13515:2;13504:9;13500:18;13492:26;;13564:9;13558:4;13554:20;13550:1;13539:9;13535:17;13528:47;13592:131;13718:4;13592:131;:::i;:::-;13584:139;;13311:419;;;:::o;13736:224::-;13876:34;13872:1;13864:6;13860:14;13853:58;13945:7;13940:2;13932:6;13928:15;13921:32;13736:224;:::o;13966:366::-;14108:3;14129:67;14193:2;14188:3;14129:67;:::i;:::-;14122:74;;14205:93;14294:3;14205:93;:::i;:::-;14323:2;14318:3;14314:12;14307:19;;13966:366;;;:::o;14338:419::-;14504:4;14542:2;14531:9;14527:18;14519:26;;14591:9;14585:4;14581:20;14577:1;14566:9;14562:17;14555:47;14619:131;14745:4;14619:131;:::i;:::-;14611:139;;14338:419;;;:::o;14763:176::-;14903:28;14899:1;14891:6;14887:14;14880:52;14763:176;:::o;14945:366::-;15087:3;15108:67;15172:2;15167:3;15108:67;:::i;:::-;15101:74;;15184:93;15273:3;15184:93;:::i;:::-;15302:2;15297:3;15293:12;15286:19;;14945:366;;;:::o;15317:419::-;15483:4;15521:2;15510:9;15506:18;15498:26;;15570:9;15564:4;15560:20;15556:1;15545:9;15541:17;15534:47;15598:131;15724:4;15598:131;:::i;:::-;15590:139;;15317:419;;;:::o;15742:143::-;15799:5;15830:6;15824:13;15815:22;;15846:33;15873:5;15846:33;:::i;:::-;15742:143;;;;:::o;15891:351::-;15961:6;16010:2;15998:9;15989:7;15985:23;15981:32;15978:119;;;16016:79;;:::i;:::-;15978:119;16136:1;16161:64;16217:7;16208:6;16197:9;16193:22;16161:64;:::i;:::-;16151:74;;16107:128;15891:351;;;;:::o;16248:332::-;16369:4;16407:2;16396:9;16392:18;16384:26;;16420:71;16488:1;16477:9;16473:17;16464:6;16420:71;:::i;:::-;16501:72;16569:2;16558:9;16554:18;16545:6;16501:72;:::i;:::-;16248:332;;;;;:::o;16586:137::-;16640:5;16671:6;16665:13;16656:22;;16687:30;16711:5;16687:30;:::i;:::-;16586:137;;;;:::o;16729:345::-;16796:6;16845:2;16833:9;16824:7;16820:23;16816:32;16813:119;;;16851:79;;:::i;:::-;16813:119;16971:1;16996:61;17049:7;17040:6;17029:9;17025:22;16996:61;:::i;:::-;16986:71;;16942:125;16729:345;;;;:::o;17080:233::-;17220:34;17216:1;17208:6;17204:14;17197:58;17289:16;17284:2;17276:6;17272:15;17265:41;17080:233;:::o;17319:366::-;17461:3;17482:67;17546:2;17541:3;17482:67;:::i;:::-;17475:74;;17558:93;17647:3;17558:93;:::i;:::-;17676:2;17671:3;17667:12;17660:19;;17319:366;;;:::o;17691:419::-;17857:4;17895:2;17884:9;17880:18;17872:26;;17944:9;17938:4;17934:20;17930:1;17919:9;17915:17;17908:47;17972:131;18098:4;17972:131;:::i;:::-;17964:139;;17691:419;;;:::o;18116:225::-;18256:34;18252:1;18244:6;18240:14;18233:58;18325:8;18320:2;18312:6;18308:15;18301:33;18116:225;:::o;18347:366::-;18489:3;18510:67;18574:2;18569:3;18510:67;:::i;:::-;18503:74;;18586:93;18675:3;18586:93;:::i;:::-;18704:2;18699:3;18695:12;18688:19;;18347:366;;;:::o;18719:419::-;18885:4;18923:2;18912:9;18908:18;18900:26;;18972:9;18966:4;18962:20;18958:1;18947:9;18943:17;18936:47;19000:131;19126:4;19000:131;:::i;:::-;18992:139;;18719:419;;;:::o;19144:223::-;19284:34;19280:1;19272:6;19268:14;19261:58;19353:6;19348:2;19340:6;19336:15;19329:31;19144:223;:::o;19373:366::-;19515:3;19536:67;19600:2;19595:3;19536:67;:::i;:::-;19529:74;;19612:93;19701:3;19612:93;:::i;:::-;19730:2;19725:3;19721:12;19714:19;;19373:366;;;:::o;19745:419::-;19911:4;19949:2;19938:9;19934:18;19926:26;;19998:9;19992:4;19988:20;19984:1;19973:9;19969:17;19962:47;20026:131;20152:4;20026:131;:::i;:::-;20018:139;;19745:419;;;:::o;20170:221::-;20310:34;20306:1;20298:6;20294:14;20287:58;20379:4;20374:2;20366:6;20362:15;20355:29;20170:221;:::o;20397:366::-;20539:3;20560:67;20624:2;20619:3;20560:67;:::i;:::-;20553:74;;20636:93;20725:3;20636:93;:::i;:::-;20754:2;20749:3;20745:12;20738:19;;20397:366;;;:::o;20769:419::-;20935:4;20973:2;20962:9;20958:18;20950:26;;21022:9;21016:4;21012:20;21008:1;20997:9;20993:17;20986:47;21050:131;21176:4;21050:131;:::i;:::-;21042:139;;20769:419;;;:::o;21194:224::-;21334:34;21330:1;21322:6;21318:14;21311:58;21403:7;21398:2;21390:6;21386:15;21379:32;21194:224;:::o;21424:366::-;21566:3;21587:67;21651:2;21646:3;21587:67;:::i;:::-;21580:74;;21663:93;21752:3;21663:93;:::i;:::-;21781:2;21776:3;21772:12;21765:19;;21424:366;;;:::o;21796:419::-;21962:4;22000:2;21989:9;21985:18;21977:26;;22049:9;22043:4;22039:20;22035:1;22024:9;22020:17;22013:47;22077:131;22203:4;22077:131;:::i;:::-;22069:139;;21796:419;;;:::o;22221:222::-;22361:34;22357:1;22349:6;22345:14;22338:58;22430:5;22425:2;22417:6;22413:15;22406:30;22221:222;:::o;22449:366::-;22591:3;22612:67;22676:2;22671:3;22612:67;:::i;:::-;22605:74;;22688:93;22777:3;22688:93;:::i;:::-;22806:2;22801:3;22797:12;22790:19;;22449:366;;;:::o;22821:419::-;22987:4;23025:2;23014:9;23010:18;23002:26;;23074:9;23068:4;23064:20;23060:1;23049:9;23045:17;23038:47;23102:131;23228:4;23102:131;:::i;:::-;23094:139;;22821:419;;;:::o;23246:168::-;23386:20;23382:1;23374:6;23370:14;23363:44;23246:168;:::o;23420:366::-;23562:3;23583:67;23647:2;23642:3;23583:67;:::i;:::-;23576:74;;23659:93;23748:3;23659:93;:::i;:::-;23777:2;23772:3;23768:12;23761:19;;23420:366;;;:::o;23792:419::-;23958:4;23996:2;23985:9;23981:18;23973:26;;24045:9;24039:4;24035:20;24031:1;24020:9;24016:17;24009:47;24073:131;24199:4;24073:131;:::i;:::-;24065:139;;23792:419;;;:::o;24217:170::-;24357:22;24353:1;24345:6;24341:14;24334:46;24217:170;:::o;24393:366::-;24535:3;24556:67;24620:2;24615:3;24556:67;:::i;:::-;24549:74;;24632:93;24721:3;24632:93;:::i;:::-;24750:2;24745:3;24741:12;24734:19;;24393:366;;;:::o;24765:419::-;24931:4;24969:2;24958:9;24954:18;24946:26;;25018:9;25012:4;25008:20;25004:1;24993:9;24989:17;24982:47;25046:131;25172:4;25046:131;:::i;:::-;25038:139;;24765:419;;;:::o;25190:172::-;25330:24;25326:1;25318:6;25314:14;25307:48;25190:172;:::o;25368:366::-;25510:3;25531:67;25595:2;25590:3;25531:67;:::i;:::-;25524:74;;25607:93;25696:3;25607:93;:::i;:::-;25725:2;25720:3;25716:12;25709:19;;25368:366;;;:::o;25740:419::-;25906:4;25944:2;25933:9;25929:18;25921:26;;25993:9;25987:4;25983:20;25979:1;25968:9;25964:17;25957:47;26021:131;26147:4;26021:131;:::i;:::-;26013:139;;25740:419;;;:::o;26165:240::-;26305:34;26301:1;26293:6;26289:14;26282:58;26374:23;26369:2;26361:6;26357:15;26350:48;26165:240;:::o;26411:366::-;26553:3;26574:67;26638:2;26633:3;26574:67;:::i;:::-;26567:74;;26650:93;26739:3;26650:93;:::i;:::-;26768:2;26763:3;26759:12;26752:19;;26411:366;;;:::o;26783:419::-;26949:4;26987:2;26976:9;26972:18;26964:26;;27036:9;27030:4;27026:20;27022:1;27011:9;27007:17;27000:47;27064:131;27190:4;27064:131;:::i;:::-;27056:139;;26783:419;;;:::o;27208:169::-;27348:21;27344:1;27336:6;27332:14;27325:45;27208:169;:::o;27383:366::-;27525:3;27546:67;27610:2;27605:3;27546:67;:::i;:::-;27539:74;;27622:93;27711:3;27622:93;:::i;:::-;27740:2;27735:3;27731:12;27724:19;;27383:366;;;:::o;27755:419::-;27921:4;27959:2;27948:9;27944:18;27936:26;;28008:9;28002:4;27998:20;27994:1;27983:9;27979:17;27972:47;28036:131;28162:4;28036:131;:::i;:::-;28028:139;;27755:419;;;:::o;28180:241::-;28320:34;28316:1;28308:6;28304:14;28297:58;28389:24;28384:2;28376:6;28372:15;28365:49;28180:241;:::o;28427:366::-;28569:3;28590:67;28654:2;28649:3;28590:67;:::i;:::-;28583:74;;28666:93;28755:3;28666:93;:::i;:::-;28784:2;28779:3;28775:12;28768:19;;28427:366;;;:::o;28799:419::-;28965:4;29003:2;28992:9;28988:18;28980:26;;29052:9;29046:4;29042:20;29038:1;29027:9;29023:17;29016:47;29080:131;29206:4;29080:131;:::i;:::-;29072:139;;28799:419;;;:::o;29224:410::-;29264:7;29287:20;29305:1;29287:20;:::i;:::-;29282:25;;29321:20;29339:1;29321:20;:::i;:::-;29316:25;;29376:1;29373;29369:9;29398:30;29416:11;29398:30;:::i;:::-;29387:41;;29577:1;29568:7;29564:15;29561:1;29558:22;29538:1;29531:9;29511:83;29488:139;;29607:18;;:::i;:::-;29488:139;29272:362;29224:410;;;;:::o;29640:180::-;29688:77;29685:1;29678:88;29785:4;29782:1;29775:15;29809:4;29806:1;29799:15;29826:185;29866:1;29883:20;29901:1;29883:20;:::i;:::-;29878:25;;29917:20;29935:1;29917:20;:::i;:::-;29912:25;;29956:1;29946:35;;29961:18;;:::i;:::-;29946:35;30003:1;30000;29996:9;29991:14;;29826:185;;;;:::o;30017:194::-;30057:4;30077:20;30095:1;30077:20;:::i;:::-;30072:25;;30111:20;30129:1;30111:20;:::i;:::-;30106:25;;30155:1;30152;30148:9;30140:17;;30179:1;30173:4;30170:11;30167:37;;;30184:18;;:::i;:::-;30167:37;30017:194;;;;:::o;30217:225::-;30357:34;30353:1;30345:6;30341:14;30334:58;30426:8;30421:2;30413:6;30409:15;30402:33;30217:225;:::o;30448:366::-;30590:3;30611:67;30675:2;30670:3;30611:67;:::i;:::-;30604:74;;30687:93;30776:3;30687:93;:::i;:::-;30805:2;30800:3;30796:12;30789:19;;30448:366;;;:::o;30820:419::-;30986:4;31024:2;31013:9;31009:18;31001:26;;31073:9;31067:4;31063:20;31059:1;31048:9;31044:17;31037:47;31101:131;31227:4;31101:131;:::i;:::-;31093:139;;30820:419;;;:::o;31245:442::-;31394:4;31432:2;31421:9;31417:18;31409:26;;31445:71;31513:1;31502:9;31498:17;31489:6;31445:71;:::i;:::-;31526:72;31594:2;31583:9;31579:18;31570:6;31526:72;:::i;:::-;31608;31676:2;31665:9;31661:18;31652:6;31608:72;:::i;:::-;31245:442;;;;;;:::o;31693:180::-;31741:77;31738:1;31731:88;31838:4;31835:1;31828:15;31862:4;31859:1;31852:15;31879:180;31927:77;31924:1;31917:88;32024:4;32021:1;32014:15;32048:4;32045:1;32038:15;32065:143;32122:5;32153:6;32147:13;32138:22;;32169:33;32196:5;32169:33;:::i;:::-;32065:143;;;;:::o;32214:351::-;32284:6;32333:2;32321:9;32312:7;32308:23;32304:32;32301:119;;;32339:79;;:::i;:::-;32301:119;32459:1;32484:64;32540:7;32531:6;32520:9;32516:22;32484:64;:::i;:::-;32474:74;;32430:128;32214:351;;;;:::o;32571:85::-;32616:7;32645:5;32634:16;;32571:85;;;:::o;32662:158::-;32720:9;32753:61;32771:42;32780:32;32806:5;32780:32;:::i;:::-;32771:42;:::i;:::-;32753:61;:::i;:::-;32740:74;;32662:158;;;:::o;32826:147::-;32921:45;32960:5;32921:45;:::i;:::-;32916:3;32909:58;32826:147;;:::o;32979:114::-;33046:6;33080:5;33074:12;33064:22;;32979:114;;;:::o;33099:184::-;33198:11;33232:6;33227:3;33220:19;33272:4;33267:3;33263:14;33248:29;;33099:184;;;;:::o;33289:132::-;33356:4;33379:3;33371:11;;33409:4;33404:3;33400:14;33392:22;;33289:132;;;:::o;33427:108::-;33504:24;33522:5;33504:24;:::i;:::-;33499:3;33492:37;33427:108;;:::o;33541:179::-;33610:10;33631:46;33673:3;33665:6;33631:46;:::i;:::-;33709:4;33704:3;33700:14;33686:28;;33541:179;;;;:::o;33726:113::-;33796:4;33828;33823:3;33819:14;33811:22;;33726:113;;;:::o;33875:732::-;33994:3;34023:54;34071:5;34023:54;:::i;:::-;34093:86;34172:6;34167:3;34093:86;:::i;:::-;34086:93;;34203:56;34253:5;34203:56;:::i;:::-;34282:7;34313:1;34298:284;34323:6;34320:1;34317:13;34298:284;;;34399:6;34393:13;34426:63;34485:3;34470:13;34426:63;:::i;:::-;34419:70;;34512:60;34565:6;34512:60;:::i;:::-;34502:70;;34358:224;34345:1;34342;34338:9;34333:14;;34298:284;;;34302:14;34598:3;34591:10;;33999:608;;;33875:732;;;;:::o;34613:831::-;34876:4;34914:3;34903:9;34899:19;34891:27;;34928:71;34996:1;34985:9;34981:17;34972:6;34928:71;:::i;:::-;35009:80;35085:2;35074:9;35070:18;35061:6;35009:80;:::i;:::-;35136:9;35130:4;35126:20;35121:2;35110:9;35106:18;35099:48;35164:108;35267:4;35258:6;35164:108;:::i;:::-;35156:116;;35282:72;35350:2;35339:9;35335:18;35326:6;35282:72;:::i;:::-;35364:73;35432:3;35421:9;35417:19;35408:6;35364:73;:::i;:::-;34613:831;;;;;;;;:::o;35450:807::-;35699:4;35737:3;35726:9;35722:19;35714:27;;35751:71;35819:1;35808:9;35804:17;35795:6;35751:71;:::i;:::-;35832:72;35900:2;35889:9;35885:18;35876:6;35832:72;:::i;:::-;35914:80;35990:2;35979:9;35975:18;35966:6;35914:80;:::i;:::-;36004;36080:2;36069:9;36065:18;36056:6;36004:80;:::i;:::-;36094:73;36162:3;36151:9;36147:19;36138:6;36094:73;:::i;:::-;36177;36245:3;36234:9;36230:19;36221:6;36177:73;:::i;:::-;35450:807;;;;;;;;;:::o;36263:663::-;36351:6;36359;36367;36416:2;36404:9;36395:7;36391:23;36387:32;36384:119;;;36422:79;;:::i;:::-;36384:119;36542:1;36567:64;36623:7;36614:6;36603:9;36599:22;36567:64;:::i;:::-;36557:74;;36513:128;36680:2;36706:64;36762:7;36753:6;36742:9;36738:22;36706:64;:::i;:::-;36696:74;;36651:129;36819:2;36845:64;36901:7;36892:6;36881:9;36877:22;36845:64;:::i;:::-;36835:74;;36790:129;36263:663;;;;;:::o

Swarm Source

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