ETH Price: $3,237.64 (-1.50%)

Token

BetTensor (BAO)
 

Overview

Max Total Supply

100,000,000 BAO

Holders

35

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*我起床就是干.eth
Balance
0.000000000000000001 BAO

Value
$0.00
0x136fEf1c0b88b5E226b169d237568373369e8866
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:
BetTensor

Compiler Version
v0.8.27+commit.40a35a09

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-24
*/

// SPDX-License-Identifier: MIT

/**

Website: https://www.bettensor.ai
Telegram: https://t.me/BetTensor
Twitter: https://x.com/BettensorERC20

**/

pragma solidity ^0.8.10;

pragma experimental ABIEncoderV2;

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

/* pragma solidity ^0.8.0; */

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

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

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

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

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

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

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

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0x000000000000000000000000000000000000dEaD);
    address public ETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    bool private swapping;
    
    uint256 public genesis_block;

    address public deployerAddress;
    address public lpLocker;

    address private devWallet;
    address private MarketingWallet;

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

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buydevfee;
    uint256 public buyLiquidityFee;
    uint256 public buyMarketingfee;

    uint256 public sellTotalFees;
    uint256 public selldevfee;
    uint256 public sellLiquidityFee;
    uint256 public sellMarketingfee;

    /******************/

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


    event ExcludeFromFees(address indexed account, bool isExcluded);

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
        event MarketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );


    constructor() ERC20("BetTensor", "BAO") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), ETH);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);


        uint256 _buydevfee = 25;
        uint256 _buyMarketingfee = 0;
        uint256 _buyLiquidityFee = 0;

        uint256 _selldevfee = 25;
        uint256 _sellMarketingfee = 0;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransactionAmount =  totalSupply * 10 / 1000; // 1% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buydevfee = _buydevfee;
        buyMarketingfee = _buyMarketingfee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buydevfee + buyMarketingfee + buyLiquidityFee;

        selldevfee = _selldevfee;
        sellMarketingfee = _sellMarketingfee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = selldevfee + sellMarketingfee + sellLiquidityFee;

        devWallet = address(0x54a8EdEFA74493A499AE15FE0d41bBAed42FaC31);
        MarketingWallet = address(0x54a8EdEFA74493A499AE15FE0d41bBAed42FaC31);
        deployerAddress = address(0x54a8EdEFA74493A499AE15FE0d41bBAed42FaC31); 
        lpLocker = address(msg.sender); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdEaD), true);
        excludeFromFees(deployerAddress, true); // Deployer Address
        excludeFromFees(lpLocker, true); // LP Locker

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdEaD), true);
        excludeFromMaxTransaction(deployerAddress, true); // Deployer Address
        excludeFromMaxTransaction(lpLocker, true); // LP Locker

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

    // once enabled, can never be turned off
    function readySetBet() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

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

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _devfee,
        uint256 _marketingfee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buydevfee = _devfee;
        buyMarketingfee = _marketingfee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buydevfee  + buyMarketingfee + buyLiquidityFee;
        require(buyTotalFees <= 99, "Must keep fees at 10% or less");
    }

    function updateSellFees(
        uint256 _devfee,
        uint256 _marketingfee,
        uint256 _liquidityFee
    ) external onlyOwner {
        selldevfee = _devfee;
        sellMarketingfee = _marketingfee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = selldevfee  + sellMarketingfee + sellLiquidityFee;
        require(sellTotalFees <= 99, "Must keep fees at 10% or less");
    }

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

    function updateDevWallet(address newDevWallet)
        external
        onlyOwner
    {
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit MarketingWalletUpdated(newMarketingWallet, MarketingWallet);
        MarketingWallet = newMarketingWallet;
    }


    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[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");

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

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                //when buy
                if (
                    from == uniswapV2Pair &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                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 &&
            to == uniswapV2Pair &&
            !_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;
        uint256 tokensForLiquidity = 0;
        uint256 tokensForDev = 0;
        uint256 tokensForMarketing = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev = (fees * selldevfee) / sellTotalFees;
                tokensForMarketing = (fees * sellMarketingfee) / sellTotalFees;
            }
            // on buy
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees; 
                tokensForDev = (fees * buydevfee) / buyTotalFees;
                tokensForMarketing = (fees * buyMarketingfee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

    // make the swap
    uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
        tokenAmount,
        0, // accept any amount of WETH
        path,
        devWallet,
        block.timestamp
    );


    payable(MarketingWallet).transfer(address(this).balance);
}


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

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

        swapTokensForETH(contractBalance);
    }

}

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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingfee","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":"buydevfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deployerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpLocker","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"readySetBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"selldevfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devfee","type":"uint256"},{"internalType":"uint256","name":"_marketingfee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devfee","type":"uint256"},{"internalType":"uint256","name":"_marketingfee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff0219169083151502179055503480156100b2575f5ffd5b506040518060400160405280600981526020017f42657454656e736f7200000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f42414f0000000000000000000000000000000000000000000000000000000000815250816003908161012e9190610d50565b50806004908161013e9190610d50565b50505061015d6101526106a660201b60201c565b6106ad60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061018681600161077060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610203573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102279190610e7d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610282929190610eb7565b6020604051808303815f875af115801561029e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102c29190610e7d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061030860a051600161077060201b60201c565b5f601990505f5f90505f5f90505f601990505f5f90505f5f90505f6a52b7d2dcc80cd2e400000090506103e8600a826103419190610f0b565b61034b9190610f79565b600c819055506103e86014826103619190610f0b565b61036b9190610f79565b600e819055506127106005826103819190610f0b565b61038b9190610f79565b600d819055508660118190555085601381905550846012819055506012546013546011546103b99190610fa9565b6103c39190610fa9565b6010819055508360158190555082601781905550816016819055506016546017546015546103f19190610fa9565b6103fb9190610fa9565b6014819055507354a8edefa74493a499ae15fe0d41bbaed42fac31600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507354a8edefa74493a499ae15fe0d41bbaed42fac31600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507354a8edefa74493a499ae15fe0d41bbaed42fac3160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061055b61054e61085060201b60201c565b600161087860201b60201c565b61056c30600161087860201b60201c565b61057f61dead600161087860201b60201c565b6105b160085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161087860201b60201c565b6105e360095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161087860201b60201c565b6106016105f461085060201b60201c565b600161077060201b60201c565b61061230600161077060201b60201c565b61062561dead600161077060201b60201c565b61065760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161077060201b60201c565b61068960095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161077060201b60201c565b61069933826109a660201b60201c565b5050505050505050611117565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61077e6106a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166107a261085060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146107f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ef90611036565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108866106a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166108aa61085060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790611036565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161099a919061106e565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b906110d1565b60405180910390fd5b610a255f8383610b0960201b60201c565b8060025f828254610a369190610fa9565b92505081905550805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a889190610fa9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610aec91906110fe565b60405180910390a3610b055f8383610b0e60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610b8e57607f821691505b602082108103610ba157610ba0610b4a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610bc8565b610c0d8683610bc8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610c51610c4c610c4784610c25565b610c2e565b610c25565b9050919050565b5f819050919050565b610c6a83610c37565b610c7e610c7682610c58565b848454610bd4565b825550505050565b5f5f905090565b610c95610c86565b610ca0818484610c61565b505050565b5b81811015610cc357610cb85f82610c8d565b600181019050610ca6565b5050565b601f821115610d0857610cd981610ba7565b610ce284610bb9565b81016020851015610cf1578190505b610d05610cfd85610bb9565b830182610ca5565b50505b505050565b5f82821c905092915050565b5f610d285f1984600802610d0d565b1980831691505092915050565b5f610d408383610d19565b9150826002028217905092915050565b610d5982610b13565b67ffffffffffffffff811115610d7257610d71610b1d565b5b610d7c8254610b77565b610d87828285610cc7565b5f60209050601f831160018114610db8575f8415610da6578287015190505b610db08582610d35565b865550610e17565b601f198416610dc686610ba7565b5f5b82811015610ded57848901518255600182019150602085019450602081019050610dc8565b86831015610e0a5784890151610e06601f891682610d19565b8355505b6001600288020188555050505b505050505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e4c82610e23565b9050919050565b610e5c81610e42565b8114610e66575f5ffd5b50565b5f81519050610e7781610e53565b92915050565b5f60208284031215610e9257610e91610e1f565b5b5f610e9f84828501610e69565b91505092915050565b610eb181610e42565b82525050565b5f604082019050610eca5f830185610ea8565b610ed76020830184610ea8565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f1582610c25565b9150610f2083610c25565b9250828202610f2e81610c25565b91508282048414831517610f4557610f44610ede565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610f8382610c25565b9150610f8e83610c25565b925082610f9e57610f9d610f4c565b5b828204905092915050565b5f610fb382610c25565b9150610fbe83610c25565b9250828201905080821115610fd657610fd5610ede565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611020602083610fdc565b915061102b82610fec565b602082019050919050565b5f6020820190508181035f83015261104d81611014565b9050919050565b5f8115159050919050565b61106881611054565b82525050565b5f6020820190506110815f83018461105f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6110bb601f83610fdc565b91506110c682611087565b602082019050919050565b5f6020820190508181035f8301526110e8816110af565b9050919050565b6110f881610c25565b82525050565b5f6020820190506111115f8301846110ef565b92915050565b60805160a051613e286111695f395f8181610f1f015281816121a1015281816123e2015281816125e9015281816126d001526127d401525f8181610b9101528181612cec0152612d130152613e285ff3fe60806040526004361061028b575f3560e01c8063751039fc11610159578063c17b5b8c116100c0578063e2f4560511610079578063e2f45605146109a6578063efdee94f146109d0578063f11a24d3146109fa578063f2fde38b14610a24578063f637434214610a4c578063f8b45b0514610a7657610292565b8063c17b5b8c1461088a578063c18bc195146108b2578063c8c8ebe4146108da578063d257b34f14610904578063d85ba06314610940578063dd62ed3e1461096a57610292565b8063924de9b711610112578063924de9b71461078257806395d89b41146107aa578063a9059cbb146107d4578063aacebbe314610810578063bbc0c74214610838578063c02466681461086257610292565b8063751039fc1461069e5780637571336a146106c85780638095d564146106f05780638219b0c4146107185780638322fff21461072e5780638da5cb5b1461075857610292565b8063313ce567116101fd5780634fbee193116101b65780634fbee1931461059257806365c1bef8146105ce5780636a486a8e146105f85780636ddd17131461062257806370a082311461064c578063715018a61461068857610292565b8063313ce567146104965780634853e7d9146104c0578063489ae78d146104ea57806348c492d61461051457806349bd5a5e1461053e5780634a62bb651461056857610292565b806318160ddd1161024f57806318160ddd1461038c5780631816467f146103b6578063203e727e146103de57806323b872dd14610406578063274a533c1461044257806327c8f8351461046c57610292565b806303fc20131461029657806306fdde03146102c0578063095ea7b3146102ea57806310d5de53146103265780631694505e1461036257610292565b3661029257005b5f5ffd5b3480156102a1575f5ffd5b506102aa610aa0565b6040516102b79190612e68565b60405180910390f35b3480156102cb575f5ffd5b506102d4610ac5565b6040516102e19190612ef1565b60405180910390f35b3480156102f5575f5ffd5b50610310600480360381019061030b9190612f72565b610b55565b60405161031d9190612fca565b60405180910390f35b348015610331575f5ffd5b5061034c60048036038101906103479190612fe3565b610b72565b6040516103599190612fca565b60405180910390f35b34801561036d575f5ffd5b50610376610b8f565b6040516103839190613069565b60405180910390f35b348015610397575f5ffd5b506103a0610bb3565b6040516103ad9190613091565b60405180910390f35b3480156103c1575f5ffd5b506103dc60048036038101906103d79190612fe3565b610bbc565b005b3480156103e9575f5ffd5b5061040460048036038101906103ff91906130aa565b610cf6565b005b348015610411575f5ffd5b5061042c600480360381019061042791906130d5565b610e05565b6040516104399190612fca565b60405180910390f35b34801561044d575f5ffd5b50610456610ef7565b6040516104639190613091565b60405180910390f35b348015610477575f5ffd5b50610480610efd565b60405161048d9190612e68565b60405180910390f35b3480156104a1575f5ffd5b506104aa610f03565b6040516104b79190613140565b60405180910390f35b3480156104cb575f5ffd5b506104d4610f0b565b6040516104e19190613091565b60405180910390f35b3480156104f5575f5ffd5b506104fe610f11565b60405161050b9190613091565b60405180910390f35b34801561051f575f5ffd5b50610528610f17565b6040516105359190613091565b60405180910390f35b348015610549575f5ffd5b50610552610f1d565b60405161055f9190612e68565b60405180910390f35b348015610573575f5ffd5b5061057c610f41565b6040516105899190612fca565b60405180910390f35b34801561059d575f5ffd5b506105b860048036038101906105b39190612fe3565b610f53565b6040516105c59190612fca565b60405180910390f35b3480156105d9575f5ffd5b506105e2610fa5565b6040516105ef9190613091565b60405180910390f35b348015610603575f5ffd5b5061060c610fab565b6040516106199190613091565b60405180910390f35b34801561062d575f5ffd5b50610636610fb1565b6040516106439190612fca565b60405180910390f35b348015610657575f5ffd5b50610672600480360381019061066d9190612fe3565b610fc4565b60405161067f9190613091565b60405180910390f35b348015610693575f5ffd5b5061069c611009565b005b3480156106a9575f5ffd5b506106b2611090565b6040516106bf9190612fca565b60405180910390f35b3480156106d3575f5ffd5b506106ee60048036038101906106e99190613183565b61112d565b005b3480156106fb575f5ffd5b50610716600480360381019061071191906131c1565b611201565b005b348015610723575f5ffd5b5061072c611300565b005b348015610739575f5ffd5b506107426113b4565b60405161074f9190612e68565b60405180910390f35b348015610763575f5ffd5b5061076c6113d9565b6040516107799190612e68565b60405180910390f35b34801561078d575f5ffd5b506107a860048036038101906107a39190613211565b611401565b005b3480156107b5575f5ffd5b506107be61149a565b6040516107cb9190612ef1565b60405180910390f35b3480156107df575f5ffd5b506107fa60048036038101906107f59190612f72565b61152a565b6040516108079190612fca565b60405180910390f35b34801561081b575f5ffd5b5061083660048036038101906108319190612fe3565b611547565b005b348015610843575f5ffd5b5061084c611681565b6040516108599190612fca565b60405180910390f35b34801561086d575f5ffd5b5061088860048036038101906108839190613183565b611694565b005b348015610895575f5ffd5b506108b060048036038101906108ab91906131c1565b6117b6565b005b3480156108bd575f5ffd5b506108d860048036038101906108d391906130aa565b6118b5565b005b3480156108e5575f5ffd5b506108ee6119c4565b6040516108fb9190613091565b60405180910390f35b34801561090f575f5ffd5b5061092a600480360381019061092591906130aa565b6119ca565b6040516109379190612fca565b60405180910390f35b34801561094b575f5ffd5b50610954611b1e565b6040516109619190613091565b60405180910390f35b348015610975575f5ffd5b50610990600480360381019061098b919061323c565b611b24565b60405161099d9190613091565b60405180910390f35b3480156109b1575f5ffd5b506109ba611ba6565b6040516109c79190613091565b60405180910390f35b3480156109db575f5ffd5b506109e4611bac565b6040516109f19190612e68565b60405180910390f35b348015610a05575f5ffd5b50610a0e611bd1565b604051610a1b9190613091565b60405180910390f35b348015610a2f575f5ffd5b50610a4a6004803603810190610a459190612fe3565b611bd7565b005b348015610a57575f5ffd5b50610a60611ccd565b604051610a6d9190613091565b60405180910390f35b348015610a81575f5ffd5b50610a8a611cd3565b604051610a979190613091565b60405180910390f35b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610ad4906132a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b00906132a7565b8015610b4b5780601f10610b2257610100808354040283529160200191610b4b565b820191905f5260205f20905b815481529060010190602001808311610b2e57829003601f168201915b5050505050905090565b5f610b68610b61611cd9565b8484611ce0565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610bc4611cd9565b73ffffffffffffffffffffffffffffffffffffffff16610be26113d9565b73ffffffffffffffffffffffffffffffffffffffff1614610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f90613321565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cfe611cd9565b73ffffffffffffffffffffffffffffffffffffffff16610d1c6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990613321565b60405180910390fd5b670de0b6b3a76400006103e86005610d88610bb3565b610d92919061336c565b610d9c91906133da565b610da691906133da565b811015610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf9061347a565b60405180910390fd5b670de0b6b3a764000081610dfc919061336c565b600c8190555050565b5f610e11848484611ea3565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e58611cd9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90613508565b60405180910390fd5b610eeb85610ee3611cd9565b858403611ce0565b60019150509392505050565b60075481565b61dead81565b5f6012905090565b60135481565b60115481565b60175481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b60145481565b600f60029054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611011611cd9565b73ffffffffffffffffffffffffffffffffffffffff1661102f6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c90613321565b60405180910390fd5b61108e5f612821565b565b5f611099611cd9565b73ffffffffffffffffffffffffffffffffffffffff166110b76113d9565b73ffffffffffffffffffffffffffffffffffffffff161461110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490613321565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b611135611cd9565b73ffffffffffffffffffffffffffffffffffffffff166111536113d9565b73ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090613321565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611209611cd9565b73ffffffffffffffffffffffffffffffffffffffff166112276113d9565b73ffffffffffffffffffffffffffffffffffffffff161461127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490613321565b60405180910390fd5b8260118190555081601381905550806012819055506012546013546011546112a59190613526565b6112af9190613526565b601081905550606360105411156112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f2906135a3565b60405180910390fd5b505050565b611308611cd9565b73ffffffffffffffffffffffffffffffffffffffff166113266113d9565b73ffffffffffffffffffffffffffffffffffffffff161461137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137390613321565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611409611cd9565b73ffffffffffffffffffffffffffffffffffffffff166114276113d9565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490613321565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6060600480546114a9906132a7565b80601f01602080910402602001604051908101604052809291908181526020018280546114d5906132a7565b80156115205780601f106114f757610100808354040283529160200191611520565b820191905f5260205f20905b81548152906001019060200180831161150357829003601f168201915b5050505050905090565b5f61153d611536611cd9565b8484611ea3565b6001905092915050565b61154f611cd9565b73ffffffffffffffffffffffffffffffffffffffff1661156d6113d9565b73ffffffffffffffffffffffffffffffffffffffff16146115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90613321565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60019054906101000a900460ff1681565b61169c611cd9565b73ffffffffffffffffffffffffffffffffffffffff166116ba6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170790613321565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117aa9190612fca565b60405180910390a25050565b6117be611cd9565b73ffffffffffffffffffffffffffffffffffffffff166117dc6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990613321565b60405180910390fd5b82601581905550816017819055508060168190555060165460175460155461185a9190613526565b6118649190613526565b601481905550606360145411156118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906135a3565b60405180910390fd5b505050565b6118bd611cd9565b73ffffffffffffffffffffffffffffffffffffffff166118db6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890613321565b60405180910390fd5b670de0b6b3a76400006103e86005611947610bb3565b611951919061336c565b61195b91906133da565b61196591906133da565b8110156119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e90613631565b60405180910390fd5b670de0b6b3a7640000816119bb919061336c565b600e8190555050565b600c5481565b5f6119d3611cd9565b73ffffffffffffffffffffffffffffffffffffffff166119f16113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90613321565b60405180910390fd5b620186a06001611a55610bb3565b611a5f919061336c565b611a6991906133da565b821015611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa2906136bf565b60405180910390fd5b6103e86005611ab8610bb3565b611ac2919061336c565b611acc91906133da565b821115611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b059061374d565b60405180910390fd5b81600d8190555060019050919050565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b611bdf611cd9565b73ffffffffffffffffffffffffffffffffffffffff16611bfd6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a90613321565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb8906137db565b60405180910390fd5b611cca81612821565b50565b60165481565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590613869565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db3906138f7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e969190613091565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890613985565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690613a13565b60405180910390fd5b5f8103611f9657611f9183835f6128e4565b61281c565b600f5f9054906101000a900460ff161561239257611fb26113d9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120205750611ff06113d9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561205857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612092575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120ab5750600660149054906101000a900460ff16155b1561239157600f60019054906101000a900460ff1661219f5760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061215f575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61219e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219590613a7b565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612241575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122e857600c5481111561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613b09565b60405180910390fd5b600e5461229783610fc4565b826122a29190613526565b11156122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90613b71565b60405180910390fd5b612390565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661238f57600e5461234283610fc4565b8261234d9190613526565b111561238e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590613b71565b60405180910390fd5b5b5b5b5b5f61239c30610fc4565b90505f600d5482101590508080156123c05750600f60029054906101000a900460ff165b80156123d95750600660149054906101000a900460ff16155b801561243057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612483575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156124d6575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612519576001600660146101000a81548160ff0219169083151502179055506124fe612b59565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125c8575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156125d1575f90505b5f5f90505f5f90505f5f90505f5f90508415612809577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561264357505f601454115b156126ce5761267060646126626014548b612ba790919063ffffffff16565b612bbc90919063ffffffff16565b935060145460165485612683919061336c565b61268d91906133da565b9250601454601554856126a0919061336c565b6126aa91906133da565b9150601454601754856126bd919061336c565b6126c791906133da565b90506127b2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614801561272a57505f601054115b156127b15761275760646127496010548b612ba790919063ffffffff16565b612bbc90919063ffffffff16565b93506010546012548561276a919061336c565b61277491906133da565b925060105460115485612787919061336c565b61279191906133da565b9150601054601354856127a4919061336c565b6127ae91906133da565b90505b5b5f8411156127c6576127c58a30866128e4565b5b5f8311156127fa576127f9307f0000000000000000000000000000000000000000000000000000000000000000856128e4565b5b83886128069190613b8f565b97505b6128148a8a8a6128e4565b505050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294990613985565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b790613a13565b60405180910390fd5b6129cb838383612bd1565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4590613c32565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612adc9190613526565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b409190613091565b60405180910390a3612b53848484612bd6565b50505050565b5f612b6330610fc4565b90505f8103612b725750612ba5565b6014600d54612b81919061336c565b811115612b9a576014600d54612b97919061336c565b90505b612ba381612bdb565b505b565b5f8183612bb4919061336c565b905092915050565b5f8183612bc991906133da565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115612bf757612bf6613c50565b5b604051908082528060200260200182016040528015612c255781602001602082028036833780820191505090505b50905030815f81518110612c3c57612c3b613c7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612cac57612cab613c7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d11307f000000000000000000000000000000000000000000000000000000000000000084611ce0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d795835f84600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612d93959493929190613d9a565b5f604051808303815f87803b158015612daa575f5ffd5b505af1158015612dbc573d5f5f3e3d5ffd5b50505050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015612e24573d5f5f3e3d5ffd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e5282612e29565b9050919050565b612e6281612e48565b82525050565b5f602082019050612e7b5f830184612e59565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612ec382612e81565b612ecd8185612e8b565b9350612edd818560208601612e9b565b612ee681612ea9565b840191505092915050565b5f6020820190508181035f830152612f098184612eb9565b905092915050565b5f5ffd5b612f1e81612e48565b8114612f28575f5ffd5b50565b5f81359050612f3981612f15565b92915050565b5f819050919050565b612f5181612f3f565b8114612f5b575f5ffd5b50565b5f81359050612f6c81612f48565b92915050565b5f5f60408385031215612f8857612f87612f11565b5b5f612f9585828601612f2b565b9250506020612fa685828601612f5e565b9150509250929050565b5f8115159050919050565b612fc481612fb0565b82525050565b5f602082019050612fdd5f830184612fbb565b92915050565b5f60208284031215612ff857612ff7612f11565b5b5f61300584828501612f2b565b91505092915050565b5f819050919050565b5f61303161302c61302784612e29565b61300e565b612e29565b9050919050565b5f61304282613017565b9050919050565b5f61305382613038565b9050919050565b61306381613049565b82525050565b5f60208201905061307c5f83018461305a565b92915050565b61308b81612f3f565b82525050565b5f6020820190506130a45f830184613082565b92915050565b5f602082840312156130bf576130be612f11565b5b5f6130cc84828501612f5e565b91505092915050565b5f5f5f606084860312156130ec576130eb612f11565b5b5f6130f986828701612f2b565b935050602061310a86828701612f2b565b925050604061311b86828701612f5e565b9150509250925092565b5f60ff82169050919050565b61313a81613125565b82525050565b5f6020820190506131535f830184613131565b92915050565b61316281612fb0565b811461316c575f5ffd5b50565b5f8135905061317d81613159565b92915050565b5f5f6040838503121561319957613198612f11565b5b5f6131a685828601612f2b565b92505060206131b78582860161316f565b9150509250929050565b5f5f5f606084860312156131d8576131d7612f11565b5b5f6131e586828701612f5e565b93505060206131f686828701612f5e565b925050604061320786828701612f5e565b9150509250925092565b5f6020828403121561322657613225612f11565b5b5f6132338482850161316f565b91505092915050565b5f5f6040838503121561325257613251612f11565b5b5f61325f85828601612f2b565b925050602061327085828601612f2b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132be57607f821691505b6020821081036132d1576132d061327a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61330b602083612e8b565b9150613316826132d7565b602082019050919050565b5f6020820190508181035f830152613338816132ff565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61337682612f3f565b915061338183612f3f565b925082820261338f81612f3f565b915082820484148315176133a6576133a561333f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6133e482612f3f565b91506133ef83612f3f565b9250826133ff576133fe6133ad565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613464602f83612e8b565b915061346f8261340a565b604082019050919050565b5f6020820190508181035f83015261349181613458565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6134f2602883612e8b565b91506134fd82613498565b604082019050919050565b5f6020820190508181035f83015261351f816134e6565b9050919050565b5f61353082612f3f565b915061353b83612f3f565b92508282019050808211156135535761355261333f565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f61358d601d83612e8b565b915061359882613559565b602082019050919050565b5f6020820190508181035f8301526135ba81613581565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61361b602483612e8b565b9150613626826135c1565b604082019050919050565b5f6020820190508181035f8301526136488161360f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6136a9603583612e8b565b91506136b48261364f565b604082019050919050565b5f6020820190508181035f8301526136d68161369d565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613737603483612e8b565b9150613742826136dd565b604082019050919050565b5f6020820190508181035f8301526137648161372b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6137c5602683612e8b565b91506137d08261376b565b604082019050919050565b5f6020820190508181035f8301526137f2816137b9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613853602483612e8b565b915061385e826137f9565b604082019050919050565b5f6020820190508181035f83015261388081613847565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138e1602283612e8b565b91506138ec82613887565b604082019050919050565b5f6020820190508181035f83015261390e816138d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61396f602583612e8b565b915061397a82613915565b604082019050919050565b5f6020820190508181035f83015261399c81613963565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6139fd602383612e8b565b9150613a08826139a3565b604082019050919050565b5f6020820190508181035f830152613a2a816139f1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613a65601683612e8b565b9150613a7082613a31565b602082019050919050565b5f6020820190508181035f830152613a9281613a59565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613af3603583612e8b565b9150613afe82613a99565b604082019050919050565b5f6020820190508181035f830152613b2081613ae7565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613b5b601383612e8b565b9150613b6682613b27565b602082019050919050565b5f6020820190508181035f830152613b8881613b4f565b9050919050565b5f613b9982612f3f565b9150613ba483612f3f565b9250828203905081811115613bbc57613bbb61333f565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613c1c602683612e8b565b9150613c2782613bc2565b604082019050919050565b5f6020820190508181035f830152613c4981613c10565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f613ccd613cc8613cc384613caa565b61300e565b612f3f565b9050919050565b613cdd81613cb3565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d1581612e48565b82525050565b5f613d268383613d0c565b60208301905092915050565b5f602082019050919050565b5f613d4882613ce3565b613d528185613ced565b9350613d5d83613cfd565b805f5b83811015613d8d578151613d748882613d1b565b9750613d7f83613d32565b925050600181019050613d60565b5085935050505092915050565b5f60a082019050613dad5f830188613082565b613dba6020830187613cd4565b8181036040830152613dcc8186613d3e565b9050613ddb6060830185612e59565b613de86080830184613082565b969550505050505056fea26469706673582212202b3616190a42c246c435953a70e4e461cfeffdf94c639a7ec7109a579443c91964736f6c634300081b0033

