Token Wall Street Games

 

Overview ERC20

Price
$0.01 @ 0.000003 ETH (-2.68%)
Fully Diluted Market Cap
Total Supply:
500,000,000 WSG

Holders:
1,967 addresses

Transfers:
-

Contract:
0xEf04804E1e474D3F9B73184D7ef5D786F3Fce9300xEf04804E1e474D3F9B73184D7ef5D786F3Fce930

Decimals:
18

Official Site:

Social Profiles:

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Wall Street Games is a hybrid blockchain-based online gaming platform, where players can earn cryptocurrencies by playing fun and addictive games, collect tradable NFTs and win rewards.

Market

Volume (24H):$40,242.96
Market Capitalization:$3,296,197.60
Circulating Supply:275,384,341.00 WSG
Market Data Source: Coinmarketcap


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WSG

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2024-01-25
*/

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


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

// 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\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\token\ERC20\ERC20.sol


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

pragma solidity ^0.8.0;



/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

// File: @openzeppelin\contracts\utils\Address.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// File: interfaces\IUniswapV2Factory.sol


pragma solidity ^0.8.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: interfaces\IUniswapV2Router02.sol


pragma solidity ^0.8.0;

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

    function WETH() external pure returns (address);

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

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

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

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

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

// File: contracts\token.sol


pragma solidity =0.8.19;

