ETH Price: $2,826.03 (+7.74%)
 

Overview

Max Total Supply

947,185,831.169950086354911623 NOVA

Holders

483 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH (+5.26%)

Onchain Market Cap

$859,912.13

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 NOVA

Value
$0.00
0x1f636abd9f9edd3ffdc55a34792454910bd58b15
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Nova DAO is an autonomous community operating on the Ethereum Network, with in-house development backed by Studio Nova; a proven DeFi & GameFi-centric Development Studio.

Market

Volume (24H):$31.69
Market Capitalization:$0.00
Circulating Supply:0.00 NOVA
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Nova

Compiler Version
v0.8.16+commit.07a7930e

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-17
*/

// SPDX-License-Identifier: MIT
// Contract published on behalf of Nova DAO LLC for NovaDAO.
// This contract is provided as-is without any warranties or guarantees.

/*
 * Nova DAO
 * https://nova-dao.com / https://novadao.io
 * X/Twitter: https://x.com/0xNovaDAO
 */


// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.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 anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

// File: TimeLock.sol


pragma solidity 0.8.16;


/*
* @dev Implementation of a simple timelock mechanism for protecting high-security functions.
*
* The modifier withTimelock(functionName) can be added to any function, ensuring any use
* is preceeded by a 24hr wait period, and an appropriate event emission. Following execution
* of the function, the lock will be automatically re-applied.
*/

contract TimeLock is Ownable {
    uint256 public constant lockDuration = 24 hours;

    mapping(bytes32 => uint256) public unlockTimestamps;

    event FunctionUnlocked(bytes32 indexed functionIdentifier, uint256 unlockTimestamp);

    modifier withTimelock(string memory functionName) {
        bytes32 functionIdentifier = keccak256(bytes(functionName));
        require(unlockTimestamps[functionIdentifier] != 0, "Function is locked");
        require(block.timestamp >= unlockTimestamps[functionIdentifier], "Timelock is active");
        _;
        lockFunction(functionName);
    }

    function unlockFunction(string memory functionName) public onlyOwner {
        bytes32 functionIdentifier = keccak256(bytes(functionName));
        uint256 unlockTimestamp = block.timestamp + lockDuration;
        unlockTimestamps[functionIdentifier] = unlockTimestamp;
        emit FunctionUnlocked(functionIdentifier, unlockTimestamp);
    }

    function lockFunction(string memory functionName) internal {
        bytes32 functionIdentifier = keccak256(bytes(functionName));
        unlockTimestamps[functionIdentifier] = 0;
    }
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.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);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.8.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].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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 {}
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

// File: Nova.sol


// Contract published on behalf of Nova DAO LLC for NovaDAO.
// This contract is provided as-is without any warranties or guarantees.

/*
 * Nova DAO
 * https://nova-dao.com / https://novadao.io
 * X/Twitter: https://x.com/0xNovaDAO
 */
pragma solidity 0.8.16;