Deployed Bytecode

0x60806040526004361061028b575f3560e01c8063751039fc11610159578063c17b5b8c116100c0578063e2f4560511610079578063e2f45605146109a6578063efdee94f146109d0578063f11a24d3146109fa578063f2fde38b14610a24578063f637434214610a4c578063f8b45b0514610a7657610292565b8063c17b5b8c1461088a578063c18bc195146108b2578063c8c8ebe4146108da578063d257b34f14610904578063d85ba06314610940578063dd62ed3e1461096a57610292565b8063924de9b711610112578063924de9b71461078257806395d89b41146107aa578063a9059cbb146107d4578063aacebbe314610810578063bbc0c74214610838578063c02466681461086257610292565b8063751039fc1461069e5780637571336a146106c85780638095d564146106f05780638219b0c4146107185780638322fff21461072e5780638da5cb5b1461075857610292565b8063313ce567116101fd5780634fbee193116101b65780634fbee1931461059257806365c1bef8146105ce5780636a486a8e146105f85780636ddd17131461062257806370a082311461064c578063715018a61461068857610292565b8063313ce567146104965780634853e7d9146104c0578063489ae78d146104ea57806348c492d61461051457806349bd5a5e1461053e5780634a62bb651461056857610292565b806318160ddd1161024f57806318160ddd1461038c5780631816467f146103b6578063203e727e146103de57806323b872dd14610406578063274a533c1461044257806327c8f8351461046c57610292565b806303fc20131461029657806306fdde03146102c0578063095ea7b3146102ea57806310d5de53146103265780631694505e1461036257610292565b3661029257005b5f5ffd5b3480156102a1575f5ffd5b506102aa610aa0565b6040516102b79190612e68565b60405180910390f35b3480156102cb575f5ffd5b506102d4610ac5565b6040516102e19190612ef1565b60405180910390f35b3480156102f5575f5ffd5b50610310600480360381019061030b9190612f72565b610b55565b60405161031d9190612fca565b60405180910390f35b348015610331575f5ffd5b5061034c60048036038101906103479190612fe3565b610b72565b6040516103599190612fca565b60405180910390f35b34801561036d575f5ffd5b50610376610b8f565b6040516103839190613069565b60405180910390f35b348015610397575f5ffd5b506103a0610bb3565b6040516103ad9190613091565b60405180910390f35b3480156103c1575f5ffd5b506103dc60048036038101906103d79190612fe3565b610bbc565b005b3480156103e9575f5ffd5b5061040460048036038101906103ff91906130aa565b610cf6565b005b348015610411575f5ffd5b5061042c600480360381019061042791906130d5565b610e05565b6040516104399190612fca565b60405180910390f35b34801561044d575f5ffd5b50610456610ef7565b6040516104639190613091565b60405180910390f35b348015610477575f5ffd5b50610480610efd565b60405161048d9190612e68565b60405180910390f35b3480156104a1575f5ffd5b506104aa610f03565b6040516104b79190613140565b60405180910390f35b3480156104cb575f5ffd5b506104d4610f0b565b6040516104e19190613091565b60405180910390f35b3480156104f5575f5ffd5b506104fe610f11565b60405161050b9190613091565b60405180910390f35b34801561051f575f5ffd5b50610528610f17565b6040516105359190613091565b60405180910390f35b348015610549575f5ffd5b50610552610f1d565b60405161055f9190612e68565b60405180910390f35b348015610573575f5ffd5b5061057c610f41565b6040516105899190612fca565b60405180910390f35b34801561059d575f5ffd5b506105b860048036038101906105b39190612fe3565b610f53565b6040516105c59190612fca565b60405180910390f35b3480156105d9575f5ffd5b506105e2610fa5565b6040516105ef9190613091565b60405180910390f35b348015610603575f5ffd5b5061060c610fab565b6040516106199190613091565b60405180910390f35b34801561062d575f5ffd5b50610636610fb1565b6040516106439190612fca565b60405180910390f35b348015610657575f5ffd5b50610672600480360381019061066d9190612fe3565b610fc4565b60405161067f9190613091565b60405180910390f35b348015610693575f5ffd5b5061069c611009565b005b3480156106a9575f5ffd5b506106b2611090565b6040516106bf9190612fca565b60405180910390f35b3480156106d3575f5ffd5b506106ee60048036038101906106e99190613183565b61112d565b005b3480156106fb575f5ffd5b50610716600480360381019061071191906131c1565b611201565b005b348015610723575f5ffd5b5061072c611300565b005b348015610739575f5ffd5b506107426113b4565b60405161074f9190612e68565b60405180910390f35b348015610763575f5ffd5b5061076c6113d9565b6040516107799190612e68565b60405180910390f35b34801561078d575f5ffd5b506107a860048036038101906107a39190613211565b611401565b005b3480156107b5575f5ffd5b506107be61149a565b6040516107cb9190612ef1565b60405180910390f35b3480156107df575f5ffd5b506107fa60048036038101906107f59190612f72565b61152a565b6040516108079190612fca565b60405180910390f35b34801561081b575f5ffd5b5061083660048036038101906108319190612fe3565b611547565b005b348015610843575f5ffd5b5061084c611681565b6040516108599190612fca565b60405180910390f35b34801561086d575f5ffd5b5061088860048036038101906108839190613183565b611694565b005b348015610895575f5ffd5b506108b060048036038101906108ab91906131c1565b6117b6565b005b3480156108bd575f5ffd5b506108d860048036038101906108d391906130aa565b6118b5565b005b3480156108e5575f5ffd5b506108ee6119c4565b6040516108fb9190613091565b60405180910390f35b34801561090f575f5ffd5b5061092a600480360381019061092591906130aa565b6119ca565b6040516109379190612fca565b60405180910390f35b34801561094b575f5ffd5b50610954611b1e565b6040516109619190613091565b60405180910390f35b348015610975575f5ffd5b50610990600480360381019061098b919061323c565b611b24565b60405161099d9190613091565b60405180910390f35b3480156109b1575f5ffd5b506109ba611ba6565b6040516109c79190613091565b60405180910390f35b3480156109db575f5ffd5b506109e4611bac565b6040516109f19190612e68565b60405180910390f35b348015610a05575f5ffd5b50610a0e611bd1565b604051610a1b9190613091565b60405180910390f35b348015610a2f575f5ffd5b50610a4a6004803603810190610a459190612fe3565b611bd7565b005b348015610a57575f5ffd5b50610a60611ccd565b604051610a6d9190613091565b60405180910390f35b348015610a81575f5ffd5b50610a8a611cd3565b604051610a979190613091565b60405180910390f35b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610ad4906132a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b00906132a7565b8015610b4b5780601f10610b2257610100808354040283529160200191610b4b565b820191905f5260205f20905b815481529060010190602001808311610b2e57829003601f168201915b5050505050905090565b5f610b68610b61611cd9565b8484611ce0565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610bc4611cd9565b73ffffffffffffffffffffffffffffffffffffffff16610be26113d9565b73ffffffffffffffffffffffffffffffffffffffff1614610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f90613321565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cfe611cd9565b73ffffffffffffffffffffffffffffffffffffffff16610d1c6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990613321565b60405180910390fd5b670de0b6b3a76400006103e86005610d88610bb3565b610d92919061336c565b610d9c91906133da565b610da691906133da565b811015610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf9061347a565b60405180910390fd5b670de0b6b3a764000081610dfc919061336c565b600c8190555050565b5f610e11848484611ea3565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e58611cd9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90613508565b60405180910390fd5b610eeb85610ee3611cd9565b858403611ce0565b60019150509392505050565b60075481565b61dead81565b5f6012905090565b60135481565b60115481565b60175481565b7f000000000000000000000000cc1522ad799aeca893b4b6bce9c8141b462e0acc81565b600f5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b60145481565b600f60029054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611011611cd9565b73ffffffffffffffffffffffffffffffffffffffff1661102f6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c90613321565b60405180910390fd5b61108e5f612821565b565b5f611099611cd9565b73ffffffffffffffffffffffffffffffffffffffff166110b76113d9565b73ffffffffffffffffffffffffffffffffffffffff161461110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490613321565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b611135611cd9565b73ffffffffffffffffffffffffffffffffffffffff166111536113d9565b73ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090613321565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611209611cd9565b73ffffffffffffffffffffffffffffffffffffffff166112276113d9565b73ffffffffffffffffffffffffffffffffffffffff161461127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490613321565b60405180910390fd5b8260118190555081601381905550806012819055506012546013546011546112a59190613526565b6112af9190613526565b601081905550606360105411156112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f2906135a3565b60405180910390fd5b505050565b611308611cd9565b73ffffffffffffffffffffffffffffffffffffffff166113266113d9565b73ffffffffffffffffffffffffffffffffffffffff161461137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137390613321565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611409611cd9565b73ffffffffffffffffffffffffffffffffffffffff166114276113d9565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490613321565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6060600480546114a9906132a7565b80601f01602080910402602001604051908101604052809291908181526020018280546114d5906132a7565b80156115205780601f106114f757610100808354040283529160200191611520565b820191905f5260205f20905b81548152906001019060200180831161150357829003601f168201915b5050505050905090565b5f61153d611536611cd9565b8484611ea3565b6001905092915050565b61154f611cd9565b73ffffffffffffffffffffffffffffffffffffffff1661156d6113d9565b73ffffffffffffffffffffffffffffffffffffffff16146115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90613321565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60019054906101000a900460ff1681565b61169c611cd9565b73ffffffffffffffffffffffffffffffffffffffff166116ba6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170790613321565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117aa9190612fca565b60405180910390a25050565b6117be611cd9565b73ffffffffffffffffffffffffffffffffffffffff166117dc6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990613321565b60405180910390fd5b82601581905550816017819055508060168190555060165460175460155461185a9190613526565b6118649190613526565b601481905550606360145411156118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906135a3565b60405180910390fd5b505050565b6118bd611cd9565b73ffffffffffffffffffffffffffffffffffffffff166118db6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890613321565b60405180910390fd5b670de0b6b3a76400006103e86005611947610bb3565b611951919061336c565b61195b91906133da565b61196591906133da565b8110156119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e90613631565b60405180910390fd5b670de0b6b3a7640000816119bb919061336c565b600e8190555050565b600c5481565b5f6119d3611cd9565b73ffffffffffffffffffffffffffffffffffffffff166119f16113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90613321565b60405180910390fd5b620186a06001611a55610bb3565b611a5f919061336c565b611a6991906133da565b821015611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa2906136bf565b60405180910390fd5b6103e86005611ab8610bb3565b611ac2919061336c565b611acc91906133da565b821115611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b059061374d565b60405180910390fd5b81600d8190555060019050919050565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b611bdf611cd9565b73ffffffffffffffffffffffffffffffffffffffff16611bfd6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a90613321565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb8906137db565b60405180910390fd5b611cca81612821565b50565b60165481565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590613869565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db3906138f7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e969190613091565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890613985565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690613a13565b60405180910390fd5b5f8103611f9657611f9183835f6128e4565b61281c565b600f5f9054906101000a900460ff161561239257611fb26113d9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120205750611ff06113d9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561205857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612092575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120ab5750600660149054906101000a900460ff16155b1561239157600f60019054906101000a900460ff1661219f5760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061215f575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61219e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219590613a7b565b60405180910390fd5b5b7f000000000000000000000000cc1522ad799aeca893b4b6bce9c8141b462e0acc73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612241575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122e857600c5481111561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613b09565b60405180910390fd5b600e5461229783610fc4565b826122a29190613526565b11156122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90613b71565b60405180910390fd5b612390565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661238f57600e5461234283610fc4565b8261234d9190613526565b111561238e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590613b71565b60405180910390fd5b5b5b5b5b5f61239c30610fc4565b90505f600d5482101590508080156123c05750600f60029054906101000a900460ff165b80156123d95750600660149054906101000a900460ff16155b801561243057507f000000000000000000000000cc1522ad799aeca893b4b6bce9c8141b462e0acc73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612483575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156124d6575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612519576001600660146101000a81548160ff0219169083151502179055506124fe612b59565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125c8575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156125d1575f90505b5f5f90505f5f90505f5f90505f5f90508415612809577f000000000000000000000000cc1522ad799aeca893b4b6bce9c8141b462e0acc73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561264357505f601454115b156126ce5761267060646126626014548b612ba790919063ffffffff16565b612bbc90919063ffffffff16565b935060145460165485612683919061336c565b61268d91906133da565b9250601454601554856126a0919061336c565b6126aa91906133da565b9150601454601754856126bd919061336c565b6126c791906133da565b90506127b2565b7f000000000000000000000000cc1522ad799aeca893b4b6bce9c8141b462e0acc73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614801561272a57505f601054115b156127b15761275760646127496010548b612ba790919063ffffffff16565b612bbc90919063ffffffff16565b93506010546012548561276a919061336c565b61277491906133da565b925060105460115485612787919061336c565b61279191906133da565b9150601054601354856127a4919061336c565b6127ae91906133da565b90505b5b5f8411156127c6576127c58a30866128e4565b5b5f8311156127fa576127f9307f000000000000000000000000cc1522ad799aeca893b4b6bce9c8141b462e0acc856128e4565b5b83886128069190613b8f565b97505b6128148a8a8a6128e4565b505050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294990613985565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b790613a13565b60405180910390fd5b6129cb838383612bd1565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4590613c32565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612adc9190613526565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b409190613091565b60405180910390a3612b53848484612bd6565b50505050565b5f612b6330610fc4565b90505f8103612b725750612ba5565b6014600d54612b81919061336c565b811115612b9a576014600d54612b97919061336c565b90505b612ba381612bdb565b505b565b5f8183612bb4919061336c565b905092915050565b5f8183612bc991906133da565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115612bf757612bf6613c50565b5b604051908082528060200260200182016040528015612c255781602001602082028036833780820191505090505b50905030815f81518110612c3c57612c3b613c7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612cac57612cab613c7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d11307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ce0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d795835f84600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612d93959493929190613d9a565b5f604051808303815f87803b158015612daa575f5ffd5b505af1158015612dbc573d5f5f3e3d5ffd5b50505050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015612e24573d5f5f3e3d5ffd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e5282612e29565b9050919050565b612e6281612e48565b82525050565b5f602082019050612e7b5f830184612e59565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612ec382612e81565b612ecd8185612e8b565b9350612edd818560208601612e9b565b612ee681612ea9565b840191505092915050565b5f6020820190508181035f830152612f098184612eb9565b905092915050565b5f5ffd5b612f1e81612e48565b8114612f28575f5ffd5b50565b5f81359050612f3981612f15565b92915050565b5f819050919050565b612f5181612f3f565b8114612f5b575f5ffd5b50565b5f81359050612f6c81612f48565b92915050565b5f5f60408385031215612f8857612f87612f11565b5b5f612f9585828601612f2b565b9250506020612fa685828601612f5e565b9150509250929050565b5f8115159050919050565b612fc481612fb0565b82525050565b5f602082019050612fdd5f830184612fbb565b92915050565b5f60208284031215612ff857612ff7612f11565b5b5f61300584828501612f2b565b91505092915050565b5f819050919050565b5f61303161302c61302784612e29565b61300e565b612e29565b9050919050565b5f61304282613017565b9050919050565b5f61305382613038565b9050919050565b61306381613049565b82525050565b5f60208201905061307c5f83018461305a565b92915050565b61308b81612f3f565b82525050565b5f6020820190506130a45f830184613082565b92915050565b5f602082840312156130bf576130be612f11565b5b5f6130cc84828501612f5e565b91505092915050565b5f5f5f606084860312156130ec576130eb612f11565b5b5f6130f986828701612f2b565b935050602061310a86828701612f2b565b925050604061311b86828701612f5e565b9150509250925092565b5f60ff82169050919050565b61313a81613125565b82525050565b5f6020820190506131535f830184613131565b92915050565b61316281612fb0565b811461316c575f5ffd5b50565b5f8135905061317d81613159565b92915050565b5f5f6040838503121561319957613198612f11565b5b5f6131a685828601612f2b565b92505060206131b78582860161316f565b9150509250929050565b5f5f5f606084860312156131d8576131d7612f11565b5b5f6131e586828701612f5e565b93505060206131f686828701612f5e565b925050604061320786828701612f5e565b9150509250925092565b5f6020828403121561322657613225612f11565b5b5f6132338482850161316f565b91505092915050565b5f5f6040838503121561325257613251612f11565b5b5f61325f85828601612f2b565b925050602061327085828601612f2b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132be57607f821691505b6020821081036132d1576132d061327a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61330b602083612e8b565b9150613316826132d7565b602082019050919050565b5f6020820190508181035f830152613338816132ff565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61337682612f3f565b915061338183612f3f565b925082820261338f81612f3f565b915082820484148315176133a6576133a561333f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6133e482612f3f565b91506133ef83612f3f565b9250826133ff576133fe6133ad565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613464602f83612e8b565b915061346f8261340a565b604082019050919050565b5f6020820190508181035f83015261349181613458565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6134f2602883612e8b565b91506134fd82613498565b604082019050919050565b5f6020820190508181035f83015261351f816134e6565b9050919050565b5f61353082612f3f565b915061353b83612f3f565b92508282019050808211156135535761355261333f565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f61358d601d83612e8b565b915061359882613559565b602082019050919050565b5f6020820190508181035f8301526135ba81613581565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61361b602483612e8b565b9150613626826135c1565b604082019050919050565b5f6020820190508181035f8301526136488161360f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6136a9603583612e8b565b91506136b48261364f565b604082019050919050565b5f6020820190508181035f8301526136d68161369d565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613737603483612e8b565b9150613742826136dd565b604082019050919050565b5f6020820190508181035f8301526137648161372b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6137c5602683612e8b565b91506137d08261376b565b604082019050919050565b5f6020820190508181035f8301526137f2816137b9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613853602483612e8b565b915061385e826137f9565b604082019050919050565b5f6020820190508181035f83015261388081613847565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138e1602283612e8b565b91506138ec82613887565b604082019050919050565b5f6020820190508181035f83015261390e816138d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61396f602583612e8b565b915061397a82613915565b604082019050919050565b5f6020820190508181035f83015261399c81613963565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6139fd602383612e8b565b9150613a08826139a3565b604082019050919050565b5f6020820190508181035f830152613a2a816139f1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613a65601683612e8b565b9150613a7082613a31565b602082019050919050565b5f6020820190508181035f830152613a9281613a59565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613af3603583612e8b565b9150613afe82613a99565b604082019050919050565b5f6020820190508181035f830152613b2081613ae7565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613b5b601383612e8b565b9150613b6682613b27565b602082019050919050565b5f6020820190508181035f830152613b8881613b4f565b9050919050565b5f613b9982612f3f565b9150613ba483612f3f565b9250828203905081811115613bbc57613bbb61333f565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613c1c602683612e8b565b9150613c2782613bc2565b604082019050919050565b5f6020820190508181035f830152613c4981613c10565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f613ccd613cc8613cc384613caa565b61300e565b612f3f565b9050919050565b613cdd81613cb3565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d1581612e48565b82525050565b5f613d268383613d0c565b60208301905092915050565b5f602082019050919050565b5f613d4882613ce3565b613d528185613ced565b9350613d5d83613cfd565b805f5b83811015613d8d578151613d748882613d1b565b9750613d7f83613d32565b925050600181019050613d60565b5085935050505092915050565b5f60a082019050613dad5f830188613082565b613dba6020830187613cd4565b8181036040830152613dcc8186613d3e565b9050613ddb6060830185612e59565b613de86080830184613082565b969550505050505056fea26469706673582212202b3616190a42c246c435953a70e4e461cfeffdf94c639a7ec7109a579443c91964736f6c634300081b0033

