ETH Price: $3,429.30 (+7.43%)
Gas: 12 Gwei

Token

divprotocol.org (DIV)
 

Overview

Max Total Supply

10,000,000 DIV

Holders

87

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
101,686.525296499272549281 DIV

Value
$0.00
0x00fb6A3165947F8D5d91a66E4c02CEF004f867c5
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:
DivProtocol

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

//https://divprotocol.org/
//https://t.me/divprotocolportal
//https://twitter.com/DivProtocol_Eth

pragma solidity ^0.8.6;

interface IDividendTracker {
    function LP_Token() external view returns (address);

    function accumulativeDividendOf(address _owner) external view returns (uint256);

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

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

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

    function decimals() external view returns (uint8);

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);

    function distributeLPDividends(uint256 amount) external;

    function dividendOf(address _owner) external view returns (uint256);

    function excludeFromDividends(address account, bool value) external;

    function excludedFromDividends(address) external view returns (bool);

    function getAccount(address account) external view returns (address, uint256, uint256, uint256, uint256);

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool);

    function init() external;

    function lastClaimTimes(address) external view returns (uint256);

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

    function owner() external view returns (address);

    function processAccount(address account) external returns (bool);

    function renounceOwnership() external;

    function setBalance(address account, uint256 newBalance) external;

    function totalDividendsDistributed() external view returns (uint256);

    function totalDividendsWithdrawn() external view returns (uint256);

    function totalSupply() external view returns (uint256);

    function trackerRescueETH20Tokens(address recipient, address tokenAddress) external;

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

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

    function transferOwnership(address newOwner) external;

    function updateLP_Token(address _lpToken) external;

    function withdrawDividend() external;

    function withdrawableDividendOf(address _owner) external view returns (uint256);

    function withdrawnDividendOf(address _owner) external view returns (uint256);
}

pragma solidity ^0.8.0;

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

    function token0() external view returns (address);
}

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

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

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

    function WETH() external pure returns (address);

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

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

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

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

// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// OpenZeppelin Contracts v4.4.1 (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;
    }
}

// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

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

// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

pragma solidity ^0.8.21;