/*

Wall Street Games ($WSG)
Website: https://wallstreetgames.net
Telegram: https://t.me/wallstreetgamesportal
Twitter: https://twitter.com/WSGToken

*/
contract WSG is ERC20, Ownable {
    using Address for address payable;
    address private constant deadAddress = address(0xdead);

    struct TaxAllocation {
        uint256 marketing;
        uint256 team;
        uint256 treasury;
        uint256 burn;
    }

    struct InitialAllocations {
        uint256 airdrops;
        uint256 treasury;
        uint256 marketing;
        uint256 team;
        uint256 advisors;
        uint256 otc;
        uint256 liquidity;
    }

    IUniswapV2Router02 private router;

    address private immutable WETH;

    address public marketingWallet;
    address public treasuryWallet;
    address public teamWallet;
    address public governanceContract;
    address public otcWallet;
    address public airdropsWallet;
    address public advisorsWallet;

    uint256 private _initialSupply = 500_000_000 * 10**18;

    uint256 private constant TAX_DECLINE_PER_BLOCK = 10;
    uint256 private constant PERCENTAGE_DENOMINATOR = 1000;

    mapping(address => bool) private _isExcluded;

    address public pair;
    uint256 public taxCollected;
    uint256 public initialTaxPercentage = 350; //35.0%
    uint256 public finalTaxPercentage = 20; //2.0%

    uint256 private delayBlocks = 20;
    uint256 private startBlock;

    TaxAllocation public taxAllocation = TaxAllocation(300, 150, 300, 250);
    InitialAllocations public initialAllocations =
        InitialAllocations(50, 200, 200, 100, 50, 100, 150);

    constructor() ERC20("Wall Street Games", "WSG") {
        router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
        WETH = router.WETH();
        _isExcluded[_msgSender()] = true;
        _isExcluded[address(this)] = true;

        _mint(_msgSender(), _initialSupply);
    }

    /** ERC20 OVERRIDES */

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(amount > 0, "Amount must be gt 0");

        if (from != pair && to != pair) {
            super._transfer(from, to, amount);
            return;
        }

        bool isBuy = from == pair;
        bool isSell = to == pair;

        if ((isBuy && _isExcluded[to]) || (isSell && _isExcluded[from])) {
            super._transfer(from, to, amount);
            return;
        }

        if (isBuy) {
            require(startBlock > 0, "Trading is not open yet");

            uint256 tax = (amount * taxPercentage()) / PERCENTAGE_DENOMINATOR;
            taxCollected += tax;

            super._transfer(from, address(this), tax);
            super._transfer(from, to, amount - tax);
            return;
        }

        if (isSell) {
            uint256 tax = (amount * taxPercentage()) / PERCENTAGE_DENOMINATOR;
            taxCollected += tax;

            super._transfer(from, address(this), tax);
            swapFromTokens(taxCollected);
            super._transfer(from, to, amount - tax);
            return;
        }
    }

    /** VIEW FUNCTIONS */
    function isExcluded(address wallet) public view returns (bool) {
        return _isExcluded[wallet];
    }

    function taxPercentage() public view returns (uint256) {
        if (block.number <= startBlock + delayBlocks) {
            return initialTaxPercentage;
        } else {
            uint256 blockDifference = block.number - (startBlock + delayBlocks);
            uint256 taxDecline = blockDifference * TAX_DECLINE_PER_BLOCK;
            if (taxDecline >= initialTaxPercentage - finalTaxPercentage) {
                return finalTaxPercentage;
            } else {
                return initialTaxPercentage - taxDecline;
            }
        }
    }

    /** INTERNAL FUNCTIONS */
    function swapFromTokens(uint256 amount) internal {
        uint256 balance = balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        if (amount > balance) amount = balance;
        if (amount > 0) {
            taxCollected = taxCollected - amount;

            // Calculate each allocation
            uint256 treasuryAmount = (amount * taxAllocation.treasury) /
                PERCENTAGE_DENOMINATOR;
            uint256 marketingAmount = (amount * taxAllocation.marketing) /
                PERCENTAGE_DENOMINATOR;
            uint256 teamAmount = (amount * taxAllocation.team) /
                PERCENTAGE_DENOMINATOR;
            uint256 burnAmount = (amount * taxAllocation.burn) /
                PERCENTAGE_DENOMINATOR;

            // Perform the token swap for the total amount minus the burn allocation
            uint256 swapAmount = amount - burnAmount;
            if (swapAmount > 0) {
                // Ensure wallet addresses are set
                require(
                    marketingWallet != address(0),
                    "Marketing wallet not set"
                );
                require(teamWallet != address(0), "Team wallet not set");
                require(
                    treasuryWallet != address(0),
                    "Treasury wallet not set"
                );

                uint256 initialEthBalance = address(this).balance;

                router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                    swapAmount,
                    0,
                    path,
                    address(this),
                    block.timestamp + 30 seconds
                );

                uint256 deltaBalance = address(this).balance -
                    initialEthBalance;

                // Calculate ETH amounts based on the swapped amount
                uint256 marketingEthAmount = (deltaBalance * marketingAmount) /
                    swapAmount;

                uint256 teamEthAmount = (deltaBalance * teamAmount) /
                    swapAmount;

                uint256 treasuryEthAmount = (deltaBalance * treasuryAmount) /
                    swapAmount;

                // Transfer ETH to the marketing, team and treasury wallets
                payable(marketingWallet).sendValue(marketingEthAmount);
                payable(teamWallet).sendValue(teamEthAmount);
                payable(treasuryWallet).sendValue(treasuryEthAmount);

                _transfer(address(this), address(deadAddress), burnAmount);
            }
        }
    }

    /** RESTRICTED FUNCTIONS */
    function mint(address to, uint256 amount) public {
        require(
            msg.sender == governanceContract,
            "Caller is not the governance contract"
        );
        require(to != address(0), "ERC20: mint to the zero address");
        require(amount != 0, "ERC20: mint amount cannot be 0");
        _mint(to, amount);
    }

    function initPair() external onlyOwner {
        pair = IUniswapV2Factory(router.factory()).createPair(
            address(this),
            WETH
        );

        IERC20(WETH).approve(address(router), type(uint256).max);
        _approve(address(this), address(router), type(uint256).max);
        _approve(address(this), address(this), type(uint256).max);
    }

    function distributeToInitialWallets() external onlyOwner {
        // Calculate each allocation
        uint256 treasuryAmount = (_initialSupply *
            initialAllocations.treasury) / PERCENTAGE_DENOMINATOR;
        uint256 marketingAmount = (_initialSupply *
            initialAllocations.marketing) / PERCENTAGE_DENOMINATOR;
        uint256 teamAmount = (_initialSupply * initialAllocations.team) /
            PERCENTAGE_DENOMINATOR;
        uint256 otcAmount = (_initialSupply * initialAllocations.otc) /
            PERCENTAGE_DENOMINATOR;
        uint256 airdropAmount = (_initialSupply * initialAllocations.airdrops) /
            PERCENTAGE_DENOMINATOR;
        uint256 advisorsAmount = (_initialSupply *
            initialAllocations.advisors) / PERCENTAGE_DENOMINATOR;

        _transfer(_msgSender(), address(treasuryWallet), treasuryAmount);
        _transfer(_msgSender(), address(marketingWallet), marketingAmount);
        _transfer(_msgSender(), address(teamWallet), teamAmount);
        _transfer(_msgSender(), address(otcWallet), otcAmount);
        _transfer(_msgSender(), address(airdropsWallet), airdropAmount);
        _transfer(_msgSender(), address(advisorsWallet), advisorsAmount);
    }

    function initLiquidity() external payable onlyOwner {
        uint256 liquidityTokens = (_initialSupply *
            initialAllocations.liquidity) / PERCENTAGE_DENOMINATOR;
        _approve(_msgSender(), address(this), liquidityTokens);
        _transfer(_msgSender(), address(this), liquidityTokens);

        router.addLiquidityETH{value: msg.value}(
            address(this),
            liquidityTokens,
            0,
            0,
            _msgSender(),
            block.timestamp + 30 seconds
        );
    }

    function initTrading() external onlyOwner {
        require(startBlock == 0, "Trading is already open");
        startBlock = block.number;
    }

    function setWallets(
        address _marketingWallet,
        address _teamWallet,
        address _treasuryWallet,
        address _governanceContract,
        address _otcWallet,
        address _airdropsWallet,
        address _advisorsWallet
    ) external onlyOwner {
        marketingWallet = _marketingWallet;
        teamWallet = _teamWallet;
        treasuryWallet = _treasuryWallet;
        governanceContract = _governanceContract;
        otcWallet = _otcWallet;
        airdropsWallet = _airdropsWallet;
        advisorsWallet = _advisorsWallet;

        _isExcluded[_marketingWallet] = true;
        _isExcluded[_teamWallet] = true;
        _isExcluded[_treasuryWallet] = true;
        _isExcluded[_governanceContract] = true;
        _isExcluded[_otcWallet] = true;
        _isExcluded[_airdropsWallet] = true;
        _isExcluded[_advisorsWallet] = true;
    }

    function setTaxAllocation(
        uint256 marketing,
        uint256 team,
        uint256 treasury,
        uint256 burn
    ) external onlyOwner {
        uint256 totalAllocation = marketing + team + treasury + burn;
        require(totalAllocation == 1000, "Total allocation has to be 100%");
        taxAllocation = TaxAllocation(marketing, team, treasury, burn);
    }

    function excludeWallet(address wallet, bool excluded) external onlyOwner {
        _isExcluded[wallet] = excluded;
    }

    function rescueETH() external onlyOwner {
        payable(owner()).sendValue(address(this).balance);
    }

    function rescueTokens(address _token) external onlyOwner {
        require(_token != address(this), "Can not rescue own token");
        IERC20(_token).transfer(
            owner(),
            IERC20(_token).balanceOf(address(this))
        );
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"advisorsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeToInitialWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalTaxPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governanceContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"initPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialAllocations","outputs":[{"internalType":"uint256","name":"airdrops","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"},{"internalType":"uint256","name":"advisors","type":"uint256"},{"internalType":"uint256","name":"otc","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialTaxPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"otcWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"name":"setTaxAllocation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_teamWallet","type":"address"},{"internalType":"address","name":"_treasuryWallet","type":"address"},{"internalType":"address","name":"_governanceContract","type":"address"},{"internalType":"address","name":"_otcWallet","type":"address"},{"internalType":"address","name":"_airdropsWallet","type":"address"},{"internalType":"address","name":"_advisorsWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAllocation","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526b019d971e4fe8401e74000000600e5561015e601255601460135560148055604051806080016040528061012c81526020016096815260200161012c815260200160fa81525060166000820151816000015560208201518160010155604082015181600201556060820151816003015550506040518060e001604052806032815260200160c8815260200160c881526020016064815260200160328152602001606481526020016096815250601a600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015550503480156200010757600080fd5b506040518060400160405280601181526020017f57616c6c205374726565742047616d65730000000000000000000000000000008152506040518060400160405280600381526020017f575347000000000000000000000000000000000000000000000000000000000081525081600390816200018591906200087d565b5080600490816200019791906200087d565b505050620001ba620001ae620003be60201b60201c565b620003c660201b60201c565b731b02da8cb0d097eb8d57a175b88c7d8b47997506600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a39190620009ce565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600f6000620002ec620003be60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003b8620003a9620003be60201b60201c565b600e546200048c60201b60201c565b62000b1b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004f59062000a61565b60405180910390fd5b6200051260008383620005f960201b60201c565b806002600082825462000526919062000ab2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005d9919062000afe565b60405180910390a3620005f560008383620005fe60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200068557607f821691505b6020821081036200069b576200069a6200063d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006c6565b620007118683620006c6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200075e62000758620007528462000729565b62000733565b62000729565b9050919050565b6000819050919050565b6200077a836200073d565b62000792620007898262000765565b848454620006d3565b825550505050565b600090565b620007a96200079a565b620007b68184846200076f565b505050565b5b81811015620007de57620007d26000826200079f565b600181019050620007bc565b5050565b601f8211156200082d57620007f781620006a1565b6200080284620006b6565b8101602085101562000812578190505b6200082a6200082185620006b6565b830182620007bb565b50505b505050565b600082821c905092915050565b6000620008526000198460080262000832565b1980831691505092915050565b60006200086d83836200083f565b9150826002028217905092915050565b620008888262000603565b67ffffffffffffffff811115620008a457620008a36200060e565b5b620008b082546200066c565b620008bd828285620007e2565b600060209050601f831160018114620008f55760008415620008e0578287015190505b620008ec85826200085f565b8655506200095c565b601f1984166200090586620006a1565b60005b828110156200092f5784890151825560018201915060208501945060208101905062000908565b868310156200094f57848901516200094b601f8916826200083f565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009968262000969565b9050919050565b620009a88162000989565b8114620009b457600080fd5b50565b600081519050620009c8816200099d565b92915050565b600060208284031215620009e757620009e662000964565b5b6000620009f784828501620009b7565b91505092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a49601f8362000a00565b915062000a568262000a11565b602082019050919050565b6000602082019050818103600083015262000a7c8162000a3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000abf8262000729565b915062000acc8362000729565b925082820190508082111562000ae75762000ae662000a83565b5b92915050565b62000af88162000729565b82525050565b600060208201905062000b15600083018462000aed565b92915050565b60805161451362000b4560003960008181611bda01528181611c9b0152612aa901526145136000f3fe6080604052600436106102335760003560e01c806375f0a8741161012e578063ae7b6d16116100ab578063dd62ed3e1161006f578063dd62ed3e14610800578063e47a2f791461083d578063f2fde38b1461086b578063f828edbe14610894578063feb1dfcc146108bd5761023a565b8063ae7b6d1614610711578063b0c03c851461073c578063b172b22214610767578063c32553be14610792578063cba0e996146107c35761023a565b8063a3eadf73116100f2578063a3eadf7314610637578063a457c2d714610662578063a8aa1b311461069f578063a9059cbb146106ca578063a965a51b146107075761023a565b806375f0a8741461056257806376dbab5a1461058d5780638da5cb5b146105b6578063916a47f7146105e157806395d89b411461060c5761023a565b80632db5ae04116101bc5780634626402b116101805780634626402b1461048d57806359927044146104b85780636b252b47146104e357806370a082311461050e578063715018a61461054b5761023a565b80632db5ae04146103ba578063313ce567146103d157806339509351146103fc57806340c10f191461043957806342abfa1f146104625761023a565b806318160ddd1161020357806318160ddd146102f957806320800a001461032457806323b872dd1461033b5780632572098614610378578063288d18351461038f5761023a565b8062ae3bf81461023f57806306fdde0314610268578063095ea7b3146102935780630ec0a75b146102d05761023a565b3661023a57005b600080fd5b34801561024b57600080fd5b5061026660048036038101906102619190613007565b6108d4565b005b34801561027457600080fd5b5061027d610a4c565b60405161028a91906130c4565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b5919061311c565b610ade565b6040516102c79190613177565b60405180910390f35b3480156102dc57600080fd5b506102f760048036038101906102f29190613192565b610b01565b005b34801561030557600080fd5b5061030e610bc8565b60405161031b9190613208565b60405180910390f35b34801561033057600080fd5b50610339610bd2565b005b34801561034757600080fd5b50610362600480360381019061035d9190613223565b610c0c565b60405161036f9190613177565b60405180910390f35b34801561038457600080fd5b5061038d610c3b565b005b34801561039b57600080fd5b506103a4610e5b565b6040516103b19190613285565b60405180910390f35b3480156103c657600080fd5b506103cf610e81565b005b3480156103dd57600080fd5b506103e6610ed7565b6040516103f391906132bc565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e919061311c565b610ee0565b6040516104309190613177565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b919061311c565b610f17565b005b34801561046e57600080fd5b50610477611067565b6040516104849190613208565b60405180910390f35b34801561049957600080fd5b506104a261106d565b6040516104af9190613285565b60405180910390f35b3480156104c457600080fd5b506104cd611093565b6040516104da9190613285565b60405180910390f35b3480156104ef57600080fd5b506104f86110b9565b6040516105059190613285565b60405180910390f35b34801561051a57600080fd5b5061053560048036038101906105309190613007565b6110df565b6040516105429190613208565b60405180910390f35b34801561055757600080fd5b50610560611127565b005b34801561056e57600080fd5b5061057761113b565b6040516105849190613285565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af91906132d7565b611161565b005b3480156105c257600080fd5b506105cb6115a1565b6040516105d89190613285565b60405180910390f35b3480156105ed57600080fd5b506105f66115cb565b6040516106039190613208565b60405180910390f35b34801561061857600080fd5b506106216115d1565b60405161062e91906130c4565b60405180910390f35b34801561064357600080fd5b5061064c611663565b6040516106599190613285565b60405180910390f35b34801561066e57600080fd5b506106896004803603810190610684919061311c565b611689565b6040516106969190613177565b60405180910390f35b3480156106ab57600080fd5b506106b4611700565b6040516106c19190613285565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec919061311c565b611726565b6040516106fe9190613177565b60405180910390f35b61070f611749565b005b34801561071d57600080fd5b5061072661185c565b6040516107339190613208565b60405180910390f35b34801561074857600080fd5b506107516118e6565b60405161075e9190613208565b60405180910390f35b34801561077357600080fd5b5061077c6118ec565b6040516107899190613285565b60405180910390f35b34801561079e57600080fd5b506107a7611912565b6040516107ba9796959493929190613379565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190613007565b611942565b6040516107f79190613177565b60405180910390f35b34801561080c57600080fd5b50610827600480360381019061082291906133e8565b611998565b6040516108349190613208565b60405180910390f35b34801561084957600080fd5b50610852611a1f565b6040516108629493929190613428565b60405180910390f35b34801561087757600080fd5b50610892600480360381019061088d9190613007565b611a3d565b005b3480156108a057600080fd5b506108bb60048036038101906108b69190613499565b611ac0565b005b3480156108c957600080fd5b506108d2611b23565b005b6108dc611df4565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361094a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094190613525565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61096e6115a1565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109a79190613285565b602060405180830381865afa1580156109c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e8919061355a565b6040518363ffffffff1660e01b8152600401610a05929190613587565b6020604051808303816000875af1158015610a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4891906135c5565b5050565b606060038054610a5b90613621565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8790613621565b8015610ad45780601f10610aa957610100808354040283529160200191610ad4565b820191906000526020600020905b815481529060010190602001808311610ab757829003601f168201915b5050505050905090565b600080610ae9611e72565b9050610af6818585611e7a565b600191505092915050565b610b09611df4565b600081838587610b199190613681565b610b239190613681565b610b2d9190613681565b90506103e88114610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90613701565b60405180910390fd5b6040518060800160405280868152602001858152602001848152602001838152506016600082015181600001556020820151816001015560408201518160020155606082015181600301559050505050505050565b6000600254905090565b610bda611df4565b610c0a47610be66115a1565b73ffffffffffffffffffffffffffffffffffffffff1661204390919063ffffffff16565b565b600080610c17611e72565b9050610c24858285612137565b610c2f8585856121c3565b60019150509392505050565b610c43611df4565b60006103e8601a60010154600e54610c5b9190613721565b610c659190613792565b905060006103e8601a60020154600e54610c7f9190613721565b610c899190613792565b905060006103e8601a60030154600e54610ca39190613721565b610cad9190613792565b905060006103e8601a60050154600e54610cc79190613721565b610cd19190613792565b905060006103e8601a60000154600e54610ceb9190613721565b610cf59190613792565b905060006103e8601a60040154600e54610d0f9190613721565b610d199190613792565b9050610d4f610d26611e72565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886121c3565b610d83610d5a611e72565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876121c3565b610db7610d8e611e72565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866121c3565b610deb610dc2611e72565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856121c3565b610e1f610df6611e72565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846121c3565b610e53610e2a611e72565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121c3565b505050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e89611df4565b600060155414610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec59061380f565b60405180910390fd5b43601581905550565b60006012905090565b600080610eeb611e72565b9050610f0c818585610efd8589611998565b610f079190613681565b611e7a565b600191505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e906138a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d9061390d565b60405180910390fd5b60008103611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090613979565b60405180910390fd5b611063828261256b565b5050565b60135481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61112f611df4565b61113960006126c1565b565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611169611df4565b86600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6060600480546115e090613621565b80601f016020809104026020016040519081016040528092919081815260200182805461160c90613621565b80156116595780601f1061162e57610100808354040283529160200191611659565b820191906000526020600020905b81548152906001019060200180831161163c57829003601f168201915b5050505050905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611694611e72565b905060006116a28286611998565b9050838110156116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90613a0b565b60405180910390fd5b6116f48286868403611e7a565b60019250505092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611731611e72565b905061173e8185856121c3565b600191505092915050565b611751611df4565b60006103e8601a60060154600e546117699190613721565b6117739190613792565b9050611787611780611e72565b3083611e7a565b611799611792611e72565b30836121c3565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430846000806117e5611e72565b601e426117f29190613681565b6040518863ffffffff1660e01b815260040161181396959493929190613a70565b60606040518083038185885af1158015611831573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118569190613ad1565b50505050565b600060145460155461186e9190613681565b431161187e5760125490506118e3565b60006014546015546118909190613681565b4361189b9190613b24565b90506000600a826118ac9190613721565b90506013546012546118be9190613b24565b81106118d057601354925050506118e3565b806012546118de9190613b24565b925050505b90565b60125481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a8060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60168060000154908060010154908060020154908060030154905084565b611a45611df4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab90613bca565b60405180910390fd5b611abd816126c1565b50565b611ac8611df4565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b2b611df4565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbc9190613bff565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611c16929190613c2c565b6020604051808303816000875af1158015611c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c599190613bff565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611d36929190613587565b6020604051808303816000875af1158015611d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7991906135c5565b50611dc730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e7a565b611df230307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e7a565b565b611dfc611e72565b73ffffffffffffffffffffffffffffffffffffffff16611e1a6115a1565b73ffffffffffffffffffffffffffffffffffffffff1614611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6790613ca1565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee090613d33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90613dc5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120369190613208565b60405180910390a3505050565b80471015612086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207d90613e31565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516120ac90613e82565b60006040518083038185875af1925050503d80600081146120e9576040519150601f19603f3d011682016040523d82523d6000602084013e6120ee565b606091505b5050905080612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990613f09565b60405180910390fd5b505050565b60006121438484611998565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121bd57818110156121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a690613f75565b60405180910390fd5b6121bc8484848403611e7a565b5b50505050565b60008111612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd90613fe1565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122b25750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156122c7576122c2838383612787565b612566565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490508180156123c75750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061242457508080156124235750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b1561243b57612434858585612787565b5050612566565b81156124ec57600060155411612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d9061404d565b60405180910390fd5b60006103e861249361185c565b8561249e9190613721565b6124a89190613792565b905080601160008282546124bc9190613681565b925050819055506124ce863083612787565b6124e4868683876124df9190613b24565b612787565b505050612566565b80156125635760006103e86124ff61185c565b8561250a9190613721565b6125149190613792565b905080601160008282546125289190613681565b9250508190555061253a863083612787565b6125456011546129fd565b61255b868683876125569190613b24565b612787565b505050612566565b50505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d19061390d565b60405180910390fd5b6125e660008383612f9a565b80600260008282546125f89190613681565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126a99190613208565b60405180910390a36126bd60008383612f9f565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed906140df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285c90614171565b60405180910390fd5b612870838383612f9a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed90614203565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129e49190613208565b60405180910390a36129f7848484612f9f565b50505050565b6000612a08306110df565b90506000600267ffffffffffffffff811115612a2757612a26614223565b5b604051908082528060200260200182016040528015612a555781602001602082028036833780820191505090505b5090503081600081518110612a6d57612a6c614252565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612adc57612adb614252565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081831115612b22578192505b6000831115612f955782601154612b399190613b24565b60118190555060006103e860166002015485612b559190613721565b612b5f9190613792565b905060006103e860166000015486612b779190613721565b612b819190613792565b905060006103e860166001015487612b999190613721565b612ba39190613792565b905060006103e860166003015488612bbb9190613721565b612bc59190613792565b905060008188612bd59190613b24565b90506000811115612f8f57600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c68906142cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf990614339565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a906143a5565b60405180910390fd5b6000479050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008a30601e42612de89190613681565b6040518663ffffffff1660e01b8152600401612e08959493929190614483565b600060405180830381600087803b158015612e2257600080fd5b505af1158015612e36573d6000803e3d6000fd5b5050505060008147612e489190613b24565b90506000838783612e599190613721565b612e639190613792565b90506000848784612e749190613721565b612e7e9190613792565b90506000858a85612e8f9190613721565b612e999190613792565b9050612ee683600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661204390919063ffffffff16565b612f3182600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661204390919063ffffffff16565b612f7c81600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661204390919063ffffffff16565b612f893061dead896121c3565b50505050505b50505050505b505050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fd482612fa9565b9050919050565b612fe481612fc9565b8114612fef57600080fd5b50565b60008135905061300181612fdb565b92915050565b60006020828403121561301d5761301c612fa4565b5b600061302b84828501612ff2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561306e578082015181840152602081019050613053565b60008484015250505050565b6000601f19601f8301169050919050565b600061309682613034565b6130a0818561303f565b93506130b0818560208601613050565b6130b98161307a565b840191505092915050565b600060208201905081810360008301526130de818461308b565b905092915050565b6000819050919050565b6130f9816130e6565b811461310457600080fd5b50565b600081359050613116816130f0565b92915050565b6000806040838503121561313357613132612fa4565b5b600061314185828601612ff2565b925050602061315285828601613107565b9150509250929050565b60008115159050919050565b6131718161315c565b82525050565b600060208201905061318c6000830184613168565b92915050565b600080600080608085870312156131ac576131ab612fa4565b5b60006131ba87828801613107565b94505060206131cb87828801613107565b93505060406131dc87828801613107565b92505060606131ed87828801613107565b91505092959194509250565b613202816130e6565b82525050565b600060208201905061321d60008301846131f9565b92915050565b60008060006060848603121561323c5761323b612fa4565b5b600061324a86828701612ff2565b935050602061325b86828701612ff2565b925050604061326c86828701613107565b9150509250925092565b61327f81612fc9565b82525050565b600060208201905061329a6000830184613276565b92915050565b600060ff82169050919050565b6132b6816132a0565b82525050565b60006020820190506132d160008301846132ad565b92915050565b600080600080600080600060e0888a0312156132f6576132f5612fa4565b5b60006133048a828b01612ff2565b97505060206133158a828b01612ff2565b96505060406133268a828b01612ff2565b95505060606133378a828b01612ff2565b94505060806133488a828b01612ff2565b93505060a06133598a828b01612ff2565b92505060c061336a8a828b01612ff2565b91505092959891949750929550565b600060e08201905061338e600083018a6131f9565b61339b60208301896131f9565b6133a860408301886131f9565b6133b560608301876131f9565b6133c260808301866131f9565b6133cf60a08301856131f9565b6133dc60c08301846131f9565b98975050505050505050565b600080604083850312156133ff576133fe612fa4565b5b600061340d85828601612ff2565b925050602061341e85828601612ff2565b9150509250929050565b600060808201905061343d60008301876131f9565b61344a60208301866131f9565b61345760408301856131f9565b61346460608301846131f9565b95945050505050565b6134768161315c565b811461348157600080fd5b50565b6000813590506134938161346d565b92915050565b600080604083850312156134b0576134af612fa4565b5b60006134be85828601612ff2565b92505060206134cf85828601613484565b9150509250929050565b7f43616e206e6f7420726573637565206f776e20746f6b656e0000000000000000600082015250565b600061350f60188361303f565b915061351a826134d9565b602082019050919050565b6000602082019050818103600083015261353e81613502565b9050919050565b600081519050613554816130f0565b92915050565b6000602082840312156135705761356f612fa4565b5b600061357e84828501613545565b91505092915050565b600060408201905061359c6000830185613276565b6135a960208301846131f9565b9392505050565b6000815190506135bf8161346d565b92915050565b6000602082840312156135db576135da612fa4565b5b60006135e9848285016135b0565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061363957607f821691505b60208210810361364c5761364b6135f2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061368c826130e6565b9150613697836130e6565b92508282019050808211156136af576136ae613652565b5b92915050565b7f546f74616c20616c6c6f636174696f6e2068617320746f206265203130302500600082015250565b60006136eb601f8361303f565b91506136f6826136b5565b602082019050919050565b6000602082019050818103600083015261371a816136de565b9050919050565b600061372c826130e6565b9150613737836130e6565b9250828202613745816130e6565b9150828204841483151761375c5761375b613652565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061379d826130e6565b91506137a8836130e6565b9250826137b8576137b7613763565b5b828204905092915050565b7f54726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b60006137f960178361303f565b9150613804826137c3565b602082019050919050565b60006020820190508181036000830152613828816137ec565b9050919050565b7f43616c6c6572206973206e6f742074686520676f7665726e616e636520636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b600061388b60258361303f565b91506138968261382f565b604082019050919050565b600060208201905081810360008301526138ba8161387e565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006138f7601f8361303f565b9150613902826138c1565b602082019050919050565b60006020820190508181036000830152613926816138ea565b9050919050565b7f45524332303a206d696e7420616d6f756e742063616e6e6f7420626520300000600082015250565b6000613963601e8361303f565b915061396e8261392d565b602082019050919050565b6000602082019050818103600083015261399281613956565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006139f560258361303f565b9150613a0082613999565b604082019050919050565b60006020820190508181036000830152613a24816139e8565b9050919050565b6000819050919050565b6000819050919050565b6000613a5a613a55613a5084613a2b565b613a35565b6130e6565b9050919050565b613a6a81613a3f565b82525050565b600060c082019050613a856000830189613276565b613a9260208301886131f9565b613a9f6040830187613a61565b613aac6060830186613a61565b613ab96080830185613276565b613ac660a08301846131f9565b979650505050505050565b600080600060608486031215613aea57613ae9612fa4565b5b6000613af886828701613545565b9350506020613b0986828701613545565b9250506040613b1a86828701613545565b9150509250925092565b6000613b2f826130e6565b9150613b3a836130e6565b9250828203905081811115613b5257613b51613652565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613bb460268361303f565b9150613bbf82613b58565b604082019050919050565b60006020820190508181036000830152613be381613ba7565b9050919050565b600081519050613bf981612fdb565b92915050565b600060208284031215613c1557613c14612fa4565b5b6000613c2384828501613bea565b91505092915050565b6000604082019050613c416000830185613276565b613c4e6020830184613276565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c8b60208361303f565b9150613c9682613c55565b602082019050919050565b60006020820190508181036000830152613cba81613c7e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613d1d60248361303f565b9150613d2882613cc1565b604082019050919050565b60006020820190508181036000830152613d4c81613d10565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613daf60228361303f565b9150613dba82613d53565b604082019050919050565b60006020820190508181036000830152613dde81613da2565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000613e1b601d8361303f565b9150613e2682613de5565b602082019050919050565b60006020820190508181036000830152613e4a81613e0e565b9050919050565b600081905092915050565b50565b6000613e6c600083613e51565b9150613e7782613e5c565b600082019050919050565b6000613e8d82613e5f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000613ef3603a8361303f565b9150613efe82613e97565b604082019050919050565b60006020820190508181036000830152613f2281613ee6565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613f5f601d8361303f565b9150613f6a82613f29565b602082019050919050565b60006020820190508181036000830152613f8e81613f52565b9050919050565b7f416d6f756e74206d757374206265206774203000000000000000000000000000600082015250565b6000613fcb60138361303f565b9150613fd682613f95565b602082019050919050565b60006020820190508181036000830152613ffa81613fbe565b9050919050565b7f54726164696e67206973206e6f74206f70656e20796574000000000000000000600082015250565b600061403760178361303f565b915061404282614001565b602082019050919050565b600060208201905081810360008301526140668161402a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140c960258361303f565b91506140d48261406d565b604082019050919050565b600060208201905081810360008301526140f8816140bc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061415b60238361303f565b9150614166826140ff565b604082019050919050565b6000602082019050818103600083015261418a8161414e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006141ed60268361303f565b91506141f882614191565b604082019050919050565b6000602082019050818103600083015261421c816141e0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4d61726b6574696e672077616c6c6574206e6f74207365740000000000000000600082015250565b60006142b760188361303f565b91506142c282614281565b602082019050919050565b600060208201905081810360008301526142e6816142aa565b9050919050565b7f5465616d2077616c6c6574206e6f742073657400000000000000000000000000600082015250565b600061432360138361303f565b915061432e826142ed565b602082019050919050565b6000602082019050818103600083015261435281614316565b9050919050565b7f54726561737572792077616c6c6574206e6f7420736574000000000000000000600082015250565b600061438f60178361303f565b915061439a82614359565b602082019050919050565b600060208201905081810360008301526143be81614382565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143fa81612fc9565b82525050565b600061440c83836143f1565b60208301905092915050565b6000602082019050919050565b6000614430826143c5565b61443a81856143d0565b9350614445836143e1565b8060005b8381101561447657815161445d8882614400565b975061446883614418565b925050600181019050614449565b5085935050505092915050565b600060a08201905061449860008301886131f9565b6144a56020830187613a61565b81810360408301526144b78186614425565b90506144c66060830185613276565b6144d360808301846131f9565b969550505050505056fea26469706673582212208e175aac27fb9baaa141a4edec2cb676aa56efdafcf8a23d99cd58c9a2e2903e64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102335760003560e01c806375f0a8741161012e578063ae7b6d16116100ab578063dd62ed3e1161006f578063dd62ed3e14610800578063e47a2f791461083d578063f2fde38b1461086b578063f828edbe14610894578063feb1dfcc146108bd5761023a565b8063ae7b6d1614610711578063b0c03c851461073c578063b172b22214610767578063c32553be14610792578063cba0e996146107c35761023a565b8063a3eadf73116100f2578063a3eadf7314610637578063a457c2d714610662578063a8aa1b311461069f578063a9059cbb146106ca578063a965a51b146107075761023a565b806375f0a8741461056257806376dbab5a1461058d5780638da5cb5b146105b6578063916a47f7146105e157806395d89b411461060c5761023a565b80632db5ae04116101bc5780634626402b116101805780634626402b1461048d57806359927044146104b85780636b252b47146104e357806370a082311461050e578063715018a61461054b5761023a565b80632db5ae04146103ba578063313ce567146103d157806339509351146103fc57806340c10f191461043957806342abfa1f146104625761023a565b806318160ddd1161020357806318160ddd146102f957806320800a001461032457806323b872dd1461033b5780632572098614610378578063288d18351461038f5761023a565b8062ae3bf81461023f57806306fdde0314610268578063095ea7b3146102935780630ec0a75b146102d05761023a565b3661023a57005b600080fd5b34801561024b57600080fd5b5061026660048036038101906102619190613007565b6108d4565b005b34801561027457600080fd5b5061027d610a4c565b60405161028a91906130c4565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b5919061311c565b610ade565b6040516102c79190613177565b60405180910390f35b3480156102dc57600080fd5b506102f760048036038101906102f29190613192565b610b01565b005b34801561030557600080fd5b5061030e610bc8565b60405161031b9190613208565b60405180910390f35b34801561033057600080fd5b50610339610bd2565b005b34801561034757600080fd5b50610362600480360381019061035d9190613223565b610c0c565b60405161036f9190613177565b60405180910390f35b34801561038457600080fd5b5061038d610c3b565b005b34801561039b57600080fd5b506103a4610e5b565b6040516103b19190613285565b60405180910390f35b3480156103c657600080fd5b506103cf610e81565b005b3480156103dd57600080fd5b506103e6610ed7565b6040516103f391906132bc565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e919061311c565b610ee0565b6040516104309190613177565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b919061311c565b610f17565b005b34801561046e57600080fd5b50610477611067565b6040516104849190613208565b60405180910390f35b34801561049957600080fd5b506104a261106d565b6040516104af9190613285565b60405180910390f35b3480156104c457600080fd5b506104cd611093565b6040516104da9190613285565b60405180910390f35b3480156104ef57600080fd5b506104f86110b9565b6040516105059190613285565b60405180910390f35b34801561051a57600080fd5b5061053560048036038101906105309190613007565b6110df565b6040516105429190613208565b60405180910390f35b34801561055757600080fd5b50610560611127565b005b34801561056e57600080fd5b5061057761113b565b6040516105849190613285565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af91906132d7565b611161565b005b3480156105c257600080fd5b506105cb6115a1565b6040516105d89190613285565b60405180910390f35b3480156105ed57600080fd5b506105f66115cb565b6040516106039190613208565b60405180910390f35b34801561061857600080fd5b506106216115d1565b60405161062e91906130c4565b60405180910390f35b34801561064357600080fd5b5061064c611663565b6040516106599190613285565b60405180910390f35b34801561066e57600080fd5b506106896004803603810190610684919061311c565b611689565b6040516106969190613177565b60405180910390f35b3480156106ab57600080fd5b506106b4611700565b6040516106c19190613285565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec919061311c565b611726565b6040516106fe9190613177565b60405180910390f35b61070f611749565b005b34801561071d57600080fd5b5061072661185c565b6040516107339190613208565b60405180910390f35b34801561074857600080fd5b506107516118e6565b60405161075e9190613208565b60405180910390f35b34801561077357600080fd5b5061077c6118ec565b6040516107899190613285565b60405180910390f35b34801561079e57600080fd5b506107a7611912565b6040516107ba9796959493929190613379565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190613007565b611942565b6040516107f79190613177565b60405180910390f35b34801561080c57600080fd5b50610827600480360381019061082291906133e8565b611998565b6040516108349190613208565b60405180910390f35b34801561084957600080fd5b50610852611a1f565b6040516108629493929190613428565b60405180910390f35b34801561087757600080fd5b50610892600480360381019061088d9190613007565b611a3d565b005b3480156108a057600080fd5b506108bb60048036038101906108b69190613499565b611ac0565b005b3480156108c957600080fd5b506108d2611b23565b005b6108dc611df4565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361094a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094190613525565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61096e6115a1565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109a79190613285565b602060405180830381865afa1580156109c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e8919061355a565b6040518363ffffffff1660e01b8152600401610a05929190613587565b6020604051808303816000875af1158015610a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4891906135c5565b5050565b606060038054610a5b90613621565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8790613621565b8015610ad45780601f10610aa957610100808354040283529160200191610ad4565b820191906000526020600020905b815481529060010190602001808311610ab757829003601f168201915b5050505050905090565b600080610ae9611e72565b9050610af6818585611e7a565b600191505092915050565b610b09611df4565b600081838587610b199190613681565b610b239190613681565b610b2d9190613681565b90506103e88114610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90613701565b60405180910390fd5b6040518060800160405280868152602001858152602001848152602001838152506016600082015181600001556020820151816001015560408201518160020155606082015181600301559050505050505050565b6000600254905090565b610bda611df4565b610c0a47610be66115a1565b73ffffffffffffffffffffffffffffffffffffffff1661204390919063ffffffff16565b565b600080610c17611e72565b9050610c24858285612137565b610c2f8585856121c3565b60019150509392505050565b610c43611df4565b60006103e8601a60010154600e54610c5b9190613721565b610c659190613792565b905060006103e8601a60020154600e54610c7f9190613721565b610c899190613792565b905060006103e8601a60030154600e54610ca39190613721565b610cad9190613792565b905060006103e8601a60050154600e54610cc79190613721565b610cd19190613792565b905060006103e8601a60000154600e54610ceb9190613721565b610cf59190613792565b905060006103e8601a60040154600e54610d0f9190613721565b610d199190613792565b9050610d4f610d26611e72565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886121c3565b610d83610d5a611e72565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876121c3565b610db7610d8e611e72565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866121c3565b610deb610dc2611e72565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856121c3565b610e1f610df6611e72565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846121c3565b610e53610e2a611e72565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121c3565b505050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e89611df4565b600060155414610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec59061380f565b60405180910390fd5b43601581905550565b60006012905090565b600080610eeb611e72565b9050610f0c818585610efd8589611998565b610f079190613681565b611e7a565b600191505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e906138a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d9061390d565b60405180910390fd5b60008103611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090613979565b60405180910390fd5b611063828261256b565b5050565b60135481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61112f611df4565b61113960006126c1565b565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611169611df4565b86600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6060600480546115e090613621565b80601f016020809104026020016040519081016040528092919081815260200182805461160c90613621565b80156116595780601f1061162e57610100808354040283529160200191611659565b820191906000526020600020905b81548152906001019060200180831161163c57829003601f168201915b5050505050905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611694611e72565b905060006116a28286611998565b9050838110156116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90613a0b565b60405180910390fd5b6116f48286868403611e7a565b60019250505092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611731611e72565b905061173e8185856121c3565b600191505092915050565b611751611df4565b60006103e8601a60060154600e546117699190613721565b6117739190613792565b9050611787611780611e72565b3083611e7a565b611799611792611e72565b30836121c3565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430846000806117e5611e72565b601e426117f29190613681565b6040518863ffffffff1660e01b815260040161181396959493929190613a70565b60606040518083038185885af1158015611831573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118569190613ad1565b50505050565b600060145460155461186e9190613681565b431161187e5760125490506118e3565b60006014546015546118909190613681565b4361189b9190613b24565b90506000600a826118ac9190613721565b90506013546012546118be9190613b24565b81106118d057601354925050506118e3565b806012546118de9190613b24565b925050505b90565b60125481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a8060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60168060000154908060010154908060020154908060030154905084565b611a45611df4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab90613bca565b60405180910390fd5b611abd816126c1565b50565b611ac8611df4565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b2b611df4565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbc9190613bff565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16040518363ffffffff1660e01b8152600401611c16929190613c2c565b6020604051808303816000875af1158015611c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c599190613bff565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611d36929190613587565b6020604051808303816000875af1158015611d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7991906135c5565b50611dc730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e7a565b611df230307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e7a565b565b611dfc611e72565b73ffffffffffffffffffffffffffffffffffffffff16611e1a6115a1565b73ffffffffffffffffffffffffffffffffffffffff1614611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6790613ca1565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee090613d33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90613dc5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120369190613208565b60405180910390a3505050565b80471015612086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207d90613e31565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516120ac90613e82565b60006040518083038185875af1925050503d80600081146120e9576040519150601f19603f3d011682016040523d82523d6000602084013e6120ee565b606091505b5050905080612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990613f09565b60405180910390fd5b505050565b60006121438484611998565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121bd57818110156121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a690613f75565b60405180910390fd5b6121bc8484848403611e7a565b5b50505050565b60008111612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd90613fe1565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122b25750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156122c7576122c2838383612787565b612566565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490508180156123c75750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061242457508080156124235750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b1561243b57612434858585612787565b5050612566565b81156124ec57600060155411612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d9061404d565b60405180910390fd5b60006103e861249361185c565b8561249e9190613721565b6124a89190613792565b905080601160008282546124bc9190613681565b925050819055506124ce863083612787565b6124e4868683876124df9190613b24565b612787565b505050612566565b80156125635760006103e86124ff61185c565b8561250a9190613721565b6125149190613792565b905080601160008282546125289190613681565b9250508190555061253a863083612787565b6125456011546129fd565b61255b868683876125569190613b24565b612787565b505050612566565b50505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d19061390d565b60405180910390fd5b6125e660008383612f9a565b80600260008282546125f89190613681565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126a99190613208565b60405180910390a36126bd60008383612f9f565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed906140df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285c90614171565b60405180910390fd5b612870838383612f9a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed90614203565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129e49190613208565b60405180910390a36129f7848484612f9f565b50505050565b6000612a08306110df565b90506000600267ffffffffffffffff811115612a2757612a26614223565b5b604051908082528060200260200182016040528015612a555781602001602082028036833780820191505090505b5090503081600081518110612a6d57612a6c614252565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab181600181518110612adc57612adb614252565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081831115612b22578192505b6000831115612f955782601154612b399190613b24565b60118190555060006103e860166002015485612b559190613721565b612b5f9190613792565b905060006103e860166000015486612b779190613721565b612b819190613792565b905060006103e860166001015487612b999190613721565b612ba39190613792565b905060006103e860166003015488612bbb9190613721565b612bc59190613792565b905060008188612bd59190613b24565b90506000811115612f8f57600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c68906142cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf990614339565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a906143a5565b60405180910390fd5b6000479050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008a30601e42612de89190613681565b6040518663ffffffff1660e01b8152600401612e08959493929190614483565b600060405180830381600087803b158015612e2257600080fd5b505af1158015612e36573d6000803e3d6000fd5b5050505060008147612e489190613b24565b90506000838783612e599190613721565b612e639190613792565b90506000848784612e749190613721565b612e7e9190613792565b90506000858a85612e8f9190613721565b612e999190613792565b9050612ee683600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661204390919063ffffffff16565b612f3182600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661204390919063ffffffff16565b612f7c81600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661204390919063ffffffff16565b612f893061dead896121c3565b50505050505b50505050505b505050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fd482612fa9565b9050919050565b612fe481612fc9565b8114612fef57600080fd5b50565b60008135905061300181612fdb565b92915050565b60006020828403121561301d5761301c612fa4565b5b600061302b84828501612ff2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561306e578082015181840152602081019050613053565b60008484015250505050565b6000601f19601f8301169050919050565b600061309682613034565b6130a0818561303f565b93506130b0818560208601613050565b6130b98161307a565b840191505092915050565b600060208201905081810360008301526130de818461308b565b905092915050565b6000819050919050565b6130f9816130e6565b811461310457600080fd5b50565b600081359050613116816130f0565b92915050565b6000806040838503121561313357613132612fa4565b5b600061314185828601612ff2565b925050602061315285828601613107565b9150509250929050565b60008115159050919050565b6131718161315c565b82525050565b600060208201905061318c6000830184613168565b92915050565b600080600080608085870312156131ac576131ab612fa4565b5b60006131ba87828801613107565b94505060206131cb87828801613107565b93505060406131dc87828801613107565b92505060606131ed87828801613107565b91505092959194509250565b613202816130e6565b82525050565b600060208201905061321d60008301846131f9565b92915050565b60008060006060848603121561323c5761323b612fa4565b5b600061324a86828701612ff2565b935050602061325b86828701612ff2565b925050604061326c86828701613107565b9150509250925092565b61327f81612fc9565b82525050565b600060208201905061329a6000830184613276565b92915050565b600060ff82169050919050565b6132b6816132a0565b82525050565b60006020820190506132d160008301846132ad565b92915050565b600080600080600080600060e0888a0312156132f6576132f5612fa4565b5b60006133048a828b01612ff2565b97505060206133158a828b01612ff2565b96505060406133268a828b01612ff2565b95505060606133378a828b01612ff2565b94505060806133488a828b01612ff2565b93505060a06133598a828b01612ff2565b92505060c061336a8a828b01612ff2565b91505092959891949750929550565b600060e08201905061338e600083018a6131f9565b61339b60208301896131f9565b6133a860408301886131f9565b6133b560608301876131f9565b6133c260808301866131f9565b6133cf60a08301856131f9565b6133dc60c08301846131f9565b98975050505050505050565b600080604083850312156133ff576133fe612fa4565b5b600061340d85828601612ff2565b925050602061341e85828601612ff2565b9150509250929050565b600060808201905061343d60008301876131f9565b61344a60208301866131f9565b61345760408301856131f9565b61346460608301846131f9565b95945050505050565b6134768161315c565b811461348157600080fd5b50565b6000813590506134938161346d565b92915050565b600080604083850312156134b0576134af612fa4565b5b60006134be85828601612ff2565b92505060206134cf85828601613484565b9150509250929050565b7f43616e206e6f7420726573637565206f776e20746f6b656e0000000000000000600082015250565b600061350f60188361303f565b915061351a826134d9565b602082019050919050565b6000602082019050818103600083015261353e81613502565b9050919050565b600081519050613554816130f0565b92915050565b6000602082840312156135705761356f612fa4565b5b600061357e84828501613545565b91505092915050565b600060408201905061359c6000830185613276565b6135a960208301846131f9565b9392505050565b6000815190506135bf8161346d565b92915050565b6000602082840312156135db576135da612fa4565b5b60006135e9848285016135b0565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061363957607f821691505b60208210810361364c5761364b6135f2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061368c826130e6565b9150613697836130e6565b92508282019050808211156136af576136ae613652565b5b92915050565b7f546f74616c20616c6c6f636174696f6e2068617320746f206265203130302500600082015250565b60006136eb601f8361303f565b91506136f6826136b5565b602082019050919050565b6000602082019050818103600083015261371a816136de565b9050919050565b600061372c826130e6565b9150613737836130e6565b9250828202613745816130e6565b9150828204841483151761375c5761375b613652565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061379d826130e6565b91506137a8836130e6565b9250826137b8576137b7613763565b5b828204905092915050565b7f54726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b60006137f960178361303f565b9150613804826137c3565b602082019050919050565b60006020820190508181036000830152613828816137ec565b9050919050565b7f43616c6c6572206973206e6f742074686520676f7665726e616e636520636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b600061388b60258361303f565b91506138968261382f565b604082019050919050565b600060208201905081810360008301526138ba8161387e565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006138f7601f8361303f565b9150613902826138c1565b602082019050919050565b60006020820190508181036000830152613926816138ea565b9050919050565b7f45524332303a206d696e7420616d6f756e742063616e6e6f7420626520300000600082015250565b6000613963601e8361303f565b915061396e8261392d565b602082019050919050565b6000602082019050818103600083015261399281613956565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006139f560258361303f565b9150613a0082613999565b604082019050919050565b60006020820190508181036000830152613a24816139e8565b9050919050565b6000819050919050565b6000819050919050565b6000613a5a613a55613a5084613a2b565b613a35565b6130e6565b9050919050565b613a6a81613a3f565b82525050565b600060c082019050613a856000830189613276565b613a9260208301886131f9565b613a9f6040830187613a61565b613aac6060830186613a61565b613ab96080830185613276565b613ac660a08301846131f9565b979650505050505050565b600080600060608486031215613aea57613ae9612fa4565b5b6000613af886828701613545565b9350506020613b0986828701613545565b9250506040613b1a86828701613545565b9150509250925092565b6000613b2f826130e6565b9150613b3a836130e6565b9250828203905081811115613b5257613b51613652565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613bb460268361303f565b9150613bbf82613b58565b604082019050919050565b60006020820190508181036000830152613be381613ba7565b9050919050565b600081519050613bf981612fdb565b92915050565b600060208284031215613c1557613c14612fa4565b5b6000613c2384828501613bea565b91505092915050565b6000604082019050613c416000830185613276565b613c4e6020830184613276565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c8b60208361303f565b9150613c9682613c55565b602082019050919050565b60006020820190508181036000830152613cba81613c7e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613d1d60248361303f565b9150613d2882613cc1565b604082019050919050565b60006020820190508181036000830152613d4c81613d10565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613daf60228361303f565b9150613dba82613d53565b604082019050919050565b60006020820190508181036000830152613dde81613da2565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000613e1b601d8361303f565b9150613e2682613de5565b602082019050919050565b60006020820190508181036000830152613e4a81613e0e565b9050919050565b600081905092915050565b50565b6000613e6c600083613e51565b9150613e7782613e5c565b600082019050919050565b6000613e8d82613e5f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000613ef3603a8361303f565b9150613efe82613e97565b604082019050919050565b60006020820190508181036000830152613f2281613ee6565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613f5f601d8361303f565b9150613f6a82613f29565b602082019050919050565b60006020820190508181036000830152613f8e81613f52565b9050919050565b7f416d6f756e74206d757374206265206774203000000000000000000000000000600082015250565b6000613fcb60138361303f565b9150613fd682613f95565b602082019050919050565b60006020820190508181036000830152613ffa81613fbe565b9050919050565b7f54726164696e67206973206e6f74206f70656e20796574000000000000000000600082015250565b600061403760178361303f565b915061404282614001565b602082019050919050565b600060208201905081810360008301526140668161402a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140c960258361303f565b91506140d48261406d565b604082019050919050565b600060208201905081810360008301526140f8816140bc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061415b60238361303f565b9150614166826140ff565b604082019050919050565b6000602082019050818103600083015261418a8161414e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006141ed60268361303f565b91506141f882614191565b604082019050919050565b6000602082019050818103600083015261421c816141e0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4d61726b6574696e672077616c6c6574206e6f74207365740000000000000000600082015250565b60006142b760188361303f565b91506142c282614281565b602082019050919050565b600060208201905081810360008301526142e6816142aa565b9050919050565b7f5465616d2077616c6c6574206e6f742073657400000000000000000000000000600082015250565b600061432360138361303f565b915061432e826142ed565b602082019050919050565b6000602082019050818103600083015261435281614316565b9050919050565b7f54726561737572792077616c6c6574206e6f7420736574000000000000000000600082015250565b600061438f60178361303f565b915061439a82614359565b602082019050919050565b600060208201905081810360008301526143be81614382565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143fa81612fc9565b82525050565b600061440c83836143f1565b60208301905092915050565b6000602082019050919050565b6000614430826143c5565b61443a81856143d0565b9350614445836143e1565b8060005b8381101561447657815161445d8882614400565b975061446883614418565b925050600181019050614449565b5085935050505092915050565b600060a08201905061449860008301886131f9565b6144a56020830187613a61565b81810360408301526144b78186614425565b90506144c66060830185613276565b6144d360808301846131f9565b969550505050505056fea26469706673582212208e175aac27fb9baaa141a4edec2cb676aa56efdafcf8a23d99cd58c9a2e2903e64736f6c63430008130033

Deployed ByteCode Sourcemap

32633:11161:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43497:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6617:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8977:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42860:383;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7746:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43381;;;;;;;;;;;;;:::i;:::-;;9758:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40001:1241;;;;;;;;;;;;;:::i;:::-;;33393:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41795:148;;;;;;;;;;;;;:::i;:::-;;34482:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10428:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39258:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33819:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33254:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33290:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33429:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7917:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19484:103;;;;;;;;;;;;;:::i;:::-;;33217:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41951:901;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18843:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33729:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6836:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33362:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11169:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33703:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8250:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41250:537;;;:::i;:::-;;35939:564;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33763:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33322:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34024:107;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;35823:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8506:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33947:70;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;19742:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43251:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39617:376;;;;;;;;;;;;;:::i;:::-;;43497:257;18729:13;:11;:13::i;:::-;43591:4:::1;43573:23;;:6;:23;;::::0;43565:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43643:6;43636:23;;;43674:7;:5;:7::i;:::-;43703:6;43696:24;;;43729:4;43696:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43636:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43497:257:::0;:::o;6617:100::-;6671:13;6704:5;6697:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6617:100;:::o;8977:201::-;9060:4;9077:13;9093:12;:10;:12::i;:::-;9077:28;;9116:32;9125:5;9132:7;9141:6;9116:8;:32::i;:::-;9166:4;9159:11;;;8977:201;;;;:::o;42860:383::-;18729:13;:11;:13::i;:::-;43024:23:::1;43080:4;43069:8;43062:4;43050:9;:16;;;;:::i;:::-;:27;;;;:::i;:::-;:34;;;;:::i;:::-;43024:60;;43122:4;43103:15;:23;43095:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43189:46;;;;;;;;43203:9;43189:46;;;;43214:4;43189:46;;;;43220:8;43189:46;;;;43230:4;43189:46;;::::0;43173:13:::1;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43013:230;42860:383:::0;;;;:::o;7746:108::-;7807:7;7834:12;;7827:19;;7746:108;:::o;43381:::-;18729:13;:11;:13::i;:::-;43432:49:::1;43459:21;43440:7;:5;:7::i;:::-;43432:26;;;;:49;;;;:::i;:::-;43381:108::o:0;9758:261::-;9855:4;9872:15;9890:12;:10;:12::i;:::-;9872:30;;9913:38;9929:4;9935:7;9944:6;9913:15;:38::i;:::-;9962:27;9972:4;9978:2;9982:6;9962:9;:27::i;:::-;10007:4;10000:11;;;9758:261;;;;;:::o;40001:1241::-;18729:13;:11;:13::i;:::-;40107:22:::1;33637:4;40163:18;:27;;;40133:14;;:57;;;;:::i;:::-;40132:84;;;;:::i;:::-;40107:109;;40227:23;33637:4;40284:18;:28;;;40254:14;;:58;;;;:::i;:::-;40253:85;;;;:::i;:::-;40227:111;;40349:18;33637:4;40388:18;:23;;;40371:14;;:40;;;;:::i;:::-;40370:80;;;;:::i;:::-;40349:101;;40461:17;33637:4;40499:18;:22;;;40482:14;;:39;;;;:::i;:::-;40481:79;;;;:::i;:::-;40461:99;;40571:21;33637:4;40613:18;:27;;;40596:14;;:44;;;;:::i;:::-;40595:84;;;;:::i;:::-;40571:108;;40690:22;33637:4;40746:18;:27;;;40716:14;;:57;;;;:::i;:::-;40715:84;;;;:::i;:::-;40690:109;;40812:64;40822:12;:10;:12::i;:::-;40844:14;;;;;;;;;;;40861;40812:9;:64::i;:::-;40887:66;40897:12;:10;:12::i;:::-;40919:15;;;;;;;;;;;40937;40887:9;:66::i;:::-;40964:56;40974:12;:10;:12::i;:::-;40996:10;;;;;;;;;;;41009;40964:9;:56::i;:::-;41031:54;41041:12;:10;:12::i;:::-;41063:9;;;;;;;;;;;41075;41031;:54::i;:::-;41096:63;41106:12;:10;:12::i;:::-;41128:14;;;;;;;;;;;41145:13;41096:9;:63::i;:::-;41170:64;41180:12;:10;:12::i;:::-;41202:14;;;;;;;;;;;41219;41170:9;:64::i;:::-;40058:1184;;;;;;40001:1241::o:0;33393:29::-;;;;;;;;;;;;;:::o;41795:148::-;18729:13;:11;:13::i;:::-;41870:1:::1;41856:10;;:15;41848:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;41923:12;41910:10;:25;;;;41795:148::o:0;34482:93::-;34540:5;34565:2;34558:9;;34482:93;:::o;10428:238::-;10516:4;10533:13;10549:12;:10;:12::i;:::-;10533:28;;10572:64;10581:5;10588:7;10625:10;10597:25;10607:5;10614:7;10597:9;:25::i;:::-;:38;;;;:::i;:::-;10572:8;:64::i;:::-;10654:4;10647:11;;;10428:238;;;;:::o;39258:351::-;39354:18;;;;;;;;;;;39340:32;;:10;:32;;;39318:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;39470:1;39456:16;;:2;:16;;;39448:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39537:1;39527:6;:11;39519:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;39584:17;39590:2;39594:6;39584:5;:17::i;:::-;39258:351;;:::o;33819:38::-;;;;:::o;33254:29::-;;;;;;;;;;;;;:::o;33290:25::-;;;;;;;;;;;;;:::o;33429:29::-;;;;;;;;;;;;;:::o;7917:127::-;7991:7;8018:9;:18;8028:7;8018:18;;;;;;;;;;;;;;;;8011:25;;7917:127;;;:::o;19484:103::-;18729:13;:11;:13::i;:::-;19549:30:::1;19576:1;19549:18;:30::i;:::-;19484:103::o:0;33217:30::-;;;;;;;;;;;;;:::o;41951:901::-;18729:13;:11;:13::i;:::-;42260:16:::1;42242:15;;:34;;;;;;;;;;;;;;;;;;42300:11;42287:10;;:24;;;;;;;;;;;;;;;;;;42339:15;42322:14;;:32;;;;;;;;;;;;;;;;;;42386:19;42365:18;;:40;;;;;;;;;;;;;;;;;;42428:10;42416:9;;:22;;;;;;;;;;;;;;;;;;42466:15;42449:14;;:32;;;;;;;;;;;;;;;;;;42509:15;42492:14;;:32;;;;;;;;;;;;;;;;;;42569:4;42537:11;:29;42549:16;42537:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;42611:4;42584:11;:24;42596:11;42584:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;42657:4;42626:11;:28;42638:15;42626:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;42707:4;42672:11;:32;42684:19;42672:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;42748:4;42722:11;:23;42734:10;42722:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;42794:4;42763:11;:28;42775:15;42763:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;42840:4;42809:11;:28;42821:15;42809:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;41951:901:::0;;;;;;;:::o;18843:87::-;18889:7;18916:6;;;;;;;;;;;18909:13;;18843:87;:::o;33729:27::-;;;;:::o;6836:104::-;6892:13;6925:7;6918:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6836:104;:::o;33362:24::-;;;;;;;;;;;;;:::o;11169:436::-;11262:4;11279:13;11295:12;:10;:12::i;:::-;11279:28;;11318:24;11345:25;11355:5;11362:7;11345:9;:25::i;:::-;11318:52;;11409:15;11389:16;:35;;11381:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11502:60;11511:5;11518:7;11546:15;11527:16;:34;11502:8;:60::i;:::-;11593:4;11586:11;;;;11169:436;;;;:::o;33703:19::-;;;;;;;;;;;;;:::o;8250:193::-;8329:4;8346:13;8362:12;:10;:12::i;:::-;8346:28;;8385;8395:5;8402:2;8406:6;8385:9;:28::i;:::-;8431:4;8424:11;;;8250:193;;;;:::o;41250:537::-;18729:13;:11;:13::i;:::-;41313:23:::1;33637:4;41370:18;:28;;;41340:14;;:58;;;;:::i;:::-;41339:85;;;;:::i;:::-;41313:111;;41435:54;41444:12;:10;:12::i;:::-;41466:4;41473:15;41435:8;:54::i;:::-;41500:55;41510:12;:10;:12::i;:::-;41532:4;41539:15;41500:9;:55::i;:::-;41568:6;;;;;;;;;;;:22;;;41598:9;41631:4;41651:15;41681:1;41697::::0;41713:12:::1;:10;:12::i;:::-;41758:10;41740:15;:28;;;;:::i;:::-;41568:211;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41302:485;41250:537::o:0;35939:564::-;35985:7;36038:11;;36025:10;;:24;;;;:::i;:::-;36009:12;:40;36005:491;;36073:20;;36066:27;;;;36005:491;36126:23;36181:11;;36168:10;;:24;;;;:::i;:::-;36152:12;:41;;;;:::i;:::-;36126:67;;36208:18;33578:2;36229:15;:39;;;;:::i;:::-;36208:60;;36324:18;;36301:20;;:41;;;;:::i;:::-;36287:10;:55;36283:202;;36370:18;;36363:25;;;;;;36283:202;36459:10;36436:20;;:33;;;;:::i;:::-;36429:40;;;;35939:564;;:::o;33763:41::-;;;;:::o;33322:33::-;;;;;;;;;;;;;:::o;34024:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35823:108::-;35880:4;35904:11;:19;35916:6;35904:19;;;;;;;;;;;;;;;;;;;;;;;;;35897:26;;35823:108;;;:::o;8506:151::-;8595:7;8622:11;:18;8634:5;8622:18;;;;;;;;;;;;;;;:27;8641:7;8622:27;;;;;;;;;;;;;;;;8615:34;;8506:151;;;;:::o;33947:70::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19742:201::-;18729:13;:11;:13::i;:::-;19851:1:::1;19831:22;;:8;:22;;::::0;19823:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19907:28;19926:8;19907:18;:28::i;:::-;19742:201:::0;:::o;43251:122::-;18729:13;:11;:13::i;:::-;43357:8:::1;43335:11;:19;43347:6;43335:19;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;43251:122:::0;;:::o;39617:376::-;18729:13;:11;:13::i;:::-;39692:6:::1;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39674:46;;;39743:4;39763;39674:104;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39667:4;;:111;;;;;;;;;;;;;;;;;;39798:4;39791:20;;;39820:6;;;;;;;;;;;39829:17;39791:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39858:59;39875:4;39890:6;;;;;;;;;;;39899:17;39858:8;:59::i;:::-;39928:57;39945:4;39960;39967:17;39928:8;:57::i;:::-;39617:376::o:0;19008:132::-;19083:12;:10;:12::i;:::-;19072:23;;:7;:5;:7::i;:::-;:23;;;19064:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19008:132::o;4257:98::-;4310:7;4337:10;4330:17;;4257:98;:::o;15162:346::-;15281:1;15264:19;;:5;:19;;;15256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15362:1;15343:21;;:7;:21;;;15335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15446:6;15416:11;:18;15428:5;15416:18;;;;;;;;;;;;;;;:27;15435:7;15416:27;;;;;;;;;;;;;;;:36;;;;15484:7;15468:32;;15477:5;15468:32;;;15493:6;15468:32;;;;;;:::i;:::-;;;;;;;;15162:346;;;:::o;23034:317::-;23149:6;23124:21;:31;;23116:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23203:12;23221:9;:14;;23243:6;23221:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23202:52;;;23273:7;23265:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;23105:246;23034:317;;:::o;15799:419::-;15900:24;15927:25;15937:5;15944:7;15927:9;:25::i;:::-;15900:52;;15987:17;15967:16;:37;15963:248;;16049:6;16029:16;:26;;16021:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16133:51;16142:5;16149:7;16177:6;16158:16;:25;16133:8;:51::i;:::-;15963:248;15889:329;15799:419;;;:::o;34583:1205::-;34724:1;34715:6;:10;34707:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;34774:4;;;;;;;;;;;34766:12;;:4;:12;;;;:26;;;;;34788:4;;;;;;;;;;;34782:10;;:2;:10;;;;34766:26;34762:113;;;34809:33;34825:4;34831:2;34835:6;34809:15;:33::i;:::-;34857:7;;34762:113;34887:10;34908:4;;;;;;;;;;;34900:12;;:4;:12;;;34887:25;;34923:11;34943:4;;;;;;;;;;;34937:10;;:2;:10;;;34923:24;;34965:5;:24;;;;;34974:11;:15;34986:2;34974:15;;;;;;;;;;;;;;;;;;;;;;;;;34965:24;34964:59;;;;34995:6;:27;;;;;35005:11;:17;35017:4;35005:17;;;;;;;;;;;;;;;;;;;;;;;;;34995:27;34964:59;34960:146;;;35040:33;35056:4;35062:2;35066:6;35040:15;:33::i;:::-;35088:7;;;;34960:146;35122:5;35118:337;;;35165:1;35152:10;;:14;35144:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;35211:11;33637:4;35235:15;:13;:15::i;:::-;35226:6;:24;;;;:::i;:::-;35225:51;;;;:::i;:::-;35211:65;;35307:3;35291:12;;:19;;;;;;;:::i;:::-;;;;;;;;35327:41;35343:4;35357;35364:3;35327:15;:41::i;:::-;35383:39;35399:4;35405:2;35418:3;35409:6;:12;;;;:::i;:::-;35383:15;:39::i;:::-;35437:7;;;;;35118:337;35471:6;35467:314;;;35494:11;33637:4;35518:15;:13;:15::i;:::-;35509:6;:24;;;;:::i;:::-;35508:51;;;;:::i;:::-;35494:65;;35590:3;35574:12;;:19;;;;;;;:::i;:::-;;;;;;;;35610:41;35626:4;35640;35647:3;35610:15;:41::i;:::-;35666:28;35681:12;;35666:14;:28::i;:::-;35709:39;35725:4;35731:2;35744:3;35735:6;:12;;;;:::i;:::-;35709:15;:39::i;:::-;35763:7;;;;;35467:314;34696:1092;;34583:1205;;;;:::o;13168:548::-;13271:1;13252:21;;:7;:21;;;13244:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13322:49;13351:1;13355:7;13364:6;13322:20;:49::i;:::-;13400:6;13384:12;;:22;;;;;;;:::i;:::-;;;;;;;;13577:6;13555:9;:18;13565:7;13555:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;13631:7;13610:37;;13627:1;13610:37;;;13640:6;13610:37;;;;;;:::i;:::-;;;;;;;;13660:48;13688:1;13692:7;13701:6;13660:19;:48::i;:::-;13168:548;;:::o;20103:191::-;20177:16;20196:6;;;;;;;;;;;20177:25;;20222:8;20213:6;;:17;;;;;;;;;;;;;;;;;;20277:8;20246:40;;20267:8;20246:40;;;;;;;;;;;;20166:128;20103:191;:::o;12075:806::-;12188:1;12172:18;;:4;:18;;;12164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12265:1;12251:16;;:2;:16;;;12243:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12320:38;12341:4;12347:2;12351:6;12320:20;:38::i;:::-;12371:19;12393:9;:15;12403:4;12393:15;;;;;;;;;;;;;;;;12371:37;;12442:6;12427:11;:21;;12419:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12559:6;12545:11;:20;12527:9;:15;12537:4;12527:15;;;;;;;;;;;;;;;:38;;;;12762:6;12745:9;:13;12755:2;12745:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12812:2;12797:26;;12806:4;12797:26;;;12816:6;12797:26;;;;;;:::i;:::-;;;;;;;;12836:37;12856:4;12862:2;12866:6;12836:19;:37::i;:::-;12153:728;12075:806;;;:::o;36542:2675::-;36602:15;36620:24;36638:4;36620:9;:24::i;:::-;36602:42;;36655:21;36693:1;36679:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36655:40;;36724:4;36706;36711:1;36706:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36750:4;36740;36745:1;36740:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;36780:7;36771:6;:16;36767:38;;;36798:7;36789:16;;36767:38;36829:1;36820:6;:10;36816:2394;;;36877:6;36862:12;;:21;;;;:::i;:::-;36847:12;:36;;;;36942:22;33637:4;36977:13;:22;;;36968:6;:31;;;;:::i;:::-;36967:75;;;;:::i;:::-;36942:100;;37057:23;33637:4;37093:13;:23;;;37084:6;:32;;;;:::i;:::-;37083:76;;;;:::i;:::-;37057:102;;37174:18;33637:4;37205:13;:18;;;37196:6;:27;;;;:::i;:::-;37195:71;;;;:::i;:::-;37174:92;;37281:18;33637:4;37312:13;:18;;;37303:6;:27;;;;:::i;:::-;37302:71;;;;:::i;:::-;37281:92;;37476:18;37506:10;37497:6;:19;;;;:::i;:::-;37476:40;;37548:1;37535:10;:14;37531:1668;;;37679:1;37652:29;;:15;;;;;;;;;;;:29;;;37622:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;37798:1;37776:24;;:10;;;;;;;;;;;:24;;;37768:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;37899:1;37873:28;;:14;;;;;;;;;;;:28;;;37843:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;37989:25;38017:21;37989:49;;38059:6;;;;;;;;;;;:57;;;38139:10;38172:1;38196:4;38231;38277:10;38259:15;:28;;;;:::i;:::-;38059:247;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38327:20;38395:17;38350:21;:62;;;;:::i;:::-;38327:85;;38503:26;38588:10;38548:15;38533:12;:30;;;;:::i;:::-;38532:66;;;;:::i;:::-;38503:95;;38619:21;38694:10;38659;38644:12;:25;;;;:::i;:::-;38643:61;;;;:::i;:::-;38619:85;;38725:25;38808:10;38769:14;38754:12;:29;;;;:::i;:::-;38753:65;;;;:::i;:::-;38725:93;;38916:54;38951:18;38924:15;;;;;;;;;;;38916:34;;;;:54;;;;:::i;:::-;38989:44;39019:13;38997:10;;;;;;;;;;;38989:29;;;;:44;;;;:::i;:::-;39052:52;39086:17;39060:14;;;;;;;;;;;39052:33;;;;:52;;;;:::i;:::-;39125:58;39143:4;32758:6;39172:10;39125:9;:58::i;:::-;37551:1648;;;;;37531:1668;36832:2378;;;;;36816:2394;36591:2626;;36542:2675;:::o;16818:91::-;;;;:::o;17513:90::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:246::-;1537:1;1547:113;1561:6;1558:1;1555:13;1547:113;;;1646:1;1641:3;1637:11;1631:18;1627:1;1622:3;1618:11;1611:39;1583:2;1580:1;1576:10;1571:15;;1547:113;;;1694:1;1685:6;1680:3;1676:16;1669:27;1518:184;1456:246;;;:::o;1708:102::-;1749:6;1800:2;1796:7;1791:2;1784:5;1780:14;1776:28;1766:38;;1708:102;;;:::o;1816:377::-;1904:3;1932:39;1965:5;1932:39;:::i;:::-;1987:71;2051:6;2046:3;1987:71;:::i;:::-;1980:78;;2067:65;2125:6;2120:3;2113:4;2106:5;2102:16;2067:65;:::i;:::-;2157:29;2179:6;2157:29;:::i;:::-;2152:3;2148:39;2141:46;;1908:285;1816:377;;;;:::o;2199:313::-;2312:4;2350:2;2339:9;2335:18;2327:26;;2399:9;2393:4;2389:20;2385:1;2374:9;2370:17;2363:47;2427:78;2500:4;2491:6;2427:78;:::i;:::-;2419:86;;2199:313;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:765::-;3867:6;3875;3883;3891;3940:3;3928:9;3919:7;3915:23;3911:33;3908:120;;;3947:79;;:::i;:::-;3908:120;4067:1;4092:53;4137:7;4128:6;4117:9;4113:22;4092:53;:::i;:::-;4082:63;;4038:117;4194:2;4220:53;4265:7;4256:6;4245:9;4241:22;4220:53;:::i;:::-;4210:63;;4165:118;4322:2;4348:53;4393:7;4384:6;4373:9;4369:22;4348:53;:::i;:::-;4338:63;;4293:118;4450:2;4476:53;4521:7;4512:6;4501:9;4497:22;4476:53;:::i;:::-;4466:63;;4421:118;3781:765;;;;;;;:::o;4552:118::-;4639:24;4657:5;4639:24;:::i;:::-;4634:3;4627:37;4552:118;;:::o;4676:222::-;4769:4;4807:2;4796:9;4792:18;4784:26;;4820:71;4888:1;4877:9;4873:17;4864:6;4820:71;:::i;:::-;4676:222;;;;:::o;4904:619::-;4981:6;4989;4997;5046:2;5034:9;5025:7;5021:23;5017:32;5014:119;;;5052:79;;:::i;:::-;5014:119;5172:1;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5143:117;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;5427:2;5453:53;5498:7;5489:6;5478:9;5474:22;5453:53;:::i;:::-;5443:63;;5398:118;4904:619;;;;;:::o;5529:118::-;5616:24;5634:5;5616:24;:::i;:::-;5611:3;5604:37;5529:118;;:::o;5653:222::-;5746:4;5784:2;5773:9;5769:18;5761:26;;5797:71;5865:1;5854:9;5850:17;5841:6;5797:71;:::i;:::-;5653:222;;;;:::o;5881:86::-;5916:7;5956:4;5949:5;5945:16;5934:27;;5881:86;;;:::o;5973:112::-;6056:22;6072:5;6056:22;:::i;:::-;6051:3;6044:35;5973:112;;:::o;6091:214::-;6180:4;6218:2;6207:9;6203:18;6195:26;;6231:67;6295:1;6284:9;6280:17;6271:6;6231:67;:::i;:::-;6091:214;;;;:::o;6311:1203::-;6424:6;6432;6440;6448;6456;6464;6472;6521:3;6509:9;6500:7;6496:23;6492:33;6489:120;;;6528:79;;:::i;:::-;6489:120;6648:1;6673:53;6718:7;6709:6;6698:9;6694:22;6673:53;:::i;:::-;6663:63;;6619:117;6775:2;6801:53;6846:7;6837:6;6826:9;6822:22;6801:53;:::i;:::-;6791:63;;6746:118;6903:2;6929:53;6974:7;6965:6;6954:9;6950:22;6929:53;:::i;:::-;6919:63;;6874:118;7031:2;7057:53;7102:7;7093:6;7082:9;7078:22;7057:53;:::i;:::-;7047:63;;7002:118;7159:3;7186:53;7231:7;7222:6;7211:9;7207:22;7186:53;:::i;:::-;7176:63;;7130:119;7288:3;7315:53;7360:7;7351:6;7340:9;7336:22;7315:53;:::i;:::-;7305:63;;7259:119;7417:3;7444:53;7489:7;7480:6;7469:9;7465:22;7444:53;:::i;:::-;7434:63;;7388:119;6311:1203;;;;;;;;;;:::o;7520:886::-;7781:4;7819:3;7808:9;7804:19;7796:27;;7833:71;7901:1;7890:9;7886:17;7877:6;7833:71;:::i;:::-;7914:72;7982:2;7971:9;7967:18;7958:6;7914:72;:::i;:::-;7996;8064:2;8053:9;8049:18;8040:6;7996:72;:::i;:::-;8078;8146:2;8135:9;8131:18;8122:6;8078:72;:::i;:::-;8160:73;8228:3;8217:9;8213:19;8204:6;8160:73;:::i;:::-;8243;8311:3;8300:9;8296:19;8287:6;8243:73;:::i;:::-;8326;8394:3;8383:9;8379:19;8370:6;8326:73;:::i;:::-;7520:886;;;;;;;;;;:::o;8412:474::-;8480:6;8488;8537:2;8525:9;8516:7;8512:23;8508:32;8505:119;;;8543:79;;:::i;:::-;8505:119;8663:1;8688:53;8733:7;8724:6;8713:9;8709:22;8688:53;:::i;:::-;8678:63;;8634:117;8790:2;8816:53;8861:7;8852:6;8841:9;8837:22;8816:53;:::i;:::-;8806:63;;8761:118;8412:474;;;;;:::o;8892:553::-;9069:4;9107:3;9096:9;9092:19;9084:27;;9121:71;9189:1;9178:9;9174:17;9165:6;9121:71;:::i;:::-;9202:72;9270:2;9259:9;9255:18;9246:6;9202:72;:::i;:::-;9284;9352:2;9341:9;9337:18;9328:6;9284:72;:::i;:::-;9366;9434:2;9423:9;9419:18;9410:6;9366:72;:::i;:::-;8892:553;;;;;;;:::o;9451:116::-;9521:21;9536:5;9521:21;:::i;:::-;9514:5;9511:32;9501:60;;9557:1;9554;9547:12;9501:60;9451:116;:::o;9573:133::-;9616:5;9654:6;9641:20;9632:29;;9670:30;9694:5;9670:30;:::i;:::-;9573:133;;;;:::o;9712:468::-;9777:6;9785;9834:2;9822:9;9813:7;9809:23;9805:32;9802:119;;;9840:79;;:::i;:::-;9802:119;9960:1;9985:53;10030:7;10021:6;10010:9;10006:22;9985:53;:::i;:::-;9975:63;;9931:117;10087:2;10113:50;10155:7;10146:6;10135:9;10131:22;10113:50;:::i;:::-;10103:60;;10058:115;9712:468;;;;;:::o;10186:174::-;10326:26;10322:1;10314:6;10310:14;10303:50;10186:174;:::o;10366:366::-;10508:3;10529:67;10593:2;10588:3;10529:67;:::i;:::-;10522:74;;10605:93;10694:3;10605:93;:::i;:::-;10723:2;10718:3;10714:12;10707:19;;10366:366;;;:::o;10738:419::-;10904:4;10942:2;10931:9;10927:18;10919:26;;10991:9;10985:4;10981:20;10977:1;10966:9;10962:17;10955:47;11019:131;11145:4;11019:131;:::i;:::-;11011:139;;10738:419;;;:::o;11163:143::-;11220:5;11251:6;11245:13;11236:22;;11267:33;11294:5;11267:33;:::i;:::-;11163:143;;;;:::o;11312:351::-;11382:6;11431:2;11419:9;11410:7;11406:23;11402:32;11399:119;;;11437:79;;:::i;:::-;11399:119;11557:1;11582:64;11638:7;11629:6;11618:9;11614:22;11582:64;:::i;:::-;11572:74;;11528:128;11312:351;;;;:::o;11669:332::-;11790:4;11828:2;11817:9;11813:18;11805:26;;11841:71;11909:1;11898:9;11894:17;11885:6;11841:71;:::i;:::-;11922:72;11990:2;11979:9;11975:18;11966:6;11922:72;:::i;:::-;11669:332;;;;;:::o;12007:137::-;12061:5;12092:6;12086:13;12077:22;;12108:30;12132:5;12108:30;:::i;:::-;12007:137;;;;:::o;12150:345::-;12217:6;12266:2;12254:9;12245:7;12241:23;12237:32;12234:119;;;12272:79;;:::i;:::-;12234:119;12392:1;12417:61;12470:7;12461:6;12450:9;12446:22;12417:61;:::i;:::-;12407:71;;12363:125;12150:345;;;;:::o;12501:180::-;12549:77;12546:1;12539:88;12646:4;12643:1;12636:15;12670:4;12667:1;12660:15;12687:320;12731:6;12768:1;12762:4;12758:12;12748:22;;12815:1;12809:4;12805:12;12836:18;12826:81;;12892:4;12884:6;12880:17;12870:27;;12826:81;12954:2;12946:6;12943:14;12923:18;12920:38;12917:84;;12973:18;;:::i;:::-;12917:84;12738:269;12687:320;;;:::o;13013:180::-;13061:77;13058:1;13051:88;13158:4;13155:1;13148:15;13182:4;13179:1;13172:15;13199:191;13239:3;13258:20;13276:1;13258:20;:::i;:::-;13253:25;;13292:20;13310:1;13292:20;:::i;:::-;13287:25;;13335:1;13332;13328:9;13321:16;;13356:3;13353:1;13350:10;13347:36;;;13363:18;;:::i;:::-;13347:36;13199:191;;;;:::o;13396:181::-;13536:33;13532:1;13524:6;13520:14;13513:57;13396:181;:::o;13583:366::-;13725:3;13746:67;13810:2;13805:3;13746:67;:::i;:::-;13739:74;;13822:93;13911:3;13822:93;:::i;:::-;13940:2;13935:3;13931:12;13924:19;;13583:366;;;:::o;13955:419::-;14121:4;14159:2;14148:9;14144:18;14136:26;;14208:9;14202:4;14198:20;14194:1;14183:9;14179:17;14172:47;14236:131;14362:4;14236:131;:::i;:::-;14228:139;;13955:419;;;:::o;14380:410::-;14420:7;14443:20;14461:1;14443:20;:::i;:::-;14438:25;;14477:20;14495:1;14477:20;:::i;:::-;14472:25;;14532:1;14529;14525:9;14554:30;14572:11;14554:30;:::i;:::-;14543:41;;14733:1;14724:7;14720:15;14717:1;14714:22;14694:1;14687:9;14667:83;14644:139;;14763:18;;:::i;:::-;14644:139;14428:362;14380:410;;;;:::o;14796:180::-;14844:77;14841:1;14834:88;14941:4;14938:1;14931:15;14965:4;14962:1;14955:15;14982:185;15022:1;15039:20;15057:1;15039:20;:::i;:::-;15034:25;;15073:20;15091:1;15073:20;:::i;:::-;15068:25;;15112:1;15102:35;;15117:18;;:::i;:::-;15102:35;15159:1;15156;15152:9;15147:14;;14982:185;;;;:::o;15173:173::-;15313:25;15309:1;15301:6;15297:14;15290:49;15173:173;:::o;15352:366::-;15494:3;15515:67;15579:2;15574:3;15515:67;:::i;:::-;15508:74;;15591:93;15680:3;15591:93;:::i;:::-;15709:2;15704:3;15700:12;15693:19;;15352:366;;;:::o;15724:419::-;15890:4;15928:2;15917:9;15913:18;15905:26;;15977:9;15971:4;15967:20;15963:1;15952:9;15948:17;15941:47;16005:131;16131:4;16005:131;:::i;:::-;15997:139;;15724:419;;;:::o;16149:224::-;16289:34;16285:1;16277:6;16273:14;16266:58;16358:7;16353:2;16345:6;16341:15;16334:32;16149:224;:::o;16379:366::-;16521:3;16542:67;16606:2;16601:3;16542:67;:::i;:::-;16535:74;;16618:93;16707:3;16618:93;:::i;:::-;16736:2;16731:3;16727:12;16720:19;;16379:366;;;:::o;16751:419::-;16917:4;16955:2;16944:9;16940:18;16932:26;;17004:9;16998:4;16994:20;16990:1;16979:9;16975:17;16968:47;17032:131;17158:4;17032:131;:::i;:::-;17024:139;;16751:419;;;:::o;17176:181::-;17316:33;17312:1;17304:6;17300:14;17293:57;17176:181;:::o;17363:366::-;17505:3;17526:67;17590:2;17585:3;17526:67;:::i;:::-;17519:74;;17602:93;17691:3;17602:93;:::i;:::-;17720:2;17715:3;17711:12;17704:19;;17363:366;;;:::o;17735:419::-;17901:4;17939:2;17928:9;17924:18;17916:26;;17988:9;17982:4;17978:20;17974:1;17963:9;17959:17;17952:47;18016:131;18142:4;18016:131;:::i;:::-;18008:139;;17735:419;;;:::o;18160:180::-;18300:32;18296:1;18288:6;18284:14;18277:56;18160:180;:::o;18346:366::-;18488:3;18509:67;18573:2;18568:3;18509:67;:::i;:::-;18502:74;;18585:93;18674:3;18585:93;:::i;:::-;18703:2;18698:3;18694:12;18687:19;;18346:366;;;:::o;18718:419::-;18884:4;18922:2;18911:9;18907:18;18899:26;;18971:9;18965:4;18961:20;18957:1;18946:9;18942:17;18935:47;18999:131;19125:4;18999:131;:::i;:::-;18991:139;;18718:419;;;:::o;19143:224::-;19283:34;19279:1;19271:6;19267:14;19260:58;19352:7;19347:2;19339:6;19335:15;19328:32;19143:224;:::o;19373:366::-;19515:3;19536:67;19600:2;19595:3;19536:67;:::i;:::-;19529:74;;19612:93;19701:3;19612:93;:::i;:::-;19730:2;19725:3;19721:12;19714:19;;19373:366;;;:::o;19745:419::-;19911:4;19949:2;19938:9;19934:18;19926:26;;19998:9;19992:4;19988:20;19984:1;19973:9;19969:17;19962:47;20026:131;20152:4;20026:131;:::i;:::-;20018:139;;19745:419;;;:::o;20170:85::-;20215:7;20244:5;20233:16;;20170:85;;;:::o;20261:60::-;20289:3;20310:5;20303:12;;20261:60;;;:::o;20327:158::-;20385:9;20418:61;20436:42;20445:32;20471:5;20445:32;:::i;:::-;20436:42;:::i;:::-;20418:61;:::i;:::-;20405:74;;20327:158;;;:::o;20491:147::-;20586:45;20625:5;20586:45;:::i;:::-;20581:3;20574:58;20491:147;;:::o;20644:807::-;20893:4;20931:3;20920:9;20916:19;20908:27;;20945:71;21013:1;21002:9;20998:17;20989:6;20945:71;:::i;:::-;21026:72;21094:2;21083:9;21079:18;21070:6;21026:72;:::i;:::-;21108:80;21184:2;21173:9;21169:18;21160:6;21108:80;:::i;:::-;21198;21274:2;21263:9;21259:18;21250:6;21198:80;:::i;:::-;21288:73;21356:3;21345:9;21341:19;21332:6;21288:73;:::i;:::-;21371;21439:3;21428:9;21424:19;21415:6;21371:73;:::i;:::-;20644:807;;;;;;;;;:::o;21457:663::-;21545:6;21553;21561;21610:2;21598:9;21589:7;21585:23;21581:32;21578:119;;;21616:79;;:::i;:::-;21578:119;21736:1;21761:64;21817:7;21808:6;21797:9;21793:22;21761:64;:::i;:::-;21751:74;;21707:128;21874:2;21900:64;21956:7;21947:6;21936:9;21932:22;21900:64;:::i;:::-;21890:74;;21845:129;22013:2;22039:64;22095:7;22086:6;22075:9;22071:22;22039:64;:::i;:::-;22029:74;;21984:129;21457:663;;;;;:::o;22126:194::-;22166:4;22186:20;22204:1;22186:20;:::i;:::-;22181:25;;22220:20;22238:1;22220:20;:::i;:::-;22215:25;;22264:1;22261;22257:9;22249:17;;22288:1;22282:4;22279:11;22276:37;;;22293:18;;:::i;:::-;22276:37;22126:194;;;;:::o;22326:225::-;22466:34;22462:1;22454:6;22450:14;22443:58;22535:8;22530:2;22522:6;22518:15;22511:33;22326:225;:::o;22557:366::-;22699:3;22720:67;22784:2;22779:3;22720:67;:::i;:::-;22713:74;;22796:93;22885:3;22796:93;:::i;:::-;22914:2;22909:3;22905:12;22898:19;;22557:366;;;:::o;22929:419::-;23095:4;23133:2;23122:9;23118:18;23110:26;;23182:9;23176:4;23172:20;23168:1;23157:9;23153:17;23146:47;23210:131;23336:4;23210:131;:::i;:::-;23202:139;;22929:419;;;:::o;23354:143::-;23411:5;23442:6;23436:13;23427:22;;23458:33;23485:5;23458:33;:::i;:::-;23354:143;;;;:::o;23503:351::-;23573:6;23622:2;23610:9;23601:7;23597:23;23593:32;23590:119;;;23628:79;;:::i;:::-;23590:119;23748:1;23773:64;23829:7;23820:6;23809:9;23805:22;23773:64;:::i;:::-;23763:74;;23719:128;23503:351;;;;:::o;23860:332::-;23981:4;24019:2;24008:9;24004:18;23996:26;;24032:71;24100:1;24089:9;24085:17;24076:6;24032:71;:::i;:::-;24113:72;24181:2;24170:9;24166:18;24157:6;24113:72;:::i;:::-;23860:332;;;;;:::o;24198:182::-;24338:34;24334:1;24326:6;24322:14;24315:58;24198:182;:::o;24386:366::-;24528:3;24549:67;24613:2;24608:3;24549:67;:::i;:::-;24542:74;;24625:93;24714:3;24625:93;:::i;:::-;24743:2;24738:3;24734:12;24727:19;;24386:366;;;:::o;24758:419::-;24924:4;24962:2;24951:9;24947:18;24939:26;;25011:9;25005:4;25001:20;24997:1;24986:9;24982:17;24975:47;25039:131;25165:4;25039:131;:::i;:::-;25031:139;;24758:419;;;:::o;25183:223::-;25323:34;25319:1;25311:6;25307:14;25300:58;25392:6;25387:2;25379:6;25375:15;25368:31;25183:223;:::o;25412:366::-;25554:3;25575:67;25639:2;25634:3;25575:67;:::i;:::-;25568:74;;25651:93;25740:3;25651:93;:::i;:::-;25769:2;25764:3;25760:12;25753:19;;25412:366;;;:::o;25784:419::-;25950:4;25988:2;25977:9;25973:18;25965:26;;26037:9;26031:4;26027:20;26023:1;26012:9;26008:17;26001:47;26065:131;26191:4;26065:131;:::i;:::-;26057:139;;25784:419;;;:::o;26209:221::-;26349:34;26345:1;26337:6;26333:14;26326:58;26418:4;26413:2;26405:6;26401:15;26394:29;26209:221;:::o;26436:366::-;26578:3;26599:67;26663:2;26658:3;26599:67;:::i;:::-;26592:74;;26675:93;26764:3;26675:93;:::i;:::-;26793:2;26788:3;26784:12;26777:19;;26436:366;;;:::o;26808:419::-;26974:4;27012:2;27001:9;26997:18;26989:26;;27061:9;27055:4;27051:20;27047:1;27036:9;27032:17;27025:47;27089:131;27215:4;27089:131;:::i;:::-;27081:139;;26808:419;;;:::o;27233:179::-;27373:31;27369:1;27361:6;27357:14;27350:55;27233:179;:::o;27418:366::-;27560:3;27581:67;27645:2;27640:3;27581:67;:::i;:::-;27574:74;;27657:93;27746:3;27657:93;:::i;:::-;27775:2;27770:3;27766:12;27759:19;;27418:366;;;:::o;27790:419::-;27956:4;27994:2;27983:9;27979:18;27971:26;;28043:9;28037:4;28033:20;28029:1;28018:9;28014:17;28007:47;28071:131;28197:4;28071:131;:::i;:::-;28063:139;;27790:419;;;:::o;28215:147::-;28316:11;28353:3;28338:18;;28215:147;;;;:::o;28368:114::-;;:::o;28488:398::-;28647:3;28668:83;28749:1;28744:3;28668:83;:::i;:::-;28661:90;;28760:93;28849:3;28760:93;:::i;:::-;28878:1;28873:3;28869:11;28862:18;;28488:398;;;:::o;28892:379::-;29076:3;29098:147;29241:3;29098:147;:::i;:::-;29091:154;;29262:3;29255:10;;28892:379;;;:::o;29277:245::-;29417:34;29413:1;29405:6;29401:14;29394:58;29486:28;29481:2;29473:6;29469:15;29462:53;29277:245;:::o;29528:366::-;29670:3;29691:67;29755:2;29750:3;29691:67;:::i;:::-;29684:74;;29767:93;29856:3;29767:93;:::i;:::-;29885:2;29880:3;29876:12;29869:19;;29528:366;;;:::o;29900:419::-;30066:4;30104:2;30093:9;30089:18;30081:26;;30153:9;30147:4;30143:20;30139:1;30128:9;30124:17;30117:47;30181:131;30307:4;30181:131;:::i;:::-;30173:139;;29900:419;;;:::o;30325:179::-;30465:31;30461:1;30453:6;30449:14;30442:55;30325:179;:::o;30510:366::-;30652:3;30673:67;30737:2;30732:3;30673:67;:::i;:::-;30666:74;;30749:93;30838:3;30749:93;:::i;:::-;30867:2;30862:3;30858:12;30851:19;;30510:366;;;:::o;30882:419::-;31048:4;31086:2;31075:9;31071:18;31063:26;;31135:9;31129:4;31125:20;31121:1;31110:9;31106:17;31099:47;31163:131;31289:4;31163:131;:::i;:::-;31155:139;;30882:419;;;:::o;31307:169::-;31447:21;31443:1;31435:6;31431:14;31424:45;31307:169;:::o;31482:366::-;31624:3;31645:67;31709:2;31704:3;31645:67;:::i;:::-;31638:74;;31721:93;31810:3;31721:93;:::i;:::-;31839:2;31834:3;31830:12;31823:19;;31482:366;;;:::o;31854:419::-;32020:4;32058:2;32047:9;32043:18;32035:26;;32107:9;32101:4;32097:20;32093:1;32082:9;32078:17;32071:47;32135:131;32261:4;32135:131;:::i;:::-;32127:139;;31854:419;;;:::o;32279:173::-;32419:25;32415:1;32407:6;32403:14;32396:49;32279:173;:::o;32458:366::-;32600:3;32621:67;32685:2;32680:3;32621:67;:::i;:::-;32614:74;;32697:93;32786:3;32697:93;:::i;:::-;32815:2;32810:3;32806:12;32799:19;;32458:366;;;:::o;32830:419::-;32996:4;33034:2;33023:9;33019:18;33011:26;;33083:9;33077:4;33073:20;33069:1;33058:9;33054:17;33047:47;33111:131;33237:4;33111:131;:::i;:::-;33103:139;;32830:419;;;:::o;33255:224::-;33395:34;33391:1;33383:6;33379:14;33372:58;33464:7;33459:2;33451:6;33447:15;33440:32;33255:224;:::o;33485:366::-;33627:3;33648:67;33712:2;33707:3;33648:67;:::i;:::-;33641:74;;33724:93;33813:3;33724:93;:::i;:::-;33842:2;33837:3;33833:12;33826:19;;33485:366;;;:::o;33857:419::-;34023:4;34061:2;34050:9;34046:18;34038:26;;34110:9;34104:4;34100:20;34096:1;34085:9;34081:17;34074:47;34138:131;34264:4;34138:131;:::i;:::-;34130:139;;33857:419;;;:::o;34282:222::-;34422:34;34418:1;34410:6;34406:14;34399:58;34491:5;34486:2;34478:6;34474:15;34467:30;34282:222;:::o;34510:366::-;34652:3;34673:67;34737:2;34732:3;34673:67;:::i;:::-;34666:74;;34749:93;34838:3;34749:93;:::i;:::-;34867:2;34862:3;34858:12;34851:19;;34510:366;;;:::o;34882:419::-;35048:4;35086:2;35075:9;35071:18;35063:26;;35135:9;35129:4;35125:20;35121:1;35110:9;35106:17;35099:47;35163:131;35289:4;35163:131;:::i;:::-;35155:139;;34882:419;;;:::o;35307:225::-;35447:34;35443:1;35435:6;35431:14;35424:58;35516:8;35511:2;35503:6;35499:15;35492:33;35307:225;:::o;35538:366::-;35680:3;35701:67;35765:2;35760:3;35701:67;:::i;:::-;35694:74;;35777:93;35866:3;35777:93;:::i;:::-;35895:2;35890:3;35886:12;35879:19;;35538:366;;;:::o;35910:419::-;36076:4;36114:2;36103:9;36099:18;36091:26;;36163:9;36157:4;36153:20;36149:1;36138:9;36134:17;36127:47;36191:131;36317:4;36191:131;:::i;:::-;36183:139;;35910:419;;;:::o;36335:180::-;36383:77;36380:1;36373:88;36480:4;36477:1;36470:15;36504:4;36501:1;36494:15;36521:180;36569:77;36566:1;36559:88;36666:4;36663:1;36656:15;36690:4;36687:1;36680:15;36707:174;36847:26;36843:1;36835:6;36831:14;36824:50;36707:174;:::o;36887:366::-;37029:3;37050:67;37114:2;37109:3;37050:67;:::i;:::-;37043:74;;37126:93;37215:3;37126:93;:::i;:::-;37244:2;37239:3;37235:12;37228:19;;36887:366;;;:::o;37259:419::-;37425:4;37463:2;37452:9;37448:18;37440:26;;37512:9;37506:4;37502:20;37498:1;37487:9;37483:17;37476:47;37540:131;37666:4;37540:131;:::i;:::-;37532:139;;37259:419;;;:::o;37684:169::-;37824:21;37820:1;37812:6;37808:14;37801:45;37684:169;:::o;37859:366::-;38001:3;38022:67;38086:2;38081:3;38022:67;:::i;:::-;38015:74;;38098:93;38187:3;38098:93;:::i;:::-;38216:2;38211:3;38207:12;38200:19;;37859:366;;;:::o;38231:419::-;38397:4;38435:2;38424:9;38420:18;38412:26;;38484:9;38478:4;38474:20;38470:1;38459:9;38455:17;38448:47;38512:131;38638:4;38512:131;:::i;:::-;38504:139;;38231:419;;;:::o;38656:173::-;38796:25;38792:1;38784:6;38780:14;38773:49;38656:173;:::o;38835:366::-;38977:3;38998:67;39062:2;39057:3;38998:67;:::i;:::-;38991:74;;39074:93;39163:3;39074:93;:::i;:::-;39192:2;39187:3;39183:12;39176:19;;38835:366;;;:::o;39207:419::-;39373:4;39411:2;39400:9;39396:18;39388:26;;39460:9;39454:4;39450:20;39446:1;39435:9;39431:17;39424:47;39488:131;39614:4;39488:131;:::i;:::-;39480:139;;39207:419;;;:::o;39632:114::-;39699:6;39733:5;39727:12;39717:22;;39632:114;;;:::o;39752:184::-;39851:11;39885:6;39880:3;39873:19;39925:4;39920:3;39916:14;39901:29;;39752:184;;;;:::o;39942:132::-;40009:4;40032:3;40024:11;;40062:4;40057:3;40053:14;40045:22;;39942:132;;;:::o;40080:108::-;40157:24;40175:5;40157:24;:::i;:::-;40152:3;40145:37;40080:108;;:::o;40194:179::-;40263:10;40284:46;40326:3;40318:6;40284:46;:::i;:::-;40362:4;40357:3;40353:14;40339:28;;40194:179;;;;:::o;40379:113::-;40449:4;40481;40476:3;40472:14;40464:22;;40379:113;;;:::o;40528:732::-;40647:3;40676:54;40724:5;40676:54;:::i;:::-;40746:86;40825:6;40820:3;40746:86;:::i;:::-;40739:93;;40856:56;40906:5;40856:56;:::i;:::-;40935:7;40966:1;40951:284;40976:6;40973:1;40970:13;40951:284;;;41052:6;41046:13;41079:63;41138:3;41123:13;41079:63;:::i;:::-;41072:70;;41165:60;41218:6;41165:60;:::i;:::-;41155:70;;41011:224;40998:1;40995;40991:9;40986:14;;40951:284;;;40955:14;41251:3;41244:10;;40652:608;;;40528:732;;;;:::o;41266:831::-;41529:4;41567:3;41556:9;41552:19;41544:27;;41581:71;41649:1;41638:9;41634:17;41625:6;41581:71;:::i;:::-;41662:80;41738:2;41727:9;41723:18;41714:6;41662:80;:::i;:::-;41789:9;41783:4;41779:20;41774:2;41763:9;41759:18;41752:48;41817:108;41920:4;41911:6;41817:108;:::i;:::-;41809:116;;41935:72;42003:2;41992:9;41988:18;41979:6;41935:72;:::i;:::-;42017:73;42085:3;42074:9;42070:19;42061:6;42017:73;:::i;:::-;41266:831;;;;;;;;:::o

Metadata Hash

ipfs://8e175aac27fb9baaa141a4edec2cb676aa56efdafcf8a23d99cd58c9a2e2903e
Loading