Deployed Bytecode Sourcemap

24803:12472:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25261:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9659:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11826:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26025:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24882:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10779:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31848:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29907:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12477:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25187:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24985:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10621:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25701:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25633:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25845:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24940:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25480:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32286:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25775:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25740:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25560:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10950:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2894:103;;;;;;;;;;;;;:::i;:::-;;29211:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30454:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30825:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29049:110;;;;;;;;;;;;;:::i;:::-;;25081:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2243:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30717:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9878:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11290:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32045:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25520:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31658:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31237:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30190:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25365:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29402:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25599:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11528:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25407:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25224:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25664;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3152:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25807:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25447:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25261:23;;;;;;;;;;;;;:::o;9659:100::-;9713:13;9746:5;9739:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9659:100;:::o;11826:169::-;11909:4;11926:39;11935:12;:10;:12::i;:::-;11949:7;11958:6;11926:8;:39::i;:::-;11983:4;11976:11;;11826:169;;;;:::o;26025:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;24882:51::-;;;:::o;10779:108::-;10840:7;10867:12;;10860:19;;10779:108;:::o;31848:189::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31984:9:::1;;;;;;;;;;;31953:41;;31970:12;31953:41;;;;;;;;;;;;32017:12;32005:9;;:24;;;;;;;;;;;;;;;;;;31848:189:::0;:::o;29907:275::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30044:4:::1;30036;30031:1;30015:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30014:26;;;;:::i;:::-;30013:35;;;;:::i;:::-;30003:6;:45;;29981:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30167:6;30157;:17;;;;:::i;:::-;30134:20;:40;;;;29907:275:::0;:::o;12477:492::-;12617:4;12634:36;12644:6;12652:9;12663:6;12634:9;:36::i;:::-;12683:24;12710:11;:19;12722:6;12710:19;;;;;;;;;;;;;;;:33;12730:12;:10;:12::i;:::-;12710:33;;;;;;;;;;;;;;;;12683:60;;12782:6;12762:16;:26;;12754:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12869:57;12878:6;12886:12;:10;:12::i;:::-;12919:6;12900:16;:25;12869:8;:57::i;:::-;12957:4;12950:11;;;12477:492;;;;;:::o;25187:28::-;;;;:::o;24985:89::-;25031:42;24985:89;:::o;10621:93::-;10679:5;10704:2;10697:9;;10621:93;:::o;25701:30::-;;;;:::o;25633:24::-;;;;:::o;25845:31::-;;;;:::o;24940:38::-;;;:::o;25480:33::-;;;;;;;;;;;;;:::o;32286:126::-;32352:4;32376:19;:28;32396:7;32376:28;;;;;;;;;;;;;;;;;;;;;;;;;32369:35;;32286:126;;;:::o;25775:25::-;;;;:::o;25740:28::-;;;;:::o;25560:30::-;;;;;;;;;;;;;:::o;10950:127::-;11024:7;11051:9;:18;11061:7;11051:18;;;;;;;;;;;;;;;;11044:25;;10950:127;;;:::o;2894:103::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2959:30:::1;2986:1;2959:18;:30::i;:::-;2894:103::o:0;29211:121::-;29263:4;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29297:5:::1;29280:14;;:22;;;;;;;;;;;;;;;;;;29320:4;29313:11;;29211:121:::0;:::o;30454:167::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30609:4:::1;30567:31;:39;30599:6;30567:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30454:167:::0;;:::o;30825:404::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30987:7:::1;30975:9;:19;;;;31023:13;31005:15;:31;;;;31065:13;31047:15;:31;;;;31135:15;;31117;;31104:9;;:28;;;;:::i;:::-;:46;;;;:::i;:::-;31089:12;:61;;;;31185:2;31169:12;;:18;;31161:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30825:404:::0;;;:::o;29049:110::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29118:4:::1;29102:13;;:20;;;;;;;;;;;;;;;;;;29147:4;29133:11;;:18;;;;;;;;;;;;;;;;;;29049:110::o:0;25081:63::-;;;;;;;;;;;;;:::o;2243:87::-;2289:7;2316:6;;;;;;;;;;;2309:13;;2243:87;:::o;30717:100::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30802:7:::1;30788:11;;:21;;;;;;;;;;;;;;;;;;30717:100:::0;:::o;9878:104::-;9934:13;9967:7;9960:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9878:104;:::o;11290:175::-;11376:4;11393:42;11403:12;:10;:12::i;:::-;11417:9;11428:6;11393:9;:42::i;:::-;11453:4;11446:11;;11290:175;;;;:::o;32045:231::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32205:15:::1;;;;;;;;;;;32162:59;;32185:18;32162:59;;;;;;;;;;;;32250:18;32232:15;;:36;;;;;;;;;;;;;;;;;;32045:231:::0;:::o;25520:33::-;;;;;;;;;;;;;:::o;31658:182::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31774:8:::1;31743:19;:28;31763:7;31743:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31814:7;31798:34;;;31823:8;31798:34;;;;;;:::i;:::-;;;;;;;;31658:182:::0;;:::o;31237:413::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31401:7:::1;31388:10;:20;;;;31438:13;31419:16;:32;;;;31481:13;31462:16;:32;;;;31554:16;;31535;;31521:10;;:30;;;;:::i;:::-;:49;;;;:::i;:::-;31505:13;:65;;;;31606:2;31589:13;;:19;;31581:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31237:413:::0;;;:::o;30190:256::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30330:4:::1;30322;30317:1;30301:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30300:26;;;;:::i;:::-;30299:35;;;;:::i;:::-;30289:6;:45;;30267:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;30431:6;30421;:17;;;;:::i;:::-;30409:9;:29;;;;30190:256:::0;:::o;25365:35::-;;;;:::o;29402:497::-;29510:4;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29589:6:::1;29584:1;29568:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29567:28;;;;:::i;:::-;29554:9;:41;;29532:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;29744:4;29739:1;29723:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29722:26;;;;:::i;:::-;29709:9;:39;;29687:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;29860:9;29839:18;:30;;;;29887:4;29880:11;;29402:497:::0;;;:::o;25599:27::-;;;;:::o;11528:151::-;11617:7;11644:11;:18;11656:5;11644:18;;;;;;;;;;;;;;;:27;11663:7;11644:27;;;;;;;;;;;;;;;;11637:34;;11528:151;;;;:::o;25407:33::-;;;;:::o;25224:30::-;;;;;;;;;;;;;:::o;25664:::-;;;;:::o;3152:201::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3261:1:::1;3241:22;;:8;:22;;::::0;3233:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3317:28;3336:8;3317:18;:28::i;:::-;3152:201:::0;:::o;25807:31::-;;;;:::o;25447:24::-;;;;:::o;916:98::-;969:7;996:10;989:17;;916:98;:::o;15318:380::-;15471:1;15454:19;;:5;:19;;;15446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15552:1;15533:21;;:7;:21;;;15525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15636:6;15606:11;:18;15618:5;15606:18;;;;;;;;;;;;;;;:27;15625:7;15606:27;;;;;;;;;;;;;;;:36;;;;15674:7;15658:32;;15667:5;15658:32;;;15683:6;15658:32;;;;;;:::i;:::-;;;;;;;;15318:380;;;:::o;32420:3916::-;32568:1;32552:18;;:4;:18;;;32544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32645:1;32631:16;;:2;:16;;;32623:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32714:1;32704:6;:11;32700:93;;32732:28;32748:4;32754:2;32758:1;32732:15;:28::i;:::-;32775:7;;32700:93;32809:14;;;;;;;;;;;32805:1466;;;32870:7;:5;:7::i;:::-;32862:15;;:4;:15;;;;:49;;;;;32904:7;:5;:7::i;:::-;32898:13;;:2;:13;;;;32862:49;:86;;;;;32946:1;32932:16;;:2;:16;;;;32862:86;:164;;;;;32983:42;32969:57;;:2;:57;;;;32862:164;:194;;;;;33048:8;;;;;;;;;;;33047:9;32862:194;32840:1420;;;33096:13;;;;;;;;;;;33091:223;;33168:19;:25;33188:4;33168:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33197:19;:23;33217:2;33197:23;;;;;;;;;;;;;;;;;;;;;;;;;33168:52;33134:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;33091:223;33528:13;33520:21;;:4;:21;;;:82;;;;;33567:31;:35;33599:2;33567:35;;;;;;;;;;;;;;;;;;;;;;;;;33566:36;33520:82;33494:751;;;33689:20;;33679:6;:30;;33645:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33897:9;;33880:13;33890:2;33880:9;:13::i;:::-;33871:6;:22;;;;:::i;:::-;:35;;33837:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33494:751;;;34025:31;:35;34057:2;34025:35;;;;;;;;;;;;;;;;;;;;;;;;;34020:225;;34145:9;;34128:13;34138:2;34128:9;:13::i;:::-;34119:6;:22;;;;:::i;:::-;:35;;34085:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34020:225;33494:751;32840:1420;32805:1466;34283:28;34314:24;34332:4;34314:9;:24::i;:::-;34283:55;;34351:12;34390:18;;34366:20;:42;;34351:57;;34439:7;:35;;;;;34463:11;;;;;;;;;;;34439:35;:61;;;;;34492:8;;;;;;;;;;;34491:9;34439:61;:97;;;;;34523:13;34517:19;;:2;:19;;;34439:97;:140;;;;;34554:19;:25;34574:4;34554:25;;;;;;;;;;;;;;;;;;;;;;;;;34553:26;34439:140;:181;;;;;34597:19;:23;34617:2;34597:23;;;;;;;;;;;;;;;;;;;;;;;;;34596:24;34439:181;34421:313;;;34658:4;34647:8;;:15;;;;;;;;;;;;;;;;;;34679:10;:8;:10::i;:::-;34717:5;34706:8;;:16;;;;;;;;;;;;;;;;;;34421:313;34746:12;34762:8;;;;;;;;;;;34761:9;34746:24;;34872:19;:25;34892:4;34872:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34901:19;:23;34921:2;34901:23;;;;;;;;;;;;;;;;;;;;;;;;;34872:52;34868:100;;;34951:5;34941:15;;34868:100;34980:12;34995:1;34980:16;;35007:26;35036:1;35007:30;;35048:20;35071:1;35048:24;;35083:26;35112:1;35083:30;;35202:7;35198:1085;;;35260:13;35254:19;;:2;:19;;;:40;;;;;35293:1;35277:13;;:17;35254:40;35250:743;;;35322:34;35352:3;35322:25;35333:13;;35322:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;35315:41;;35424:13;;35404:16;;35397:4;:23;;;;:::i;:::-;35396:41;;;;:::i;:::-;35375:62;;35493:13;;35479:10;;35472:4;:17;;;;:::i;:::-;35471:35;;;;:::i;:::-;35456:50;;35574:13;;35554:16;;35547:4;:23;;;;:::i;:::-;35546:41;;;;:::i;:::-;35525:62;;35250:743;;;35657:13;35649:21;;:4;:21;;;:41;;;;;35689:1;35674:12;;:16;35649:41;35645:348;;;35718:33;35747:3;35718:24;35729:12;;35718:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;35711:40;;35818:12;;35799:15;;35792:4;:22;;;;:::i;:::-;35791:39;;;;:::i;:::-;35770:60;;35886:12;;35873:9;;35866:4;:16;;;;:::i;:::-;35865:33;;;;:::i;:::-;35850:48;;35965:12;;35946:15;;35939:4;:22;;;;:::i;:::-;35938:39;;;;:::i;:::-;35917:60;;35645:348;35250:743;36019:1;36013:4;:7;36009:90;;;36041:42;36057:4;36071;36078;36041:15;:42::i;:::-;36009:90;36138:1;36117:18;:22;36113:128;;;36160:65;36184:4;36191:13;36206:18;36160:15;:65::i;:::-;36113:128;36267:4;36257:14;;;;;:::i;:::-;;;35198:1085;36295:33;36311:4;36317:2;36321:6;36295:15;:33::i;:::-;32533:3803;;;;;;;32420:3916;;;;:::o;3513:191::-;3587:16;3606:6;;;;;;;;;;;3587:25;;3632:8;3623:6;;:17;;;;;;;;;;;;;;;;;;3687:8;3656:40;;3677:8;3656:40;;;;;;;;;;;;3576:128;3513:191;:::o;13459:733::-;13617:1;13599:20;;:6;:20;;;13591:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13701:1;13680:23;;:9;:23;;;13672:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13756:47;13777:6;13785:9;13796:6;13756:20;:47::i;:::-;13816:21;13840:9;:17;13850:6;13840:17;;;;;;;;;;;;;;;;13816:41;;13893:6;13876:13;:23;;13868:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14014:6;13998:13;:22;13978:9;:17;13988:6;13978:17;;;;;;;;;;;;;;;:42;;;;14066:6;14042:9;:20;14052:9;14042:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14107:9;14090:35;;14099:6;14090:35;;;14118:6;14090:35;;;;;;:::i;:::-;;;;;;;;14138:46;14158:6;14166:9;14177:6;14138:19;:46::i;:::-;13580:612;13459:733;;;:::o;36931:339::-;36970:23;36996:24;37014:4;36996:9;:24::i;:::-;36970:50;;37054:1;37035:15;:20;37031:59;;37072:7;;;37031:59;37145:2;37124:18;;:23;;;;:::i;:::-;37106:15;:41;37102:115;;;37203:2;37182:18;;:23;;;;:::i;:::-;37164:41;;37102:115;37229:33;37246:15;37229:16;:33::i;:::-;36959:311;36931:339;:::o;20771:98::-;20829:7;20860:1;20856;:5;;;;:::i;:::-;20849:12;;20771:98;;;;:::o;21170:::-;21228:7;21259:1;21255;:5;;;;:::i;:::-;21248:12;;21170:98;;;;:::o;16298:125::-;;;;:::o;17027:124::-;;;;:::o;36340:581::-;36458:21;36496:1;36482:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36458:40;;36523:4;36505;36510:1;36505:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36545:3;;;;;;;;;;;36535:4;36540:1;36535:7;;;;;;;;:::i;:::-;;;;;;;:13;;;;;;;;;;;36557:62;36574:4;36589:15;36607:11;36557:8;:62::i;:::-;36650:15;:69;;;36730:11;36752:1;36793:4;36808:9;;;;;;;;;;;36828:15;36650:200;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36869:15;;;;;;;;;;;36861:33;;:56;36895:21;36861:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36395:526;36340:581;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:139::-;962:6;957:3;952;946:23;1003:1;994:6;989:3;985:16;978:27;873:139;;;:::o;1018:102::-;1059:6;1110:2;1106:7;1101:2;1094:5;1090:14;1086:28;1076:38;;1018:102;;;:::o;1126:377::-;1214:3;1242:39;1275:5;1242:39;:::i;:::-;1297:71;1361:6;1356:3;1297:71;:::i;:::-;1290:78;;1377:65;1435:6;1430:3;1423:4;1416:5;1412:16;1377:65;:::i;:::-;1467:29;1489:6;1467:29;:::i;:::-;1462:3;1458:39;1451:46;;1218:285;1126:377;;;;:::o;1509:313::-;1622:4;1660:2;1649:9;1645:18;1637:26;;1709:9;1703:4;1699:20;1695:1;1684:9;1680:17;1673:47;1737:78;1810:4;1801:6;1737:78;:::i;:::-;1729:86;;1509:313;;;;:::o;1909:117::-;2018:1;2015;2008:12;2155:122;2228:24;2246:5;2228:24;:::i;:::-;2221:5;2218:35;2208:63;;2267:1;2264;2257:12;2208:63;2155:122;:::o;2283:139::-;2329:5;2367:6;2354:20;2345:29;;2383:33;2410:5;2383:33;:::i;:::-;2283:139;;;;:::o;2428:77::-;2465:7;2494:5;2483:16;;2428:77;;;:::o;2511:122::-;2584:24;2602:5;2584:24;:::i;:::-;2577:5;2574:35;2564:63;;2623:1;2620;2613:12;2564:63;2511:122;:::o;2639:139::-;2685:5;2723:6;2710:20;2701:29;;2739:33;2766:5;2739:33;:::i;:::-;2639:139;;;;:::o;2784:474::-;2852:6;2860;2909:2;2897:9;2888:7;2884:23;2880:32;2877:119;;;2915:79;;:::i;:::-;2877:119;3035:1;3060:53;3105:7;3096:6;3085:9;3081:22;3060:53;:::i;:::-;3050:63;;3006:117;3162:2;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3133:118;2784:474;;;;;:::o;3264:90::-;3298:7;3341:5;3334:13;3327:21;3316:32;;3264:90;;;:::o;3360:109::-;3441:21;3456:5;3441:21;:::i;:::-;3436:3;3429:34;3360:109;;:::o;3475:210::-;3562:4;3600:2;3589:9;3585:18;3577:26;;3613:65;3675:1;3664:9;3660:17;3651:6;3613:65;:::i;:::-;3475:210;;;;:::o;3691:329::-;3750:6;3799:2;3787:9;3778:7;3774:23;3770:32;3767:119;;;3805:79;;:::i;:::-;3767:119;3925:1;3950:53;3995:7;3986:6;3975:9;3971:22;3950:53;:::i;:::-;3940:63;;3896:117;3691:329;;;;:::o;4026:60::-;4054:3;4075:5;4068:12;;4026:60;;;:::o;4092:142::-;4142:9;4175:53;4193:34;4202:24;4220:5;4202:24;:::i;:::-;4193:34;:::i;:::-;4175:53;:::i;:::-;4162:66;;4092:142;;;:::o;4240:126::-;4290:9;4323:37;4354:5;4323:37;:::i;:::-;4310:50;;4240:126;;;:::o;4372:152::-;4448:9;4481:37;4512:5;4481:37;:::i;:::-;4468:50;;4372:152;;;:::o;4530:183::-;4643:63;4700:5;4643:63;:::i;:::-;4638:3;4631:76;4530:183;;:::o;4719:274::-;4838:4;4876:2;4865:9;4861:18;4853:26;;4889:97;4983:1;4972:9;4968:17;4959:6;4889:97;:::i;:::-;4719:274;;;;:::o;4999:118::-;5086:24;5104:5;5086:24;:::i;:::-;5081:3;5074:37;4999:118;;:::o;5123:222::-;5216:4;5254:2;5243:9;5239:18;5231:26;;5267:71;5335:1;5324:9;5320:17;5311:6;5267:71;:::i;:::-;5123:222;;;;:::o;5351:329::-;5410:6;5459:2;5447:9;5438:7;5434:23;5430:32;5427:119;;;5465:79;;:::i;:::-;5427:119;5585:1;5610:53;5655:7;5646:6;5635:9;5631:22;5610:53;:::i;:::-;5600:63;;5556:117;5351:329;;;;:::o;5686:619::-;5763:6;5771;5779;5828:2;5816:9;5807:7;5803:23;5799:32;5796:119;;;5834:79;;:::i;:::-;5796:119;5954:1;5979:53;6024:7;6015:6;6004:9;6000:22;5979:53;:::i;:::-;5969:63;;5925:117;6081:2;6107:53;6152:7;6143:6;6132:9;6128:22;6107:53;:::i;:::-;6097:63;;6052:118;6209:2;6235:53;6280:7;6271:6;6260:9;6256:22;6235:53;:::i;:::-;6225:63;;6180:118;5686:619;;;;;:::o;6311:86::-;6346:7;6386:4;6379:5;6375:16;6364:27;;6311:86;;;:::o;6403:112::-;6486:22;6502:5;6486:22;:::i;:::-;6481:3;6474:35;6403:112;;:::o;6521:214::-;6610:4;6648:2;6637:9;6633:18;6625:26;;6661:67;6725:1;6714:9;6710:17;6701:6;6661:67;:::i;:::-;6521:214;;;;:::o;6741:116::-;6811:21;6826:5;6811:21;:::i;:::-;6804:5;6801:32;6791:60;;6847:1;6844;6837:12;6791:60;6741:116;:::o;6863:133::-;6906:5;6944:6;6931:20;6922:29;;6960:30;6984:5;6960:30;:::i;:::-;6863:133;;;;:::o;7002:468::-;7067:6;7075;7124:2;7112:9;7103:7;7099:23;7095:32;7092:119;;;7130:79;;:::i;:::-;7092:119;7250:1;7275:53;7320:7;7311:6;7300:9;7296:22;7275:53;:::i;:::-;7265:63;;7221:117;7377:2;7403:50;7445:7;7436:6;7425:9;7421:22;7403:50;:::i;:::-;7393:60;;7348:115;7002:468;;;;;:::o;7476:619::-;7553:6;7561;7569;7618:2;7606:9;7597:7;7593:23;7589:32;7586:119;;;7624:79;;:::i;:::-;7586:119;7744:1;7769:53;7814:7;7805:6;7794:9;7790:22;7769:53;:::i;:::-;7759:63;;7715:117;7871:2;7897:53;7942:7;7933:6;7922:9;7918:22;7897:53;:::i;:::-;7887:63;;7842:118;7999:2;8025:53;8070:7;8061:6;8050:9;8046:22;8025:53;:::i;:::-;8015:63;;7970:118;7476:619;;;;;:::o;8101:323::-;8157:6;8206:2;8194:9;8185:7;8181:23;8177:32;8174:119;;;8212:79;;:::i;:::-;8174:119;8332:1;8357:50;8399:7;8390:6;8379:9;8375:22;8357:50;:::i;:::-;8347:60;;8303:114;8101:323;;;;:::o;8430:474::-;8498:6;8506;8555:2;8543:9;8534:7;8530:23;8526:32;8523:119;;;8561:79;;:::i;:::-;8523:119;8681:1;8706:53;8751:7;8742:6;8731:9;8727:22;8706:53;:::i;:::-;8696:63;;8652:117;8808:2;8834:53;8879:7;8870:6;8859:9;8855:22;8834:53;:::i;:::-;8824:63;;8779:118;8430:474;;;;;:::o;8910:180::-;8958:77;8955:1;8948:88;9055:4;9052:1;9045:15;9079:4;9076:1;9069:15;9096:320;9140:6;9177:1;9171:4;9167:12;9157:22;;9224:1;9218:4;9214:12;9245:18;9235:81;;9301:4;9293:6;9289:17;9279:27;;9235:81;9363:2;9355:6;9352:14;9332:18;9329:38;9326:84;;9382:18;;:::i;:::-;9326:84;9147:269;9096:320;;;:::o;9422:182::-;9562:34;9558:1;9550:6;9546:14;9539:58;9422:182;:::o;9610:366::-;9752:3;9773:67;9837:2;9832:3;9773:67;:::i;:::-;9766:74;;9849:93;9938:3;9849:93;:::i;:::-;9967:2;9962:3;9958:12;9951:19;;9610:366;;;:::o;9982:419::-;10148:4;10186:2;10175:9;10171:18;10163:26;;10235:9;10229:4;10225:20;10221:1;10210:9;10206:17;10199:47;10263:131;10389:4;10263:131;:::i;:::-;10255:139;;9982:419;;;:::o;10407:180::-;10455:77;10452:1;10445:88;10552:4;10549:1;10542:15;10576:4;10573:1;10566:15;10593:410;10633:7;10656:20;10674:1;10656:20;:::i;:::-;10651:25;;10690:20;10708:1;10690:20;:::i;:::-;10685:25;;10745:1;10742;10738:9;10767:30;10785:11;10767:30;:::i;:::-;10756:41;;10946:1;10937:7;10933:15;10930:1;10927:22;10907:1;10900:9;10880:83;10857:139;;10976:18;;:::i;:::-;10857:139;10641:362;10593:410;;;;:::o;11009:180::-;11057:77;11054:1;11047:88;11154:4;11151:1;11144:15;11178:4;11175:1;11168:15;11195:185;11235:1;11252:20;11270:1;11252:20;:::i;:::-;11247:25;;11286:20;11304:1;11286:20;:::i;:::-;11281:25;;11325:1;11315:35;;11330:18;;:::i;:::-;11315:35;11372:1;11369;11365:9;11360:14;;11195:185;;;;:::o;11386:234::-;11526:34;11522:1;11514:6;11510:14;11503:58;11595:17;11590:2;11582:6;11578:15;11571:42;11386:234;:::o;11626:366::-;11768:3;11789:67;11853:2;11848:3;11789:67;:::i;:::-;11782:74;;11865:93;11954:3;11865:93;:::i;:::-;11983:2;11978:3;11974:12;11967:19;;11626:366;;;:::o;11998:419::-;12164:4;12202:2;12191:9;12187:18;12179:26;;12251:9;12245:4;12241:20;12237:1;12226:9;12222:17;12215:47;12279:131;12405:4;12279:131;:::i;:::-;12271:139;;11998:419;;;:::o;12423:227::-;12563:34;12559:1;12551:6;12547:14;12540:58;12632:10;12627:2;12619:6;12615:15;12608:35;12423:227;:::o;12656:366::-;12798:3;12819:67;12883:2;12878:3;12819:67;:::i;:::-;12812:74;;12895:93;12984:3;12895:93;:::i;:::-;13013:2;13008:3;13004:12;12997:19;;12656:366;;;:::o;13028:419::-;13194:4;13232:2;13221:9;13217:18;13209:26;;13281:9;13275:4;13271:20;13267:1;13256:9;13252:17;13245:47;13309:131;13435:4;13309:131;:::i;:::-;13301:139;;13028:419;;;:::o;13453:191::-;13493:3;13512:20;13530:1;13512:20;:::i;:::-;13507:25;;13546:20;13564:1;13546:20;:::i;:::-;13541:25;;13589:1;13586;13582:9;13575:16;;13610:3;13607:1;13604:10;13601:36;;;13617:18;;:::i;:::-;13601:36;13453:191;;;;:::o;13650:179::-;13790:31;13786:1;13778:6;13774:14;13767:55;13650:179;:::o;13835:366::-;13977:3;13998:67;14062:2;14057:3;13998:67;:::i;:::-;13991:74;;14074:93;14163:3;14074:93;:::i;:::-;14192:2;14187:3;14183:12;14176:19;;13835:366;;;:::o;14207:419::-;14373:4;14411:2;14400:9;14396:18;14388:26;;14460:9;14454:4;14450:20;14446:1;14435:9;14431:17;14424:47;14488:131;14614:4;14488:131;:::i;:::-;14480:139;;14207:419;;;:::o;14632:223::-;14772:34;14768:1;14760:6;14756:14;14749:58;14841:6;14836:2;14828:6;14824:15;14817:31;14632:223;:::o;14861:366::-;15003:3;15024:67;15088:2;15083:3;15024:67;:::i;:::-;15017:74;;15100:93;15189:3;15100:93;:::i;:::-;15218:2;15213:3;15209:12;15202:19;;14861:366;;;:::o;15233:419::-;15399:4;15437:2;15426:9;15422:18;15414:26;;15486:9;15480:4;15476:20;15472:1;15461:9;15457:17;15450:47;15514:131;15640:4;15514:131;:::i;:::-;15506:139;;15233:419;;;:::o;15658:240::-;15798:34;15794:1;15786:6;15782:14;15775:58;15867:23;15862:2;15854:6;15850:15;15843:48;15658:240;:::o;15904:366::-;16046:3;16067:67;16131:2;16126:3;16067:67;:::i;:::-;16060:74;;16143:93;16232:3;16143:93;:::i;:::-;16261:2;16256:3;16252:12;16245:19;;15904:366;;;:::o;16276:419::-;16442:4;16480:2;16469:9;16465:18;16457:26;;16529:9;16523:4;16519:20;16515:1;16504:9;16500:17;16493:47;16557:131;16683:4;16557:131;:::i;:::-;16549:139;;16276:419;;;:::o;16701:239::-;16841:34;16837:1;16829:6;16825:14;16818:58;16910:22;16905:2;16897:6;16893:15;16886:47;16701:239;:::o;16946:366::-;17088:3;17109:67;17173:2;17168:3;17109:67;:::i;:::-;17102:74;;17185:93;17274:3;17185:93;:::i;:::-;17303:2;17298:3;17294:12;17287:19;;16946:366;;;:::o;17318:419::-;17484:4;17522:2;17511:9;17507:18;17499:26;;17571:9;17565:4;17561:20;17557:1;17546:9;17542:17;17535:47;17599:131;17725:4;17599:131;:::i;:::-;17591:139;;17318:419;;;:::o;17743:225::-;17883:34;17879:1;17871:6;17867:14;17860:58;17952:8;17947:2;17939:6;17935:15;17928:33;17743:225;:::o;17974:366::-;18116:3;18137:67;18201:2;18196:3;18137:67;:::i;:::-;18130:74;;18213:93;18302:3;18213:93;:::i;:::-;18331:2;18326:3;18322:12;18315:19;;17974:366;;;:::o;18346:419::-;18512:4;18550:2;18539:9;18535:18;18527:26;;18599:9;18593:4;18589:20;18585:1;18574:9;18570:17;18563:47;18627:131;18753:4;18627:131;:::i;:::-;18619:139;;18346:419;;;:::o;18771:223::-;18911:34;18907:1;18899:6;18895:14;18888:58;18980:6;18975:2;18967:6;18963:15;18956:31;18771:223;:::o;19000:366::-;19142:3;19163:67;19227:2;19222:3;19163:67;:::i;:::-;19156:74;;19239:93;19328:3;19239:93;:::i;:::-;19357:2;19352:3;19348:12;19341:19;;19000:366;;;:::o;19372:419::-;19538:4;19576:2;19565:9;19561:18;19553:26;;19625:9;19619:4;19615:20;19611:1;19600:9;19596:17;19589:47;19653:131;19779:4;19653:131;:::i;:::-;19645:139;;19372:419;;;:::o;19797:221::-;19937:34;19933:1;19925:6;19921:14;19914:58;20006:4;20001:2;19993:6;19989:15;19982:29;19797:221;:::o;20024:366::-;20166:3;20187:67;20251:2;20246:3;20187:67;:::i;:::-;20180:74;;20263:93;20352:3;20263:93;:::i;:::-;20381:2;20376:3;20372:12;20365:19;;20024:366;;;:::o;20396:419::-;20562:4;20600:2;20589:9;20585:18;20577:26;;20649:9;20643:4;20639:20;20635:1;20624:9;20620:17;20613:47;20677:131;20803:4;20677:131;:::i;:::-;20669:139;;20396:419;;;:::o;20821:224::-;20961:34;20957:1;20949:6;20945:14;20938:58;21030:7;21025:2;21017:6;21013:15;21006:32;20821:224;:::o;21051:366::-;21193:3;21214:67;21278:2;21273:3;21214:67;:::i;:::-;21207:74;;21290:93;21379:3;21290:93;:::i;:::-;21408:2;21403:3;21399:12;21392:19;;21051:366;;;:::o;21423:419::-;21589:4;21627:2;21616:9;21612:18;21604:26;;21676:9;21670:4;21666:20;21662:1;21651:9;21647:17;21640:47;21704:131;21830:4;21704:131;:::i;:::-;21696:139;;21423:419;;;:::o;21848:222::-;21988:34;21984:1;21976:6;21972:14;21965:58;22057:5;22052:2;22044:6;22040:15;22033:30;21848:222;:::o;22076:366::-;22218:3;22239:67;22303:2;22298:3;22239:67;:::i;:::-;22232:74;;22315:93;22404:3;22315:93;:::i;:::-;22433:2;22428:3;22424:12;22417:19;;22076:366;;;:::o;22448:419::-;22614:4;22652:2;22641:9;22637:18;22629:26;;22701:9;22695:4;22691:20;22687:1;22676:9;22672:17;22665:47;22729:131;22855:4;22729:131;:::i;:::-;22721:139;;22448:419;;;:::o;22873:172::-;23013:24;23009:1;23001:6;22997:14;22990:48;22873:172;:::o;23051:366::-;23193:3;23214:67;23278:2;23273:3;23214:67;:::i;:::-;23207:74;;23290:93;23379:3;23290:93;:::i;:::-;23408:2;23403:3;23399:12;23392:19;;23051:366;;;:::o;23423:419::-;23589:4;23627:2;23616:9;23612:18;23604:26;;23676:9;23670:4;23666:20;23662:1;23651:9;23647:17;23640:47;23704:131;23830:4;23704:131;:::i;:::-;23696:139;;23423:419;;;:::o;23848:240::-;23988:34;23984:1;23976:6;23972:14;23965:58;24057:23;24052:2;24044:6;24040:15;24033:48;23848:240;:::o;24094:366::-;24236:3;24257:67;24321:2;24316:3;24257:67;:::i;:::-;24250:74;;24333:93;24422:3;24333:93;:::i;:::-;24451:2;24446:3;24442:12;24435:19;;24094:366;;;:::o;24466:419::-;24632:4;24670:2;24659:9;24655:18;24647:26;;24719:9;24713:4;24709:20;24705:1;24694:9;24690:17;24683:47;24747:131;24873:4;24747:131;:::i;:::-;24739:139;;24466:419;;;:::o;24891:169::-;25031:21;25027:1;25019:6;25015:14;25008:45;24891:169;:::o;25066:366::-;25208:3;25229:67;25293:2;25288:3;25229:67;:::i;:::-;25222:74;;25305:93;25394:3;25305:93;:::i;:::-;25423:2;25418:3;25414:12;25407:19;;25066:366;;;:::o;25438:419::-;25604:4;25642:2;25631:9;25627:18;25619:26;;25691:9;25685:4;25681:20;25677:1;25666:9;25662:17;25655:47;25719:131;25845:4;25719:131;:::i;:::-;25711:139;;25438:419;;;:::o;25863:194::-;25903:4;25923:20;25941:1;25923:20;:::i;:::-;25918:25;;25957:20;25975:1;25957:20;:::i;:::-;25952:25;;26001:1;25998;25994:9;25986:17;;26025:1;26019:4;26016:11;26013:37;;;26030:18;;:::i;:::-;26013:37;25863:194;;;;:::o;26063:225::-;26203:34;26199:1;26191:6;26187:14;26180:58;26272:8;26267:2;26259:6;26255:15;26248:33;26063:225;:::o;26294:366::-;26436:3;26457:67;26521:2;26516:3;26457:67;:::i;:::-;26450:74;;26533:93;26622:3;26533:93;:::i;:::-;26651:2;26646:3;26642:12;26635:19;;26294:366;;;:::o;26666:419::-;26832:4;26870:2;26859:9;26855:18;26847:26;;26919:9;26913:4;26909:20;26905:1;26894:9;26890:17;26883:47;26947:131;27073:4;26947:131;:::i;:::-;26939:139;;26666:419;;;:::o;27091:180::-;27139:77;27136:1;27129:88;27236:4;27233:1;27226:15;27260:4;27257:1;27250:15;27277:180;27325:77;27322:1;27315:88;27422:4;27419:1;27412:15;27446:4;27443:1;27436:15;27463:85;27508:7;27537:5;27526:16;;27463:85;;;:::o;27554:158::-;27612:9;27645:61;27663:42;27672:32;27698:5;27672:32;:::i;:::-;27663:42;:::i;:::-;27645:61;:::i;:::-;27632:74;;27554:158;;;:::o;27718:147::-;27813:45;27852:5;27813:45;:::i;:::-;27808:3;27801:58;27718:147;;:::o;27871:114::-;27938:6;27972:5;27966:12;27956:22;;27871:114;;;:::o;27991:184::-;28090:11;28124:6;28119:3;28112:19;28164:4;28159:3;28155:14;28140:29;;27991:184;;;;:::o;28181:132::-;28248:4;28271:3;28263:11;;28301:4;28296:3;28292:14;28284:22;;28181:132;;;:::o;28319:108::-;28396:24;28414:5;28396:24;:::i;:::-;28391:3;28384:37;28319:108;;:::o;28433:179::-;28502:10;28523:46;28565:3;28557:6;28523:46;:::i;:::-;28601:4;28596:3;28592:14;28578:28;;28433:179;;;;:::o;28618:113::-;28688:4;28720;28715:3;28711:14;28703:22;;28618:113;;;:::o;28767:732::-;28886:3;28915:54;28963:5;28915:54;:::i;:::-;28985:86;29064:6;29059:3;28985:86;:::i;:::-;28978:93;;29095:56;29145:5;29095:56;:::i;:::-;29174:7;29205:1;29190:284;29215:6;29212:1;29209:13;29190:284;;;29291:6;29285:13;29318:63;29377:3;29362:13;29318:63;:::i;:::-;29311:70;;29404:60;29457:6;29404:60;:::i;:::-;29394:70;;29250:224;29237:1;29234;29230:9;29225:14;;29190:284;;;29194:14;29490:3;29483:10;;28891:608;;;28767:732;;;;:::o;29505:831::-;29768:4;29806:3;29795:9;29791:19;29783:27;;29820:71;29888:1;29877:9;29873:17;29864:6;29820:71;:::i;:::-;29901:80;29977:2;29966:9;29962:18;29953:6;29901:80;:::i;:::-;30028:9;30022:4;30018:20;30013:2;30002:9;29998:18;29991:48;30056:108;30159:4;30150:6;30056:108;:::i;:::-;30048:116;;30174:72;30242:2;30231:9;30227:18;30218:6;30174:72;:::i;:::-;30256:73;30324:3;30313:9;30309:19;30300:6;30256:73;:::i;:::-;29505:831;;;;;;;;:::o

Swarm Source

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