contract DivProtocol is ERC20, Ownable {
    IUniswapRouter public router;
    address public pair;

    bool private swapping;
    bool public claimEnabled;
    bool public tradingEnabled;

    IDividendTracker public dividendTracker;

    address public marketingWallet;

    uint256 public swapTokensAtAmount;
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    struct Taxes {
        uint256 liquidity;
        uint256 dev;
    }

    Taxes public taxes = Taxes(3, 2);

    uint256 public tax = 5;

    uint256 private _initialTax = 20;
    uint256 private _reduceTaxAt = 25;
    uint256 private _buyCount = 0;
    uint256 private _sellCount = 0;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SendDividends(uint256 tokensSwapped, uint256 amount);

    constructor(address _dividendTracker) ERC20("divprotocol.org", "DIV") {
        marketingWallet = _msgSender();

        IUniswapRouter _router = IUniswapRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );

        router = _router;
        pair = _pair;

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

        dividendTracker = IDividendTracker(_dividendTracker);
        dividendTracker.init();

        setSwapTokensAtAmount(30000);
        updateMaxWalletAmount(200000);
        setMaxBuyAndSell(200000, 200000);

        _setAutomatedMarketMakerPair(_pair, true);

        dividendTracker.updateLP_Token(pair);

        dividendTracker.excludeFromDividends(address(dividendTracker), true);
        dividendTracker.excludeFromDividends(address(this), true);
        dividendTracker.excludeFromDividends(owner(), true);
        dividendTracker.excludeFromDividends(address(0xdead), true);
        dividendTracker.excludeFromDividends(address(_router), true);

        setExcludeFromMaxWallet(address(_pair), true);
        setExcludeFromMaxWallet(address(this), true);
        setExcludeFromMaxWallet(address(_router), true);

        setExcludeFromFees(owner(), true);
        setExcludeFromFees(address(this), true);

        _mint(owner(), 10000000 * (10 ** 18));
    }

    receive() external payable {}

    function claim() external {
        require(claimEnabled, "Claim not enabled");
        dividendTracker.processAccount(payable(msg.sender));
    }

    function updateMaxWalletAmount(uint256 newNum) public onlyOwner {
        require(newNum >= 100000, "Cannot set maxWallet lower than 1%");
        maxWallet = newNum * 10 ** 18;
    }

    function setMaxBuyAndSell(
        uint256 maxBuy,
        uint256 maxSell
    ) public onlyOwner {
        require(maxBuy >= 100000, "Can't set maxbuy lower than 1% ");
        require(maxSell >= 50000, "Can't set maxsell lower than 0.5% ");
        maxBuyAmount = maxBuy * 10 ** 18;
        maxSellAmount = maxSell * 10 ** 18;
    }

    function setSwapTokensAtAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * 10 ** 18;
    }

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

    function setExcludeFromFees(
        address account,
        bool excluded
    ) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function excludeFromDividends(
        address account,
        bool value
    ) public onlyOwner {
        dividendTracker.excludeFromDividends(account, value);
    }

    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Already enabled");
        tradingEnabled = true;
    }

    function setClaimStatus(bool _status) external onlyOwner {
        claimEnabled = _status;
    }

    function _setAutomatedMarketMakerPair(address newPair, bool value) private {
        require(
            automatedMarketMakerPairs[newPair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[newPair] = value;

        if (value) {
            dividendTracker.excludeFromDividends(newPair, true);
        }

        emit SetAutomatedMarketMakerPair(newPair, value);
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

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

    function withdrawableDividendOf(
        address account
    ) public view returns (uint256) {
        return dividendTracker.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(
        address account
    ) public view returns (uint256) {
        return dividendTracker.balanceOf(account);
    }

    function getAccountInfo(
        address account
    ) external view returns (address, uint256, uint256, uint256, uint256) {
        return dividendTracker.getAccount(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 (
            !_isExcludedFromFees[from] && !_isExcludedFromFees[to] && !swapping
        ) {
            require(tradingEnabled, "Trading not active");
            if (automatedMarketMakerPairs[to]) {
                require(
                    amount <= maxSellAmount,
                    "You are exceeding maxSellAmount"
                );
                _sellCount++;
            } else if (automatedMarketMakerPairs[from]) {
                require(
                    amount <= maxBuyAmount,
                    "You are exceeding maxBuyAmount"
                );
                _buyCount++;
            }
            if (!_isExcludedFromMaxWallet[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Unable to exceed Max Wallet"
                );
            }
        }

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapAndLiquify(swapTokensAtAmount);

            swapping = false;
        }

        bool takeFee = !swapping;

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

        if (!automatedMarketMakerPairs[to] && !automatedMarketMakerPairs[from])
            takeFee = false;

        if (takeFee) {
            uint256 feeAmt;
            if (automatedMarketMakerPairs[to]) {
                feeAmt =
                    (amount * (_sellCount > _reduceTaxAt ? tax : _initialTax)) /
                    100;
            } else if (automatedMarketMakerPairs[from]) {
                feeAmt =
                    (amount * (_buyCount > _reduceTaxAt ? tax : _initialTax)) /
                    100;
            }

            amount = amount - feeAmt;
            super._transfer(from, address(this), feeAmt);
        }
        super._transfer(from, to, amount);

        try dividendTracker.setBalance(from, balanceOf(from)) {} catch {}
        try dividendTracker.setBalance(to, balanceOf(to)) {} catch {}
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 toSwapForLiq = ((tokens * taxes.liquidity) / tax) / 2;
        uint256 tokensToAddLiquidityWith = ((tokens * taxes.liquidity) / tax) /
            2;
        uint256 toSwapForDev = (tokens * taxes.dev) / tax;

        swapTokensForETH(toSwapForLiq);

        uint256 currentbalance = address(this).balance;

        if (currentbalance > 0) {
            // Add liquidity to uni
            addLiquidityAndUPdateDiv(tokensToAddLiquidityWith, currentbalance);
        }

        swapTokensForETH(toSwapForDev);

        uint256 EthTaxBalance = address(this).balance;

        // Send ETH to dev
        uint256 devAmt = EthTaxBalance;

        if (devAmt > 0) {
            (bool success, ) = payable(marketingWallet).call{value: devAmt}("");
            require(success, "Failed to send ETH to dev wallet");
        }
    }

    function updateRouter(address newRouter) external onlyOwner {
        router = IUniswapRouter(newRouter);
    }

    function distributionLiquidity(uint256 amount) public onlyOwner {
        bool success = IERC20(pair).transferFrom(
            msg.sender,
            address(dividendTracker),
            amount
        );
        if (success) {
            dividendTracker.distributeLPDividends(amount);
        }
    }

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

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

    function addLiquidityAndUPdateDiv(
        uint256 tokenAmount,
        uint256 ethAmount
    ) private {
        (, , uint256 liquidity) = router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(dividendTracker),
            block.timestamp
        );
        dividendTracker.distributeLPDividends(liquidity);
        emit SendDividends(tokenAmount, liquidity);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dividendTracker","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distributionLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract IDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setClaimStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxBuyAndSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","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":"tax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600381526020016002815250600e5f820151815f01556020820151816001015550506005601055601460115560196012555f6013555f60145534801562000054575f80fd5b5060405162005f1c38038062005f1c83398181016040528101906200007a91906200133a565b6040518060400160405280600f81526020017f64697670726f746f636f6c2e6f726700000000000000000000000000000000008152506040518060400160405280600381526020017f44495600000000000000000000000000000000000000000000000000000000008152508160039081620000f79190620015ce565b508060049081620001099190620015ce565b5050506200012c620001206200091c60201b60201c565b6200092360201b60201c565b6200013c6200091c60201b60201c565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200020491906200133a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200029091906200133a565b6040518363ffffffff1660e01b8152600401620002af929190620016c3565b6020604051808303815f875af1158015620002cc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f291906200133a565b90508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003c83060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620009e660201b60201c565b8260085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1c7392a6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156200046f575f80fd5b505af115801562000482573d5f803e3d5ffd5b505050506200049961753062000bb160201b60201c565b620004ad62030d4062000be060201b60201c565b620004c262030d408062000c5860201b60201c565b620004d581600162000d3560201b60201c565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344b6bd9e60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401620005529190620016ee565b5f604051808303815f87803b1580156200056a575f80fd5b505af11580156200057d573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518363ffffffff1660e01b81526004016200060192919062001725565b5f604051808303815f87803b15801562000619575f80fd5b505af11580156200062c573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a03060016040518363ffffffff1660e01b81526004016200068f92919062001725565b5f604051808303815f87803b158015620006a7575f80fd5b505af1158015620006ba573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a06200070b62000efb60201b60201c565b60016040518363ffffffff1660e01b81526004016200072c92919062001725565b5f604051808303815f87803b15801562000744575f80fd5b505af115801562000757573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a061dead60016040518363ffffffff1660e01b8152600401620007bc92919062001725565b5f604051808303815f87803b158015620007d4575f80fd5b505af1158015620007e7573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a08360016040518363ffffffff1660e01b81526004016200084a92919062001725565b5f604051808303815f87803b15801562000862575f80fd5b505af115801562000875573d5f803e3d5ffd5b505050506200088c81600162000f2360201b60201c565b6200089f30600162000f2360201b60201c565b620008b282600162000f2360201b60201c565b620008d4620008c662000efb60201b60201c565b600162000f8b60201b60201c565b620008e730600162000f8b60201b60201c565b62000913620008fb62000efb60201b60201c565b6a084595161401484a000000620010d560201b60201c565b50505062001d1a565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000a57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a4e90620017d4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ac8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000abf9062001868565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000ba4919062001899565b60405180910390a3505050565b62000bc16200123a60201b60201c565b670de0b6b3a76400008162000bd79190620018e1565b600a8190555050565b62000bf06200123a60201b60201c565b620186a081101562000c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c30906200199f565b60405180910390fd5b670de0b6b3a76400008162000c4f9190620018e1565b600d8190555050565b62000c686200123a60201b60201c565b620186a082101562000cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ca89062001a0d565b60405180910390fd5b61c35081101562000cf9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cf09062001aa1565b60405180910390fd5b670de0b6b3a76400008262000d0f9190620018e1565b600b81905550670de0b6b3a76400008162000d2b9190620018e1565b600c819055505050565b80151560165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150362000dc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dbe9062001b35565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550801562000eb15760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a08360016040518363ffffffff1660e01b815260040162000e8192919062001725565b5f604051808303815f87803b15801562000e99575f80fd5b505af115801562000eac573d5f803e3d5ffd5b505050505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000f336200123a60201b60201c565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b62000f9b6200123a60201b60201c565b80151560155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036200102d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010249062001bc9565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620010c9919062001be9565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001146576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200113d9062001c52565b60405180910390fd5b620011595f8383620012cb60201b60201c565b8060025f8282546200116c919062001c72565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200121b919062001899565b60405180910390a3620012365f8383620012d060201b60201c565b5050565b6200124a6200091c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200127062000efb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620012c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620012c09062001cfa565b60405180910390fd5b565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200130482620012d9565b9050919050565b6200131681620012f8565b811462001321575f80fd5b50565b5f8151905062001334816200130b565b92915050565b5f60208284031215620013525762001351620012d5565b5b5f620013618482850162001324565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620013e657607f821691505b602082108103620013fc57620013fb620013a1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620014607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001423565b6200146c868362001423565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620014b6620014b0620014aa8462001484565b6200148d565b62001484565b9050919050565b5f819050919050565b620014d18362001496565b620014e9620014e082620014bd565b8484546200142f565b825550505050565b5f90565b620014ff620014f1565b6200150c818484620014c6565b505050565b5b818110156200153357620015275f82620014f5565b60018101905062001512565b5050565b601f82111562001582576200154c8162001402565b620015578462001414565b8101602085101562001567578190505b6200157f620015768562001414565b83018262001511565b50505b505050565b5f82821c905092915050565b5f620015a45f198460080262001587565b1980831691505092915050565b5f620015be838362001593565b9150826002028217905092915050565b620015d9826200136a565b67ffffffffffffffff811115620015f557620015f462001374565b5b620016018254620013ce565b6200160e82828562001537565b5f60209050601f83116001811462001644575f84156200162f578287015190505b6200163b8582620015b1565b865550620016aa565b601f198416620016548662001402565b5f5b828110156200167d5784890151825560018201915060208501945060208101905062001656565b868310156200169d578489015162001699601f89168262001593565b8355505b6001600288020188555050505b505050505050565b620016bd81620012f8565b82525050565b5f604082019050620016d85f830185620016b2565b620016e76020830184620016b2565b9392505050565b5f602082019050620017035f830184620016b2565b92915050565b5f8115159050919050565b6200171f8162001709565b82525050565b5f6040820190506200173a5f830185620016b2565b62001749602083018462001714565b9392505050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f620017bc60248362001750565b9150620017c98262001760565b604082019050919050565b5f6020820190508181035f830152620017ed81620017ae565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200185060228362001750565b91506200185d82620017f4565b604082019050919050565b5f6020820190508181035f830152620018818162001842565b9050919050565b620018938162001484565b82525050565b5f602082019050620018ae5f83018462001888565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620018ed8262001484565b9150620018fa8362001484565b92508282026200190a8162001484565b91508282048414831517620019245762001923620018b4565b5b5092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200198760228362001750565b915062001994826200192b565b604082019050919050565b5f6020820190508181035f830152620019b88162001979565b9050919050565b7f43616e277420736574206d6178627579206c6f776572207468616e20312520005f82015250565b5f620019f5601f8362001750565b915062001a0282620019bf565b602082019050919050565b5f6020820190508181035f83015262001a2681620019e7565b9050919050565b7f43616e277420736574206d617873656c6c206c6f776572207468616e20302e355f8201527f2520000000000000000000000000000000000000000000000000000000000000602082015250565b5f62001a8960228362001750565b915062001a968262001a2d565b604082019050919050565b5f6020820190508181035f83015262001aba8162001a7b565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b6572207061697220697320615f8201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b5f62001b1d60388362001750565b915062001b2a8262001ac1565b604082019050919050565b5f6020820190508181035f83015262001b4e8162001b0f565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f62001bb1602a8362001750565b915062001bbe8262001b55565b604082019050919050565b5f6020820190508181035f83015262001be28162001ba3565b9050919050565b5f60208201905062001bfe5f83018462001714565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001c3a601f8362001750565b915062001c478262001c04565b602082019050919050565b5f6020820190508181035f83015262001c6b8162001c2c565b9050919050565b5f62001c7e8262001484565b915062001c8b8362001484565b925082820190508082111562001ca65762001ca5620018b4565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62001ce260208362001750565b915062001cef8262001cac565b602082019050919050565b5f6020820190508181035f83015262001d138162001cd4565b9050919050565b6141f48062001d285f395ff3fe60806040526004361061025f575f3560e01c80637b510fe811610143578063a9059cbb116100b5578063d63cad2211610079578063d63cad22146108fb578063dd62ed3e14610923578063e2f456051461095f578063f2fde38b14610989578063f887ea40146109b1578063f8b45b05146109db57610266565b8063a9059cbb1461080b578063afa4f3b214610847578063b62496f51461086f578063c18bc195146108ab578063c851cc32146108d357610266565b806395d89b411161010757806395d89b41146106ed57806399c8d55614610717578063a457c2d714610741578063a6ca5d241461077d578063a8aa1b31146107a5578063a8b9d240146107cf57610266565b80637b510fe81461061b57806388e765ff1461065b5780638a8c523c146106855780638da5cb5b1461069b578063929f1360146106c557610266565b80634ada218b116101dc5780636843cd84116101a05780636843cd841461051057806370a082311461054c578063715018a614610588578063728f8eea1461059e57806375f0a874146105c957806379b447bd146105f357610266565b80634ada218b146104425780634e71d92d1461046c5780634fbee19314610482578063654f97a3146104be57806366d602ae146104e657610266565b80632866ed21116102235780632866ed211461035e5780632c1f52161461038857806330bb4cff146103b2578063313ce567146103dc578063395093511461040657610266565b80630483f7a01461026a57806306fdde0314610292578063095ea7b3146102bc57806318160ddd146102f857806323b872dd1461032257610266565b3661026657005b5f80fd5b348015610275575f80fd5b50610290600480360381019061028b9190612d54565b610a05565b005b34801561029d575f80fd5b506102a6610a9a565b6040516102b39190612e1c565b60405180910390f35b3480156102c7575f80fd5b506102e260048036038101906102dd9190612e6f565b610b2a565b6040516102ef9190612ebc565b60405180910390f35b348015610303575f80fd5b5061030c610b4c565b6040516103199190612ee4565b60405180910390f35b34801561032d575f80fd5b5061034860048036038101906103439190612efd565b610b55565b6040516103559190612ebc565b60405180910390f35b348015610369575f80fd5b50610372610b83565b60405161037f9190612ebc565b60405180910390f35b348015610393575f80fd5b5061039c610b96565b6040516103a99190612fa8565b60405180910390f35b3480156103bd575f80fd5b506103c6610bbb565b6040516103d39190612ee4565b60405180910390f35b3480156103e7575f80fd5b506103f0610c4f565b6040516103fd9190612fdc565b60405180910390f35b348015610411575f80fd5b5061042c60048036038101906104279190612e6f565b610c57565b6040516104399190612ebc565b60405180910390f35b34801561044d575f80fd5b50610456610c8d565b6040516104639190612ebc565b60405180910390f35b348015610477575f80fd5b50610480610ca0565b005b34801561048d575f80fd5b506104a860048036038101906104a39190612ff5565b610d8c565b6040516104b59190612ebc565b60405180910390f35b3480156104c9575f80fd5b506104e460048036038101906104df9190613020565b610dde565b005b3480156104f1575f80fd5b506104fa610e03565b6040516105079190612ee4565b60405180910390f35b34801561051b575f80fd5b5061053660048036038101906105319190612ff5565b610e09565b6040516105439190612ee4565b60405180910390f35b348015610557575f80fd5b50610572600480360381019061056d9190612ff5565b610eaa565b60405161057f9190612ee4565b60405180910390f35b348015610593575f80fd5b5061059c610eef565b005b3480156105a9575f80fd5b506105b2610f02565b6040516105c092919061304b565b60405180910390f35b3480156105d4575f80fd5b506105dd610f13565b6040516105ea9190613081565b60405180910390f35b3480156105fe575f80fd5b506106196004803603810190610614919061309a565b610f38565b005b348015610626575f80fd5b50610641600480360381019061063c9190612ff5565b611003565b6040516106529594939291906130d8565b60405180910390f35b348015610666575f80fd5b5061066f6110b4565b60405161067c9190612ee4565b60405180910390f35b348015610690575f80fd5b506106996110ba565b005b3480156106a6575f80fd5b506106af61112f565b6040516106bc9190613081565b60405180910390f35b3480156106d0575f80fd5b506106eb60048036038101906106e69190612d54565b611157565b005b3480156106f8575f80fd5b506107016111b7565b60405161070e9190612e1c565b60405180910390f35b348015610722575f80fd5b5061072b611247565b6040516107389190612ee4565b60405180910390f35b34801561074c575f80fd5b5061076760048036038101906107629190612e6f565b61124d565b6040516107749190612ebc565b60405180910390f35b348015610788575f80fd5b506107a3600480360381019061079e9190613129565b6112c2565b005b3480156107b0575f80fd5b506107b961141e565b6040516107c69190613081565b60405180910390f35b3480156107da575f80fd5b506107f560048036038101906107f09190612ff5565b611443565b6040516108029190612ee4565b60405180910390f35b348015610816575f80fd5b50610831600480360381019061082c9190612e6f565b6114e4565b60405161083e9190612ebc565b60405180910390f35b348015610852575f80fd5b5061086d60048036038101906108689190613129565b611506565b005b34801561087a575f80fd5b5061089560048036038101906108909190612ff5565b61152b565b6040516108a29190612ebc565b60405180910390f35b3480156108b6575f80fd5b506108d160048036038101906108cc9190613129565b611548565b005b3480156108de575f80fd5b506108f960048036038101906108f49190612ff5565b6115b3565b005b348015610906575f80fd5b50610921600480360381019061091c9190612d54565b6115fe565b005b34801561092e575f80fd5b5061094960048036038101906109449190613154565b61173b565b6040516109569190612ee4565b60405180910390f35b34801561096a575f80fd5b506109736117bd565b6040516109809190612ee4565b60405180910390f35b348015610994575f80fd5b506109af60048036038101906109aa9190612ff5565b6117c3565b005b3480156109bc575f80fd5b506109c5611845565b6040516109d291906131b2565b60405180910390f35b3480156109e6575f80fd5b506109ef61186a565b6040516109fc9190612ee4565b60405180910390f35b610a0d611870565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a083836040518363ffffffff1660e01b8152600401610a699291906131cb565b5f604051808303815f87803b158015610a80575f80fd5b505af1158015610a92573d5f803e3d5ffd5b505050505050565b606060038054610aa99061321f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad59061321f565b8015610b205780601f10610af757610100808354040283529160200191610b20565b820191905f5260205f20905b815481529060010190602001808311610b0357829003601f168201915b5050505050905090565b5f80610b346118ee565b9050610b418185856118f5565b600191505092915050565b5f600254905090565b5f80610b5f6118ee565b9050610b6c858285611ab8565b610b77858585611b43565b60019150509392505050565b600760159054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4a9190613263565b905090565b5f6012905090565b5f80610c616118ee565b9050610c82818585610c73858961173b565b610c7d91906132bb565b6118f5565b600191505092915050565b600760169054906101000a900460ff1681565b600760159054906101000a900460ff16610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690613338565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663807ab4f7336040518263ffffffff1660e01b8152600401610d499190613376565b6020604051808303815f875af1158015610d65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8991906133a3565b50565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610de6611870565b80600760156101000a81548160ff02191690831515021790555050565b600c5481565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610e649190613081565b602060405180830381865afa158015610e7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea39190613263565b9050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ef7611870565b610f005f612467565b565b600e805f0154908060010154905082565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f40611870565b620186a0821015610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90613418565b60405180910390fd5b61c350811015610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc2906134a6565b60405180910390fd5b670de0b6b3a764000082610fdf91906134c4565b600b81905550670de0b6b3a764000081610ff991906134c4565b600c819055505050565b5f805f805f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f1876040518263ffffffff1660e01b81526004016110629190613081565b60a060405180830381865afa15801561107d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a19190613519565b9450945094509450945091939590929450565b600b5481565b6110c2611870565b600760169054906101000a900460ff1615611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906135da565b60405180910390fd5b6001600760166101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61115f611870565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6060600480546111c69061321f565b80601f01602080910402602001604051908101604052809291908181526020018280546111f29061321f565b801561123d5780601f106112145761010080835404028352916020019161123d565b820191905f5260205f20905b81548152906001019060200180831161122057829003601f168201915b5050505050905090565b60105481565b5f806112576118ee565b90505f611264828661173b565b9050838110156112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a090613668565b60405180910390fd5b6112b682868684036118f5565b60019250505092915050565b6112ca611870565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b815260040161134a93929190613686565b6020604051808303815f875af1158015611366573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061138a91906133a3565b9050801561141a5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ede6ad9c836040518263ffffffff1660e01b81526004016113ec9190612ee4565b5f604051808303815f87803b158015611403575f80fd5b505af1158015611415573d5f803e3d5ffd5b505050505b5050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b815260040161149e9190613081565b602060405180830381865afa1580156114b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114dd9190613263565b9050919050565b5f806114ee6118ee565b90506114fb818585611b43565b600191505092915050565b61150e611870565b670de0b6b3a76400008161152291906134c4565b600a8190555050565b6016602052805f5260405f205f915054906101000a900460ff1681565b611550611870565b620186a0811015611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d9061372b565b60405180910390fd5b670de0b6b3a7640000816115aa91906134c4565b600d8190555050565b6115bb611870565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611606611870565b80151560155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c906137b9565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161172f9190612ebc565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6117cb611870565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090613847565b60405180910390fd5b61184281612467565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6118786118ee565b73ffffffffffffffffffffffffffffffffffffffff1661189661112f565b73ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906138af565b60405180910390fd5b565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a9061393d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c8906139cb565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611aab9190612ee4565b60405180910390a3505050565b5f611ac3848461173b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b3d5781811015611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2690613a33565b60405180910390fd5b611b3c84848484036118f5565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890613ac1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1690613b4f565b60405180910390fd5b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611cbd575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611cd65750600760149054906101000a900460ff16155b15611f2f57600760169054906101000a900460ff16611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2190613bb7565b60405180910390fd5b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611dda57600c54811115611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590613c1f565b60405180910390fd5b60145f815480929190611dd090613c3d565b9190505550611e87565b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611e8657600b54811115611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590613cce565b60405180910390fd5b60135f815480929190611e8090613c3d565b91905055505b5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611f2e57600d54611ee183610eaa565b82611eec91906132bb565b1115611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490613d36565b60405180910390fd5b5b5b5f8103611f4657611f4183835f61252a565b612462565b5f611f5030610eaa565b90505f600a548210159050808015611f755750600760149054906101000a900460ff16155b8015611fc7575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b801561201a575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561206d575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120b3576001600760146101000a81548160ff021916908315150217905550612098600a54612796565b5f600760146101000a81548160ff0219169083151502179055505b5f600760149054906101000a900460ff1615905060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612162575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561216b575f90505b60165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612209575060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612212575f90505b8015612339575f60165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561229d5760646012546014541161227d57601154612281565b6010545b8661228c91906134c4565b6122969190613d81565b905061231e565b60165f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561231d5760646012546013541161230157601154612305565b6010545b8661231091906134c4565b61231a9190613d81565b90505b5b808561232a9190613db1565b945061233787308361252a565b505b61234486868661252a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc8761238b89610eaa565b6040518363ffffffff1660e01b81526004016123a8929190613de4565b5f604051808303815f87803b1580156123bf575f80fd5b505af19250505080156123d0575060015b5060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc8661241888610eaa565b6040518363ffffffff1660e01b8152600401612435929190613de4565b5f604051808303815f87803b15801561244c575f80fd5b505af192505050801561245d575060015b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258f90613ac1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd90613b4f565b60405180910390fd5b61261183838361291c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268b90613e7b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161277d9190612ee4565b60405180910390a3612790848484612921565b50505050565b5f6002601054600e5f0154846127ac91906134c4565b6127b69190613d81565b6127c09190613d81565b90505f6002601054600e5f0154856127d891906134c4565b6127e29190613d81565b6127ec9190613d81565b90505f601054600e600101548561280391906134c4565b61280d9190613d81565b905061281883612926565b5f4790505f81111561282f5761282e8382612b30565b5b61283882612926565b5f4790505f8190505f811115612913575f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161288e90613ec6565b5f6040518083038185875af1925050503d805f81146128c8576040519150601f19603f3d011682016040523d82523d5f602084013e6128cd565b606091505b5050905080612911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290890613f24565b60405180910390fd5b505b50505050505050565b505050565b505050565b5f600267ffffffffffffffff81111561294257612941613f42565b5b6040519080825280602002602001820160405280156129705781602001602082028036833780820191505090505b50905030815f8151811061298757612986613f6f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a4f9190613f9c565b81600181518110612a6357612a62613f6f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612aff9594939291906140b7565b5f604051808303815f87803b158015612b16575f80fd5b505af1158015612b28573d5f803e3d5ffd5b505050505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330865f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612bb79695949392919061410f565b60606040518083038185885af1158015612bd3573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612bf8919061416e565b9250505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ede6ad9c826040518263ffffffff1660e01b8152600401612c569190612ee4565b5f604051808303815f87803b158015612c6d575f80fd5b505af1158015612c7f573d5f803e3d5ffd5b505050507f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc38382604051612cb492919061304b565b60405180910390a1505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612cee82612cc5565b9050919050565b612cfe81612ce4565b8114612d08575f80fd5b50565b5f81359050612d1981612cf5565b92915050565b5f8115159050919050565b612d3381612d1f565b8114612d3d575f80fd5b50565b5f81359050612d4e81612d2a565b92915050565b5f8060408385031215612d6a57612d69612cc1565b5b5f612d7785828601612d0b565b9250506020612d8885828601612d40565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612dc9578082015181840152602081019050612dae565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612dee82612d92565b612df88185612d9c565b9350612e08818560208601612dac565b612e1181612dd4565b840191505092915050565b5f6020820190508181035f830152612e348184612de4565b905092915050565b5f819050919050565b612e4e81612e3c565b8114612e58575f80fd5b50565b5f81359050612e6981612e45565b92915050565b5f8060408385031215612e8557612e84612cc1565b5b5f612e9285828601612d0b565b9250506020612ea385828601612e5b565b9150509250929050565b612eb681612d1f565b82525050565b5f602082019050612ecf5f830184612ead565b92915050565b612ede81612e3c565b82525050565b5f602082019050612ef75f830184612ed5565b92915050565b5f805f60608486031215612f1457612f13612cc1565b5b5f612f2186828701612d0b565b9350506020612f3286828701612d0b565b9250506040612f4386828701612e5b565b9150509250925092565b5f819050919050565b5f612f70612f6b612f6684612cc5565b612f4d565b612cc5565b9050919050565b5f612f8182612f56565b9050919050565b5f612f9282612f77565b9050919050565b612fa281612f88565b82525050565b5f602082019050612fbb5f830184612f99565b92915050565b5f60ff82169050919050565b612fd681612fc1565b82525050565b5f602082019050612fef5f830184612fcd565b92915050565b5f6020828403121561300a57613009612cc1565b5b5f61301784828501612d0b565b91505092915050565b5f6020828403121561303557613034612cc1565b5b5f61304284828501612d40565b91505092915050565b5f60408201905061305e5f830185612ed5565b61306b6020830184612ed5565b9392505050565b61307b81612ce4565b82525050565b5f6020820190506130945f830184613072565b92915050565b5f80604083850312156130b0576130af612cc1565b5b5f6130bd85828601612e5b565b92505060206130ce85828601612e5b565b9150509250929050565b5f60a0820190506130eb5f830188613072565b6130f86020830187612ed5565b6131056040830186612ed5565b6131126060830185612ed5565b61311f6080830184612ed5565b9695505050505050565b5f6020828403121561313e5761313d612cc1565b5b5f61314b84828501612e5b565b91505092915050565b5f806040838503121561316a57613169612cc1565b5b5f61317785828601612d0b565b925050602061318885828601612d0b565b9150509250929050565b5f61319c82612f77565b9050919050565b6131ac81613192565b82525050565b5f6020820190506131c55f8301846131a3565b92915050565b5f6040820190506131de5f830185613072565b6131eb6020830184612ead565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061323657607f821691505b602082108103613249576132486131f2565b5b50919050565b5f8151905061325d81612e45565b92915050565b5f6020828403121561327857613277612cc1565b5b5f6132858482850161324f565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6132c582612e3c565b91506132d083612e3c565b92508282019050808211156132e8576132e761328e565b5b92915050565b7f436c61696d206e6f7420656e61626c65640000000000000000000000000000005f82015250565b5f613322601183612d9c565b915061332d826132ee565b602082019050919050565b5f6020820190508181035f83015261334f81613316565b9050919050565b5f61336082612f77565b9050919050565b61337081613356565b82525050565b5f6020820190506133895f830184613367565b92915050565b5f8151905061339d81612d2a565b92915050565b5f602082840312156133b8576133b7612cc1565b5b5f6133c58482850161338f565b91505092915050565b7f43616e277420736574206d6178627579206c6f776572207468616e20312520005f82015250565b5f613402601f83612d9c565b915061340d826133ce565b602082019050919050565b5f6020820190508181035f83015261342f816133f6565b9050919050565b7f43616e277420736574206d617873656c6c206c6f776572207468616e20302e355f8201527f2520000000000000000000000000000000000000000000000000000000000000602082015250565b5f613490602283612d9c565b915061349b82613436565b604082019050919050565b5f6020820190508181035f8301526134bd81613484565b9050919050565b5f6134ce82612e3c565b91506134d983612e3c565b92508282026134e781612e3c565b915082820484148315176134fe576134fd61328e565b5b5092915050565b5f8151905061351381612cf5565b92915050565b5f805f805f60a0868803121561353257613531612cc1565b5b5f61353f88828901613505565b95505060206135508882890161324f565b94505060406135618882890161324f565b93505060606135728882890161324f565b92505060806135838882890161324f565b9150509295509295909350565b7f416c726561647920656e61626c656400000000000000000000000000000000005f82015250565b5f6135c4600f83612d9c565b91506135cf82613590565b602082019050919050565b5f6020820190508181035f8301526135f1816135b8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613652602583612d9c565b915061365d826135f8565b604082019050919050565b5f6020820190508181035f83015261367f81613646565b9050919050565b5f6060820190506136995f830186613072565b6136a66020830185613072565b6136b36040830184612ed5565b949350505050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613715602283612d9c565b9150613720826136bb565b604082019050919050565b5f6020820190508181035f83015261374281613709565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f6137a3602a83612d9c565b91506137ae82613749565b604082019050919050565b5f6020820190508181035f8301526137d081613797565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613831602683612d9c565b915061383c826137d7565b604082019050919050565b5f6020820190508181035f83015261385e81613825565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613899602083612d9c565b91506138a482613865565b602082019050919050565b5f6020820190508181035f8301526138c68161388d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613927602483612d9c565b9150613932826138cd565b604082019050919050565b5f6020820190508181035f8301526139548161391b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139b5602283612d9c565b91506139c08261395b565b604082019050919050565b5f6020820190508181035f8301526139e2816139a9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613a1d601d83612d9c565b9150613a28826139e9565b602082019050919050565b5f6020820190508181035f830152613a4a81613a11565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613aab602583612d9c565b9150613ab682613a51565b604082019050919050565b5f6020820190508181035f830152613ad881613a9f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613b39602383612d9c565b9150613b4482613adf565b604082019050919050565b5f6020820190508181035f830152613b6681613b2d565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f613ba1601283612d9c565b9150613bac82613b6d565b602082019050919050565b5f6020820190508181035f830152613bce81613b95565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c416d6f756e74005f82015250565b5f613c09601f83612d9c565b9150613c1482613bd5565b602082019050919050565b5f6020820190508181035f830152613c3681613bfd565b9050919050565b5f613c4782612e3c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613c7957613c7861328e565b5b600182019050919050565b7f596f752061726520657863656564696e67206d6178427579416d6f756e7400005f82015250565b5f613cb8601e83612d9c565b9150613cc382613c84565b602082019050919050565b5f6020820190508181035f830152613ce581613cac565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c657400000000005f82015250565b5f613d20601b83612d9c565b9150613d2b82613cec565b602082019050919050565b5f6020820190508181035f830152613d4d81613d14565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d8b82612e3c565b9150613d9683612e3c565b925082613da657613da5613d54565b5b828204905092915050565b5f613dbb82612e3c565b9150613dc683612e3c565b9250828203905081811115613dde57613ddd61328e565b5b92915050565b5f604082019050613df75f830185613072565b613e046020830184612ed5565b9392505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613e65602683612d9c565b9150613e7082613e0b565b604082019050919050565b5f6020820190508181035f830152613e9281613e59565b9050919050565b5f81905092915050565b50565b5f613eb15f83613e99565b9150613ebc82613ea3565b5f82019050919050565b5f613ed082613ea6565b9150819050919050565b7f4661696c656420746f2073656e642045544820746f206465762077616c6c65745f82015250565b5f613f0e602083612d9c565b9150613f1982613eda565b602082019050919050565b5f6020820190508181035f830152613f3b81613f02565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613fb157613fb0612cc1565b5b5f613fbe84828501613505565b91505092915050565b5f819050919050565b5f613fea613fe5613fe084613fc7565b612f4d565b612e3c565b9050919050565b613ffa81613fd0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61403281612ce4565b82525050565b5f6140438383614029565b60208301905092915050565b5f602082019050919050565b5f61406582614000565b61406f818561400a565b935061407a8361401a565b805f5b838110156140aa5781516140918882614038565b975061409c8361404f565b92505060018101905061407d565b5085935050505092915050565b5f60a0820190506140ca5f830188612ed5565b6140d76020830187613ff1565b81810360408301526140e9818661405b565b90506140f86060830185613072565b6141056080830184612ed5565b9695505050505050565b5f60c0820190506141225f830189613072565b61412f6020830188612ed5565b61413c6040830187613ff1565b6141496060830186613ff1565b6141566080830185613072565b61416360a0830184612ed5565b979650505050505050565b5f805f6060848603121561418557614184612cc1565b5b5f6141928682870161324f565b93505060206141a38682870161324f565b92505060406141b48682870161324f565b915050925092509256fea2646970667358221220c669fc671d61e4d9de3b96202fc6d795130c81d388a6bfbe7f7282bfc231683164736f6c6343000815003300000000000000000000000003eb3ddec3c0681810d732e846a0903d8df366c8

Deployed Bytecode

0x60806040526004361061025f575f3560e01c80637b510fe811610143578063a9059cbb116100b5578063d63cad2211610079578063d63cad22146108fb578063dd62ed3e14610923578063e2f456051461095f578063f2fde38b14610989578063f887ea40146109b1578063f8b45b05146109db57610266565b8063a9059cbb1461080b578063afa4f3b214610847578063b62496f51461086f578063c18bc195146108ab578063c851cc32146108d357610266565b806395d89b411161010757806395d89b41146106ed57806399c8d55614610717578063a457c2d714610741578063a6ca5d241461077d578063a8aa1b31146107a5578063a8b9d240146107cf57610266565b80637b510fe81461061b57806388e765ff1461065b5780638a8c523c146106855780638da5cb5b1461069b578063929f1360146106c557610266565b80634ada218b116101dc5780636843cd84116101a05780636843cd841461051057806370a082311461054c578063715018a614610588578063728f8eea1461059e57806375f0a874146105c957806379b447bd146105f357610266565b80634ada218b146104425780634e71d92d1461046c5780634fbee19314610482578063654f97a3146104be57806366d602ae146104e657610266565b80632866ed21116102235780632866ed211461035e5780632c1f52161461038857806330bb4cff146103b2578063313ce567146103dc578063395093511461040657610266565b80630483f7a01461026a57806306fdde0314610292578063095ea7b3146102bc57806318160ddd146102f857806323b872dd1461032257610266565b3661026657005b5f80fd5b348015610275575f80fd5b50610290600480360381019061028b9190612d54565b610a05565b005b34801561029d575f80fd5b506102a6610a9a565b6040516102b39190612e1c565b60405180910390f35b3480156102c7575f80fd5b506102e260048036038101906102dd9190612e6f565b610b2a565b6040516102ef9190612ebc565b60405180910390f35b348015610303575f80fd5b5061030c610b4c565b6040516103199190612ee4565b60405180910390f35b34801561032d575f80fd5b5061034860048036038101906103439190612efd565b610b55565b6040516103559190612ebc565b60405180910390f35b348015610369575f80fd5b50610372610b83565b60405161037f9190612ebc565b60405180910390f35b348015610393575f80fd5b5061039c610b96565b6040516103a99190612fa8565b60405180910390f35b3480156103bd575f80fd5b506103c6610bbb565b6040516103d39190612ee4565b60405180910390f35b3480156103e7575f80fd5b506103f0610c4f565b6040516103fd9190612fdc565b60405180910390f35b348015610411575f80fd5b5061042c60048036038101906104279190612e6f565b610c57565b6040516104399190612ebc565b60405180910390f35b34801561044d575f80fd5b50610456610c8d565b6040516104639190612ebc565b60405180910390f35b348015610477575f80fd5b50610480610ca0565b005b34801561048d575f80fd5b506104a860048036038101906104a39190612ff5565b610d8c565b6040516104b59190612ebc565b60405180910390f35b3480156104c9575f80fd5b506104e460048036038101906104df9190613020565b610dde565b005b3480156104f1575f80fd5b506104fa610e03565b6040516105079190612ee4565b60405180910390f35b34801561051b575f80fd5b5061053660048036038101906105319190612ff5565b610e09565b6040516105439190612ee4565b60405180910390f35b348015610557575f80fd5b50610572600480360381019061056d9190612ff5565b610eaa565b60405161057f9190612ee4565b60405180910390f35b348015610593575f80fd5b5061059c610eef565b005b3480156105a9575f80fd5b506105b2610f02565b6040516105c092919061304b565b60405180910390f35b3480156105d4575f80fd5b506105dd610f13565b6040516105ea9190613081565b60405180910390f35b3480156105fe575f80fd5b506106196004803603810190610614919061309a565b610f38565b005b348015610626575f80fd5b50610641600480360381019061063c9190612ff5565b611003565b6040516106529594939291906130d8565b60405180910390f35b348015610666575f80fd5b5061066f6110b4565b60405161067c9190612ee4565b60405180910390f35b348015610690575f80fd5b506106996110ba565b005b3480156106a6575f80fd5b506106af61112f565b6040516106bc9190613081565b60405180910390f35b3480156106d0575f80fd5b506106eb60048036038101906106e69190612d54565b611157565b005b3480156106f8575f80fd5b506107016111b7565b60405161070e9190612e1c565b60405180910390f35b348015610722575f80fd5b5061072b611247565b6040516107389190612ee4565b60405180910390f35b34801561074c575f80fd5b5061076760048036038101906107629190612e6f565b61124d565b6040516107749190612ebc565b60405180910390f35b348015610788575f80fd5b506107a3600480360381019061079e9190613129565b6112c2565b005b3480156107b0575f80fd5b506107b961141e565b6040516107c69190613081565b60405180910390f35b3480156107da575f80fd5b506107f560048036038101906107f09190612ff5565b611443565b6040516108029190612ee4565b60405180910390f35b348015610816575f80fd5b50610831600480360381019061082c9190612e6f565b6114e4565b60405161083e9190612ebc565b60405180910390f35b348015610852575f80fd5b5061086d60048036038101906108689190613129565b611506565b005b34801561087a575f80fd5b5061089560048036038101906108909190612ff5565b61152b565b6040516108a29190612ebc565b60405180910390f35b3480156108b6575f80fd5b506108d160048036038101906108cc9190613129565b611548565b005b3480156108de575f80fd5b506108f960048036038101906108f49190612ff5565b6115b3565b005b348015610906575f80fd5b50610921600480360381019061091c9190612d54565b6115fe565b005b34801561092e575f80fd5b5061094960048036038101906109449190613154565b61173b565b6040516109569190612ee4565b60405180910390f35b34801561096a575f80fd5b506109736117bd565b6040516109809190612ee4565b60405180910390f35b348015610994575f80fd5b506109af60048036038101906109aa9190612ff5565b6117c3565b005b3480156109bc575f80fd5b506109c5611845565b6040516109d291906131b2565b60405180910390f35b3480156109e6575f80fd5b506109ef61186a565b6040516109fc9190612ee4565b60405180910390f35b610a0d611870565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a083836040518363ffffffff1660e01b8152600401610a699291906131cb565b5f604051808303815f87803b158015610a80575f80fd5b505af1158015610a92573d5f803e3d5ffd5b505050505050565b606060038054610aa99061321f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad59061321f565b8015610b205780601f10610af757610100808354040283529160200191610b20565b820191905f5260205f20905b815481529060010190602001808311610b0357829003601f168201915b5050505050905090565b5f80610b346118ee565b9050610b418185856118f5565b600191505092915050565b5f600254905090565b5f80610b5f6118ee565b9050610b6c858285611ab8565b610b77858585611b43565b60019150509392505050565b600760159054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4a9190613263565b905090565b5f6012905090565b5f80610c616118ee565b9050610c82818585610c73858961173b565b610c7d91906132bb565b6118f5565b600191505092915050565b600760169054906101000a900460ff1681565b600760159054906101000a900460ff16610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690613338565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663807ab4f7336040518263ffffffff1660e01b8152600401610d499190613376565b6020604051808303815f875af1158015610d65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8991906133a3565b50565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610de6611870565b80600760156101000a81548160ff02191690831515021790555050565b600c5481565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610e649190613081565b602060405180830381865afa158015610e7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea39190613263565b9050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ef7611870565b610f005f612467565b565b600e805f0154908060010154905082565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f40611870565b620186a0821015610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90613418565b60405180910390fd5b61c350811015610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc2906134a6565b60405180910390fd5b670de0b6b3a764000082610fdf91906134c4565b600b81905550670de0b6b3a764000081610ff991906134c4565b600c819055505050565b5f805f805f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f1876040518263ffffffff1660e01b81526004016110629190613081565b60a060405180830381865afa15801561107d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a19190613519565b9450945094509450945091939590929450565b600b5481565b6110c2611870565b600760169054906101000a900460ff1615611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906135da565b60405180910390fd5b6001600760166101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61115f611870565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6060600480546111c69061321f565b80601f01602080910402602001604051908101604052809291908181526020018280546111f29061321f565b801561123d5780601f106112145761010080835404028352916020019161123d565b820191905f5260205f20905b81548152906001019060200180831161122057829003601f168201915b5050505050905090565b60105481565b5f806112576118ee565b90505f611264828661173b565b9050838110156112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a090613668565b60405180910390fd5b6112b682868684036118f5565b60019250505092915050565b6112ca611870565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b815260040161134a93929190613686565b6020604051808303815f875af1158015611366573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061138a91906133a3565b9050801561141a5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ede6ad9c836040518263ffffffff1660e01b81526004016113ec9190612ee4565b5f604051808303815f87803b158015611403575f80fd5b505af1158015611415573d5f803e3d5ffd5b505050505b5050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b815260040161149e9190613081565b602060405180830381865afa1580156114b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114dd9190613263565b9050919050565b5f806114ee6118ee565b90506114fb818585611b43565b600191505092915050565b61150e611870565b670de0b6b3a76400008161152291906134c4565b600a8190555050565b6016602052805f5260405f205f915054906101000a900460ff1681565b611550611870565b620186a0811015611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d9061372b565b60405180910390fd5b670de0b6b3a7640000816115aa91906134c4565b600d8190555050565b6115bb611870565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611606611870565b80151560155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c906137b9565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161172f9190612ebc565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6117cb611870565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090613847565b60405180910390fd5b61184281612467565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6118786118ee565b73ffffffffffffffffffffffffffffffffffffffff1661189661112f565b73ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906138af565b60405180910390fd5b565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a9061393d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c8906139cb565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611aab9190612ee4565b60405180910390a3505050565b5f611ac3848461173b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b3d5781811015611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2690613a33565b60405180910390fd5b611b3c84848484036118f5565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890613ac1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1690613b4f565b60405180910390fd5b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611cbd575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611cd65750600760149054906101000a900460ff16155b15611f2f57600760169054906101000a900460ff16611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2190613bb7565b60405180910390fd5b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611dda57600c54811115611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590613c1f565b60405180910390fd5b60145f815480929190611dd090613c3d565b9190505550611e87565b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611e8657600b54811115611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590613cce565b60405180910390fd5b60135f815480929190611e8090613c3d565b91905055505b5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611f2e57600d54611ee183610eaa565b82611eec91906132bb565b1115611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490613d36565b60405180910390fd5b5b5b5f8103611f4657611f4183835f61252a565b612462565b5f611f5030610eaa565b90505f600a548210159050808015611f755750600760149054906101000a900460ff16155b8015611fc7575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b801561201a575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561206d575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120b3576001600760146101000a81548160ff021916908315150217905550612098600a54612796565b5f600760146101000a81548160ff0219169083151502179055505b5f600760149054906101000a900460ff1615905060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612162575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561216b575f90505b60165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612209575060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612212575f90505b8015612339575f60165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561229d5760646012546014541161227d57601154612281565b6010545b8661228c91906134c4565b6122969190613d81565b905061231e565b60165f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561231d5760646012546013541161230157601154612305565b6010545b8661231091906134c4565b61231a9190613d81565b90505b5b808561232a9190613db1565b945061233787308361252a565b505b61234486868661252a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc8761238b89610eaa565b6040518363ffffffff1660e01b81526004016123a8929190613de4565b5f604051808303815f87803b1580156123bf575f80fd5b505af19250505080156123d0575060015b5060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc8661241888610eaa565b6040518363ffffffff1660e01b8152600401612435929190613de4565b5f604051808303815f87803b15801561244c575f80fd5b505af192505050801561245d575060015b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258f90613ac1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd90613b4f565b60405180910390fd5b61261183838361291c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268b90613e7b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161277d9190612ee4565b60405180910390a3612790848484612921565b50505050565b5f6002601054600e5f0154846127ac91906134c4565b6127b69190613d81565b6127c09190613d81565b90505f6002601054600e5f0154856127d891906134c4565b6127e29190613d81565b6127ec9190613d81565b90505f601054600e600101548561280391906134c4565b61280d9190613d81565b905061281883612926565b5f4790505f81111561282f5761282e8382612b30565b5b61283882612926565b5f4790505f8190505f811115612913575f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161288e90613ec6565b5f6040518083038185875af1925050503d805f81146128c8576040519150601f19603f3d011682016040523d82523d5f602084013e6128cd565b606091505b5050905080612911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290890613f24565b60405180910390fd5b505b50505050505050565b505050565b505050565b5f600267ffffffffffffffff81111561294257612941613f42565b5b6040519080825280602002602001820160405280156129705781602001602082028036833780820191505090505b50905030815f8151811061298757612986613f6f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a4f9190613f9c565b81600181518110612a6357612a62613f6f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612aff9594939291906140b7565b5f604051808303815f87803b158015612b16575f80fd5b505af1158015612b28573d5f803e3d5ffd5b505050505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330865f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612bb79695949392919061410f565b60606040518083038185885af1158015612bd3573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612bf8919061416e565b9250505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ede6ad9c826040518263ffffffff1660e01b8152600401612c569190612ee4565b5f604051808303815f87803b158015612c6d575f80fd5b505af1158015612c7f573d5f803e3d5ffd5b505050507f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc38382604051612cb492919061304b565b60405180910390a1505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612cee82612cc5565b9050919050565b612cfe81612ce4565b8114612d08575f80fd5b50565b5f81359050612d1981612cf5565b92915050565b5f8115159050919050565b612d3381612d1f565b8114612d3d575f80fd5b50565b5f81359050612d4e81612d2a565b92915050565b5f8060408385031215612d6a57612d69612cc1565b5b5f612d7785828601612d0b565b9250506020612d8885828601612d40565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612dc9578082015181840152602081019050612dae565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612dee82612d92565b612df88185612d9c565b9350612e08818560208601612dac565b612e1181612dd4565b840191505092915050565b5f6020820190508181035f830152612e348184612de4565b905092915050565b5f819050919050565b612e4e81612e3c565b8114612e58575f80fd5b50565b5f81359050612e6981612e45565b92915050565b5f8060408385031215612e8557612e84612cc1565b5b5f612e9285828601612d0b565b9250506020612ea385828601612e5b565b9150509250929050565b612eb681612d1f565b82525050565b5f602082019050612ecf5f830184612ead565b92915050565b612ede81612e3c565b82525050565b5f602082019050612ef75f830184612ed5565b92915050565b5f805f60608486031215612f1457612f13612cc1565b5b5f612f2186828701612d0b565b9350506020612f3286828701612d0b565b9250506040612f4386828701612e5b565b9150509250925092565b5f819050919050565b5f612f70612f6b612f6684612cc5565b612f4d565b612cc5565b9050919050565b5f612f8182612f56565b9050919050565b5f612f9282612f77565b9050919050565b612fa281612f88565b82525050565b5f602082019050612fbb5f830184612f99565b92915050565b5f60ff82169050919050565b612fd681612fc1565b82525050565b5f602082019050612fef5f830184612fcd565b92915050565b5f6020828403121561300a57613009612cc1565b5b5f61301784828501612d0b565b91505092915050565b5f6020828403121561303557613034612cc1565b5b5f61304284828501612d40565b91505092915050565b5f60408201905061305e5f830185612ed5565b61306b6020830184612ed5565b9392505050565b61307b81612ce4565b82525050565b5f6020820190506130945f830184613072565b92915050565b5f80604083850312156130b0576130af612cc1565b5b5f6130bd85828601612e5b565b92505060206130ce85828601612e5b565b9150509250929050565b5f60a0820190506130eb5f830188613072565b6130f86020830187612ed5565b6131056040830186612ed5565b6131126060830185612ed5565b61311f6080830184612ed5565b9695505050505050565b5f6020828403121561313e5761313d612cc1565b5b5f61314b84828501612e5b565b91505092915050565b5f806040838503121561316a57613169612cc1565b5b5f61317785828601612d0b565b925050602061318885828601612d0b565b9150509250929050565b5f61319c82612f77565b9050919050565b6131ac81613192565b82525050565b5f6020820190506131c55f8301846131a3565b92915050565b5f6040820190506131de5f830185613072565b6131eb6020830184612ead565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061323657607f821691505b602082108103613249576132486131f2565b5b50919050565b5f8151905061325d81612e45565b92915050565b5f6020828403121561327857613277612cc1565b5b5f6132858482850161324f565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6132c582612e3c565b91506132d083612e3c565b92508282019050808211156132e8576132e761328e565b5b92915050565b7f436c61696d206e6f7420656e61626c65640000000000000000000000000000005f82015250565b5f613322601183612d9c565b915061332d826132ee565b602082019050919050565b5f6020820190508181035f83015261334f81613316565b9050919050565b5f61336082612f77565b9050919050565b61337081613356565b82525050565b5f6020820190506133895f830184613367565b92915050565b5f8151905061339d81612d2a565b92915050565b5f602082840312156133b8576133b7612cc1565b5b5f6133c58482850161338f565b91505092915050565b7f43616e277420736574206d6178627579206c6f776572207468616e20312520005f82015250565b5f613402601f83612d9c565b915061340d826133ce565b602082019050919050565b5f6020820190508181035f83015261342f816133f6565b9050919050565b7f43616e277420736574206d617873656c6c206c6f776572207468616e20302e355f8201527f2520000000000000000000000000000000000000000000000000000000000000602082015250565b5f613490602283612d9c565b915061349b82613436565b604082019050919050565b5f6020820190508181035f8301526134bd81613484565b9050919050565b5f6134ce82612e3c565b91506134d983612e3c565b92508282026134e781612e3c565b915082820484148315176134fe576134fd61328e565b5b5092915050565b5f8151905061351381612cf5565b92915050565b5f805f805f60a0868803121561353257613531612cc1565b5b5f61353f88828901613505565b95505060206135508882890161324f565b94505060406135618882890161324f565b93505060606135728882890161324f565b92505060806135838882890161324f565b9150509295509295909350565b7f416c726561647920656e61626c656400000000000000000000000000000000005f82015250565b5f6135c4600f83612d9c565b91506135cf82613590565b602082019050919050565b5f6020820190508181035f8301526135f1816135b8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613652602583612d9c565b915061365d826135f8565b604082019050919050565b5f6020820190508181035f83015261367f81613646565b9050919050565b5f6060820190506136995f830186613072565b6136a66020830185613072565b6136b36040830184612ed5565b949350505050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613715602283612d9c565b9150613720826136bb565b604082019050919050565b5f6020820190508181035f83015261374281613709565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f6137a3602a83612d9c565b91506137ae82613749565b604082019050919050565b5f6020820190508181035f8301526137d081613797565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613831602683612d9c565b915061383c826137d7565b604082019050919050565b5f6020820190508181035f83015261385e81613825565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613899602083612d9c565b91506138a482613865565b602082019050919050565b5f6020820190508181035f8301526138c68161388d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613927602483612d9c565b9150613932826138cd565b604082019050919050565b5f6020820190508181035f8301526139548161391b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139b5602283612d9c565b91506139c08261395b565b604082019050919050565b5f6020820190508181035f8301526139e2816139a9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613a1d601d83612d9c565b9150613a28826139e9565b602082019050919050565b5f6020820190508181035f830152613a4a81613a11565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613aab602583612d9c565b9150613ab682613a51565b604082019050919050565b5f6020820190508181035f830152613ad881613a9f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613b39602383612d9c565b9150613b4482613adf565b604082019050919050565b5f6020820190508181035f830152613b6681613b2d565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f613ba1601283612d9c565b9150613bac82613b6d565b602082019050919050565b5f6020820190508181035f830152613bce81613b95565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c416d6f756e74005f82015250565b5f613c09601f83612d9c565b9150613c1482613bd5565b602082019050919050565b5f6020820190508181035f830152613c3681613bfd565b9050919050565b5f613c4782612e3c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613c7957613c7861328e565b5b600182019050919050565b7f596f752061726520657863656564696e67206d6178427579416d6f756e7400005f82015250565b5f613cb8601e83612d9c565b9150613cc382613c84565b602082019050919050565b5f6020820190508181035f830152613ce581613cac565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c657400000000005f82015250565b5f613d20601b83612d9c565b9150613d2b82613cec565b602082019050919050565b5f6020820190508181035f830152613d4d81613d14565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d8b82612e3c565b9150613d9683612e3c565b925082613da657613da5613d54565b5b828204905092915050565b5f613dbb82612e3c565b9150613dc683612e3c565b9250828203905081811115613dde57613ddd61328e565b5b92915050565b5f604082019050613df75f830185613072565b613e046020830184612ed5565b9392505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613e65602683612d9c565b9150613e7082613e0b565b604082019050919050565b5f6020820190508181035f830152613e9281613e59565b9050919050565b5f81905092915050565b50565b5f613eb15f83613e99565b9150613ebc82613ea3565b5f82019050919050565b5f613ed082613ea6565b9150819050919050565b7f4661696c656420746f2073656e642045544820746f206465762077616c6c65745f82015250565b5f613f0e602083612d9c565b9150613f1982613eda565b602082019050919050565b5f6020820190508181035f830152613f3b81613f02565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613fb157613fb0612cc1565b5b5f613fbe84828501613505565b91505092915050565b5f819050919050565b5f613fea613fe5613fe084613fc7565b612f4d565b612e3c565b9050919050565b613ffa81613fd0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61403281612ce4565b82525050565b5f6140438383614029565b60208301905092915050565b5f602082019050919050565b5f61406582614000565b61406f818561400a565b935061407a8361401a565b805f5b838110156140aa5781516140918882614038565b975061409c8361404f565b92505060018101905061407d565b5085935050505092915050565b5f60a0820190506140ca5f830188612ed5565b6140d76020830187613ff1565b81810360408301526140e9818661405b565b90506140f86060830185613072565b6141056080830184612ed5565b9695505050505050565b5f60c0820190506141225f830189613072565b61412f6020830188612ed5565b61413c6040830187613ff1565b6141496060830186613ff1565b6141566080830185613072565b61416360a0830184612ed5565b979650505050505050565b5f805f6060848603121561418557614184612cc1565b5b5f6141928682870161324f565b93505060206141a38682870161324f565b92505060406141b48682870161324f565b915050925092509256fea2646970667358221220c669fc671d61e4d9de3b96202fc6d795130c81d388a6bfbe7f7282bfc231683164736f6c63430008150033

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

00000000000000000000000003eb3ddec3c0681810d732e846a0903d8df366c8

-----Decoded View---------------
Arg [0] : _dividendTracker (address): 0x03eB3ddec3c0681810d732E846a0903d8Df366c8

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000003eb3ddec3c0681810d732e846a0903d8df366c8


Deployed Bytecode Sourcemap

24048:10904:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28099:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10393:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12753:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11522:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13534:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24185:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24251:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28997:141;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11364:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14204:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24216:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26728:149;;;;;;;;;;;;;:::i;:::-;;29146:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28425:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24412:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29456:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11693:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23203:103;;;;;;;;;;;;;:::i;:::-;;24559:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;24299:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27079:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29619:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;24378:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28279:138;;;;;;;;;;;;;:::i;:::-;;22562:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27558:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10612:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24600:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14945:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33685:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24129:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29280:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12026:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27429:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24844:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26885:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33564:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27736:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12282:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24338:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23461:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24094:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24447:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28099:172;22448:13;:11;:13::i;:::-;28211:15:::1;;;;;;;;;;;:36;;;28248:7;28257:5;28211:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28099:172:::0;;:::o;10393:100::-;10447:13;10480:5;10473:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10393:100;:::o;12753:201::-;12836:4;12853:13;12869:12;:10;:12::i;:::-;12853:28;;12892:32;12901:5;12908:7;12917:6;12892:8;:32::i;:::-;12942:4;12935:11;;;12753:201;;;;:::o;11522:108::-;11583:7;11610:12;;11603:19;;11522:108;:::o;13534:261::-;13631:4;13648:15;13666:12;:10;:12::i;:::-;13648:30;;13689:38;13705:4;13711:7;13720:6;13689:15;:38::i;:::-;13738:27;13748:4;13754:2;13758:6;13738:9;:27::i;:::-;13783:4;13776:11;;;13534:261;;;;;:::o;24185:24::-;;;;;;;;;;;;;:::o;24251:39::-;;;;;;;;;;;;;:::o;28997:141::-;29060:7;29087:15;;;;;;;;;;;:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29080:50;;28997:141;:::o;11364:93::-;11422:5;11447:2;11440:9;;11364:93;:::o;14204:238::-;14292:4;14309:13;14325:12;:10;:12::i;:::-;14309:28;;14348:64;14357:5;14364:7;14401:10;14373:25;14383:5;14390:7;14373:9;:25::i;:::-;:38;;;;:::i;:::-;14348:8;:64::i;:::-;14430:4;14423:11;;;14204:238;;;;:::o;24216:26::-;;;;;;;;;;;;;:::o;26728:149::-;26773:12;;;;;;;;;;;26765:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;26818:15;;;;;;;;;;;:30;;;26857:10;26818:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26728:149::o;29146:126::-;29212:4;29236:19;:28;29256:7;29236:28;;;;;;;;;;;;;;;;;;;;;;;;;29229:35;;29146:126;;;:::o;28425:98::-;22448:13;:11;:13::i;:::-;28508:7:::1;28493:12;;:22;;;;;;;;;;;;;;;;;;28425:98:::0;:::o;24412:28::-;;;;:::o;29456:155::-;29542:7;29569:15;;;;;;;;;;;:25;;;29595:7;29569:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29562:41;;29456:155;;;:::o;11693:127::-;11767:7;11794:9;:18;11804:7;11794:18;;;;;;;;;;;;;;;;11787:25;;11693:127;;;:::o;23203:103::-;22448:13;:11;:13::i;:::-;23268:30:::1;23295:1;23268:18;:30::i;:::-;23203:103::o:0;24559:32::-;;;;;;;;;;;;;;:::o;24299:30::-;;;;;;;;;;;;;:::o;27079:342::-;22448:13;:11;:13::i;:::-;27209:6:::1;27199;:16;;27191:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27281:5;27270:7;:16;;27262:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27360:8;27351:6;:17;;;;:::i;:::-;27336:12;:32;;;;27405:8;27395:7;:18;;;;:::i;:::-;27379:13;:34;;;;27079:342:::0;;:::o;29619:186::-;29699:7;29708;29717;29726;29735;29762:15;;;;;;;;;;;:26;;;29789:7;29762:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29755:42;;;;;;;;;;29619:186;;;;;;;:::o;24378:27::-;;;;:::o;28279:138::-;22448:13;:11;:13::i;:::-;28343:14:::1;;;;;;;;;;;28342:15;28334:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;28405:4;28388:14;;:21;;;;;;;;;;;;;;;;;;28279:138::o:0;22562:87::-;22608:7;22635:6;;;;;;;;;;;22628:13;;22562:87;:::o;27558:170::-;22448:13;:11;:13::i;:::-;27712:8:::1;27676:24;:33;27701:7;27676:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;27558:170:::0;;:::o;10612:104::-;10668:13;10701:7;10694:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10612:104;:::o;24600:22::-;;;;:::o;14945:436::-;15038:4;15055:13;15071:12;:10;:12::i;:::-;15055:28;;15094:24;15121:25;15131:5;15138:7;15121:9;:25::i;:::-;15094:52;;15185:15;15165:16;:35;;15157:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15278:60;15287:5;15294:7;15322:15;15303:16;:34;15278:8;:60::i;:::-;15369:4;15362:11;;;;14945:436;;;;:::o;33685:314::-;22448:13;:11;:13::i;:::-;33760:12:::1;33782:4;;;;;;;;;;;33775:25;;;33815:10;33848:15;;;;;;;;;;;33879:6;33775:121;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33760:136;;33911:7;33907:85;;;33935:15;;;;;;;;;;;:37;;;33973:6;33935:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33907:85;33749:250;33685:314:::0;:::o;24129:19::-;;;;;;;;;;;;;:::o;29280:168::-;29366:7;29393:15;;;;;;;;;;;:38;;;29432:7;29393:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29386:54;;29280:168;;;:::o;12026:193::-;12105:4;12122:13;12138:12;:10;:12::i;:::-;12122:28;;12161;12171:5;12178:2;12182:6;12161:9;:28::i;:::-;12207:4;12200:11;;;12026:193;;;;:::o;27429:121::-;22448:13;:11;:13::i;:::-;27534:8:::1;27525:6;:17;;;;:::i;:::-;27504:18;:38;;;;27429:121:::0;:::o;24844:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26885:186::-;22448:13;:11;:13::i;:::-;26978:6:::1;26968;:16;;26960:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27055:8;27046:6;:17;;;;:::i;:::-;27034:9;:29;;;;26885:186:::0;:::o;33564:113::-;22448:13;:11;:13::i;:::-;33659:9:::1;33635:6;;:34;;;;;;;;;;;;;;;;;;33564:113:::0;:::o;27736:355::-;22448:13;:11;:13::i;:::-;27903:8:::1;27871:40;;:19;:28;27891:7;27871:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;27849:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28023:8;27992:19;:28;28012:7;27992:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;28065:7;28049:34;;;28074:8;28049:34;;;;;;:::i;:::-;;;;;;;;27736:355:::0;;:::o;12282:151::-;12371:7;12398:11;:18;12410:5;12398:18;;;;;;;;;;;;;;;:27;12417:7;12398:27;;;;;;;;;;;;;;;;12391:34;;12282:151;;;;:::o;24338:33::-;;;;:::o;23461:201::-;22448:13;:11;:13::i;:::-;23570:1:::1;23550:22;;:8;:22;;::::0;23542:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23626:28;23645:8;23626:18;:28::i;:::-;23461:201:::0;:::o;24094:28::-;;;;;;;;;;;;;:::o;24447:24::-;;;;:::o;22727:132::-;22802:12;:10;:12::i;:::-;22791:23;;:7;:5;:7::i;:::-;:23;;;22783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22727:132::o;8097:98::-;8150:7;8177:10;8170:17;;8097:98;:::o;18938:346::-;19057:1;19040:19;;:5;:19;;;19032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19138:1;19119:21;;:7;:21;;;19111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19222:6;19192:11;:18;19204:5;19192:18;;;;;;;;;;;;;;;:27;19211:7;19192:27;;;;;;;;;;;;;;;:36;;;;19260:7;19244:32;;19253:5;19244:32;;;19269:6;19244:32;;;;;;:::i;:::-;;;;;;;;18938:346;;;:::o;19575:419::-;19676:24;19703:25;19713:5;19720:7;19703:9;:25::i;:::-;19676:52;;19763:17;19743:16;:37;19739:248;;19825:6;19805:16;:26;;19797:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19909:51;19918:5;19925:7;19953:6;19934:16;:25;19909:8;:51::i;:::-;19739:248;19665:329;19575:419;;;:::o;29813:2821::-;29961:1;29945:18;;:4;:18;;;29937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30038:1;30024:16;;:2;:16;;;30016:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30112:19;:25;30132:4;30112:25;;;;;;;;;;;;;;;;;;;;;;;;;30111:26;:54;;;;;30142:19;:23;30162:2;30142:23;;;;;;;;;;;;;;;;;;;;;;;;;30141:24;30111:54;:67;;;;;30170:8;;;;;;;;;;;30169:9;30111:67;30093:866;;;30213:14;;;;;;;;;;;30205:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;30269:25;:29;30295:2;30269:29;;;;;;;;;;;;;;;;;;;;;;;;;30265:463;;;30359:13;;30349:6;:23;;30319:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;30466:10;;:12;;;;;;;;;:::i;:::-;;;;;;30265:463;;;30504:25;:31;30530:4;30504:31;;;;;;;;;;;;;;;;;;;;;;;;;30500:228;;;30596:12;;30586:6;:22;;30556:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;30701:9;;:11;;;;;;;;;:::i;:::-;;;;;;30500:228;30265:463;30747:24;:28;30772:2;30747:28;;;;;;;;;;;;;;;;;;;;;;;;;30742:206;;30852:9;;30835:13;30845:2;30835:9;:13::i;:::-;30826:6;:22;;;;:::i;:::-;:35;;30796:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;30742:206;30093:866;30985:1;30975:6;:11;30971:93;;31003:28;31019:4;31025:2;31029:1;31003:15;:28::i;:::-;31046:7;;30971:93;31076:28;31107:24;31125:4;31107:9;:24::i;:::-;31076:55;;31142:12;31181:18;;31157:20;:42;;31142:57;;31230:7;:33;;;;;31255:8;;;;;;;;;;;31254:9;31230:33;:79;;;;;31280:25;:29;31306:2;31280:29;;;;;;;;;;;;;;;;;;;;;;;;;31230:79;:122;;;;;31327:19;:25;31347:4;31327:25;;;;;;;;;;;;;;;;;;;;;;;;;31326:26;31230:122;:163;;;;;31370:19;:23;31390:2;31370:23;;;;;;;;;;;;;;;;;;;;;;;;;31369:24;31230:163;31212:319;;;31431:4;31420:8;;:15;;;;;;;;;;;;;;;;;;31452:34;31467:18;;31452:14;:34::i;:::-;31514:5;31503:8;;:16;;;;;;;;;;;;;;;;;;31212:319;31543:12;31559:8;;;;;;;;;;;31558:9;31543:24;;31669:19;:25;31689:4;31669:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31698:19;:23;31718:2;31698:23;;;;;;;;;;;;;;;;;;;;;;;;;31669:52;31665:100;;;31748:5;31738:15;;31665:100;31782:25;:29;31808:2;31782:29;;;;;;;;;;;;;;;;;;;;;;;;;31781:30;:66;;;;;31816:25;:31;31842:4;31816:31;;;;;;;;;;;;;;;;;;;;;;;;;31815:32;31781:66;31777:100;;;31872:5;31862:15;;31777:100;31894:7;31890:545;;;31918:14;31951:25;:29;31977:2;31951:29;;;;;;;;;;;;;;;;;;;;;;;;;31947:377;;;32113:3;32055:12;;32042:10;;:25;:45;;32076:11;;32042:45;;;32070:3;;32042:45;32032:6;:56;;;;:::i;:::-;32031:85;;;;:::i;:::-;32001:115;;31947:377;;;32142:25;:31;32168:4;32142:31;;;;;;;;;;;;;;;;;;;;;;;;;32138:186;;;32305:3;32247:12;;32235:9;;:24;:44;;32268:11;;32235:44;;;32262:3;;32235:44;32225:6;:55;;;;:::i;:::-;32224:84;;;;:::i;:::-;32194:114;;32138:186;31947:377;32358:6;32349;:15;;;;:::i;:::-;32340:24;;32379:44;32395:4;32409;32416:6;32379:15;:44::i;:::-;31903:532;31890:545;32445:33;32461:4;32467:2;32471:6;32445:15;:33::i;:::-;32495:15;;;;;;;;;;;:26;;;32522:4;32528:15;32538:4;32528:9;:15::i;:::-;32495:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32491:65;32570:15;;;;;;;;;;;:26;;;32597:2;32601:13;32611:2;32601:9;:13::i;:::-;32570:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32566:61;29926:2708;;;29813:2821;;;;:::o;23822:191::-;23896:16;23915:6;;;;;;;;;;;23896:25;;23941:8;23932:6;;:17;;;;;;;;;;;;;;;;;;23996:8;23965:40;;23986:8;23965:40;;;;;;;;;;;;23885:128;23822:191;:::o;15851:806::-;15964:1;15948:18;;:4;:18;;;15940:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16041:1;16027:16;;:2;:16;;;16019:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16096:38;16117:4;16123:2;16127:6;16096:20;:38::i;:::-;16147:19;16169:9;:15;16179:4;16169:15;;;;;;;;;;;;;;;;16147:37;;16218:6;16203:11;:21;;16195:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;16335:6;16321:11;:20;16303:9;:15;16313:4;16303:15;;;;;;;;;;;;;;;:38;;;;16538:6;16521:9;:13;16531:2;16521:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16588:2;16573:26;;16582:4;16573:26;;;16592:6;16573:26;;;;;;:::i;:::-;;;;;;;;16612:37;16632:4;16638:2;16642:6;16612:19;:37::i;:::-;15929:728;15851:806;;;:::o;32642:914::-;32701:20;32761:1;32754:3;;32735:5;:15;;;32726:6;:24;;;;:::i;:::-;32725:32;;;;:::i;:::-;32724:38;;;;:::i;:::-;32701:61;;32773:32;32858:1;32838:3;;32819:5;:15;;;32810:6;:24;;;;:::i;:::-;32809:32;;;;:::i;:::-;32808:51;;;;:::i;:::-;32773:86;;32870:20;32916:3;;32903:5;:9;;;32894:6;:18;;;;:::i;:::-;32893:26;;;;:::i;:::-;32870:49;;32932:30;32949:12;32932:16;:30::i;:::-;32975:22;33000:21;32975:46;;33055:1;33038:14;:18;33034:154;;;33110:66;33135:24;33161:14;33110:24;:66::i;:::-;33034:154;33200:30;33217:12;33200:16;:30::i;:::-;33243:21;33267;33243:45;;33329:14;33346:13;33329:30;;33385:1;33376:6;:10;33372:177;;;33404:12;33430:15;;;;;;;;;;;33422:29;;33459:6;33422:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33403:67;;;33493:7;33485:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;33388:161;33372:177;32690:866;;;;;;32642:914;:::o;20594:91::-;;;;:::o;21289:90::-;;;;:::o;34007:410::-;34073:21;34111:1;34097:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34073:40;;34142:4;34124;34129:1;34124:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34168:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34158:4;34163:1;34158:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34194:6;;;;;;;;;;;:57;;;34266:11;34292:1;34336:4;34363;34383:15;34194:215;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34062:355;34007:410;:::o;34425:524::-;34548:17;34569:6;;;;;;;;;;;:22;;;34599:9;34632:4;34652:11;34678:1;34721;34772:15;;;;;;;;;;;34803;34569:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34543:286;;;;34840:15;;;;;;;;;;;:37;;;34878:9;34840:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34904:37;34918:11;34931:9;34904:37;;;;;;;:::i;:::-;;;;;;;;34532:417;34425:524;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:90::-;875:7;918:5;911:13;904:21;893:32;;841:90;;;:::o;937:116::-;1007:21;1022:5;1007:21;:::i;:::-;1000:5;997:32;987:60;;1043:1;1040;1033:12;987:60;937:116;:::o;1059:133::-;1102:5;1140:6;1127:20;1118:29;;1156:30;1180:5;1156:30;:::i;:::-;1059:133;;;;:::o;1198:468::-;1263:6;1271;1320:2;1308:9;1299:7;1295:23;1291:32;1288:119;;;1326:79;;:::i;:::-;1288:119;1446:1;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1417:117;1573:2;1599:50;1641:7;1632:6;1621:9;1617:22;1599:50;:::i;:::-;1589:60;;1544:115;1198:468;;;;;:::o;1672:99::-;1724:6;1758:5;1752:12;1742:22;;1672:99;;;:::o;1777:169::-;1861:11;1895:6;1890:3;1883:19;1935:4;1930:3;1926:14;1911:29;;1777:169;;;;:::o;1952:246::-;2033:1;2043:113;2057:6;2054:1;2051:13;2043:113;;;2142:1;2137:3;2133:11;2127:18;2123:1;2118:3;2114:11;2107:39;2079:2;2076:1;2072:10;2067:15;;2043:113;;;2190:1;2181:6;2176:3;2172:16;2165:27;2014:184;1952:246;;;:::o;2204:102::-;2245:6;2296:2;2292:7;2287:2;2280:5;2276:14;2272:28;2262:38;;2204:102;;;:::o;2312:377::-;2400:3;2428:39;2461:5;2428:39;:::i;:::-;2483:71;2547:6;2542:3;2483:71;:::i;:::-;2476:78;;2563:65;2621:6;2616:3;2609:4;2602:5;2598:16;2563:65;:::i;:::-;2653:29;2675:6;2653:29;:::i;:::-;2648:3;2644:39;2637:46;;2404:285;2312:377;;;;:::o;2695:313::-;2808:4;2846:2;2835:9;2831:18;2823:26;;2895:9;2889:4;2885:20;2881:1;2870:9;2866:17;2859:47;2923:78;2996:4;2987:6;2923:78;:::i;:::-;2915:86;;2695:313;;;;:::o;3014:77::-;3051:7;3080:5;3069:16;;3014:77;;;:::o;3097:122::-;3170:24;3188:5;3170:24;:::i;:::-;3163:5;3160:35;3150:63;;3209:1;3206;3199:12;3150:63;3097:122;:::o;3225:139::-;3271:5;3309:6;3296:20;3287:29;;3325:33;3352:5;3325:33;:::i;:::-;3225:139;;;;:::o;3370:474::-;3438:6;3446;3495:2;3483:9;3474:7;3470:23;3466:32;3463:119;;;3501:79;;:::i;:::-;3463:119;3621:1;3646:53;3691:7;3682:6;3671:9;3667:22;3646:53;:::i;:::-;3636:63;;3592:117;3748:2;3774:53;3819:7;3810:6;3799:9;3795:22;3774:53;:::i;:::-;3764:63;;3719:118;3370:474;;;;;:::o;3850:109::-;3931:21;3946:5;3931:21;:::i;:::-;3926:3;3919:34;3850:109;;:::o;3965:210::-;4052:4;4090:2;4079:9;4075:18;4067:26;;4103:65;4165:1;4154:9;4150:17;4141:6;4103:65;:::i;:::-;3965:210;;;;:::o;4181:118::-;4268:24;4286:5;4268:24;:::i;:::-;4263:3;4256:37;4181:118;;:::o;4305:222::-;4398:4;4436:2;4425:9;4421:18;4413:26;;4449:71;4517:1;4506:9;4502:17;4493:6;4449:71;:::i;:::-;4305:222;;;;:::o;4533:619::-;4610:6;4618;4626;4675:2;4663:9;4654:7;4650:23;4646:32;4643:119;;;4681:79;;:::i;:::-;4643:119;4801:1;4826:53;4871:7;4862:6;4851:9;4847:22;4826:53;:::i;:::-;4816:63;;4772:117;4928:2;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4899:118;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;4533:619;;;;;:::o;5158:60::-;5186:3;5207:5;5200:12;;5158:60;;;:::o;5224:142::-;5274:9;5307:53;5325:34;5334:24;5352:5;5334:24;:::i;:::-;5325:34;:::i;:::-;5307:53;:::i;:::-;5294:66;;5224:142;;;:::o;5372:126::-;5422:9;5455:37;5486:5;5455:37;:::i;:::-;5442:50;;5372:126;;;:::o;5504:150::-;5578:9;5611:37;5642:5;5611:37;:::i;:::-;5598:50;;5504:150;;;:::o;5660:179::-;5771:61;5826:5;5771:61;:::i;:::-;5766:3;5759:74;5660:179;;:::o;5845:270::-;5962:4;6000:2;5989:9;5985:18;5977:26;;6013:95;6105:1;6094:9;6090:17;6081:6;6013:95;:::i;:::-;5845:270;;;;:::o;6121:86::-;6156:7;6196:4;6189:5;6185:16;6174:27;;6121:86;;;:::o;6213:112::-;6296:22;6312:5;6296:22;:::i;:::-;6291:3;6284:35;6213:112;;:::o;6331:214::-;6420:4;6458:2;6447:9;6443:18;6435:26;;6471:67;6535:1;6524:9;6520:17;6511:6;6471:67;:::i;:::-;6331:214;;;;:::o;6551:329::-;6610:6;6659:2;6647:9;6638:7;6634:23;6630:32;6627:119;;;6665:79;;:::i;:::-;6627:119;6785:1;6810:53;6855:7;6846:6;6835:9;6831:22;6810:53;:::i;:::-;6800:63;;6756:117;6551:329;;;;:::o;6886:323::-;6942:6;6991:2;6979:9;6970:7;6966:23;6962:32;6959:119;;;6997:79;;:::i;:::-;6959:119;7117:1;7142:50;7184:7;7175:6;7164:9;7160:22;7142:50;:::i;:::-;7132:60;;7088:114;6886:323;;;;:::o;7215:332::-;7336:4;7374:2;7363:9;7359:18;7351:26;;7387:71;7455:1;7444:9;7440:17;7431:6;7387:71;:::i;:::-;7468:72;7536:2;7525:9;7521:18;7512:6;7468:72;:::i;:::-;7215:332;;;;;:::o;7553:118::-;7640:24;7658:5;7640:24;:::i;:::-;7635:3;7628:37;7553:118;;:::o;7677:222::-;7770:4;7808:2;7797:9;7793:18;7785:26;;7821:71;7889:1;7878:9;7874:17;7865:6;7821:71;:::i;:::-;7677:222;;;;:::o;7905:474::-;7973:6;7981;8030:2;8018:9;8009:7;8005:23;8001:32;7998:119;;;8036:79;;:::i;:::-;7998:119;8156:1;8181:53;8226:7;8217:6;8206:9;8202:22;8181:53;:::i;:::-;8171:63;;8127:117;8283:2;8309:53;8354:7;8345:6;8334:9;8330:22;8309:53;:::i;:::-;8299:63;;8254:118;7905:474;;;;;:::o;8385:664::-;8590:4;8628:3;8617:9;8613:19;8605:27;;8642:71;8710:1;8699:9;8695:17;8686:6;8642:71;:::i;:::-;8723:72;8791:2;8780:9;8776:18;8767:6;8723:72;:::i;:::-;8805;8873:2;8862:9;8858:18;8849:6;8805:72;:::i;:::-;8887;8955:2;8944:9;8940:18;8931:6;8887:72;:::i;:::-;8969:73;9037:3;9026:9;9022:19;9013:6;8969:73;:::i;:::-;8385:664;;;;;;;;:::o;9055:329::-;9114:6;9163:2;9151:9;9142:7;9138:23;9134:32;9131:119;;;9169:79;;:::i;:::-;9131:119;9289:1;9314:53;9359:7;9350:6;9339:9;9335:22;9314:53;:::i;:::-;9304:63;;9260:117;9055:329;;;;:::o;9390:474::-;9458:6;9466;9515:2;9503:9;9494:7;9490:23;9486:32;9483:119;;;9521:79;;:::i;:::-;9483:119;9641:1;9666:53;9711:7;9702:6;9691:9;9687:22;9666:53;:::i;:::-;9656:63;;9612:117;9768:2;9794:53;9839:7;9830:6;9819:9;9815:22;9794:53;:::i;:::-;9784:63;;9739:118;9390:474;;;;;:::o;9870:148::-;9942:9;9975:37;10006:5;9975:37;:::i;:::-;9962:50;;9870:148;;;:::o;10024:175::-;10133:59;10186:5;10133:59;:::i;:::-;10128:3;10121:72;10024:175;;:::o;10205:266::-;10320:4;10358:2;10347:9;10343:18;10335:26;;10371:93;10461:1;10450:9;10446:17;10437:6;10371:93;:::i;:::-;10205:266;;;;:::o;10477:320::-;10592:4;10630:2;10619:9;10615:18;10607:26;;10643:71;10711:1;10700:9;10696:17;10687:6;10643:71;:::i;:::-;10724:66;10786:2;10775:9;10771:18;10762:6;10724:66;:::i;:::-;10477:320;;;;;:::o;10803:180::-;10851:77;10848:1;10841:88;10948:4;10945:1;10938:15;10972:4;10969:1;10962:15;10989:320;11033:6;11070:1;11064:4;11060:12;11050:22;;11117:1;11111:4;11107:12;11138:18;11128:81;;11194:4;11186:6;11182:17;11172:27;;11128:81;11256:2;11248:6;11245:14;11225:18;11222:38;11219:84;;11275:18;;:::i;:::-;11219:84;11040:269;10989:320;;;:::o;11315:143::-;11372:5;11403:6;11397:13;11388:22;;11419:33;11446:5;11419:33;:::i;:::-;11315:143;;;;:::o;11464:351::-;11534:6;11583:2;11571:9;11562:7;11558:23;11554:32;11551:119;;;11589:79;;:::i;:::-;11551:119;11709:1;11734:64;11790:7;11781:6;11770:9;11766:22;11734:64;:::i;:::-;11724:74;;11680:128;11464:351;;;;:::o;11821:180::-;11869:77;11866:1;11859:88;11966:4;11963:1;11956:15;11990:4;11987:1;11980:15;12007:191;12047:3;12066:20;12084:1;12066:20;:::i;:::-;12061:25;;12100:20;12118:1;12100:20;:::i;:::-;12095:25;;12143:1;12140;12136:9;12129:16;;12164:3;12161:1;12158:10;12155:36;;;12171:18;;:::i;:::-;12155:36;12007:191;;;;:::o;12204:167::-;12344:19;12340:1;12332:6;12328:14;12321:43;12204:167;:::o;12377:366::-;12519:3;12540:67;12604:2;12599:3;12540:67;:::i;:::-;12533:74;;12616:93;12705:3;12616:93;:::i;:::-;12734:2;12729:3;12725:12;12718:19;;12377:366;;;:::o;12749:419::-;12915:4;12953:2;12942:9;12938:18;12930:26;;13002:9;12996:4;12992:20;12988:1;12977:9;12973:17;12966:47;13030:131;13156:4;13030:131;:::i;:::-;13022:139;;12749:419;;;:::o;13174:134::-;13232:9;13265:37;13296:5;13265:37;:::i;:::-;13252:50;;13174:134;;;:::o;13314:147::-;13409:45;13448:5;13409:45;:::i;:::-;13404:3;13397:58;13314:147;;:::o;13467:238::-;13568:4;13606:2;13595:9;13591:18;13583:26;;13619:79;13695:1;13684:9;13680:17;13671:6;13619:79;:::i;:::-;13467:238;;;;:::o;13711:137::-;13765:5;13796:6;13790:13;13781:22;;13812:30;13836:5;13812:30;:::i;:::-;13711:137;;;;:::o;13854:345::-;13921:6;13970:2;13958:9;13949:7;13945:23;13941:32;13938:119;;;13976:79;;:::i;:::-;13938:119;14096:1;14121:61;14174:7;14165:6;14154:9;14150:22;14121:61;:::i;:::-;14111:71;;14067:125;13854:345;;;;:::o;14205:181::-;14345:33;14341:1;14333:6;14329:14;14322:57;14205:181;:::o;14392:366::-;14534:3;14555:67;14619:2;14614:3;14555:67;:::i;:::-;14548:74;;14631:93;14720:3;14631:93;:::i;:::-;14749:2;14744:3;14740:12;14733:19;;14392:366;;;:::o;14764:419::-;14930:4;14968:2;14957:9;14953:18;14945:26;;15017:9;15011:4;15007:20;15003:1;14992:9;14988:17;14981:47;15045:131;15171:4;15045:131;:::i;:::-;15037:139;;14764:419;;;:::o;15189:221::-;15329:34;15325:1;15317:6;15313:14;15306:58;15398:4;15393:2;15385:6;15381:15;15374:29;15189:221;:::o;15416:366::-;15558:3;15579:67;15643:2;15638:3;15579:67;:::i;:::-;15572:74;;15655:93;15744:3;15655:93;:::i;:::-;15773:2;15768:3;15764:12;15757:19;;15416:366;;;:::o;15788:419::-;15954:4;15992:2;15981:9;15977:18;15969:26;;16041:9;16035:4;16031:20;16027:1;16016:9;16012:17;16005:47;16069:131;16195:4;16069:131;:::i;:::-;16061:139;;15788:419;;;:::o;16213:410::-;16253:7;16276:20;16294:1;16276:20;:::i;:::-;16271:25;;16310:20;16328:1;16310:20;:::i;:::-;16305:25;;16365:1;16362;16358:9;16387:30;16405:11;16387:30;:::i;:::-;16376:41;;16566:1;16557:7;16553:15;16550:1;16547:22;16527:1;16520:9;16500:83;16477:139;;16596:18;;:::i;:::-;16477:139;16261:362;16213:410;;;;:::o;16629:143::-;16686:5;16717:6;16711:13;16702:22;;16733:33;16760:5;16733:33;:::i;:::-;16629:143;;;;:::o;16778:977::-;16884:6;16892;16900;16908;16916;16965:3;16953:9;16944:7;16940:23;16936:33;16933:120;;;16972:79;;:::i;:::-;16933:120;17092:1;17117:64;17173:7;17164:6;17153:9;17149:22;17117:64;:::i;:::-;17107:74;;17063:128;17230:2;17256:64;17312:7;17303:6;17292:9;17288:22;17256:64;:::i;:::-;17246:74;;17201:129;17369:2;17395:64;17451:7;17442:6;17431:9;17427:22;17395:64;:::i;:::-;17385:74;;17340:129;17508:2;17534:64;17590:7;17581:6;17570:9;17566:22;17534:64;:::i;:::-;17524:74;;17479:129;17647:3;17674:64;17730:7;17721:6;17710:9;17706:22;17674:64;:::i;:::-;17664:74;;17618:130;16778:977;;;;;;;;:::o;17761:165::-;17901:17;17897:1;17889:6;17885:14;17878:41;17761:165;:::o;17932:366::-;18074:3;18095:67;18159:2;18154:3;18095:67;:::i;:::-;18088:74;;18171:93;18260:3;18171:93;:::i;:::-;18289:2;18284:3;18280:12;18273:19;;17932:366;;;:::o;18304:419::-;18470:4;18508:2;18497:9;18493:18;18485:26;;18557:9;18551:4;18547:20;18543:1;18532:9;18528:17;18521:47;18585:131;18711:4;18585:131;:::i;:::-;18577:139;;18304:419;;;:::o;18729:224::-;18869:34;18865:1;18857:6;18853:14;18846:58;18938:7;18933:2;18925:6;18921:15;18914:32;18729:224;:::o;18959:366::-;19101:3;19122:67;19186:2;19181:3;19122:67;:::i;:::-;19115:74;;19198:93;19287:3;19198:93;:::i;:::-;19316:2;19311:3;19307:12;19300:19;;18959:366;;;:::o;19331:419::-;19497:4;19535:2;19524:9;19520:18;19512:26;;19584:9;19578:4;19574:20;19570:1;19559:9;19555:17;19548:47;19612:131;19738:4;19612:131;:::i;:::-;19604:139;;19331:419;;;:::o;19756:442::-;19905:4;19943:2;19932:9;19928:18;19920:26;;19956:71;20024:1;20013:9;20009:17;20000:6;19956:71;:::i;:::-;20037:72;20105:2;20094:9;20090:18;20081:6;20037:72;:::i;:::-;20119;20187:2;20176:9;20172:18;20163:6;20119:72;:::i;:::-;19756:442;;;;;;:::o;20204:221::-;20344:34;20340:1;20332:6;20328:14;20321:58;20413:4;20408:2;20400:6;20396:15;20389:29;20204:221;:::o;20431:366::-;20573:3;20594:67;20658:2;20653:3;20594:67;:::i;:::-;20587:74;;20670:93;20759:3;20670:93;:::i;:::-;20788:2;20783:3;20779:12;20772:19;;20431:366;;;:::o;20803:419::-;20969:4;21007:2;20996:9;20992:18;20984:26;;21056:9;21050:4;21046:20;21042:1;21031:9;21027:17;21020:47;21084:131;21210:4;21084:131;:::i;:::-;21076:139;;20803:419;;;:::o;21228:229::-;21368:34;21364:1;21356:6;21352:14;21345:58;21437:12;21432:2;21424:6;21420:15;21413:37;21228:229;:::o;21463:366::-;21605:3;21626:67;21690:2;21685:3;21626:67;:::i;:::-;21619:74;;21702:93;21791:3;21702:93;:::i;:::-;21820:2;21815:3;21811:12;21804:19;;21463:366;;;:::o;21835:419::-;22001:4;22039:2;22028:9;22024:18;22016:26;;22088:9;22082:4;22078:20;22074:1;22063:9;22059:17;22052:47;22116:131;22242:4;22116:131;:::i;:::-;22108:139;;21835:419;;;:::o;22260:225::-;22400:34;22396:1;22388:6;22384:14;22377:58;22469:8;22464:2;22456:6;22452:15;22445:33;22260:225;:::o;22491:366::-;22633:3;22654:67;22718:2;22713:3;22654:67;:::i;:::-;22647:74;;22730:93;22819:3;22730:93;:::i;:::-;22848:2;22843:3;22839:12;22832:19;;22491:366;;;:::o;22863:419::-;23029:4;23067:2;23056:9;23052:18;23044:26;;23116:9;23110:4;23106:20;23102:1;23091:9;23087:17;23080:47;23144:131;23270:4;23144:131;:::i;:::-;23136:139;;22863:419;;;:::o;23288:182::-;23428:34;23424:1;23416:6;23412:14;23405:58;23288:182;:::o;23476:366::-;23618:3;23639:67;23703:2;23698:3;23639:67;:::i;:::-;23632:74;;23715:93;23804:3;23715:93;:::i;:::-;23833:2;23828:3;23824:12;23817:19;;23476:366;;;:::o;23848:419::-;24014:4;24052:2;24041:9;24037:18;24029:26;;24101:9;24095:4;24091:20;24087:1;24076:9;24072:17;24065:47;24129:131;24255:4;24129:131;:::i;:::-;24121:139;;23848:419;;;:::o;24273:223::-;24413:34;24409:1;24401:6;24397:14;24390:58;24482:6;24477:2;24469:6;24465:15;24458:31;24273:223;:::o;24502:366::-;24644:3;24665:67;24729:2;24724:3;24665:67;:::i;:::-;24658:74;;24741:93;24830:3;24741:93;:::i;:::-;24859:2;24854:3;24850:12;24843:19;;24502:366;;;:::o;24874:419::-;25040:4;25078:2;25067:9;25063:18;25055:26;;25127:9;25121:4;25117:20;25113:1;25102:9;25098:17;25091:47;25155:131;25281:4;25155:131;:::i;:::-;25147:139;;24874:419;;;:::o;25299:221::-;25439:34;25435:1;25427:6;25423:14;25416:58;25508:4;25503:2;25495:6;25491:15;25484:29;25299:221;:::o;25526:366::-;25668:3;25689:67;25753:2;25748:3;25689:67;:::i;:::-;25682:74;;25765:93;25854:3;25765:93;:::i;:::-;25883:2;25878:3;25874:12;25867:19;;25526:366;;;:::o;25898:419::-;26064:4;26102:2;26091:9;26087:18;26079:26;;26151:9;26145:4;26141:20;26137:1;26126:9;26122:17;26115:47;26179:131;26305:4;26179:131;:::i;:::-;26171:139;;25898:419;;;:::o;26323:179::-;26463:31;26459:1;26451:6;26447:14;26440:55;26323:179;:::o;26508:366::-;26650:3;26671:67;26735:2;26730:3;26671:67;:::i;:::-;26664:74;;26747:93;26836:3;26747:93;:::i;:::-;26865:2;26860:3;26856:12;26849:19;;26508:366;;;:::o;26880:419::-;27046:4;27084:2;27073:9;27069:18;27061:26;;27133:9;27127:4;27123:20;27119:1;27108:9;27104:17;27097:47;27161:131;27287:4;27161:131;:::i;:::-;27153:139;;26880:419;;;:::o;27305:224::-;27445:34;27441:1;27433:6;27429:14;27422:58;27514:7;27509:2;27501:6;27497:15;27490:32;27305:224;:::o;27535:366::-;27677:3;27698:67;27762:2;27757:3;27698:67;:::i;:::-;27691:74;;27774:93;27863:3;27774:93;:::i;:::-;27892:2;27887:3;27883:12;27876:19;;27535:366;;;:::o;27907:419::-;28073:4;28111:2;28100:9;28096:18;28088:26;;28160:9;28154:4;28150:20;28146:1;28135:9;28131:17;28124:47;28188:131;28314:4;28188:131;:::i;:::-;28180:139;;27907:419;;;:::o;28332:222::-;28472:34;28468:1;28460:6;28456:14;28449:58;28541:5;28536:2;28528:6;28524:15;28517:30;28332:222;:::o;28560:366::-;28702:3;28723:67;28787:2;28782:3;28723:67;:::i;:::-;28716:74;;28799:93;28888:3;28799:93;:::i;:::-;28917:2;28912:3;28908:12;28901:19;;28560:366;;;:::o;28932:419::-;29098:4;29136:2;29125:9;29121:18;29113:26;;29185:9;29179:4;29175:20;29171:1;29160:9;29156:17;29149:47;29213:131;29339:4;29213:131;:::i;:::-;29205:139;;28932:419;;;:::o;29357:168::-;29497:20;29493:1;29485:6;29481:14;29474:44;29357:168;:::o;29531:366::-;29673:3;29694:67;29758:2;29753:3;29694:67;:::i;:::-;29687:74;;29770:93;29859:3;29770:93;:::i;:::-;29888:2;29883:3;29879:12;29872:19;;29531:366;;;:::o;29903:419::-;30069:4;30107:2;30096:9;30092:18;30084:26;;30156:9;30150:4;30146:20;30142:1;30131:9;30127:17;30120:47;30184:131;30310:4;30184:131;:::i;:::-;30176:139;;29903:419;;;:::o;30328:181::-;30468:33;30464:1;30456:6;30452:14;30445:57;30328:181;:::o;30515:366::-;30657:3;30678:67;30742:2;30737:3;30678:67;:::i;:::-;30671:74;;30754:93;30843:3;30754:93;:::i;:::-;30872:2;30867:3;30863:12;30856:19;;30515:366;;;:::o;30887:419::-;31053:4;31091:2;31080:9;31076:18;31068:26;;31140:9;31134:4;31130:20;31126:1;31115:9;31111:17;31104:47;31168:131;31294:4;31168:131;:::i;:::-;31160:139;;30887:419;;;:::o;31312:233::-;31351:3;31374:24;31392:5;31374:24;:::i;:::-;31365:33;;31420:66;31413:5;31410:77;31407:103;;31490:18;;:::i;:::-;31407:103;31537:1;31530:5;31526:13;31519:20;;31312:233;;;:::o;31551:180::-;31691:32;31687:1;31679:6;31675:14;31668:56;31551:180;:::o;31737:366::-;31879:3;31900:67;31964:2;31959:3;31900:67;:::i;:::-;31893:74;;31976:93;32065:3;31976:93;:::i;:::-;32094:2;32089:3;32085:12;32078:19;;31737:366;;;:::o;32109:419::-;32275:4;32313:2;32302:9;32298:18;32290:26;;32362:9;32356:4;32352:20;32348:1;32337:9;32333:17;32326:47;32390:131;32516:4;32390:131;:::i;:::-;32382:139;;32109:419;;;:::o;32534:177::-;32674:29;32670:1;32662:6;32658:14;32651:53;32534:177;:::o;32717:366::-;32859:3;32880:67;32944:2;32939:3;32880:67;:::i;:::-;32873:74;;32956:93;33045:3;32956:93;:::i;:::-;33074:2;33069:3;33065:12;33058:19;;32717:366;;;:::o;33089:419::-;33255:4;33293:2;33282:9;33278:18;33270:26;;33342:9;33336:4;33332:20;33328:1;33317:9;33313:17;33306:47;33370:131;33496:4;33370:131;:::i;:::-;33362:139;;33089:419;;;:::o;33514:180::-;33562:77;33559:1;33552:88;33659:4;33656:1;33649:15;33683:4;33680:1;33673:15;33700:185;33740:1;33757:20;33775:1;33757:20;:::i;:::-;33752:25;;33791:20;33809:1;33791:20;:::i;:::-;33786:25;;33830:1;33820:35;;33835:18;;:::i;:::-;33820:35;33877:1;33874;33870:9;33865:14;;33700:185;;;;:::o;33891:194::-;33931:4;33951:20;33969:1;33951:20;:::i;:::-;33946:25;;33985:20;34003:1;33985:20;:::i;:::-;33980:25;;34029:1;34026;34022:9;34014:17;;34053:1;34047:4;34044:11;34041:37;;;34058:18;;:::i;:::-;34041:37;33891:194;;;;:::o;34091:332::-;34212:4;34250:2;34239:9;34235:18;34227:26;;34263:71;34331:1;34320:9;34316:17;34307:6;34263:71;:::i;:::-;34344:72;34412:2;34401:9;34397:18;34388:6;34344:72;:::i;:::-;34091:332;;;;;:::o;34429:225::-;34569:34;34565:1;34557:6;34553:14;34546:58;34638:8;34633:2;34625:6;34621:15;34614:33;34429:225;:::o;34660:366::-;34802:3;34823:67;34887:2;34882:3;34823:67;:::i;:::-;34816:74;;34899:93;34988:3;34899:93;:::i;:::-;35017:2;35012:3;35008:12;35001:19;;34660:366;;;:::o;35032:419::-;35198:4;35236:2;35225:9;35221:18;35213:26;;35285:9;35279:4;35275:20;35271:1;35260:9;35256:17;35249:47;35313:131;35439:4;35313:131;:::i;:::-;35305:139;;35032:419;;;:::o;35457:147::-;35558:11;35595:3;35580:18;;35457:147;;;;:::o;35610:114::-;;:::o;35730:398::-;35889:3;35910:83;35991:1;35986:3;35910:83;:::i;:::-;35903:90;;36002:93;36091:3;36002:93;:::i;:::-;36120:1;36115:3;36111:11;36104:18;;35730:398;;;:::o;36134:379::-;36318:3;36340:147;36483:3;36340:147;:::i;:::-;36333:154;;36504:3;36497:10;;36134:379;;;:::o;36519:182::-;36659:34;36655:1;36647:6;36643:14;36636:58;36519:182;:::o;36707:366::-;36849:3;36870:67;36934:2;36929:3;36870:67;:::i;:::-;36863:74;;36946:93;37035:3;36946:93;:::i;:::-;37064:2;37059:3;37055:12;37048:19;;36707:366;;;:::o;37079:419::-;37245:4;37283:2;37272:9;37268:18;37260:26;;37332:9;37326:4;37322:20;37318:1;37307:9;37303:17;37296:47;37360:131;37486:4;37360:131;:::i;:::-;37352:139;;37079:419;;;:::o;37504:180::-;37552:77;37549:1;37542:88;37649:4;37646:1;37639:15;37673:4;37670:1;37663:15;37690:180;37738:77;37735:1;37728:88;37835:4;37832:1;37825:15;37859:4;37856:1;37849:15;37876:351;37946:6;37995:2;37983:9;37974:7;37970:23;37966:32;37963:119;;;38001:79;;:::i;:::-;37963:119;38121:1;38146:64;38202:7;38193:6;38182:9;38178:22;38146:64;:::i;:::-;38136:74;;38092:128;37876:351;;;;:::o;38233:85::-;38278:7;38307:5;38296:16;;38233:85;;;:::o;38324:158::-;38382:9;38415:61;38433:42;38442:32;38468:5;38442:32;:::i;:::-;38433:42;:::i;:::-;38415:61;:::i;:::-;38402:74;;38324:158;;;:::o;38488:147::-;38583:45;38622:5;38583:45;:::i;:::-;38578:3;38571:58;38488:147;;:::o;38641:114::-;38708:6;38742:5;38736:12;38726:22;;38641:114;;;:::o;38761:184::-;38860:11;38894:6;38889:3;38882:19;38934:4;38929:3;38925:14;38910:29;;38761:184;;;;:::o;38951:132::-;39018:4;39041:3;39033:11;;39071:4;39066:3;39062:14;39054:22;;38951:132;;;:::o;39089:108::-;39166:24;39184:5;39166:24;:::i;:::-;39161:3;39154:37;39089:108;;:::o;39203:179::-;39272:10;39293:46;39335:3;39327:6;39293:46;:::i;:::-;39371:4;39366:3;39362:14;39348:28;;39203:179;;;;:::o;39388:113::-;39458:4;39490;39485:3;39481:14;39473:22;;39388:113;;;:::o;39537:732::-;39656:3;39685:54;39733:5;39685:54;:::i;:::-;39755:86;39834:6;39829:3;39755:86;:::i;:::-;39748:93;;39865:56;39915:5;39865:56;:::i;:::-;39944:7;39975:1;39960:284;39985:6;39982:1;39979:13;39960:284;;;40061:6;40055:13;40088:63;40147:3;40132:13;40088:63;:::i;:::-;40081:70;;40174:60;40227:6;40174:60;:::i;:::-;40164:70;;40020:224;40007:1;40004;40000:9;39995:14;;39960:284;;;39964:14;40260:3;40253:10;;39661:608;;;39537:732;;;;:::o;40275:831::-;40538:4;40576:3;40565:9;40561:19;40553:27;;40590:71;40658:1;40647:9;40643:17;40634:6;40590:71;:::i;:::-;40671:80;40747:2;40736:9;40732:18;40723:6;40671:80;:::i;:::-;40798:9;40792:4;40788:20;40783:2;40772:9;40768:18;40761:48;40826:108;40929:4;40920:6;40826:108;:::i;:::-;40818:116;;40944:72;41012:2;41001:9;40997:18;40988:6;40944:72;:::i;:::-;41026:73;41094:3;41083:9;41079:19;41070:6;41026:73;:::i;:::-;40275:831;;;;;;;;:::o;41112:807::-;41361:4;41399:3;41388:9;41384:19;41376:27;;41413:71;41481:1;41470:9;41466:17;41457:6;41413:71;:::i;:::-;41494:72;41562:2;41551:9;41547:18;41538:6;41494:72;:::i;:::-;41576:80;41652:2;41641:9;41637:18;41628:6;41576:80;:::i;:::-;41666;41742:2;41731:9;41727:18;41718:6;41666:80;:::i;:::-;41756:73;41824:3;41813:9;41809:19;41800:6;41756:73;:::i;:::-;41839;41907:3;41896:9;41892:19;41883:6;41839:73;:::i;:::-;41112:807;;;;;;;;;:::o;41925:663::-;42013:6;42021;42029;42078:2;42066:9;42057:7;42053:23;42049:32;42046:119;;;42084:79;;:::i;:::-;42046:119;42204:1;42229:64;42285:7;42276:6;42265:9;42261:22;42229:64;:::i;:::-;42219:74;;42175:128;42342:2;42368:64;42424:7;42415:6;42404:9;42400:22;42368:64;:::i;:::-;42358:74;;42313:129;42481:2;42507:64;42563:7;42554:6;42543:9;42539:22;42507:64;:::i;:::-;42497:74;;42452:129;41925:663;;;;;:::o

Swarm Source

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