contract Nova is ERC20, Ownable, TimeLock {
    string constant private _name = "Nova DAO";
    string constant private _symbol = "NOVA";
    uint256 constant private _decimals = 18;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    
    address public daoWallet;
    uint256 public allowedSlippage = 0;
    uint256 public taxForLiquidity = 1;
    uint256 public taxForDao = 2;
    uint256 public _daoReserves = 0;
    uint256 public numTokensSellToAddToLiquidity = 10000 * 10**_decimals;
    uint256 public numTokensSellToAddToETH = 5000 * 10**_decimals;

    mapping(address => bool) public isExcludedFromFee;
    mapping(address => bool) public isLiquidityPair;

    event PrimaryRouterPairUpdated(address _router, address _pair);
    event AddedLiquidityPair(address _pair, bool _status);
    event ExcludedFromFeeUpdated(address _address, bool _status);
    event TaxAmountsUpdated(uint _liquidity, uint _dao);
    event DaoWalletUpdated(address _address);
    event SwapThresholdsChanged(uint _lpSwapThreshold, uint _daoSwapThreshold);
    event DaoTransferFailed(address _daoWallet, uint _amount);
    
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;

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

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor(address _router, address _daoWallet) ERC20(_name, _symbol) {
        require(_router != DEAD && _router != address(0), "Router cannot be the Dead address, or 0!");
        require(_daoWallet != DEAD && _daoWallet != address(0), "DAO Wallet cannot be the Dead address, or 0!");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        daoWallet = address(_daoWallet);

        isExcludedFromFee[address(uniswapV2Router)] = true;
        isExcludedFromFee[msg.sender] = true;
        isExcludedFromFee[daoWallet] = true;
        isLiquidityPair[uniswapV2Pair] = true;
        
        _mint(msg.sender, 1_000_000_000 * 10**_decimals); //existing supply for token conversions
        _mint(daoWallet, 400_000_000 * 10**_decimals); //new supply for DAO ownership
    }

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

        if ((isLiquidityPair[from] || isLiquidityPair[to]) 
        && taxForDao + taxForLiquidity > 0 
        && !inSwapAndLiquify) {
            bool _isSendingDaoTokens = false;

            if (!isLiquidityPair[from]) {
                uint256 contractLiquidityBalance = balanceOf(address(this)) - _daoReserves;
                if (contractLiquidityBalance >= numTokensSellToAddToLiquidity) {
                    _swapAndLiquify(numTokensSellToAddToLiquidity);
                }
                if (_daoReserves >= numTokensSellToAddToETH) {
                    _swapTokensForEth(numTokensSellToAddToETH);
                    _daoReserves -= numTokensSellToAddToETH;
                    _isSendingDaoTokens = true;
                }
            }

            uint256 transferAmount;
            if (isExcludedFromFee[from] || isExcludedFromFee[to]) {
                transferAmount = amount;
            }
            else {
                uint256 daoShare = ((amount * taxForDao) / 100);
                uint256 liquidityShare = ((amount * taxForLiquidity) / 100);
                transferAmount = amount - (daoShare + liquidityShare);
                _daoReserves += daoShare;

                super._transfer(from, address(this), (daoShare + liquidityShare));
            }
            super._transfer(from, to, transferAmount);

            if (_isSendingDaoTokens) {
                (bool success, ) = payable(daoWallet).call{value: address(this).balance}("");
                if(!success) {
                    emit DaoTransferFailed(daoWallet, address(this).balance);
                }
            }
        } 
        else {
            super._transfer(from, to, amount);
        }
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = (contractTokenBalance / 2);
        uint256 otherHalf = (contractTokenBalance - half);

        uint256 initialBalance = address(this).balance;

        _swapTokensForEth(half);

        uint256 newBalance = (address(this).balance - initialBalance);

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function _swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private lockTheSwap {
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            daoWallet,
            block.timestamp
        );
    }

    function burn(uint256 amount) external {
        require(amount > 0, "Cannot burn 0 tokens!");
        _burn(msg.sender, amount);
    }

    function updateRouter(address _router) external onlyOwner withTimelock("updateRouterPair") {
        require(_router != DEAD && _router != address(0), "Router cannot be the Dead address, or 0!");

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        address _pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .getPair(address(this), _uniswapV2Router.WETH());

        require(_pair != DEAD && _pair != address(0), "Pair cannot be the Dead address, or 0!");

        uniswapV2Pair = _pair;
        uniswapV2Router = _uniswapV2Router;

        isExcludedFromFee[address(uniswapV2Router)] = true;
        isLiquidityPair[uniswapV2Pair] = true;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        emit PrimaryRouterPairUpdated(_router, _pair);
    }

    function changeDaoWallet(address newWallet) external onlyOwner
    {
        require(newWallet != DEAD && newWallet != address(0), "DAO Wallet cannot be the Dead address, or 0!");
        daoWallet = newWallet;
        emit DaoWalletUpdated(daoWallet);
    }

    function changeTaxForLiquidityAndDao(uint256 _taxForLiquidity, uint256 _taxForDao) 
        external
        onlyOwner
        withTimelock("changeTaxForLiquidityAndDao")
    {
        require((_taxForLiquidity+_taxForDao) <= 6, "ERC20: total tax must not be greater than 6%");
        taxForLiquidity = _taxForLiquidity;
        taxForDao = _taxForDao;
        emit TaxAmountsUpdated(taxForLiquidity, taxForDao);
    }

    function changeSwapThresholds(uint256 _numTokensSellToAddToLiquidity, uint256 _numTokensSellToAddToETH)
        external
        onlyOwner
    {
        require(_numTokensSellToAddToLiquidity < totalSupply() / 100, "Cannot liquidate more than 1% of the supply at once!");
        require(_numTokensSellToAddToETH < totalSupply() / 100, "Cannot liquidate more than 1% of the supply at once!");
        require(_numTokensSellToAddToLiquidity > 0, "LP: Must liquidate at least 1 token.");
        require(_numTokensSellToAddToETH > 0, "ETH/Gas Token: Must liquidate at least 1 token.");
        numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity * 10**_decimals;
        numTokensSellToAddToETH = _numTokensSellToAddToETH * 10**_decimals;
        emit SwapThresholdsChanged(numTokensSellToAddToLiquidity, numTokensSellToAddToETH);
    }

    function updatePairStatus(address _pair, bool _status) external onlyOwner {
        require(isContract(_pair), "Address must be a contract");
        isLiquidityPair[_pair] = _status;
        emit AddedLiquidityPair(_pair, _status);
    }

    function excludeFromFee(address _address, bool _status) external onlyOwner {
        isExcludedFromFee[_address] = _status;
        emit ExcludedFromFeeUpdated(_address, _status);
    }

    function isContract(address _addr) internal view returns (bool) {
        uint32 size;
        assembly {
            size := extcodesize(_addr)
        }
        return (size > 0);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_daoWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_pair","type":"address"},{"indexed":false,"internalType":"bool","name":"_status","type":"bool"}],"name":"AddedLiquidityPair","type":"event"},{"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":false,"internalType":"address","name":"_daoWallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"DaoTransferFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"DaoWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludedFromFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"functionIdentifier","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"unlockTimestamp","type":"uint256"}],"name":"FunctionUnlocked","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":"address","name":"_router","type":"address"},{"indexed":false,"internalType":"address","name":"_pair","type":"address"}],"name":"PrimaryRouterPairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_lpSwapThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_daoSwapThreshold","type":"uint256"}],"name":"SwapThresholdsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_dao","type":"uint256"}],"name":"TaxAmountsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_daoReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowedSlippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeDaoWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"},{"internalType":"uint256","name":"_numTokensSellToAddToETH","type":"uint256"}],"name":"changeSwapThresholds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_taxForDao","type":"uint256"}],"name":"changeTaxForLiquidityAndDao","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"daoWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDuration","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":"numTokensSellToAddToETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForDao","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"functionName","type":"string"}],"name":"unlockFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"unlockTimestamps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"updatePairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600060085560016009556002600a556000600b556012600a62000028919062000d16565b61271062000037919062000d67565b600c556012600a6200004a919062000d16565b61138862000059919062000d67565b600d553480156200006957600080fd5b5060405162005a4038038062005a4083398181016040528101906200008f919062000e32565b6040518060400160405280600881526020017f4e6f76612044414f0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e4f56410000000000000000000000000000000000000000000000000000000081525081600390816200010c9190620010e9565b5080600490816200011e9190620010e9565b50505062000141620001356200077360201b60201c565b6200077b60201b60201c565b61dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015620001ad5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b620001ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e69062001257565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156200025b5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6200029d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200029490620012ef565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000314919062001311565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200037c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a2919062001311565b6040518363ffffffff1660e01b8152600401620003c192919062001354565b6020604051808303816000875af1158015620003e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000407919062001311565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004dd30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200084160201b60201c565b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000716336012600a620006f9919062000d16565b633b9aca006200070a919062000d67565b62000a1260201b60201c565b6200076a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166012600a6200074d919062000d16565b6317d784006200075e919062000d67565b62000a1260201b60201c565b5050506200158c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620008b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008aa90620013f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000925576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200091c906200148f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000a059190620014c2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a7b906200152f565b60405180910390fd5b62000a986000838362000b7f60201b60201c565b806002600082825462000aac919062001551565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b5f9190620014c2565b60405180910390a362000b7b6000838362000b8460201b60201c565b5050565b505050565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c175780860481111562000bef5762000bee62000b89565b5b600185161562000bff5780820291505b808102905062000c0f8562000bb8565b945062000bcf565b94509492505050565b60008262000c32576001905062000d05565b8162000c42576000905062000d05565b816001811462000c5b576002811462000c665762000c9c565b600191505062000d05565b60ff84111562000c7b5762000c7a62000b89565b5b8360020a91508482111562000c955762000c9462000b89565b5b5062000d05565b5060208310610133831016604e8410600b841016171562000cd65782820a90508381111562000cd05762000ccf62000b89565b5b62000d05565b62000ce5848484600162000bc5565b9250905081840481111562000cff5762000cfe62000b89565b5b81810290505b9392505050565b6000819050919050565b600062000d238262000d0c565b915062000d308362000d0c565b925062000d5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c20565b905092915050565b600062000d748262000d0c565b915062000d818362000d0c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dbd5762000dbc62000b89565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000dfa8262000dcd565b9050919050565b62000e0c8162000ded565b811462000e1857600080fd5b50565b60008151905062000e2c8162000e01565b92915050565b6000806040838503121562000e4c5762000e4b62000dc8565b5b600062000e5c8582860162000e1b565b925050602062000e6f8582860162000e1b565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000efb57607f821691505b60208210810362000f115762000f1062000eb3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000f7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f3c565b62000f87868362000f3c565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000fca62000fc462000fbe8462000d0c565b62000f9f565b62000d0c565b9050919050565b6000819050919050565b62000fe68362000fa9565b62000ffe62000ff58262000fd1565b84845462000f49565b825550505050565b600090565b6200101562001006565b6200102281848462000fdb565b505050565b5b818110156200104a576200103e6000826200100b565b60018101905062001028565b5050565b601f8211156200109957620010638162000f17565b6200106e8462000f2c565b810160208510156200107e578190505b620010966200108d8562000f2c565b83018262001027565b50505b505050565b600082821c905092915050565b6000620010be600019846008026200109e565b1980831691505092915050565b6000620010d98383620010ab565b9150826002028217905092915050565b620010f48262000e79565b67ffffffffffffffff81111562001110576200110f62000e84565b5b6200111c825462000ee2565b620011298282856200104e565b600060209050601f8311600181146200116157600084156200114c578287015190505b620011588582620010cb565b865550620011c8565b601f198416620011718662000f17565b60005b828110156200119b5784890151825560018201915060208501945060208101905062001174565b86831015620011bb5784890151620011b7601f891682620010ab565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f526f757465722063616e6e6f742062652074686520446561642061646472657360008201527f732c206f72203021000000000000000000000000000000000000000000000000602082015250565b60006200123f602883620011d0565b91506200124c82620011e1565b604082019050919050565b60006020820190508181036000830152620012728162001230565b9050919050565b7f44414f2057616c6c65742063616e6e6f7420626520746865204465616420616460008201527f64726573732c206f722030210000000000000000000000000000000000000000602082015250565b6000620012d7602c83620011d0565b9150620012e48262001279565b604082019050919050565b600060208201905081810360008301526200130a81620012c8565b9050919050565b6000602082840312156200132a576200132962000dc8565b5b60006200133a8482850162000e1b565b91505092915050565b6200134e8162000ded565b82525050565b60006040820190506200136b600083018562001343565b6200137a602083018462001343565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620013df602483620011d0565b9150620013ec8262001381565b604082019050919050565b600060208201905081810360008301526200141281620013d0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062001477602283620011d0565b9150620014848262001419565b604082019050919050565b60006020820190508181036000830152620014aa8162001468565b9050919050565b620014bc8162000d0c565b82525050565b6000602082019050620014d96000830184620014b1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001517601f83620011d0565b91506200152482620014df565b602082019050919050565b600060208201905081810360008301526200154a8162001508565b9050919050565b60006200155e8262000d0c565b91506200156b8362000d0c565b925082820190508082111562001586576200158562000b89565b5b92915050565b6144a4806200159c6000396000f3fe6080604052600436106102135760003560e01c806370a0823111610118578063a9059cbb116100a0578063d12a76881161006f578063d12a7688146107d4578063dd62ed3e146107ff578063df8408fe1461083c578063f2fde38b14610865578063f345bd851461088e5761021a565b8063a9059cbb1461071a578063ad16a0cf14610757578063c851cc3214610782578063cae3f02e146107ab5761021a565b806395d89b41116100e757806395d89b41146106235780639ba3f06a1461064e578063a457c2d71461068b578063a607494a146106c8578063a6a3436e146106f15761021a565b806370a082311461057b578063715018a6146105b857806377e58a31146105cf5780638da5cb5b146105f85761021a565b8063313ce5671161019b57806349bd5a5e1161016a57806349bd5a5e146104805780634a6d4a37146104ab5780635342acb4146104d65780635c9a05b814610513578063698a5897146105505761021a565b8063313ce567146103c457806339509351146103ef57806342966c681461042c578063431f2445146104555761021a565b80631458beac116101e25780631458beac146102dd5780631694505e1461030857806318160ddd1461033357806323b872dd1461035e57806330b63d801461039b5761021a565b806303fd2a451461021f578063045544431461024a57806306fdde0314610275578063095ea7b3146102a05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108b9565b6040516102419190612bdb565b60405180910390f35b34801561025657600080fd5b5061025f6108bf565b60405161026c9190612c0f565b60405180910390f35b34801561028157600080fd5b5061028a6108c6565b6040516102979190612cba565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190612d48565b610958565b6040516102d49190612da3565b60405180910390f35b3480156102e957600080fd5b506102f261097b565b6040516102ff9190612c0f565b60405180910390f35b34801561031457600080fd5b5061031d610981565b60405161032a9190612e1d565b60405180910390f35b34801561033f57600080fd5b506103486109a7565b6040516103559190612c0f565b60405180910390f35b34801561036a57600080fd5b5061038560048036038101906103809190612e38565b6109b1565b6040516103929190612da3565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190612e8b565b6109e0565b005b3480156103d057600080fd5b506103d9610b97565b6040516103e69190612ee7565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190612d48565b610ba0565b6040516104239190612da3565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190612f02565b610bd7565b005b34801561046157600080fd5b5061046a610c27565b6040516104779190612c0f565b60405180910390f35b34801561048c57600080fd5b50610495610c2d565b6040516104a29190612bdb565b60405180910390f35b3480156104b757600080fd5b506104c0610c53565b6040516104cd9190612c0f565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190612f2f565b610c59565b60405161050a9190612da3565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190612f2f565b610c79565b6040516105479190612da3565b60405180910390f35b34801561055c57600080fd5b50610565610c99565b6040516105729190612bdb565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612f2f565b610cbf565b6040516105af9190612c0f565b60405180910390f35b3480156105c457600080fd5b506105cd610d07565b005b3480156105db57600080fd5b506105f660048036038101906105f19190612f88565b610d1b565b005b34801561060457600080fd5b5061060d610dff565b60405161061a9190612bdb565b60405180910390f35b34801561062f57600080fd5b50610638610e29565b6040516106459190612cba565b60405180910390f35b34801561065a57600080fd5b5061067560048036038101906106709190612ffe565b610ebb565b6040516106829190612c0f565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190612d48565b610ed3565b6040516106bf9190612da3565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea9190613160565b610f4a565b005b3480156106fd57600080fd5b5061071860048036038101906107139190612f2f565b610fc6565b005b34801561072657600080fd5b50610741600480360381019061073c9190612d48565b611115565b60405161074e9190612da3565b60405180910390f35b34801561076357600080fd5b5061076c611138565b6040516107799190612c0f565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190612f2f565b61113e565b005b3480156107b757600080fd5b506107d260048036038101906107cd9190612e8b565b6116f5565b005b3480156107e057600080fd5b506107e9611894565b6040516107f69190612c0f565b60405180910390f35b34801561080b57600080fd5b50610826600480360381019061082191906131a9565b61189a565b6040516108339190612c0f565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190612f88565b611921565b005b34801561087157600080fd5b5061088c60048036038101906108879190612f2f565b6119bd565b005b34801561089a57600080fd5b506108a3611a40565b6040516108b09190612c0f565b60405180910390f35b61dead81565b6201518081565b6060600380546108d590613218565b80601f016020809104026020016040519081016040528092919081815260200182805461090190613218565b801561094e5780601f106109235761010080835404028352916020019161094e565b820191906000526020600020905b81548152906001019060200180831161093157829003601f168201915b5050505050905090565b600080610963611a46565b9050610970818585611a4e565b600191505092915050565b600b5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000806109bc611a46565b90506109c9858285611c17565b6109d4858585611ca3565b60019150509392505050565b6109e86121b1565b60646109f26109a7565b6109fc91906132a7565b8210610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a349061334a565b60405180910390fd5b6064610a476109a7565b610a5191906132a7565b8110610a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a899061334a565b60405180910390fd5b60008211610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc906133dc565b60405180910390fd5b60008111610b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0f9061346e565b60405180910390fd5b6012600a610b2691906135c1565b82610b31919061360c565b600c819055506012600a610b4591906135c1565b81610b50919061360c565b600d819055507f9716128a636528fa50210bbc0beccc798a478589fd73810448dca2891bfc1b0c600c54600d54604051610b8b929190613666565b60405180910390a15050565b60006012905090565b600080610bab611a46565b9050610bcc818585610bbd858961189a565b610bc7919061368f565b611a4e565b600191505092915050565b60008111610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c119061370f565b60405180910390fd5b610c24338261222f565b50565b60085481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600e6020528060005260406000206000915054906101000a900460ff1681565b600f6020528060005260406000206000915054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d0f6121b1565b610d1960006123fc565b565b610d236121b1565b610d2c826124c2565b610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d629061377b565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f399c10fc86f718f4269b5fcf54194fd65525a652bcfc12e3542c8457648345978282604051610df392919061379b565b60405180910390a15050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e3890613218565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6490613218565b8015610eb15780601f10610e8657610100808354040283529160200191610eb1565b820191906000526020600020905b815481529060010190602001808311610e9457829003601f168201915b5050505050905090565b60066020528060005260406000206000915090505481565b600080610ede611a46565b90506000610eec828661189a565b905083811015610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890613836565b60405180910390fd5b610f3e8286868403611a4e565b60019250505092915050565b610f526121b1565b60008180519060200120905060006201518042610f6f919061368f565b9050806006600084815260200190815260200160002081905550817f039238ed1566bfde7f10abd8db86aa7489c202da6e2f8b661ff97cc94719b59b82604051610fb99190612c0f565b60405180910390a2505050565b610fce6121b1565b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156110395750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f906138c8565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe350eafeb77907c314723a0d8854919a914d11e973c487eb728818ba6cc8842f600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161110a9190612bdb565b60405180910390a150565b600080611120611a46565b905061112d818585611ca3565b600191505092915050565b600d5481565b6111466121b1565b6040518060400160405280601081526020017f757064617465526f75746572506169720000000000000000000000000000000081525060008180519060200120905060006006600083815260200190815260200160002054036111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590613934565b60405180910390fd5b6006600082815260200190815260200160002054421015611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b906139a0565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561129f5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613a32565b60405180910390fd5b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113549190613a67565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113df9190613a67565b6040518363ffffffff1660e01b81526004016113fc929190613a94565b602060405180830381865afa158015611419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143d9190613a67565b905061dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156114aa5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e090613b2f565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506116ac30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a4e565b7f799e60742536ea7cdd3c3213158b31174028bc0855080d6e73f3193e67f0258285826040516116dd929190613a94565b60405180910390a150506116f0826124db565b505050565b6116fd6121b1565b6040518060400160405280601b81526020017f6368616e6765546178466f724c6971756964697479416e6444616f00000000008152506000818051906020012090506000600660008381526020019081526020016000205403611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178c90613934565b60405180910390fd5b60066000828152602001908152602001600020544210156117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e2906139a0565b60405180910390fd5b600683856117f9919061368f565b111561183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190613bc1565b60405180910390fd5b8360098190555082600a819055507f4f690c07d9c11a6da5b07e418d8f99e41b07e1ab65df93fff5e3e66d9de21ced600954600a5460405161187d929190613666565b60405180910390a161188e826124db565b50505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119296121b1565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff282826040516119b192919061379b565b60405180910390a15050565b6119c56121b1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90613c53565b60405180910390fd5b611a3d816123fc565b50565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab490613ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2390613d77565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c0a9190612c0f565b60405180910390a3505050565b6000611c23848461189a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c9d5781811015611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690613de3565b60405180910390fd5b611c9c8484848403611a4e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0990613e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890613f07565b60405180910390fd5b80611d8b84610cbf565b1015611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390613f99565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e6d5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015611e8857506000600954600a54611e86919061368f565b115b8015611ea15750601160149054906101000a900460ff16155b156121a0576000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f60576000600b54611f0730610cbf565b611f119190613fb9565b9050600c548110611f2857611f27600c54612504565b5b600d54600b5410611f5e57611f3e600d546125c5565b600d54600b6000828254611f529190613fb9565b92505081905550600191505b505b6000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120035750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561201057829050612097565b60006064600a5485612022919061360c565b61202c91906132a7565b90506000606460095486612040919061360c565b61204a91906132a7565b90508082612058919061368f565b856120639190613fb9565b925081600b6000828254612077919061368f565b925050819055506120948730838561208f919061368f565b612811565b50505b6120a2858583612811565b8115612199576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516120f09061401e565b60006040518083038185875af1925050503d806000811461212d576040519150601f19603f3d011682016040523d82523d6000602084013e612132565b606091505b5050905080612197577f85c56b65941d7802c1279ab36fe16bb81ff2f60707c9ecf4a6527a4c114fc97c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff164760405161218e929190614033565b60405180910390a15b505b50506121ac565b6121ab838383612811565b5b505050565b6121b9611a46565b73ffffffffffffffffffffffffffffffffffffffff166121d7610dff565b73ffffffffffffffffffffffffffffffffffffffff161461222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906140a8565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361229e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122959061413a565b60405180910390fd5b6122aa82600083612a87565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612327906141cc565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123e39190612c0f565b60405180910390a36123f783600084612a8c565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008163ffffffff1611915050919050565b600081805190602001209050600060066000838152602001908152602001600020819055505050565b6001601160146101000a81548160ff021916908315150217905550600060028261252e91906132a7565b90506000818361253e9190613fb9565b9050600047905061254e836125c5565b6000814761255c9190613fb9565b90506125688382612a91565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161259b939291906141ec565b60405180910390a1505050506000601160146101000a81548160ff02191690831515021790555050565b6001601160146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156125fd576125fc613035565b5b60405190808252806020026020018201604052801561262b5781602001602082028036833780820191505090505b509050308160008151811061264357612642614223565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270e9190613a67565b8160018151811061272257612721614223565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127c095949392919061434b565b600060405180830381600087803b1580156127da57600080fd5b505af11580156127ee573d6000803e3d6000fd5b50505050506000601160146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287790613e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e690613f07565b60405180910390fd5b6128fa838383612a87565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297790613f99565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a6e9190612c0f565b60405180910390a3612a81848484612a8c565b50505050565b505050565b505050565b6001601160146101000a81548160ff021916908315150217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612b35969594939291906143a5565b60606040518083038185885af1158015612b53573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b78919061441b565b5050506000601160146101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612bc582612b9a565b9050919050565b612bd581612bba565b82525050565b6000602082019050612bf06000830184612bcc565b92915050565b6000819050919050565b612c0981612bf6565b82525050565b6000602082019050612c246000830184612c00565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c64578082015181840152602081019050612c49565b60008484015250505050565b6000601f19601f8301169050919050565b6000612c8c82612c2a565b612c968185612c35565b9350612ca6818560208601612c46565b612caf81612c70565b840191505092915050565b60006020820190508181036000830152612cd48184612c81565b905092915050565b6000604051905090565b600080fd5b600080fd5b612cf981612bba565b8114612d0457600080fd5b50565b600081359050612d1681612cf0565b92915050565b612d2581612bf6565b8114612d3057600080fd5b50565b600081359050612d4281612d1c565b92915050565b60008060408385031215612d5f57612d5e612ce6565b5b6000612d6d85828601612d07565b9250506020612d7e85828601612d33565b9150509250929050565b60008115159050919050565b612d9d81612d88565b82525050565b6000602082019050612db86000830184612d94565b92915050565b6000819050919050565b6000612de3612dde612dd984612b9a565b612dbe565b612b9a565b9050919050565b6000612df582612dc8565b9050919050565b6000612e0782612dea565b9050919050565b612e1781612dfc565b82525050565b6000602082019050612e326000830184612e0e565b92915050565b600080600060608486031215612e5157612e50612ce6565b5b6000612e5f86828701612d07565b9350506020612e7086828701612d07565b9250506040612e8186828701612d33565b9150509250925092565b60008060408385031215612ea257612ea1612ce6565b5b6000612eb085828601612d33565b9250506020612ec185828601612d33565b9150509250929050565b600060ff82169050919050565b612ee181612ecb565b82525050565b6000602082019050612efc6000830184612ed8565b92915050565b600060208284031215612f1857612f17612ce6565b5b6000612f2684828501612d33565b91505092915050565b600060208284031215612f4557612f44612ce6565b5b6000612f5384828501612d07565b91505092915050565b612f6581612d88565b8114612f7057600080fd5b50565b600081359050612f8281612f5c565b92915050565b60008060408385031215612f9f57612f9e612ce6565b5b6000612fad85828601612d07565b9250506020612fbe85828601612f73565b9150509250929050565b6000819050919050565b612fdb81612fc8565b8114612fe657600080fd5b50565b600081359050612ff881612fd2565b92915050565b60006020828403121561301457613013612ce6565b5b600061302284828501612fe9565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61306d82612c70565b810181811067ffffffffffffffff8211171561308c5761308b613035565b5b80604052505050565b600061309f612cdc565b90506130ab8282613064565b919050565b600067ffffffffffffffff8211156130cb576130ca613035565b5b6130d482612c70565b9050602081019050919050565b82818337600083830152505050565b60006131036130fe846130b0565b613095565b90508281526020810184848401111561311f5761311e613030565b5b61312a8482856130e1565b509392505050565b600082601f8301126131475761314661302b565b5b81356131578482602086016130f0565b91505092915050565b60006020828403121561317657613175612ce6565b5b600082013567ffffffffffffffff81111561319457613193612ceb565b5b6131a084828501613132565b91505092915050565b600080604083850312156131c0576131bf612ce6565b5b60006131ce85828601612d07565b92505060206131df85828601612d07565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061323057607f821691505b602082108103613243576132426131e9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006132b282612bf6565b91506132bd83612bf6565b9250826132cd576132cc613249565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203125206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b6000613334603483612c35565b915061333f826132d8565b604082019050919050565b6000602082019050818103600083015261336381613327565b9050919050565b7f4c503a204d757374206c6971756964617465206174206c65617374203120746f60008201527f6b656e2e00000000000000000000000000000000000000000000000000000000602082015250565b60006133c6602483612c35565b91506133d18261336a565b604082019050919050565b600060208201905081810360008301526133f5816133b9565b9050919050565b7f4554482f47617320546f6b656e3a204d757374206c697175696461746520617460008201527f206c65617374203120746f6b656e2e0000000000000000000000000000000000602082015250565b6000613458602f83612c35565b9150613463826133fc565b604082019050919050565b600060208201905081810360008301526134878161344b565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156134e5578086048111156134c1576134c0613278565b5b60018516156134d05780820291505b80810290506134de8561348e565b94506134a5565b94509492505050565b6000826134fe57600190506135ba565b8161350c57600090506135ba565b8160018114613522576002811461352c5761355b565b60019150506135ba565b60ff84111561353e5761353d613278565b5b8360020a91508482111561355557613554613278565b5b506135ba565b5060208310610133831016604e8410600b84101617156135905782820a90508381111561358b5761358a613278565b5b6135ba565b61359d848484600161349b565b925090508184048111156135b4576135b3613278565b5b81810290505b9392505050565b60006135cc82612bf6565b91506135d783612bf6565b92506136047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846134ee565b905092915050565b600061361782612bf6565b915061362283612bf6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365b5761365a613278565b5b828202905092915050565b600060408201905061367b6000830185612c00565b6136886020830184612c00565b9392505050565b600061369a82612bf6565b91506136a583612bf6565b92508282019050808211156136bd576136bc613278565b5b92915050565b7f43616e6e6f74206275726e203020746f6b656e73210000000000000000000000600082015250565b60006136f9601583612c35565b9150613704826136c3565b602082019050919050565b60006020820190508181036000830152613728816136ec565b9050919050565b7f41646472657373206d757374206265206120636f6e7472616374000000000000600082015250565b6000613765601a83612c35565b91506137708261372f565b602082019050919050565b6000602082019050818103600083015261379481613758565b9050919050565b60006040820190506137b06000830185612bcc565b6137bd6020830184612d94565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613820602583612c35565b915061382b826137c4565b604082019050919050565b6000602082019050818103600083015261384f81613813565b9050919050565b7f44414f2057616c6c65742063616e6e6f7420626520746865204465616420616460008201527f64726573732c206f722030210000000000000000000000000000000000000000602082015250565b60006138b2602c83612c35565b91506138bd82613856565b604082019050919050565b600060208201905081810360008301526138e1816138a5565b9050919050565b7f46756e6374696f6e206973206c6f636b65640000000000000000000000000000600082015250565b600061391e601283612c35565b9150613929826138e8565b602082019050919050565b6000602082019050818103600083015261394d81613911565b9050919050565b7f54696d656c6f636b206973206163746976650000000000000000000000000000600082015250565b600061398a601283612c35565b915061399582613954565b602082019050919050565b600060208201905081810360008301526139b98161397d565b9050919050565b7f526f757465722063616e6e6f742062652074686520446561642061646472657360008201527f732c206f72203021000000000000000000000000000000000000000000000000602082015250565b6000613a1c602883612c35565b9150613a27826139c0565b604082019050919050565b60006020820190508181036000830152613a4b81613a0f565b9050919050565b600081519050613a6181612cf0565b92915050565b600060208284031215613a7d57613a7c612ce6565b5b6000613a8b84828501613a52565b91505092915050565b6000604082019050613aa96000830185612bcc565b613ab66020830184612bcc565b9392505050565b7f506169722063616e6e6f7420626520746865204465616420616464726573732c60008201527f206f722030210000000000000000000000000000000000000000000000000000602082015250565b6000613b19602683612c35565b9150613b2482613abd565b604082019050919050565b60006020820190508181036000830152613b4881613b0c565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2036250000000000000000000000000000000000000000602082015250565b6000613bab602c83612c35565b9150613bb682613b4f565b604082019050919050565b60006020820190508181036000830152613bda81613b9e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c3d602683612c35565b9150613c4882613be1565b604082019050919050565b60006020820190508181036000830152613c6c81613c30565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ccf602483612c35565b9150613cda82613c73565b604082019050919050565b60006020820190508181036000830152613cfe81613cc2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d61602283612c35565b9150613d6c82613d05565b604082019050919050565b60006020820190508181036000830152613d9081613d54565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613dcd601d83612c35565b9150613dd882613d97565b602082019050919050565b60006020820190508181036000830152613dfc81613dc0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e5f602583612c35565b9150613e6a82613e03565b604082019050919050565b60006020820190508181036000830152613e8e81613e52565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef1602383612c35565b9150613efc82613e95565b604082019050919050565b60006020820190508181036000830152613f2081613ee4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f83602683612c35565b9150613f8e82613f27565b604082019050919050565b60006020820190508181036000830152613fb281613f76565b9050919050565b6000613fc482612bf6565b9150613fcf83612bf6565b9250828203905081811115613fe757613fe6613278565b5b92915050565b600081905092915050565b50565b6000614008600083613fed565b915061401382613ff8565b600082019050919050565b600061402982613ffb565b9150819050919050565b60006040820190506140486000830185612bcc565b6140556020830184612c00565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614092602083612c35565b915061409d8261405c565b602082019050919050565b600060208201905081810360008301526140c181614085565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614124602183612c35565b915061412f826140c8565b604082019050919050565b6000602082019050818103600083015261415381614117565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006141b6602283612c35565b91506141c18261415a565b604082019050919050565b600060208201905081810360008301526141e5816141a9565b9050919050565b60006060820190506142016000830186612c00565b61420e6020830185612c00565b61421b6040830184612c00565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061427761427261426d84614252565b612dbe565b612bf6565b9050919050565b6142878161425c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142c281612bba565b82525050565b60006142d483836142b9565b60208301905092915050565b6000602082019050919050565b60006142f88261428d565b6143028185614298565b935061430d836142a9565b8060005b8381101561433e57815161432588826142c8565b9750614330836142e0565b925050600181019050614311565b5085935050505092915050565b600060a0820190506143606000830188612c00565b61436d602083018761427e565b818103604083015261437f81866142ed565b905061438e6060830185612bcc565b61439b6080830184612c00565b9695505050505050565b600060c0820190506143ba6000830189612bcc565b6143c76020830188612c00565b6143d4604083018761427e565b6143e1606083018661427e565b6143ee6080830185612bcc565b6143fb60a0830184612c00565b979650505050505050565b60008151905061441581612d1c565b92915050565b60008060006060848603121561443457614433612ce6565b5b600061444286828701614406565b935050602061445386828701614406565b925050604061446486828701614406565b915050925092509256fea2646970667358221220e06db29f3769e6f345cca2bdef036759f2ecf61571ba21213569e193eb33412c64736f6c634300081000330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000ef95d8fb80f3d8f3e6d60ad6e5bf6091f17afb9f

Deployed Bytecode

0x6080604052600436106102135760003560e01c806370a0823111610118578063a9059cbb116100a0578063d12a76881161006f578063d12a7688146107d4578063dd62ed3e146107ff578063df8408fe1461083c578063f2fde38b14610865578063f345bd851461088e5761021a565b8063a9059cbb1461071a578063ad16a0cf14610757578063c851cc3214610782578063cae3f02e146107ab5761021a565b806395d89b41116100e757806395d89b41146106235780639ba3f06a1461064e578063a457c2d71461068b578063a607494a146106c8578063a6a3436e146106f15761021a565b806370a082311461057b578063715018a6146105b857806377e58a31146105cf5780638da5cb5b146105f85761021a565b8063313ce5671161019b57806349bd5a5e1161016a57806349bd5a5e146104805780634a6d4a37146104ab5780635342acb4146104d65780635c9a05b814610513578063698a5897146105505761021a565b8063313ce567146103c457806339509351146103ef57806342966c681461042c578063431f2445146104555761021a565b80631458beac116101e25780631458beac146102dd5780631694505e1461030857806318160ddd1461033357806323b872dd1461035e57806330b63d801461039b5761021a565b806303fd2a451461021f578063045544431461024a57806306fdde0314610275578063095ea7b3146102a05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108b9565b6040516102419190612bdb565b60405180910390f35b34801561025657600080fd5b5061025f6108bf565b60405161026c9190612c0f565b60405180910390f35b34801561028157600080fd5b5061028a6108c6565b6040516102979190612cba565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190612d48565b610958565b6040516102d49190612da3565b60405180910390f35b3480156102e957600080fd5b506102f261097b565b6040516102ff9190612c0f565b60405180910390f35b34801561031457600080fd5b5061031d610981565b60405161032a9190612e1d565b60405180910390f35b34801561033f57600080fd5b506103486109a7565b6040516103559190612c0f565b60405180910390f35b34801561036a57600080fd5b5061038560048036038101906103809190612e38565b6109b1565b6040516103929190612da3565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190612e8b565b6109e0565b005b3480156103d057600080fd5b506103d9610b97565b6040516103e69190612ee7565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190612d48565b610ba0565b6040516104239190612da3565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190612f02565b610bd7565b005b34801561046157600080fd5b5061046a610c27565b6040516104779190612c0f565b60405180910390f35b34801561048c57600080fd5b50610495610c2d565b6040516104a29190612bdb565b60405180910390f35b3480156104b757600080fd5b506104c0610c53565b6040516104cd9190612c0f565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190612f2f565b610c59565b60405161050a9190612da3565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190612f2f565b610c79565b6040516105479190612da3565b60405180910390f35b34801561055c57600080fd5b50610565610c99565b6040516105729190612bdb565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612f2f565b610cbf565b6040516105af9190612c0f565b60405180910390f35b3480156105c457600080fd5b506105cd610d07565b005b3480156105db57600080fd5b506105f660048036038101906105f19190612f88565b610d1b565b005b34801561060457600080fd5b5061060d610dff565b60405161061a9190612bdb565b60405180910390f35b34801561062f57600080fd5b50610638610e29565b6040516106459190612cba565b60405180910390f35b34801561065a57600080fd5b5061067560048036038101906106709190612ffe565b610ebb565b6040516106829190612c0f565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190612d48565b610ed3565b6040516106bf9190612da3565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea9190613160565b610f4a565b005b3480156106fd57600080fd5b5061071860048036038101906107139190612f2f565b610fc6565b005b34801561072657600080fd5b50610741600480360381019061073c9190612d48565b611115565b60405161074e9190612da3565b60405180910390f35b34801561076357600080fd5b5061076c611138565b6040516107799190612c0f565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190612f2f565b61113e565b005b3480156107b757600080fd5b506107d260048036038101906107cd9190612e8b565b6116f5565b005b3480156107e057600080fd5b506107e9611894565b6040516107f69190612c0f565b60405180910390f35b34801561080b57600080fd5b50610826600480360381019061082191906131a9565b61189a565b6040516108339190612c0f565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190612f88565b611921565b005b34801561087157600080fd5b5061088c60048036038101906108879190612f2f565b6119bd565b005b34801561089a57600080fd5b506108a3611a40565b6040516108b09190612c0f565b60405180910390f35b61dead81565b6201518081565b6060600380546108d590613218565b80601f016020809104026020016040519081016040528092919081815260200182805461090190613218565b801561094e5780601f106109235761010080835404028352916020019161094e565b820191906000526020600020905b81548152906001019060200180831161093157829003601f168201915b5050505050905090565b600080610963611a46565b9050610970818585611a4e565b600191505092915050565b600b5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000806109bc611a46565b90506109c9858285611c17565b6109d4858585611ca3565b60019150509392505050565b6109e86121b1565b60646109f26109a7565b6109fc91906132a7565b8210610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a349061334a565b60405180910390fd5b6064610a476109a7565b610a5191906132a7565b8110610a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a899061334a565b60405180910390fd5b60008211610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc906133dc565b60405180910390fd5b60008111610b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0f9061346e565b60405180910390fd5b6012600a610b2691906135c1565b82610b31919061360c565b600c819055506012600a610b4591906135c1565b81610b50919061360c565b600d819055507f9716128a636528fa50210bbc0beccc798a478589fd73810448dca2891bfc1b0c600c54600d54604051610b8b929190613666565b60405180910390a15050565b60006012905090565b600080610bab611a46565b9050610bcc818585610bbd858961189a565b610bc7919061368f565b611a4e565b600191505092915050565b60008111610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c119061370f565b60405180910390fd5b610c24338261222f565b50565b60085481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600e6020528060005260406000206000915054906101000a900460ff1681565b600f6020528060005260406000206000915054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d0f6121b1565b610d1960006123fc565b565b610d236121b1565b610d2c826124c2565b610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d629061377b565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f399c10fc86f718f4269b5fcf54194fd65525a652bcfc12e3542c8457648345978282604051610df392919061379b565b60405180910390a15050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e3890613218565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6490613218565b8015610eb15780601f10610e8657610100808354040283529160200191610eb1565b820191906000526020600020905b815481529060010190602001808311610e9457829003601f168201915b5050505050905090565b60066020528060005260406000206000915090505481565b600080610ede611a46565b90506000610eec828661189a565b905083811015610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890613836565b60405180910390fd5b610f3e8286868403611a4e565b60019250505092915050565b610f526121b1565b60008180519060200120905060006201518042610f6f919061368f565b9050806006600084815260200190815260200160002081905550817f039238ed1566bfde7f10abd8db86aa7489c202da6e2f8b661ff97cc94719b59b82604051610fb99190612c0f565b60405180910390a2505050565b610fce6121b1565b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156110395750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f906138c8565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe350eafeb77907c314723a0d8854919a914d11e973c487eb728818ba6cc8842f600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161110a9190612bdb565b60405180910390a150565b600080611120611a46565b905061112d818585611ca3565b600191505092915050565b600d5481565b6111466121b1565b6040518060400160405280601081526020017f757064617465526f75746572506169720000000000000000000000000000000081525060008180519060200120905060006006600083815260200190815260200160002054036111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590613934565b60405180910390fd5b6006600082815260200190815260200160002054421015611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b906139a0565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561129f5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613a32565b60405180910390fd5b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113549190613a67565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113df9190613a67565b6040518363ffffffff1660e01b81526004016113fc929190613a94565b602060405180830381865afa158015611419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143d9190613a67565b905061dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156114aa5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e090613b2f565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506116ac30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a4e565b7f799e60742536ea7cdd3c3213158b31174028bc0855080d6e73f3193e67f0258285826040516116dd929190613a94565b60405180910390a150506116f0826124db565b505050565b6116fd6121b1565b6040518060400160405280601b81526020017f6368616e6765546178466f724c6971756964697479416e6444616f00000000008152506000818051906020012090506000600660008381526020019081526020016000205403611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178c90613934565b60405180910390fd5b60066000828152602001908152602001600020544210156117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e2906139a0565b60405180910390fd5b600683856117f9919061368f565b111561183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190613bc1565b60405180910390fd5b8360098190555082600a819055507f4f690c07d9c11a6da5b07e418d8f99e41b07e1ab65df93fff5e3e66d9de21ced600954600a5460405161187d929190613666565b60405180910390a161188e826124db565b50505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119296121b1565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff282826040516119b192919061379b565b60405180910390a15050565b6119c56121b1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90613c53565b60405180910390fd5b611a3d816123fc565b50565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab490613ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2390613d77565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c0a9190612c0f565b60405180910390a3505050565b6000611c23848461189a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c9d5781811015611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690613de3565b60405180910390fd5b611c9c8484848403611a4e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0990613e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890613f07565b60405180910390fd5b80611d8b84610cbf565b1015611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390613f99565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e6d5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015611e8857506000600954600a54611e86919061368f565b115b8015611ea15750601160149054906101000a900460ff16155b156121a0576000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f60576000600b54611f0730610cbf565b611f119190613fb9565b9050600c548110611f2857611f27600c54612504565b5b600d54600b5410611f5e57611f3e600d546125c5565b600d54600b6000828254611f529190613fb9565b92505081905550600191505b505b6000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120035750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561201057829050612097565b60006064600a5485612022919061360c565b61202c91906132a7565b90506000606460095486612040919061360c565b61204a91906132a7565b90508082612058919061368f565b856120639190613fb9565b925081600b6000828254612077919061368f565b925050819055506120948730838561208f919061368f565b612811565b50505b6120a2858583612811565b8115612199576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516120f09061401e565b60006040518083038185875af1925050503d806000811461212d576040519150601f19603f3d011682016040523d82523d6000602084013e612132565b606091505b5050905080612197577f85c56b65941d7802c1279ab36fe16bb81ff2f60707c9ecf4a6527a4c114fc97c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff164760405161218e929190614033565b60405180910390a15b505b50506121ac565b6121ab838383612811565b5b505050565b6121b9611a46565b73ffffffffffffffffffffffffffffffffffffffff166121d7610dff565b73ffffffffffffffffffffffffffffffffffffffff161461222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906140a8565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361229e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122959061413a565b60405180910390fd5b6122aa82600083612a87565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612327906141cc565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123e39190612c0f565b60405180910390a36123f783600084612a8c565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008163ffffffff1611915050919050565b600081805190602001209050600060066000838152602001908152602001600020819055505050565b6001601160146101000a81548160ff021916908315150217905550600060028261252e91906132a7565b90506000818361253e9190613fb9565b9050600047905061254e836125c5565b6000814761255c9190613fb9565b90506125688382612a91565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161259b939291906141ec565b60405180910390a1505050506000601160146101000a81548160ff02191690831515021790555050565b6001601160146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156125fd576125fc613035565b5b60405190808252806020026020018201604052801561262b5781602001602082028036833780820191505090505b509050308160008151811061264357612642614223565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270e9190613a67565b8160018151811061272257612721614223565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127c095949392919061434b565b600060405180830381600087803b1580156127da57600080fd5b505af11580156127ee573d6000803e3d6000fd5b50505050506000601160146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287790613e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e690613f07565b60405180910390fd5b6128fa838383612a87565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297790613f99565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a6e9190612c0f565b60405180910390a3612a81848484612a8c565b50505050565b505050565b505050565b6001601160146101000a81548160ff021916908315150217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612b35969594939291906143a5565b60606040518083038185885af1158015612b53573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b78919061441b565b5050506000601160146101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612bc582612b9a565b9050919050565b612bd581612bba565b82525050565b6000602082019050612bf06000830184612bcc565b92915050565b6000819050919050565b612c0981612bf6565b82525050565b6000602082019050612c246000830184612c00565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c64578082015181840152602081019050612c49565b60008484015250505050565b6000601f19601f8301169050919050565b6000612c8c82612c2a565b612c968185612c35565b9350612ca6818560208601612c46565b612caf81612c70565b840191505092915050565b60006020820190508181036000830152612cd48184612c81565b905092915050565b6000604051905090565b600080fd5b600080fd5b612cf981612bba565b8114612d0457600080fd5b50565b600081359050612d1681612cf0565b92915050565b612d2581612bf6565b8114612d3057600080fd5b50565b600081359050612d4281612d1c565b92915050565b60008060408385031215612d5f57612d5e612ce6565b5b6000612d6d85828601612d07565b9250506020612d7e85828601612d33565b9150509250929050565b60008115159050919050565b612d9d81612d88565b82525050565b6000602082019050612db86000830184612d94565b92915050565b6000819050919050565b6000612de3612dde612dd984612b9a565b612dbe565b612b9a565b9050919050565b6000612df582612dc8565b9050919050565b6000612e0782612dea565b9050919050565b612e1781612dfc565b82525050565b6000602082019050612e326000830184612e0e565b92915050565b600080600060608486031215612e5157612e50612ce6565b5b6000612e5f86828701612d07565b9350506020612e7086828701612d07565b9250506040612e8186828701612d33565b9150509250925092565b60008060408385031215612ea257612ea1612ce6565b5b6000612eb085828601612d33565b9250506020612ec185828601612d33565b9150509250929050565b600060ff82169050919050565b612ee181612ecb565b82525050565b6000602082019050612efc6000830184612ed8565b92915050565b600060208284031215612f1857612f17612ce6565b5b6000612f2684828501612d33565b91505092915050565b600060208284031215612f4557612f44612ce6565b5b6000612f5384828501612d07565b91505092915050565b612f6581612d88565b8114612f7057600080fd5b50565b600081359050612f8281612f5c565b92915050565b60008060408385031215612f9f57612f9e612ce6565b5b6000612fad85828601612d07565b9250506020612fbe85828601612f73565b9150509250929050565b6000819050919050565b612fdb81612fc8565b8114612fe657600080fd5b50565b600081359050612ff881612fd2565b92915050565b60006020828403121561301457613013612ce6565b5b600061302284828501612fe9565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61306d82612c70565b810181811067ffffffffffffffff8211171561308c5761308b613035565b5b80604052505050565b600061309f612cdc565b90506130ab8282613064565b919050565b600067ffffffffffffffff8211156130cb576130ca613035565b5b6130d482612c70565b9050602081019050919050565b82818337600083830152505050565b60006131036130fe846130b0565b613095565b90508281526020810184848401111561311f5761311e613030565b5b61312a8482856130e1565b509392505050565b600082601f8301126131475761314661302b565b5b81356131578482602086016130f0565b91505092915050565b60006020828403121561317657613175612ce6565b5b600082013567ffffffffffffffff81111561319457613193612ceb565b5b6131a084828501613132565b91505092915050565b600080604083850312156131c0576131bf612ce6565b5b60006131ce85828601612d07565b92505060206131df85828601612d07565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061323057607f821691505b602082108103613243576132426131e9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006132b282612bf6565b91506132bd83612bf6565b9250826132cd576132cc613249565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203125206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b6000613334603483612c35565b915061333f826132d8565b604082019050919050565b6000602082019050818103600083015261336381613327565b9050919050565b7f4c503a204d757374206c6971756964617465206174206c65617374203120746f60008201527f6b656e2e00000000000000000000000000000000000000000000000000000000602082015250565b60006133c6602483612c35565b91506133d18261336a565b604082019050919050565b600060208201905081810360008301526133f5816133b9565b9050919050565b7f4554482f47617320546f6b656e3a204d757374206c697175696461746520617460008201527f206c65617374203120746f6b656e2e0000000000000000000000000000000000602082015250565b6000613458602f83612c35565b9150613463826133fc565b604082019050919050565b600060208201905081810360008301526134878161344b565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156134e5578086048111156134c1576134c0613278565b5b60018516156134d05780820291505b80810290506134de8561348e565b94506134a5565b94509492505050565b6000826134fe57600190506135ba565b8161350c57600090506135ba565b8160018114613522576002811461352c5761355b565b60019150506135ba565b60ff84111561353e5761353d613278565b5b8360020a91508482111561355557613554613278565b5b506135ba565b5060208310610133831016604e8410600b84101617156135905782820a90508381111561358b5761358a613278565b5b6135ba565b61359d848484600161349b565b925090508184048111156135b4576135b3613278565b5b81810290505b9392505050565b60006135cc82612bf6565b91506135d783612bf6565b92506136047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846134ee565b905092915050565b600061361782612bf6565b915061362283612bf6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365b5761365a613278565b5b828202905092915050565b600060408201905061367b6000830185612c00565b6136886020830184612c00565b9392505050565b600061369a82612bf6565b91506136a583612bf6565b92508282019050808211156136bd576136bc613278565b5b92915050565b7f43616e6e6f74206275726e203020746f6b656e73210000000000000000000000600082015250565b60006136f9601583612c35565b9150613704826136c3565b602082019050919050565b60006020820190508181036000830152613728816136ec565b9050919050565b7f41646472657373206d757374206265206120636f6e7472616374000000000000600082015250565b6000613765601a83612c35565b91506137708261372f565b602082019050919050565b6000602082019050818103600083015261379481613758565b9050919050565b60006040820190506137b06000830185612bcc565b6137bd6020830184612d94565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613820602583612c35565b915061382b826137c4565b604082019050919050565b6000602082019050818103600083015261384f81613813565b9050919050565b7f44414f2057616c6c65742063616e6e6f7420626520746865204465616420616460008201527f64726573732c206f722030210000000000000000000000000000000000000000602082015250565b60006138b2602c83612c35565b91506138bd82613856565b604082019050919050565b600060208201905081810360008301526138e1816138a5565b9050919050565b7f46756e6374696f6e206973206c6f636b65640000000000000000000000000000600082015250565b600061391e601283612c35565b9150613929826138e8565b602082019050919050565b6000602082019050818103600083015261394d81613911565b9050919050565b7f54696d656c6f636b206973206163746976650000000000000000000000000000600082015250565b600061398a601283612c35565b915061399582613954565b602082019050919050565b600060208201905081810360008301526139b98161397d565b9050919050565b7f526f757465722063616e6e6f742062652074686520446561642061646472657360008201527f732c206f72203021000000000000000000000000000000000000000000000000602082015250565b6000613a1c602883612c35565b9150613a27826139c0565b604082019050919050565b60006020820190508181036000830152613a4b81613a0f565b9050919050565b600081519050613a6181612cf0565b92915050565b600060208284031215613a7d57613a7c612ce6565b5b6000613a8b84828501613a52565b91505092915050565b6000604082019050613aa96000830185612bcc565b613ab66020830184612bcc565b9392505050565b7f506169722063616e6e6f7420626520746865204465616420616464726573732c60008201527f206f722030210000000000000000000000000000000000000000000000000000602082015250565b6000613b19602683612c35565b9150613b2482613abd565b604082019050919050565b60006020820190508181036000830152613b4881613b0c565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2036250000000000000000000000000000000000000000602082015250565b6000613bab602c83612c35565b9150613bb682613b4f565b604082019050919050565b60006020820190508181036000830152613bda81613b9e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c3d602683612c35565b9150613c4882613be1565b604082019050919050565b60006020820190508181036000830152613c6c81613c30565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ccf602483612c35565b9150613cda82613c73565b604082019050919050565b60006020820190508181036000830152613cfe81613cc2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d61602283612c35565b9150613d6c82613d05565b604082019050919050565b60006020820190508181036000830152613d9081613d54565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613dcd601d83612c35565b9150613dd882613d97565b602082019050919050565b60006020820190508181036000830152613dfc81613dc0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e5f602583612c35565b9150613e6a82613e03565b604082019050919050565b60006020820190508181036000830152613e8e81613e52565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef1602383612c35565b9150613efc82613e95565b604082019050919050565b60006020820190508181036000830152613f2081613ee4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f83602683612c35565b9150613f8e82613f27565b604082019050919050565b60006020820190508181036000830152613fb281613f76565b9050919050565b6000613fc482612bf6565b9150613fcf83612bf6565b9250828203905081811115613fe757613fe6613278565b5b92915050565b600081905092915050565b50565b6000614008600083613fed565b915061401382613ff8565b600082019050919050565b600061402982613ffb565b9150819050919050565b60006040820190506140486000830185612bcc565b6140556020830184612c00565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614092602083612c35565b915061409d8261405c565b602082019050919050565b600060208201905081810360008301526140c181614085565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614124602183612c35565b915061412f826140c8565b604082019050919050565b6000602082019050818103600083015261415381614117565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006141b6602283612c35565b91506141c18261415a565b604082019050919050565b600060208201905081810360008301526141e5816141a9565b9050919050565b60006060820190506142016000830186612c00565b61420e6020830185612c00565b61421b6040830184612c00565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061427761427261426d84614252565b612dbe565b612bf6565b9050919050565b6142878161425c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142c281612bba565b82525050565b60006142d483836142b9565b60208301905092915050565b6000602082019050919050565b60006142f88261428d565b6143028185614298565b935061430d836142a9565b8060005b8381101561433e57815161432588826142c8565b9750614330836142e0565b925050600181019050614311565b5085935050505092915050565b600060a0820190506143606000830188612c00565b61436d602083018761427e565b818103604083015261437f81866142ed565b905061438e6060830185612bcc565b61439b6080830184612c00565b9695505050505050565b600060c0820190506143ba6000830189612bcc565b6143c76020830188612c00565b6143d4604083018761427e565b6143e1606083018661427e565b6143ee6080830185612bcc565b6143fb60a0830184612c00565b979650505050505050565b60008151905061441581612d1c565b92915050565b60008060006060848603121561443457614433612ce6565b5b600061444286828701614406565b935050602061445386828701614406565b925050604061446486828701614406565b915050925092509256fea2646970667358221220e06db29f3769e6f345cca2bdef036759f2ecf61571ba21213569e193eb33412c64736f6c63430008100033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000ef95d8fb80f3d8f3e6d60ad6e5bf6091f17afb9f

-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _daoWallet (address): 0xEF95d8FB80f3d8f3E6d60Ad6E5bf6091f17AFb9F

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000ef95d8fb80f3d8f3e6d60ad6e5bf6091f17afb9f


Deployed Bytecode Sourcemap

29687:9169:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29878:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10148:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17028:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19379:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30112:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30859:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18148:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20160:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37313:856;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17990:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20864:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35610:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29995:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30907:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30077;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30295:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30351:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29964:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18319:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8885:103;;;;;;;;;;;;;:::i;:::-;;38177:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8237:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17247:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10204:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21605:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10721:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36606:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18652:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30225:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35756:842;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36877:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30150:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18908:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38427:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9143:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30036:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29878:73;29909:42;29878:73;:::o;10148:47::-;10187:8;10148:47;:::o;17028:100::-;17082:13;17115:5;17108:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17028:100;:::o;19379:201::-;19462:4;19479:13;19495:12;:10;:12::i;:::-;19479:28;;19518:32;19527:5;19534:7;19543:6;19518:8;:32::i;:::-;19568:4;19561:11;;;19379:201;;;;:::o;30112:31::-;;;;:::o;30859:41::-;;;;;;;;;;;;;:::o;18148:108::-;18209:7;18236:12;;18229:19;;18148:108;:::o;20160:295::-;20291:4;20308:15;20326:12;:10;:12::i;:::-;20308:30;;20349:38;20365:4;20371:7;20380:6;20349:15;:38::i;:::-;20398:27;20408:4;20414:2;20418:6;20398:9;:27::i;:::-;20443:4;20436:11;;;20160:295;;;;;:::o;37313:856::-;8123:13;:11;:13::i;:::-;37527:3:::1;37511:13;:11;:13::i;:::-;:19;;;;:::i;:::-;37478:30;:52;37470:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;37649:3;37633:13;:11;:13::i;:::-;:19;;;;:::i;:::-;37606:24;:46;37598:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;37761:1;37728:30;:34;37720:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;37849:1;37822:24;:28;37814:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;29869:2;37978;:13;;;;:::i;:::-;37945:30;:46;;;;:::i;:::-;37913:29;:78;;;;29869:2;38055;:13;;;;:::i;:::-;38028:24;:40;;;;:::i;:::-;38002:23;:66;;;;38084:77;38106:29;;38137:23;;38084:77;;;;;;;:::i;:::-;;;;;;;;37313:856:::0;;:::o;17990:93::-;18048:5;18073:2;18066:9;;17990:93;:::o;20864:238::-;20952:4;20969:13;20985:12;:10;:12::i;:::-;20969:28;;21008:64;21017:5;21024:7;21061:10;21033:25;21043:5;21050:7;21033:9;:25::i;:::-;:38;;;;:::i;:::-;21008:8;:64::i;:::-;21090:4;21083:11;;;20864:238;;;;:::o;35610:138::-;35677:1;35668:6;:10;35660:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;35715:25;35721:10;35733:6;35715:5;:25::i;:::-;35610:138;:::o;29995:34::-;;;;:::o;30907:28::-;;;;;;;;;;;;;:::o;30077:::-;;;;:::o;30295:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;30351:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;29964:24::-;;;;;;;;;;;;;:::o;18319:127::-;18393:7;18420:9;:18;18430:7;18420:18;;;;;;;;;;;;;;;;18413:25;;18319:127;;;:::o;8885:103::-;8123:13;:11;:13::i;:::-;8950:30:::1;8977:1;8950:18;:30::i;:::-;8885:103::o:0;38177:242::-;8123:13;:11;:13::i;:::-;38270:17:::1;38281:5;38270:10;:17::i;:::-;38262:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;38354:7;38329:15;:22;38345:5;38329:22;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38377:34;38396:5;38403:7;38377:34;;;;;;;:::i;:::-;;;;;;;;38177:242:::0;;:::o;8237:87::-;8283:7;8310:6;;;;;;;;;;;8303:13;;8237:87;:::o;17247:104::-;17303:13;17336:7;17329:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17247:104;:::o;10204:51::-;;;;;;;;;;;;;;;;;:::o;21605:436::-;21698:4;21715:13;21731:12;:10;:12::i;:::-;21715:28;;21754:24;21781:25;21791:5;21798:7;21781:9;:25::i;:::-;21754:52;;21845:15;21825:16;:35;;21817:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21938:60;21947:5;21954:7;21982:15;21963:16;:34;21938:8;:60::i;:::-;22029:4;22022:11;;;;21605:436;;;;:::o;10721:348::-;8123:13;:11;:13::i;:::-;10801:26:::1;10846:12;10830:30;;;;;;10801:59;;10871:23;10187:8;10897:15;:30;;;;:::i;:::-;10871:56;;10977:15;10938:16;:36;10955:18;10938:36;;;;;;;;;;;:54;;;;11025:18;11008:53;11045:15;11008:53;;;;;;:::i;:::-;;;;;;;;10790:279;;10721:348:::0;:::o;36606:263::-;8123:13;:11;:13::i;:::-;29909:42:::1;36693:17;;:9;:17;;;;:44;;;;;36735:1;36714:23;;:9;:23;;;;36693:44;36685:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36809:9;36797;;:21;;;;;;;;;;;;;;;;;;36834:27;36851:9;;;;;;;;;;;36834:27;;;;;;:::i;:::-;;;;;;;;36606:263:::0;:::o;18652:193::-;18731:4;18748:13;18764:12;:10;:12::i;:::-;18748:28;;18787;18797:5;18804:2;18808:6;18787:9;:28::i;:::-;18833:4;18826:11;;;18652:193;;;;:::o;30225:61::-;;;;:::o;35756:842::-;8123:13;:11;:13::i;:::-;10356:357:::1;;;;;;;;;;;;;;;;::::0;10417:26:::1;10462:12;10446:30;;;;;;10417:59;;10535:1;10495:16;:36;10512:18;10495:36;;;;;;;;;;;;:41:::0;10487:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10597:16;:36;10614:18;10597:36;;;;;;;;;;;;10578:15;:55;;10570:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;29909:42:::2;35866:15;;:7;:15;;;;:40;;;;;35904:1;35885:21;;:7;:21;;;;35866:40;35858:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;35964:35;36021:7;35964:65;;36040:13;36074:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36056:67;;;36132:4;36139:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36056:107;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36040:123;;29909:42;36184:13;;:5;:13;;;;:36;;;;;36218:1;36201:19;;:5;:19;;;;36184:36;36176:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36292:5;36276:13;;:21;;;;;;;;;;;;;;;;;;36326:16;36308:15;;:34;;;;;;;;;;;;;;;;;;36401:4;36355:17;:43;36381:15;;;;;;;;;;;36355:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;36449:4;36416:15;:30;36432:13;;;;;;;;;;;36416:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;36466:68;36483:4;36498:15;;;;;;;;;;;36516:17;36466:8;:68::i;:::-;36550:40;36575:7;36584:5;36550:40;;;;;;;:::i;:::-;;;;;;;;35847:751;;10679:26:::1;10692:12;10679;:26::i;:::-;10406:307;8147:1;35756:842:::0;:::o;36877:428::-;8123:13;:11;:13::i;:::-;10356:357:::1;;;;;;;;;;;;;;;;::::0;10417:26:::1;10462:12;10446:30;;;;;;10417:59;;10535:1;10495:16;:36;10512:18;10495:36;;;;;;;;;;;;:41:::0;10487:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10597:16;:36;10614:18;10597:36;;;;;;;;;;;;10578:15;:55;;10570:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;37108:1:::2;37093:10;37076:16;:27;;;;:::i;:::-;37075:34;;37067:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37187:16;37169:15;:34;;;;37226:10;37214:9;:22;;;;37252:45;37270:15;;37287:9;;37252:45;;;;;;;:::i;:::-;;;;;;;;10679:26:::1;10692:12;10679;:26::i;:::-;10406:307;8147:1;36877:428:::0;;:::o;30150:68::-;;;;:::o;18908:151::-;18997:7;19024:11;:18;19036:5;19024:18;;;;;;;;;;;;;;;:27;19043:7;19024:27;;;;;;;;;;;;;;;;19017:34;;18908:151;;;;:::o;38427:188::-;8123:13;:11;:13::i;:::-;38543:7:::1;38513:17;:27;38531:8;38513:27;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;38566:41;38589:8;38599:7;38566:41;;;;;;;:::i;:::-;;;;;;;;38427:188:::0;;:::o;9143:201::-;8123:13;:11;:13::i;:::-;9252:1:::1;9232:22;;:8;:22;;::::0;9224:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9308:28;9327:8;9308:18;:28::i;:::-;9143:201:::0;:::o;30036:34::-;;;;:::o;6788:98::-;6841:7;6868:10;6861:17;;6788:98;:::o;25632:380::-;25785:1;25768:19;;:5;:19;;;25760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25866:1;25847:21;;:7;:21;;;25839:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25950:6;25920:11;:18;25932:5;25920:18;;;;;;;;;;;;;;;:27;25939:7;25920:27;;;;;;;;;;;;;;;:36;;;;25988:7;25972:32;;25981:5;25972:32;;;25997:6;25972:32;;;;;;:::i;:::-;;;;;;;;25632:380;;;:::o;26303:453::-;26438:24;26465:25;26475:5;26482:7;26465:9;:25::i;:::-;26438:52;;26525:17;26505:16;:37;26501:248;;26587:6;26567:16;:26;;26559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26671:51;26680:5;26687:7;26715:6;26696:16;:25;26671:8;:51::i;:::-;26501:248;26427:329;26303:453;;;:::o;32313:2068::-;32427:1;32411:18;;:4;:18;;;32403:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32504:1;32490:16;;:2;:16;;;32482:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32584:6;32565:15;32575:4;32565:9;:15::i;:::-;:25;;32557:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32651:15;:21;32667:4;32651:21;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;32676:15;:19;32692:2;32676:19;;;;;;;;;;;;;;;;;;;;;;;;;32651:44;32650:91;;;;;32740:1;32722:15;;32710:9;;:27;;;;:::i;:::-;:31;32650:91;:122;;;;;32756:16;;;;;;;;;;;32755:17;32650:122;32646:1728;;;32789:24;32843:15;:21;32859:4;32843:21;;;;;;;;;;;;;;;;;;;;;;;;;32838:566;;32885:32;32947:12;;32920:24;32938:4;32920:9;:24::i;:::-;:39;;;;:::i;:::-;32885:74;;33010:29;;32982:24;:57;32978:152;;33064:46;33080:29;;33064:15;:46::i;:::-;32978:152;33168:23;;33152:12;;:39;33148:241;;33216:42;33234:23;;33216:17;:42::i;:::-;33297:23;;33281:12;;:39;;;;;;;:::i;:::-;;;;;;;;33365:4;33343:26;;33148:241;32866:538;32838:566;33420:22;33461:17;:23;33479:4;33461:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;33488:17;:21;33506:2;33488:21;;;;;;;;;;;;;;;;;;;;;;;;;33461:48;33457:492;;;33547:6;33530:23;;33457:492;;;33607:16;33650:3;33637:9;;33628:6;:18;;;;:::i;:::-;33627:26;;;;:::i;:::-;33607:47;;33673:22;33728:3;33709:15;;33700:6;:24;;;;:::i;:::-;33699:32;;;;:::i;:::-;33673:59;;33789:14;33778:8;:25;;;;:::i;:::-;33768:6;:36;;;;:::i;:::-;33751:53;;33839:8;33823:12;;:24;;;;;;;:::i;:::-;;;;;;;;33868:65;33884:4;33898;33917:14;33906:8;:25;;;;:::i;:::-;33868:15;:65::i;:::-;33588:361;;33457:492;33963:41;33979:4;33985:2;33989:14;33963:15;:41::i;:::-;34025:19;34021:266;;;34066:12;34092:9;;;;;;;;;;;34084:23;;34115:21;34084:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34065:76;;;34164:7;34160:112;;34201:51;34219:9;;;;;;;;;;;34230:21;34201:51;;;;;;;:::i;:::-;;;;;;;;34160:112;34046:241;34021:266;32774:1524;;32646:1728;;;34329:33;34345:4;34351:2;34355:6;34329:15;:33::i;:::-;32646:1728;32313:2068;;;:::o;8402:132::-;8477:12;:10;:12::i;:::-;8466:23;;:7;:5;:7::i;:::-;:23;;;8458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8402:132::o;24519:675::-;24622:1;24603:21;;:7;:21;;;24595:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24675:49;24696:7;24713:1;24717:6;24675:20;:49::i;:::-;24737:22;24762:9;:18;24772:7;24762:18;;;;;;;;;;;;;;;;24737:43;;24817:6;24799:14;:24;;24791:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24936:6;24919:14;:23;24898:9;:18;24908:7;24898:18;;;;;;;;;;;;;;;:44;;;;25053:6;25037:12;;:22;;;;;;;;;;;25114:1;25088:37;;25097:7;25088:37;;;25118:6;25088:37;;;;;;:::i;:::-;;;;;;;;25138:48;25158:7;25175:1;25179:6;25138:19;:48::i;:::-;24584:610;24519:675;;:::o;9504:191::-;9578:16;9597:6;;;;;;;;;;;9578:25;;9623:8;9614:6;;:17;;;;;;;;;;;;;;;;;;9678:8;9647:40;;9668:8;9647:40;;;;;;;;;;;;9567:128;9504:191;:::o;38623:193::-;38681:4;38698:11;38764:5;38752:18;38744:26;;38806:1;38799:4;:8;;;38791:17;;;38623:193;;;:::o;11077:188::-;11147:26;11192:12;11176:30;;;;;;11147:59;;11256:1;11217:16;:36;11234:18;11217:36;;;;;;;;;;;:40;;;;11136:129;11077:188;:::o;34389:474::-;31166:4;31147:16;;:23;;;;;;;;;;;;;;;;;;34475:12:::1;34514:1;34491:20;:24;;;;:::i;:::-;34475:41;;34527:17;34571:4;34548:20;:27;;;;:::i;:::-;34527:49;;34589:22;34614:21;34589:46;;34648:23;34666:4;34648:17;:23::i;:::-;34684:18;34730:14;34706:21;:38;;;;:::i;:::-;34684:61;;34758:36;34772:9;34783:10;34758:13;:36::i;:::-;34812:43;34827:4;34833:10;34845:9;34812:43;;;;;;;;:::i;:::-;;;;;;;;34464:399;;;;31212:5:::0;31193:16;;:24;;;;;;;;;;;;;;;;;;34389:474;:::o;34871:421::-;31166:4;31147:16;;:23;;;;;;;;;;;;;;;;;;34950:21:::1;34988:1;34974:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34950:40;;35019:4;35001;35006:1;35001:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;35045:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35035:4;35040:1;35035:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;35088:15;;;;;;;;;;;:66;;;35169:11;35195:1;35211:4;35238;35258:15;35088:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34939:353;31212:5:::0;31193:16;;:24;;;;;;;;;;;;;;;;;;34871:421;:::o;22511:840::-;22658:1;22642:18;;:4;:18;;;22634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22735:1;22721:16;;:2;:16;;;22713:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22790:38;22811:4;22817:2;22821:6;22790:20;:38::i;:::-;22841:19;22863:9;:15;22873:4;22863:15;;;;;;;;;;;;;;;;22841:37;;22912:6;22897:11;:21;;22889:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23029:6;23015:11;:20;22997:9;:15;23007:4;22997:15;;;;;;;;;;;;;;;:38;;;;23232:6;23215:9;:13;23225:2;23215:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;23282:2;23267:26;;23276:4;23267:26;;;23286:6;23267:26;;;;;;:::i;:::-;;;;;;;;23306:37;23326:4;23332:2;23336:6;23306:19;:37::i;:::-;22623:728;22511:840;;;:::o;27356:125::-;;;;:::o;28085:124::-;;;;:::o;35300:302::-;31166:4;31147:16;;:23;;;;;;;;;;;;;;;;;;35394:15:::1;;;;;;;;;;;:31;;;35433:9;35466:4;35486:11;35512:1;35528::::0;35544:9:::1;;;;;;;;;;;35568:15;35394:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31212:5:::0;31193:16;;:24;;;;;;;;;;;;;;;;;;35300:302;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:77::-;630:7;659:5;648:16;;593:77;;;:::o;676:118::-;763:24;781:5;763:24;:::i;:::-;758:3;751:37;676:118;;:::o;800:222::-;893:4;931:2;920:9;916:18;908:26;;944:71;1012:1;1001:9;997:17;988:6;944:71;:::i;:::-;800:222;;;;:::o;1028:99::-;1080:6;1114:5;1108:12;1098:22;;1028:99;;;:::o;1133:169::-;1217:11;1251:6;1246:3;1239:19;1291:4;1286:3;1282:14;1267:29;;1133:169;;;;:::o;1308:246::-;1389:1;1399:113;1413:6;1410:1;1407:13;1399:113;;;1498:1;1493:3;1489:11;1483:18;1479:1;1474:3;1470:11;1463:39;1435:2;1432:1;1428:10;1423:15;;1399:113;;;1546:1;1537:6;1532:3;1528:16;1521:27;1370:184;1308:246;;;:::o;1560:102::-;1601:6;1652:2;1648:7;1643:2;1636:5;1632:14;1628:28;1618:38;;1560:102;;;:::o;1668:377::-;1756:3;1784:39;1817:5;1784:39;:::i;:::-;1839:71;1903:6;1898:3;1839:71;:::i;:::-;1832:78;;1919:65;1977:6;1972:3;1965:4;1958:5;1954:16;1919:65;:::i;:::-;2009:29;2031:6;2009:29;:::i;:::-;2004:3;2000:39;1993:46;;1760:285;1668:377;;;;:::o;2051:313::-;2164:4;2202:2;2191:9;2187:18;2179:26;;2251:9;2245:4;2241:20;2237:1;2226:9;2222:17;2215:47;2279:78;2352:4;2343:6;2279:78;:::i;:::-;2271:86;;2051:313;;;;:::o;2370:75::-;2403:6;2436:2;2430:9;2420:19;;2370:75;:::o;2451:117::-;2560:1;2557;2550:12;2574:117;2683:1;2680;2673:12;2697:122;2770:24;2788:5;2770:24;:::i;:::-;2763:5;2760:35;2750:63;;2809:1;2806;2799:12;2750:63;2697:122;:::o;2825:139::-;2871:5;2909:6;2896:20;2887:29;;2925:33;2952:5;2925:33;:::i;:::-;2825:139;;;;:::o;2970:122::-;3043:24;3061:5;3043:24;:::i;:::-;3036:5;3033:35;3023:63;;3082:1;3079;3072:12;3023:63;2970:122;:::o;3098:139::-;3144:5;3182:6;3169:20;3160:29;;3198:33;3225:5;3198:33;:::i;:::-;3098:139;;;;:::o;3243:474::-;3311:6;3319;3368:2;3356:9;3347:7;3343:23;3339:32;3336:119;;;3374:79;;:::i;:::-;3336:119;3494:1;3519:53;3564:7;3555:6;3544:9;3540:22;3519:53;:::i;:::-;3509:63;;3465:117;3621:2;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3592:118;3243:474;;;;;:::o;3723:90::-;3757:7;3800:5;3793:13;3786:21;3775:32;;3723:90;;;:::o;3819:109::-;3900:21;3915:5;3900:21;:::i;:::-;3895:3;3888:34;3819:109;;:::o;3934:210::-;4021:4;4059:2;4048:9;4044:18;4036:26;;4072:65;4134:1;4123:9;4119:17;4110:6;4072:65;:::i;:::-;3934:210;;;;:::o;4150:60::-;4178:3;4199:5;4192:12;;4150:60;;;:::o;4216:142::-;4266:9;4299:53;4317:34;4326:24;4344:5;4326:24;:::i;:::-;4317:34;:::i;:::-;4299:53;:::i;:::-;4286:66;;4216:142;;;:::o;4364:126::-;4414:9;4447:37;4478:5;4447:37;:::i;:::-;4434:50;;4364:126;;;:::o;4496:152::-;4572:9;4605:37;4636:5;4605:37;:::i;:::-;4592:50;;4496:152;;;:::o;4654:183::-;4767:63;4824:5;4767:63;:::i;:::-;4762:3;4755:76;4654:183;;:::o;4843:274::-;4962:4;5000:2;4989:9;4985:18;4977:26;;5013:97;5107:1;5096:9;5092:17;5083:6;5013:97;:::i;:::-;4843:274;;;;:::o;5123:619::-;5200:6;5208;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5646:2;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5617:118;5123:619;;;;;:::o;5748:474::-;5816:6;5824;5873:2;5861:9;5852:7;5848:23;5844:32;5841:119;;;5879:79;;:::i;:::-;5841:119;5999:1;6024:53;6069:7;6060:6;6049:9;6045:22;6024:53;:::i;:::-;6014:63;;5970:117;6126:2;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6097:118;5748:474;;;;;:::o;6228:86::-;6263:7;6303:4;6296:5;6292:16;6281:27;;6228:86;;;:::o;6320:112::-;6403:22;6419:5;6403:22;:::i;:::-;6398:3;6391:35;6320:112;;:::o;6438:214::-;6527:4;6565:2;6554:9;6550:18;6542:26;;6578:67;6642:1;6631:9;6627:17;6618:6;6578:67;:::i;:::-;6438:214;;;;:::o;6658:329::-;6717:6;6766:2;6754:9;6745:7;6741:23;6737:32;6734:119;;;6772:79;;:::i;:::-;6734:119;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;6658:329;;;;:::o;6993:::-;7052:6;7101:2;7089:9;7080:7;7076:23;7072:32;7069:119;;;7107:79;;:::i;:::-;7069:119;7227:1;7252:53;7297:7;7288:6;7277:9;7273:22;7252:53;:::i;:::-;7242:63;;7198:117;6993:329;;;;:::o;7328:116::-;7398:21;7413:5;7398:21;:::i;:::-;7391:5;7388:32;7378:60;;7434:1;7431;7424:12;7378:60;7328:116;:::o;7450:133::-;7493:5;7531:6;7518:20;7509:29;;7547:30;7571:5;7547:30;:::i;:::-;7450:133;;;;:::o;7589:468::-;7654:6;7662;7711:2;7699:9;7690:7;7686:23;7682:32;7679:119;;;7717:79;;:::i;:::-;7679:119;7837:1;7862:53;7907:7;7898:6;7887:9;7883:22;7862:53;:::i;:::-;7852:63;;7808:117;7964:2;7990:50;8032:7;8023:6;8012:9;8008:22;7990:50;:::i;:::-;7980:60;;7935:115;7589:468;;;;;:::o;8063:77::-;8100:7;8129:5;8118:16;;8063:77;;;:::o;8146:122::-;8219:24;8237:5;8219:24;:::i;:::-;8212:5;8209:35;8199:63;;8258:1;8255;8248:12;8199:63;8146:122;:::o;8274:139::-;8320:5;8358:6;8345:20;8336:29;;8374:33;8401:5;8374:33;:::i;:::-;8274:139;;;;:::o;8419:329::-;8478:6;8527:2;8515:9;8506:7;8502:23;8498:32;8495:119;;;8533:79;;:::i;:::-;8495:119;8653:1;8678:53;8723:7;8714:6;8703:9;8699:22;8678:53;:::i;:::-;8668:63;;8624:117;8419:329;;;;:::o;8754:117::-;8863:1;8860;8853:12;8877:117;8986:1;8983;8976:12;9000:180;9048:77;9045:1;9038:88;9145:4;9142:1;9135:15;9169:4;9166:1;9159:15;9186:281;9269:27;9291:4;9269:27;:::i;:::-;9261:6;9257:40;9399:6;9387:10;9384:22;9363:18;9351:10;9348:34;9345:62;9342:88;;;9410:18;;:::i;:::-;9342:88;9450:10;9446:2;9439:22;9229:238;9186:281;;:::o;9473:129::-;9507:6;9534:20;;:::i;:::-;9524:30;;9563:33;9591:4;9583:6;9563:33;:::i;:::-;9473:129;;;:::o;9608:308::-;9670:4;9760:18;9752:6;9749:30;9746:56;;;9782:18;;:::i;:::-;9746:56;9820:29;9842:6;9820:29;:::i;:::-;9812:37;;9904:4;9898;9894:15;9886:23;;9608:308;;;:::o;9922:146::-;10019:6;10014:3;10009;9996:30;10060:1;10051:6;10046:3;10042:16;10035:27;9922:146;;;:::o;10074:425::-;10152:5;10177:66;10193:49;10235:6;10193:49;:::i;:::-;10177:66;:::i;:::-;10168:75;;10266:6;10259:5;10252:21;10304:4;10297:5;10293:16;10342:3;10333:6;10328:3;10324:16;10321:25;10318:112;;;10349:79;;:::i;:::-;10318:112;10439:54;10486:6;10481:3;10476;10439:54;:::i;:::-;10158:341;10074:425;;;;;:::o;10519:340::-;10575:5;10624:3;10617:4;10609:6;10605:17;10601:27;10591:122;;10632:79;;:::i;:::-;10591:122;10749:6;10736:20;10774:79;10849:3;10841:6;10834:4;10826:6;10822:17;10774:79;:::i;:::-;10765:88;;10581:278;10519:340;;;;:::o;10865:509::-;10934:6;10983:2;10971:9;10962:7;10958:23;10954:32;10951:119;;;10989:79;;:::i;:::-;10951:119;11137:1;11126:9;11122:17;11109:31;11167:18;11159:6;11156:30;11153:117;;;11189:79;;:::i;:::-;11153:117;11294:63;11349:7;11340:6;11329:9;11325:22;11294:63;:::i;:::-;11284:73;;11080:287;10865:509;;;;:::o;11380:474::-;11448:6;11456;11505:2;11493:9;11484:7;11480:23;11476:32;11473:119;;;11511:79;;:::i;:::-;11473:119;11631:1;11656:53;11701:7;11692:6;11681:9;11677:22;11656:53;:::i;:::-;11646:63;;11602:117;11758:2;11784:53;11829:7;11820:6;11809:9;11805:22;11784:53;:::i;:::-;11774:63;;11729:118;11380:474;;;;;:::o;11860:180::-;11908:77;11905:1;11898:88;12005:4;12002:1;11995:15;12029:4;12026:1;12019:15;12046:320;12090:6;12127:1;12121:4;12117:12;12107:22;;12174:1;12168:4;12164:12;12195:18;12185:81;;12251:4;12243:6;12239:17;12229:27;;12185:81;12313:2;12305:6;12302:14;12282:18;12279:38;12276:84;;12332:18;;:::i;:::-;12276:84;12097:269;12046:320;;;:::o;12372:180::-;12420:77;12417:1;12410:88;12517:4;12514:1;12507:15;12541:4;12538:1;12531:15;12558:180;12606:77;12603:1;12596:88;12703:4;12700:1;12693:15;12727:4;12724:1;12717:15;12744:185;12784:1;12801:20;12819:1;12801:20;:::i;:::-;12796:25;;12835:20;12853:1;12835:20;:::i;:::-;12830:25;;12874:1;12864:35;;12879:18;;:::i;:::-;12864:35;12921:1;12918;12914:9;12909:14;;12744:185;;;;:::o;12935:239::-;13075:34;13071:1;13063:6;13059:14;13052:58;13144:22;13139:2;13131:6;13127:15;13120:47;12935:239;:::o;13180:366::-;13322:3;13343:67;13407:2;13402:3;13343:67;:::i;:::-;13336:74;;13419:93;13508:3;13419:93;:::i;:::-;13537:2;13532:3;13528:12;13521:19;;13180:366;;;:::o;13552:419::-;13718:4;13756:2;13745:9;13741:18;13733:26;;13805:9;13799:4;13795:20;13791:1;13780:9;13776:17;13769:47;13833:131;13959:4;13833:131;:::i;:::-;13825:139;;13552:419;;;:::o;13977:223::-;14117:34;14113:1;14105:6;14101:14;14094:58;14186:6;14181:2;14173:6;14169:15;14162:31;13977:223;:::o;14206:366::-;14348:3;14369:67;14433:2;14428:3;14369:67;:::i;:::-;14362:74;;14445:93;14534:3;14445:93;:::i;:::-;14563:2;14558:3;14554:12;14547:19;;14206:366;;;:::o;14578:419::-;14744:4;14782:2;14771:9;14767:18;14759:26;;14831:9;14825:4;14821:20;14817:1;14806:9;14802:17;14795:47;14859:131;14985:4;14859:131;:::i;:::-;14851:139;;14578:419;;;:::o;15003:234::-;15143:34;15139:1;15131:6;15127:14;15120:58;15212:17;15207:2;15199:6;15195:15;15188:42;15003:234;:::o;15243:366::-;15385:3;15406:67;15470:2;15465:3;15406:67;:::i;:::-;15399:74;;15482:93;15571:3;15482:93;:::i;:::-;15600:2;15595:3;15591:12;15584:19;;15243:366;;;:::o;15615:419::-;15781:4;15819:2;15808:9;15804:18;15796:26;;15868:9;15862:4;15858:20;15854:1;15843:9;15839:17;15832:47;15896:131;16022:4;15896:131;:::i;:::-;15888:139;;15615:419;;;:::o;16040:102::-;16082:8;16129:5;16126:1;16122:13;16101:34;;16040:102;;;:::o;16148:848::-;16209:5;16216:4;16240:6;16231:15;;16264:5;16255:14;;16278:712;16299:1;16289:8;16286:15;16278:712;;;16394:4;16389:3;16385:14;16379:4;16376:24;16373:50;;;16403:18;;:::i;:::-;16373:50;16453:1;16443:8;16439:16;16436:451;;;16868:4;16861:5;16857:16;16848:25;;16436:451;16918:4;16912;16908:15;16900:23;;16948:32;16971:8;16948:32;:::i;:::-;16936:44;;16278:712;;;16148:848;;;;;;;:::o;17002:1073::-;17056:5;17247:8;17237:40;;17268:1;17259:10;;17270:5;;17237:40;17296:4;17286:36;;17313:1;17304:10;;17315:5;;17286:36;17382:4;17430:1;17425:27;;;;17466:1;17461:191;;;;17375:277;;17425:27;17443:1;17434:10;;17445:5;;;17461:191;17506:3;17496:8;17493:17;17490:43;;;17513:18;;:::i;:::-;17490:43;17562:8;17559:1;17555:16;17546:25;;17597:3;17590:5;17587:14;17584:40;;;17604:18;;:::i;:::-;17584:40;17637:5;;;17375:277;;17761:2;17751:8;17748:16;17742:3;17736:4;17733:13;17729:36;17711:2;17701:8;17698:16;17693:2;17687:4;17684:12;17680:35;17664:111;17661:246;;;17817:8;17811:4;17807:19;17798:28;;17852:3;17845:5;17842:14;17839:40;;;17859:18;;:::i;:::-;17839:40;17892:5;;17661:246;17932:42;17970:3;17960:8;17954:4;17951:1;17932:42;:::i;:::-;17917:57;;;;18006:4;18001:3;17997:14;17990:5;17987:25;17984:51;;;18015:18;;:::i;:::-;17984:51;18064:4;18057:5;18053:16;18044:25;;17002:1073;;;;;;:::o;18081:285::-;18141:5;18165:23;18183:4;18165:23;:::i;:::-;18157:31;;18209:27;18227:8;18209:27;:::i;:::-;18197:39;;18255:104;18292:66;18282:8;18276:4;18255:104;:::i;:::-;18246:113;;18081:285;;;;:::o;18372:348::-;18412:7;18435:20;18453:1;18435:20;:::i;:::-;18430:25;;18469:20;18487:1;18469:20;:::i;:::-;18464:25;;18657:1;18589:66;18585:74;18582:1;18579:81;18574:1;18567:9;18560:17;18556:105;18553:131;;;18664:18;;:::i;:::-;18553:131;18712:1;18709;18705:9;18694:20;;18372:348;;;;:::o;18726:332::-;18847:4;18885:2;18874:9;18870:18;18862:26;;18898:71;18966:1;18955:9;18951:17;18942:6;18898:71;:::i;:::-;18979:72;19047:2;19036:9;19032:18;19023:6;18979:72;:::i;:::-;18726:332;;;;;:::o;19064:191::-;19104:3;19123:20;19141:1;19123:20;:::i;:::-;19118:25;;19157:20;19175:1;19157:20;:::i;:::-;19152:25;;19200:1;19197;19193:9;19186:16;;19221:3;19218:1;19215:10;19212:36;;;19228:18;;:::i;:::-;19212:36;19064:191;;;;:::o;19261:171::-;19401:23;19397:1;19389:6;19385:14;19378:47;19261:171;:::o;19438:366::-;19580:3;19601:67;19665:2;19660:3;19601:67;:::i;:::-;19594:74;;19677:93;19766:3;19677:93;:::i;:::-;19795:2;19790:3;19786:12;19779:19;;19438:366;;;:::o;19810:419::-;19976:4;20014:2;20003:9;19999:18;19991:26;;20063:9;20057:4;20053:20;20049:1;20038:9;20034:17;20027:47;20091:131;20217:4;20091:131;:::i;:::-;20083:139;;19810:419;;;:::o;20235:176::-;20375:28;20371:1;20363:6;20359:14;20352:52;20235:176;:::o;20417:366::-;20559:3;20580:67;20644:2;20639:3;20580:67;:::i;:::-;20573:74;;20656:93;20745:3;20656:93;:::i;:::-;20774:2;20769:3;20765:12;20758:19;;20417:366;;;:::o;20789:419::-;20955:4;20993:2;20982:9;20978:18;20970:26;;21042:9;21036:4;21032:20;21028:1;21017:9;21013:17;21006:47;21070:131;21196:4;21070:131;:::i;:::-;21062:139;;20789:419;;;:::o;21214:320::-;21329:4;21367:2;21356:9;21352:18;21344:26;;21380:71;21448:1;21437:9;21433:17;21424:6;21380:71;:::i;:::-;21461:66;21523:2;21512:9;21508:18;21499:6;21461:66;:::i;:::-;21214:320;;;;;:::o;21540:224::-;21680:34;21676:1;21668:6;21664:14;21657:58;21749:7;21744:2;21736:6;21732:15;21725:32;21540:224;:::o;21770:366::-;21912:3;21933:67;21997:2;21992:3;21933:67;:::i;:::-;21926:74;;22009:93;22098:3;22009:93;:::i;:::-;22127:2;22122:3;22118:12;22111:19;;21770:366;;;:::o;22142:419::-;22308:4;22346:2;22335:9;22331:18;22323:26;;22395:9;22389:4;22385:20;22381:1;22370:9;22366:17;22359:47;22423:131;22549:4;22423:131;:::i;:::-;22415:139;;22142:419;;;:::o;22567:231::-;22707:34;22703:1;22695:6;22691:14;22684:58;22776:14;22771:2;22763:6;22759:15;22752:39;22567:231;:::o;22804:366::-;22946:3;22967:67;23031:2;23026:3;22967:67;:::i;:::-;22960:74;;23043:93;23132:3;23043:93;:::i;:::-;23161:2;23156:3;23152:12;23145:19;;22804:366;;;:::o;23176:419::-;23342:4;23380:2;23369:9;23365:18;23357:26;;23429:9;23423:4;23419:20;23415:1;23404:9;23400:17;23393:47;23457:131;23583:4;23457:131;:::i;:::-;23449:139;;23176:419;;;:::o;23601:168::-;23741:20;23737:1;23729:6;23725:14;23718:44;23601:168;:::o;23775:366::-;23917:3;23938:67;24002:2;23997:3;23938:67;:::i;:::-;23931:74;;24014:93;24103:3;24014:93;:::i;:::-;24132:2;24127:3;24123:12;24116:19;;23775:366;;;:::o;24147:419::-;24313:4;24351:2;24340:9;24336:18;24328:26;;24400:9;24394:4;24390:20;24386:1;24375:9;24371:17;24364:47;24428:131;24554:4;24428:131;:::i;:::-;24420:139;;24147:419;;;:::o;24572:168::-;24712:20;24708:1;24700:6;24696:14;24689:44;24572:168;:::o;24746:366::-;24888:3;24909:67;24973:2;24968:3;24909:67;:::i;:::-;24902:74;;24985:93;25074:3;24985:93;:::i;:::-;25103:2;25098:3;25094:12;25087:19;;24746:366;;;:::o;25118:419::-;25284:4;25322:2;25311:9;25307:18;25299:26;;25371:9;25365:4;25361:20;25357:1;25346:9;25342:17;25335:47;25399:131;25525:4;25399:131;:::i;:::-;25391:139;;25118:419;;;:::o;25543:227::-;25683:34;25679:1;25671:6;25667:14;25660:58;25752:10;25747:2;25739:6;25735:15;25728:35;25543:227;:::o;25776:366::-;25918:3;25939:67;26003:2;25998:3;25939:67;:::i;:::-;25932:74;;26015:93;26104:3;26015:93;:::i;:::-;26133:2;26128:3;26124:12;26117:19;;25776:366;;;:::o;26148:419::-;26314:4;26352:2;26341:9;26337:18;26329:26;;26401:9;26395:4;26391:20;26387:1;26376:9;26372:17;26365:47;26429:131;26555:4;26429:131;:::i;:::-;26421:139;;26148:419;;;:::o;26573:143::-;26630:5;26661:6;26655:13;26646:22;;26677:33;26704:5;26677:33;:::i;:::-;26573:143;;;;:::o;26722:351::-;26792:6;26841:2;26829:9;26820:7;26816:23;26812:32;26809:119;;;26847:79;;:::i;:::-;26809:119;26967:1;26992:64;27048:7;27039:6;27028:9;27024:22;26992:64;:::i;:::-;26982:74;;26938:128;26722:351;;;;:::o;27079:332::-;27200:4;27238:2;27227:9;27223:18;27215:26;;27251:71;27319:1;27308:9;27304:17;27295:6;27251:71;:::i;:::-;27332:72;27400:2;27389:9;27385:18;27376:6;27332:72;:::i;:::-;27079:332;;;;;:::o;27417:225::-;27557:34;27553:1;27545:6;27541:14;27534:58;27626:8;27621:2;27613:6;27609:15;27602:33;27417:225;:::o;27648:366::-;27790:3;27811:67;27875:2;27870:3;27811:67;:::i;:::-;27804:74;;27887:93;27976:3;27887:93;:::i;:::-;28005:2;28000:3;27996:12;27989:19;;27648:366;;;:::o;28020:419::-;28186:4;28224:2;28213:9;28209:18;28201:26;;28273:9;28267:4;28263:20;28259:1;28248:9;28244:17;28237:47;28301:131;28427:4;28301:131;:::i;:::-;28293:139;;28020:419;;;:::o;28445:231::-;28585:34;28581:1;28573:6;28569:14;28562:58;28654:14;28649:2;28641:6;28637:15;28630:39;28445:231;:::o;28682:366::-;28824:3;28845:67;28909:2;28904:3;28845:67;:::i;:::-;28838:74;;28921:93;29010:3;28921:93;:::i;:::-;29039:2;29034:3;29030:12;29023:19;;28682:366;;;:::o;29054:419::-;29220:4;29258:2;29247:9;29243:18;29235:26;;29307:9;29301:4;29297:20;29293:1;29282:9;29278:17;29271:47;29335:131;29461:4;29335:131;:::i;:::-;29327:139;;29054:419;;;:::o;29479:225::-;29619:34;29615:1;29607:6;29603:14;29596:58;29688:8;29683:2;29675:6;29671:15;29664:33;29479:225;:::o;29710:366::-;29852:3;29873:67;29937:2;29932:3;29873:67;:::i;:::-;29866:74;;29949:93;30038:3;29949:93;:::i;:::-;30067:2;30062:3;30058:12;30051:19;;29710:366;;;:::o;30082:419::-;30248:4;30286:2;30275:9;30271:18;30263:26;;30335:9;30329:4;30325:20;30321:1;30310:9;30306:17;30299:47;30363:131;30489:4;30363:131;:::i;:::-;30355:139;;30082:419;;;:::o;30507:223::-;30647:34;30643:1;30635:6;30631:14;30624:58;30716:6;30711:2;30703:6;30699:15;30692:31;30507:223;:::o;30736:366::-;30878:3;30899:67;30963:2;30958:3;30899:67;:::i;:::-;30892:74;;30975:93;31064:3;30975:93;:::i;:::-;31093:2;31088:3;31084:12;31077:19;;30736:366;;;:::o;31108:419::-;31274:4;31312:2;31301:9;31297:18;31289:26;;31361:9;31355:4;31351:20;31347:1;31336:9;31332:17;31325:47;31389:131;31515:4;31389:131;:::i;:::-;31381:139;;31108:419;;;:::o;31533:221::-;31673:34;31669:1;31661:6;31657:14;31650:58;31742:4;31737:2;31729:6;31725:15;31718:29;31533:221;:::o;31760:366::-;31902:3;31923:67;31987:2;31982:3;31923:67;:::i;:::-;31916:74;;31999:93;32088:3;31999:93;:::i;:::-;32117:2;32112:3;32108:12;32101:19;;31760:366;;;:::o;32132:419::-;32298:4;32336:2;32325:9;32321:18;32313:26;;32385:9;32379:4;32375:20;32371:1;32360:9;32356:17;32349:47;32413:131;32539:4;32413:131;:::i;:::-;32405:139;;32132:419;;;:::o;32557:179::-;32697:31;32693:1;32685:6;32681:14;32674:55;32557:179;:::o;32742:366::-;32884:3;32905:67;32969:2;32964:3;32905:67;:::i;:::-;32898:74;;32981:93;33070:3;32981:93;:::i;:::-;33099:2;33094:3;33090:12;33083:19;;32742:366;;;:::o;33114:419::-;33280:4;33318:2;33307:9;33303:18;33295:26;;33367:9;33361:4;33357:20;33353:1;33342:9;33338:17;33331:47;33395:131;33521:4;33395:131;:::i;:::-;33387:139;;33114:419;;;:::o;33539:224::-;33679:34;33675:1;33667:6;33663:14;33656:58;33748:7;33743:2;33735:6;33731:15;33724:32;33539:224;:::o;33769:366::-;33911:3;33932:67;33996:2;33991:3;33932:67;:::i;:::-;33925:74;;34008:93;34097:3;34008:93;:::i;:::-;34126:2;34121:3;34117:12;34110:19;;33769:366;;;:::o;34141:419::-;34307:4;34345:2;34334:9;34330:18;34322:26;;34394:9;34388:4;34384:20;34380:1;34369:9;34365:17;34358:47;34422:131;34548:4;34422:131;:::i;:::-;34414:139;;34141:419;;;:::o;34566:222::-;34706:34;34702:1;34694:6;34690:14;34683:58;34775:5;34770:2;34762:6;34758:15;34751:30;34566:222;:::o;34794:366::-;34936:3;34957:67;35021:2;35016:3;34957:67;:::i;:::-;34950:74;;35033:93;35122:3;35033:93;:::i;:::-;35151:2;35146:3;35142:12;35135:19;;34794:366;;;:::o;35166:419::-;35332:4;35370:2;35359:9;35355:18;35347:26;;35419:9;35413:4;35409:20;35405:1;35394:9;35390:17;35383:47;35447:131;35573:4;35447:131;:::i;:::-;35439:139;;35166:419;;;:::o;35591:225::-;35731:34;35727:1;35719:6;35715:14;35708:58;35800:8;35795:2;35787:6;35783:15;35776:33;35591:225;:::o;35822:366::-;35964:3;35985:67;36049:2;36044:3;35985:67;:::i;:::-;35978:74;;36061:93;36150:3;36061:93;:::i;:::-;36179:2;36174:3;36170:12;36163:19;;35822:366;;;:::o;36194:419::-;36360:4;36398:2;36387:9;36383:18;36375:26;;36447:9;36441:4;36437:20;36433:1;36422:9;36418:17;36411:47;36475:131;36601:4;36475:131;:::i;:::-;36467:139;;36194:419;;;:::o;36619:194::-;36659:4;36679:20;36697:1;36679:20;:::i;:::-;36674:25;;36713:20;36731:1;36713:20;:::i;:::-;36708:25;;36757:1;36754;36750:9;36742:17;;36781:1;36775:4;36772:11;36769:37;;;36786:18;;:::i;:::-;36769:37;36619:194;;;;:::o;36819:147::-;36920:11;36957:3;36942:18;;36819:147;;;;:::o;36972:114::-;;:::o;37092:398::-;37251:3;37272:83;37353:1;37348:3;37272:83;:::i;:::-;37265:90;;37364:93;37453:3;37364:93;:::i;:::-;37482:1;37477:3;37473:11;37466:18;;37092:398;;;:::o;37496:379::-;37680:3;37702:147;37845:3;37702:147;:::i;:::-;37695:154;;37866:3;37859:10;;37496:379;;;:::o;37881:332::-;38002:4;38040:2;38029:9;38025:18;38017:26;;38053:71;38121:1;38110:9;38106:17;38097:6;38053:71;:::i;:::-;38134:72;38202:2;38191:9;38187:18;38178:6;38134:72;:::i;:::-;37881:332;;;;;:::o;38219:182::-;38359:34;38355:1;38347:6;38343:14;38336:58;38219:182;:::o;38407:366::-;38549:3;38570:67;38634:2;38629:3;38570:67;:::i;:::-;38563:74;;38646:93;38735:3;38646:93;:::i;:::-;38764:2;38759:3;38755:12;38748:19;;38407:366;;;:::o;38779:419::-;38945:4;38983:2;38972:9;38968:18;38960:26;;39032:9;39026:4;39022:20;39018:1;39007:9;39003:17;38996:47;39060:131;39186:4;39060:131;:::i;:::-;39052:139;;38779:419;;;:::o;39204:220::-;39344:34;39340:1;39332:6;39328:14;39321:58;39413:3;39408:2;39400:6;39396:15;39389:28;39204:220;:::o;39430:366::-;39572:3;39593:67;39657:2;39652:3;39593:67;:::i;:::-;39586:74;;39669:93;39758:3;39669:93;:::i;:::-;39787:2;39782:3;39778:12;39771:19;;39430:366;;;:::o;39802:419::-;39968:4;40006:2;39995:9;39991:18;39983:26;;40055:9;40049:4;40045:20;40041:1;40030:9;40026:17;40019:47;40083:131;40209:4;40083:131;:::i;:::-;40075:139;;39802:419;;;:::o;40227:221::-;40367:34;40363:1;40355:6;40351:14;40344:58;40436:4;40431:2;40423:6;40419:15;40412:29;40227:221;:::o;40454:366::-;40596:3;40617:67;40681:2;40676:3;40617:67;:::i;:::-;40610:74;;40693:93;40782:3;40693:93;:::i;:::-;40811:2;40806:3;40802:12;40795:19;;40454:366;;;:::o;40826:419::-;40992:4;41030:2;41019:9;41015:18;41007:26;;41079:9;41073:4;41069:20;41065:1;41054:9;41050:17;41043:47;41107:131;41233:4;41107:131;:::i;:::-;41099:139;;40826:419;;;:::o;41251:442::-;41400:4;41438:2;41427:9;41423:18;41415:26;;41451:71;41519:1;41508:9;41504:17;41495:6;41451:71;:::i;:::-;41532:72;41600:2;41589:9;41585:18;41576:6;41532:72;:::i;:::-;41614;41682:2;41671:9;41667:18;41658:6;41614:72;:::i;:::-;41251:442;;;;;;:::o;41699:180::-;41747:77;41744:1;41737:88;41844:4;41841:1;41834:15;41868:4;41865:1;41858:15;41885:85;41930:7;41959:5;41948:16;;41885:85;;;:::o;41976:158::-;42034:9;42067:61;42085:42;42094:32;42120:5;42094:32;:::i;:::-;42085:42;:::i;:::-;42067:61;:::i;:::-;42054:74;;41976:158;;;:::o;42140:147::-;42235:45;42274:5;42235:45;:::i;:::-;42230:3;42223:58;42140:147;;:::o;42293:114::-;42360:6;42394:5;42388:12;42378:22;;42293:114;;;:::o;42413:184::-;42512:11;42546:6;42541:3;42534:19;42586:4;42581:3;42577:14;42562:29;;42413:184;;;;:::o;42603:132::-;42670:4;42693:3;42685:11;;42723:4;42718:3;42714:14;42706:22;;42603:132;;;:::o;42741:108::-;42818:24;42836:5;42818:24;:::i;:::-;42813:3;42806:37;42741:108;;:::o;42855:179::-;42924:10;42945:46;42987:3;42979:6;42945:46;:::i;:::-;43023:4;43018:3;43014:14;43000:28;;42855:179;;;;:::o;43040:113::-;43110:4;43142;43137:3;43133:14;43125:22;;43040:113;;;:::o;43189:732::-;43308:3;43337:54;43385:5;43337:54;:::i;:::-;43407:86;43486:6;43481:3;43407:86;:::i;:::-;43400:93;;43517:56;43567:5;43517:56;:::i;:::-;43596:7;43627:1;43612:284;43637:6;43634:1;43631:13;43612:284;;;43713:6;43707:13;43740:63;43799:3;43784:13;43740:63;:::i;:::-;43733:70;;43826:60;43879:6;43826:60;:::i;:::-;43816:70;;43672:224;43659:1;43656;43652:9;43647:14;;43612:284;;;43616:14;43912:3;43905:10;;43313:608;;;43189:732;;;;:::o;43927:831::-;44190:4;44228:3;44217:9;44213:19;44205:27;;44242:71;44310:1;44299:9;44295:17;44286:6;44242:71;:::i;:::-;44323:80;44399:2;44388:9;44384:18;44375:6;44323:80;:::i;:::-;44450:9;44444:4;44440:20;44435:2;44424:9;44420:18;44413:48;44478:108;44581:4;44572:6;44478:108;:::i;:::-;44470:116;;44596:72;44664:2;44653:9;44649:18;44640:6;44596:72;:::i;:::-;44678:73;44746:3;44735:9;44731:19;44722:6;44678:73;:::i;:::-;43927:831;;;;;;;;:::o;44764:807::-;45013:4;45051:3;45040:9;45036:19;45028:27;;45065:71;45133:1;45122:9;45118:17;45109:6;45065:71;:::i;:::-;45146:72;45214:2;45203:9;45199:18;45190:6;45146:72;:::i;:::-;45228:80;45304:2;45293:9;45289:18;45280:6;45228:80;:::i;:::-;45318;45394:2;45383:9;45379:18;45370:6;45318:80;:::i;:::-;45408:73;45476:3;45465:9;45461:19;45452:6;45408:73;:::i;:::-;45491;45559:3;45548:9;45544:19;45535:6;45491:73;:::i;:::-;44764:807;;;;;;;;;:::o;45577:143::-;45634:5;45665:6;45659:13;45650:22;;45681:33;45708:5;45681:33;:::i;:::-;45577:143;;;;:::o;45726:663::-;45814:6;45822;45830;45879:2;45867:9;45858:7;45854:23;45850:32;45847:119;;;45885:79;;:::i;:::-;45847:119;46005:1;46030:64;46086:7;46077:6;46066:9;46062:22;46030:64;:::i;:::-;46020:74;;45976:128;46143:2;46169:64;46225:7;46216:6;46205:9;46201:22;46169:64;:::i;:::-;46159:74;;46114:129;46282:2;46308:64;46364:7;46355:6;46344:9;46340:22;46308:64;:::i;:::-;46298:74;;46253:129;45726:663;;;;;:::o

Swarm Source

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