ETH Price: $3,389.62 (+1.15%)

Token

PLAYSK8 (SK8NFT)
 

Overview

Max Total Supply

0 SK8NFT

Holders

1,241

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 SK8NFT
0x6a74ceaca94ccf6afa7d7e56d146b6f971f86ce9
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SK8NFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-08
*/

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: smart contracts/extensions/Adminable.sol



//RMTPSH

pragma solidity ^0.8.0;




contract Adminable is Context{

    address private _admin;



    event AdminshipTransferred(address indexed previousAdmin, address indexed newAdmin);



    /**

     * @dev Initializes the contract setting the deployer as the initial admin.

     */

    constructor() {

        _transferAdminship(_msgSender());

    }



    /**

     * @dev Returns the address of the current admin.

     */

    function admin() public view virtual returns (address) {

        return _admin;

    }



    /**

     * @dev Throws if called by any account other than the admin.

     */

    modifier onlyAdmin() {

        require(admin() == _msgSender(), "Caller is not the admin");

        _;

    }



    /**

     * @dev Leaves the contract without admin. It will not be possible to call

     * `onlyAdmin` functions anymore. Can only be called by the current admin.

     *

     * NOTE: Renouncing adminship will leave the contract without an admin,

     * thereby removing any functionality that is only available to the admin.

     */

    function renounceAdminship() public virtual onlyAdmin {

        _transferAdminship(address(0));

    }



    /**

     * @dev Transfers adminship of the contract to a new account (`newAdmin`).

     * Can only be called by the current admin.

     */

    function transferAdminship(address newAdmin) public virtual onlyAdmin {

        require(newAdmin != address(0), "New admin is the zero address");

        _transferAdminship(newAdmin);

    }



    /**

     * @dev Transfers adminship of the contract to a new account (`newAdmin`).

     * Internal function without access restriction.

     */

    function _transferAdminship(address newAdmin) internal virtual {

        address oldAdmin = _admin;

        _admin = newAdmin;

        emit AdminshipTransferred(oldAdmin, newAdmin);

    }

}
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol


// OpenZeppelin Contracts v4.4.1 (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
     * ====
     *
     * [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://diligence.consensys.net/posts/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.5.11/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 functionCall(target, data, "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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason 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 {
            // 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` 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 tokenId
    ) 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.
     * - `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 tokenId
    ) internal virtual {}
}

// File: smart contracts/client/sk8NFT_semiflat.sol



//RMTPSH

pragma solidity ^0.8.0;








contract SK8NFT is ERC721, Ownable, Adminable{



    constructor ()

        ERC721("PLAYSK8", "SK8NFT")

    {

        

        whitelist[msg.sender]=true;



        whitelist[0x45fd94ffc5F38F61Ff50E4EE134e2C87924aB6e1]=true;

        

            //start date of sale (if zero then sale is always active)

        startDate = 0;

        

            //current mint location pointer (start at 0 or 1)

        salePointer = 1;



            //total assets to be sold (final token ID)

        saleMax = 10000;

        

            //current mint max per address

        mintMax = 250;



    }



        //price (0.1)

    uint256 public price = 0;

    

        //price (0.1)

    uint256 public distPrice=0;



    address payable distReciever = payable(0x45fd94ffc5F38F61Ff50E4EE134e2C87924aB6e1);

    

        //start date of sale (if zero then sale is always active)

    uint256 startDate = 0;

    

        //current mint location pointer (start at 0 or 1)

    uint256 public salePointer = 1;



        //total assets to be sold (final token ID)

    uint256 saleMax;

    

        //current mint max per address

    uint256 mintMax;

    

        //minted

    mapping(address => uint8) public mintCount;

    

        //uri

    string public baseTokenURI;

    

        //whitelist toggle

    bool saleWhitelisted = true;



        //whitelist

    mapping(address => bool) public whitelist;



        //mint contract

    address payable mintContract;



        //mint

    function mint(uint8 amount) payable public{



            //req whitelist

        require((saleWhitelisted==false)||(whitelist[msg.sender]==true), "You are not on the whitelist");



            //verify amount

        require((amount!=0) && (salePointer+amount>salePointer), "Invalid mint quantity");



            //verify value

        require(msg.value>=price*amount, "Please send more ETH");

        

        

            //verify mint is not above max avail

        require(salePointer+amount<saleMax, "There are not that many available");

        

            //verify start date

        require(startDate==0||startDate<block.timestamp, "Sale not yet started");



            //set mint count

        mintCount[msg.sender]+=amount;



            //verify maxx

        require(mintCount[msg.sender]<=mintMax, "You may not mint this many");

                



        for(uint256 i = 0; i<amount; i++){

                //mint token

            _mint(msg.sender,salePointer);

                

                //increse pointer

            salePointer++;





        }



        distReciever.transfer(distPrice*amount);

    

    }



    function mintProxy(address buyer) public payable{

            //verify mint contract

        require(msg.sender==mintContract, "You can not use this function");



        _mint(buyer,salePointer);

        salePointer++;

    }







    //calls

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {

        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");



        return string(abi.encodePacked(baseTokenURI, uint2str(tokenId)));

        

        //return urilist[tokenId];

    }



    

        //admin

    

        //edit

    function editWhitelist(address payable[] memory users, bool whitelisted) external onlyAdmin{

        //itterate



        for(uint256 i=0;i<users.length;i++){

                //whitelist

            whitelist[users[i]]=whitelisted;

        }

    }



    function toggleWhitelist(bool whitelisted) external onlyAdmin{

        saleWhitelisted=whitelisted;

    }





    function changeStart(uint256 saleStart) public onlyAdmin{

            //set end date

        startDate=saleStart;

        

    }

        //set mint max 

        

    function setMintMax(uint256 newMintMax) public onlyAdmin{

        

            //change mint max

        mintMax = newMintMax;

        

    }

        //set sale max 

        

    function setSaleMax(uint256 newSaleMax) public onlyAdmin{

        

            //change mint max

        saleMax = newSaleMax;

        

    }

    

        //edit pointer 

        

    function setMintPointer(uint256 mintPointer) public onlyAdmin{

            //change mint max

        salePointer = mintPointer;

        

    }

    

        //set price

    function editPrice(uint256 newPrice) external onlyAdmin{

        price=newPrice;

    }

        //set dist price

    function editDistPrice(uint256 newDistPrice) external onlyAdmin{

        distPrice=newDistPrice;

    }



        //set minter

    function editDistReciever(address payable newDistReciever) external onlyAdmin{

        distReciever=newDistReciever;

    }

        //set minter

    function editMinter(address payable newMinter) external onlyAdmin{

        mintContract=newMinter;

    }



    

    function setTokenURI(string memory _tokenURI) public virtual {

        require(whitelist[msg.sender]==true, "User is not whitelisted");

        baseTokenURI=_tokenURI;

    }



    function widthdraw(uint256 amount, address payable reciever) public payable onlyAdmin{

        

            //widthdraw

        payable(reciever).transfer(amount);

    }

    

    //utils

     function uint2str(

      uint256 _i

    )

      internal

      pure

      returns (string memory str)

    {

        if (_i == 0)

        {

        return "0";

        }

        uint256 j = _i;

        uint256 length;

        while (j != 0)

        {

        length++;

        j /= 10;

        }

        bytes memory bstr = new bytes(length);

        uint256 k = length;

        j = _i;

        while (j != 0)

        {

        bstr[--k] = bytes1(uint8(48 + j % 10));

        j /= 10;

        }

        str = string(bstr);

    }





}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminshipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"saleStart","type":"uint256"}],"name":"changeStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDistPrice","type":"uint256"}],"name":"editDistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDistReciever","type":"address"}],"name":"editDistReciever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMinter","type":"address"}],"name":"editMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"editPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"users","type":"address[]"},{"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"editWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintCount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"}],"name":"mintProxy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceAdminship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salePointer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMintMax","type":"uint256"}],"name":"setMintMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintPointer","type":"uint256"}],"name":"setMintPointer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSaleMax","type":"uint256"}],"name":"setSaleMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"toggleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdminship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"reciever","type":"address"}],"name":"widthdraw","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052600060085560006009557345fd94ffc5f38f61ff50e4ee134e2c87924ab6e1600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600b556001600c556001601160006101000a81548160ff0219169083151502179055503480156200009557600080fd5b506040518060400160405280600781526020017f504c4159534b38000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f534b384e4654000000000000000000000000000000000000000000000000000081525081600090805190602001906200011a929190620003f5565b50806001908051906020019062000133929190620003f5565b505050620001566200014a6200026160201b60201c565b6200026960201b60201c565b620001766200016a6200026160201b60201c565b6200032f60201b60201c565b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260007345fd94ffc5f38f61ff50e4ee134e2c87924ab6e173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600b819055506001600c81905550612710600d8190555060fa600e819055506200050a565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2931ebb3d190545dcf6801c37aa686b74f2e1000e753d0fac6e471a2aa5a621360405160405180910390a35050565b8280546200040390620004a5565b90600052602060002090601f01602090048101928262000427576000855562000473565b82601f106200044257805160ff191683800117855562000473565b8280016001018555821562000473579182015b828111156200047257825182559160200191906001019062000455565b5b50905062000482919062000486565b5090565b5b80821115620004a157600081600090555060010162000487565b5090565b60006002820490506001821680620004be57607f821691505b60208210811415620004d557620004d4620004db565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61495b806200051a6000396000f3fe6080604052600436106102305760003560e01c8063936c5e9b1161012e578063b88d4fde116100ab578063e4adcb2d1161006f578063e4adcb2d146107e2578063e985e9c51461080b578063ed9ec88814610848578063f2fde38b14610885578063f851a440146108ae57610230565b8063b88d4fde146106ff578063c87b56dd14610728578063d1d5190c14610765578063d547cfb71461078e578063e0df5b6f146107b957610230565b8063a22a8b29116100f2578063a22a8b2914610630578063a22cb46514610659578063a377a10a14610682578063afc3cb49146106ab578063b2f590bd146106d457610230565b8063936c5e9b1461055d57806395d89b41146105865780639b19251a146105b15780639bed25d8146105ee578063a035b1fe1461060557610230565b806342842e0e116101bc578063715018a611610180578063715018a6146104ad57806380e3f1ad146104c4578063828e5251146104ed5780638da5cb5b14610509578063927ac44d1461053457610230565b806342842e0e146103c55780635be7cc16146103ee5780636352211e146104175780636ecd23061461045457806370a082311461047057610230565b8063187c701b11610203578063187c701b146103035780631952781e1461032e57806323b872dd1461035757806337d4dd89146103805780633c9b82a1146103a957610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906132d4565b6108d9565b6040516102699190613988565b60405180910390f35b34801561027e57600080fd5b506102876109bb565b60405161029491906139a3565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613377565b610a4d565b6040516102d19190613921565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc919061320b565b610ad2565b005b34801561030f57600080fd5b50610318610bea565b6040516103259190613d05565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190613377565b610bf0565b005b34801561036357600080fd5b5061037e600480360381019061037991906130f5565b610c76565b005b34801561038c57600080fd5b506103a760048036038101906103a29190613377565b610cd6565b005b6103c360048036038101906103be919061305b565b610d5c565b005b3480156103d157600080fd5b506103ec60048036038101906103e791906130f5565b610e13565b005b3480156103fa57600080fd5b506104156004803603810190610410919061305b565b610e33565b005b34801561042357600080fd5b5061043e60048036038101906104399190613377565b610f2b565b60405161044b9190613921565b60405180910390f35b61046e600480360381019061046991906133e4565b610fdd565b005b34801561047c57600080fd5b506104976004803603810190610492919061305b565b6113b3565b6040516104a49190613d05565b60405180910390f35b3480156104b957600080fd5b506104c261146b565b005b3480156104d057600080fd5b506104eb60048036038101906104e691906132a7565b6114f3565b005b610507600480360381019061050291906133a4565b61158c565b005b34801561051557600080fd5b5061051e611653565b60405161052b9190613921565b60405180910390f35b34801561054057600080fd5b5061055b6004803603810190610556919061324b565b61167d565b005b34801561056957600080fd5b50610584600480360381019061057f9190613088565b61178e565b005b34801561059257600080fd5b5061059b61184e565b6040516105a891906139a3565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d3919061305b565b6118e0565b6040516105e59190613988565b60405180910390f35b3480156105fa57600080fd5b50610603611900565b005b34801561061157600080fd5b5061061a611988565b6040516106279190613d05565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190613377565b61198e565b005b34801561066557600080fd5b50610680600480360381019061067b91906131cb565b611a14565b005b34801561068e57600080fd5b506106a960048036038101906106a49190613088565b611a2a565b005b3480156106b757600080fd5b506106d260048036038101906106cd9190613377565b611aea565b005b3480156106e057600080fd5b506106e9611b70565b6040516106f69190613d05565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190613148565b611b76565b005b34801561073457600080fd5b5061074f600480360381019061074a9190613377565b611bd8565b60405161075c91906139a3565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613377565b611c54565b005b34801561079a57600080fd5b506107a3611cda565b6040516107b091906139a3565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db919061332e565b611d68565b005b3480156107ee57600080fd5b5061080960048036038101906108049190613377565b611e15565b005b34801561081757600080fd5b50610832600480360381019061082d91906130b5565b611e9b565b60405161083f9190613988565b60405180910390f35b34801561085457600080fd5b5061086f600480360381019061086a919061305b565b611f2f565b60405161087c9190613d20565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a7919061305b565b611f4f565b005b3480156108ba57600080fd5b506108c3612047565b6040516108d09190613921565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b457506109b382612071565b5b9050919050565b6060600080546109ca90614091565b80601f01602080910402602001604051908101604052809291908181526020018280546109f690614091565b8015610a435780601f10610a1857610100808354040283529160200191610a43565b820191906000526020600020905b815481529060010190602001808311610a2657829003601f168201915b5050505050905090565b6000610a58826120db565b610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90613be5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610add82610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590613c85565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6d612147565b73ffffffffffffffffffffffffffffffffffffffff161480610b9c5750610b9b81610b96612147565b611e9b565b5b610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613b45565b60405180910390fd5b610be5838361214f565b505050565b600c5481565b610bf8612147565b73ffffffffffffffffffffffffffffffffffffffff16610c16612047565b73ffffffffffffffffffffffffffffffffffffffff1614610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6390613c65565b60405180910390fd5b80600c8190555050565b610c87610c81612147565b82612208565b610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd90613ca5565b60405180910390fd5b610cd18383836122e6565b505050565b610cde612147565b73ffffffffffffffffffffffffffffffffffffffff16610cfc612047565b73ffffffffffffffffffffffffffffffffffffffff1614610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4990613c65565b60405180910390fd5b80600d8190555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390613ce5565b60405180910390fd5b610df881600c5461254d565b600c6000815480929190610e0b906140f4565b919050555050565b610e2e83838360405180602001604052806000815250611b76565b505050565b610e3b612147565b73ffffffffffffffffffffffffffffffffffffffff16610e59612047565b73ffffffffffffffffffffffffffffffffffffffff1614610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690613c65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690613ac5565b60405180910390fd5b610f2881612727565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90613b85565b60405180910390fd5b80915050919050565b60001515601160009054906101000a900460ff161515148061104f575060011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b61108e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611085906139c5565b60405180910390fd5b60008160ff16141580156110b35750600c548160ff16600c546110b19190613e46565b115b6110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990613b25565b60405180910390fd5b8060ff166008546111039190613f04565b341015611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90613cc5565b60405180910390fd5b600d548160ff16600c546111599190613e46565b10611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119090613ba5565b60405180910390fd5b6000600b5414806111ab575042600b54105b6111ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e190613c45565b60405180910390fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166112459190613e9c565b92506101000a81548160ff021916908360ff160217905550600e54600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1611156112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e890613a65565b60405180910390fd5b60005b8160ff168110156113365761130b33600c5461254d565b600c600081548092919061131e906140f4565b9190505550808061132e906140f4565b9150506112f4565b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8260ff166009546113849190613f04565b9081150290604051600060405180830381858888f193505050501580156113af573d6000803e3d6000fd5b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b90613b65565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611473612147565b73ffffffffffffffffffffffffffffffffffffffff16611491611653565b73ffffffffffffffffffffffffffffffffffffffff16146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90613c05565b60405180910390fd5b6114f160006127ed565b565b6114fb612147565b73ffffffffffffffffffffffffffffffffffffffff16611519612047565b73ffffffffffffffffffffffffffffffffffffffff161461156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690613c65565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b611594612147565b73ffffffffffffffffffffffffffffffffffffffff166115b2612047565b73ffffffffffffffffffffffffffffffffffffffff1614611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90613c65565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561164e573d6000803e3d6000fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611685612147565b73ffffffffffffffffffffffffffffffffffffffff166116a3612047565b73ffffffffffffffffffffffffffffffffffffffff16146116f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f090613c65565b60405180910390fd5b60005b825181101561178957816012600085848151811061171d5761171c6141fb565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611781906140f4565b9150506116fc565b505050565b611796612147565b73ffffffffffffffffffffffffffffffffffffffff166117b4612047565b73ffffffffffffffffffffffffffffffffffffffff161461180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190613c65565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606001805461185d90614091565b80601f016020809104026020016040519081016040528092919081815260200182805461188990614091565b80156118d65780601f106118ab576101008083540402835291602001916118d6565b820191906000526020600020905b8154815290600101906020018083116118b957829003601f168201915b5050505050905090565b60126020528060005260406000206000915054906101000a900460ff1681565b611908612147565b73ffffffffffffffffffffffffffffffffffffffff16611926612047565b73ffffffffffffffffffffffffffffffffffffffff161461197c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197390613c65565b60405180910390fd5b6119866000612727565b565b60085481565b611996612147565b73ffffffffffffffffffffffffffffffffffffffff166119b4612047565b73ffffffffffffffffffffffffffffffffffffffff1614611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190613c65565b60405180910390fd5b8060088190555050565b611a26611a1f612147565b83836128b3565b5050565b611a32612147565b73ffffffffffffffffffffffffffffffffffffffff16611a50612047565b73ffffffffffffffffffffffffffffffffffffffff1614611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90613c65565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611af2612147565b73ffffffffffffffffffffffffffffffffffffffff16611b10612047565b73ffffffffffffffffffffffffffffffffffffffff1614611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90613c65565b60405180910390fd5b80600e8190555050565b60095481565b611b87611b81612147565b83612208565b611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd90613ca5565b60405180910390fd5b611bd284848484612a20565b50505050565b6060611be3826120db565b611c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1990613c25565b60405180910390fd5b6010611c2d83612a7c565b604051602001611c3e9291906138fd565b6040516020818303038152906040529050919050565b611c5c612147565b73ffffffffffffffffffffffffffffffffffffffff16611c7a612047565b73ffffffffffffffffffffffffffffffffffffffff1614611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790613c65565b60405180910390fd5b80600b8190555050565b60108054611ce790614091565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1390614091565b8015611d605780601f10611d3557610100808354040283529160200191611d60565b820191906000526020600020905b815481529060010190602001808311611d4357829003601f168201915b505050505081565b60011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df290613b05565b60405180910390fd5b8060109080519060200190611e11929190612da7565b5050565b611e1d612147565b73ffffffffffffffffffffffffffffffffffffffff16611e3b612047565b73ffffffffffffffffffffffffffffffffffffffff1614611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890613c65565b60405180910390fd5b8060098190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b611f57612147565b73ffffffffffffffffffffffffffffffffffffffff16611f75611653565b73ffffffffffffffffffffffffffffffffffffffff1614611fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc290613c05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203290613a05565b60405180910390fd5b612044816127ed565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121c283610f2b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612213826120db565b612252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224990613ae5565b60405180910390fd5b600061225d83610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122cc57508373ffffffffffffffffffffffffffffffffffffffff166122b484610a4d565b73ffffffffffffffffffffffffffffffffffffffff16145b806122dd57506122dc8185611e9b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661230682610f2b565b73ffffffffffffffffffffffffffffffffffffffff161461235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235390613a25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c390613a85565b60405180910390fd5b6123d7838383612be3565b6123e260008261214f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124329190613f5e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124899190613e46565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612548838383612be8565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b490613bc5565b60405180910390fd5b6125c6816120db565b15612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd90613a45565b60405180910390fd5b61261260008383612be3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126629190613e46565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461272360008383612be8565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2931ebb3d190545dcf6801c37aa686b74f2e1000e753d0fac6e471a2aa5a621360405160405180910390a35050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291990613aa5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a139190613988565b60405180910390a3505050565b612a2b8484846122e6565b612a3784848484612bed565b612a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6d906139e5565b60405180910390fd5b50505050565b60606000821415612ac4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bde565b600082905060005b60008214612af6578080612adf906140f4565b915050600a82612aef9190613ed3565b9150612acc565b60008167ffffffffffffffff811115612b1257612b1161422a565b5b6040519080825280601f01601f191660200182016040528015612b445781602001600182028036833780820191505090505b50905060008290508593505b60008414612bd657600a84612b65919061413d565b6030612b719190613e46565b60f81b8282612b7f90614067565b92508281518110612b9357612b926141fb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84612bcf9190613ed3565b9350612b50565b819450505050505b919050565b505050565b505050565b6000612c0e8473ffffffffffffffffffffffffffffffffffffffff16612d84565b15612d77578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c37612147565b8786866040518563ffffffff1660e01b8152600401612c59949392919061393c565b602060405180830381600087803b158015612c7357600080fd5b505af1925050508015612ca457506040513d601f19601f82011682018060405250810190612ca19190613301565b60015b612d27573d8060008114612cd4576040519150601f19603f3d011682016040523d82523d6000602084013e612cd9565b606091505b50600081511415612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d16906139e5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d7c565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612db390614091565b90600052602060002090601f016020900481019282612dd55760008555612e1c565b82601f10612dee57805160ff1916838001178555612e1c565b82800160010185558215612e1c579182015b82811115612e1b578251825591602001919060010190612e00565b5b509050612e299190612e2d565b5090565b5b80821115612e46576000816000905550600101612e2e565b5090565b6000612e5d612e5884613d60565b613d3b565b90508083825260208201905082856020860282011115612e8057612e7f61425e565b5b60005b85811015612eb05781612e968882612f53565b845260208401935060208301925050600181019050612e83565b5050509392505050565b6000612ecd612ec884613d8c565b613d3b565b905082815260208101848484011115612ee957612ee8614263565b5b612ef4848285614025565b509392505050565b6000612f0f612f0a84613dbd565b613d3b565b905082815260208101848484011115612f2b57612f2a614263565b5b612f36848285614025565b509392505050565b600081359050612f4d8161489b565b92915050565b600081359050612f62816148b2565b92915050565b600082601f830112612f7d57612f7c614259565b5b8135612f8d848260208601612e4a565b91505092915050565b600081359050612fa5816148c9565b92915050565b600081359050612fba816148e0565b92915050565b600081519050612fcf816148e0565b92915050565b600082601f830112612fea57612fe9614259565b5b8135612ffa848260208601612eba565b91505092915050565b600082601f83011261301857613017614259565b5b8135613028848260208601612efc565b91505092915050565b600081359050613040816148f7565b92915050565b6000813590506130558161490e565b92915050565b6000602082840312156130715761307061426d565b5b600061307f84828501612f3e565b91505092915050565b60006020828403121561309e5761309d61426d565b5b60006130ac84828501612f53565b91505092915050565b600080604083850312156130cc576130cb61426d565b5b60006130da85828601612f3e565b92505060206130eb85828601612f3e565b9150509250929050565b60008060006060848603121561310e5761310d61426d565b5b600061311c86828701612f3e565b935050602061312d86828701612f3e565b925050604061313e86828701613031565b9150509250925092565b600080600080608085870312156131625761316161426d565b5b600061317087828801612f3e565b945050602061318187828801612f3e565b935050604061319287828801613031565b925050606085013567ffffffffffffffff8111156131b3576131b2614268565b5b6131bf87828801612fd5565b91505092959194509250565b600080604083850312156131e2576131e161426d565b5b60006131f085828601612f3e565b925050602061320185828601612f96565b9150509250929050565b600080604083850312156132225761322161426d565b5b600061323085828601612f3e565b925050602061324185828601613031565b9150509250929050565b600080604083850312156132625761326161426d565b5b600083013567ffffffffffffffff8111156132805761327f614268565b5b61328c85828601612f68565b925050602061329d85828601612f96565b9150509250929050565b6000602082840312156132bd576132bc61426d565b5b60006132cb84828501612f96565b91505092915050565b6000602082840312156132ea576132e961426d565b5b60006132f884828501612fab565b91505092915050565b6000602082840312156133175761331661426d565b5b600061332584828501612fc0565b91505092915050565b6000602082840312156133445761334361426d565b5b600082013567ffffffffffffffff81111561336257613361614268565b5b61336e84828501613003565b91505092915050565b60006020828403121561338d5761338c61426d565b5b600061339b84828501613031565b91505092915050565b600080604083850312156133bb576133ba61426d565b5b60006133c985828601613031565b92505060206133da85828601612f53565b9150509250929050565b6000602082840312156133fa576133f961426d565b5b600061340884828501613046565b91505092915050565b61341a81613f92565b82525050565b61342981613fb6565b82525050565b600061343a82613e03565b6134448185613e19565b9350613454818560208601614034565b61345d81614272565b840191505092915050565b600061347382613e0e565b61347d8185613e2a565b935061348d818560208601614034565b61349681614272565b840191505092915050565b60006134ac82613e0e565b6134b68185613e3b565b93506134c6818560208601614034565b80840191505092915050565b600081546134df81614091565b6134e98186613e3b565b94506001821660008114613504576001811461351557613548565b60ff19831686528186019350613548565b61351e85613dee565b60005b8381101561354057815481890152600182019150602081019050613521565b838801955050505b50505092915050565b600061355e601c83613e2a565b915061356982614283565b602082019050919050565b6000613581603283613e2a565b915061358c826142ac565b604082019050919050565b60006135a4602683613e2a565b91506135af826142fb565b604082019050919050565b60006135c7602583613e2a565b91506135d28261434a565b604082019050919050565b60006135ea601c83613e2a565b91506135f582614399565b602082019050919050565b600061360d601a83613e2a565b9150613618826143c2565b602082019050919050565b6000613630602483613e2a565b915061363b826143eb565b604082019050919050565b6000613653601983613e2a565b915061365e8261443a565b602082019050919050565b6000613676601d83613e2a565b915061368182614463565b602082019050919050565b6000613699602c83613e2a565b91506136a48261448c565b604082019050919050565b60006136bc601783613e2a565b91506136c7826144db565b602082019050919050565b60006136df601583613e2a565b91506136ea82614504565b602082019050919050565b6000613702603883613e2a565b915061370d8261452d565b604082019050919050565b6000613725602a83613e2a565b91506137308261457c565b604082019050919050565b6000613748602983613e2a565b9150613753826145cb565b604082019050919050565b600061376b602183613e2a565b91506137768261461a565b604082019050919050565b600061378e602083613e2a565b915061379982614669565b602082019050919050565b60006137b1602c83613e2a565b91506137bc82614692565b604082019050919050565b60006137d4602083613e2a565b91506137df826146e1565b602082019050919050565b60006137f7602f83613e2a565b91506138028261470a565b604082019050919050565b600061381a601483613e2a565b915061382582614759565b602082019050919050565b600061383d601783613e2a565b915061384882614782565b602082019050919050565b6000613860602183613e2a565b915061386b826147ab565b604082019050919050565b6000613883603183613e2a565b915061388e826147fa565b604082019050919050565b60006138a6601483613e2a565b91506138b182614849565b602082019050919050565b60006138c9601d83613e2a565b91506138d482614872565b602082019050919050565b6138e88161400e565b82525050565b6138f781614018565b82525050565b600061390982856134d2565b915061391582846134a1565b91508190509392505050565b60006020820190506139366000830184613411565b92915050565b60006080820190506139516000830187613411565b61395e6020830186613411565b61396b60408301856138df565b818103606083015261397d818461342f565b905095945050505050565b600060208201905061399d6000830184613420565b92915050565b600060208201905081810360008301526139bd8184613468565b905092915050565b600060208201905081810360008301526139de81613551565b9050919050565b600060208201905081810360008301526139fe81613574565b9050919050565b60006020820190508181036000830152613a1e81613597565b9050919050565b60006020820190508181036000830152613a3e816135ba565b9050919050565b60006020820190508181036000830152613a5e816135dd565b9050919050565b60006020820190508181036000830152613a7e81613600565b9050919050565b60006020820190508181036000830152613a9e81613623565b9050919050565b60006020820190508181036000830152613abe81613646565b9050919050565b60006020820190508181036000830152613ade81613669565b9050919050565b60006020820190508181036000830152613afe8161368c565b9050919050565b60006020820190508181036000830152613b1e816136af565b9050919050565b60006020820190508181036000830152613b3e816136d2565b9050919050565b60006020820190508181036000830152613b5e816136f5565b9050919050565b60006020820190508181036000830152613b7e81613718565b9050919050565b60006020820190508181036000830152613b9e8161373b565b9050919050565b60006020820190508181036000830152613bbe8161375e565b9050919050565b60006020820190508181036000830152613bde81613781565b9050919050565b60006020820190508181036000830152613bfe816137a4565b9050919050565b60006020820190508181036000830152613c1e816137c7565b9050919050565b60006020820190508181036000830152613c3e816137ea565b9050919050565b60006020820190508181036000830152613c5e8161380d565b9050919050565b60006020820190508181036000830152613c7e81613830565b9050919050565b60006020820190508181036000830152613c9e81613853565b9050919050565b60006020820190508181036000830152613cbe81613876565b9050919050565b60006020820190508181036000830152613cde81613899565b9050919050565b60006020820190508181036000830152613cfe816138bc565b9050919050565b6000602082019050613d1a60008301846138df565b92915050565b6000602082019050613d3560008301846138ee565b92915050565b6000613d45613d56565b9050613d5182826140c3565b919050565b6000604051905090565b600067ffffffffffffffff821115613d7b57613d7a61422a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613da757613da661422a565b5b613db082614272565b9050602081019050919050565b600067ffffffffffffffff821115613dd857613dd761422a565b5b613de182614272565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e518261400e565b9150613e5c8361400e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e9157613e9061416e565b5b828201905092915050565b6000613ea782614018565b9150613eb283614018565b92508260ff03821115613ec857613ec761416e565b5b828201905092915050565b6000613ede8261400e565b9150613ee98361400e565b925082613ef957613ef861419d565b5b828204905092915050565b6000613f0f8261400e565b9150613f1a8361400e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5357613f5261416e565b5b828202905092915050565b6000613f698261400e565b9150613f748361400e565b925082821015613f8757613f8661416e565b5b828203905092915050565b6000613f9d82613fee565b9050919050565b6000613faf82613fee565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614052578082015181840152602081019050614037565b83811115614061576000848401525b50505050565b60006140728261400e565b915060008214156140865761408561416e565b5b600182039050919050565b600060028204905060018216806140a957607f821691505b602082108114156140bd576140bc6141cc565b5b50919050565b6140cc82614272565b810181811067ffffffffffffffff821117156140eb576140ea61422a565b5b80604052505050565b60006140ff8261400e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141325761413161416e565b5b600182019050919050565b60006141488261400e565b91506141538361400e565b9250826141635761416261419d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f596f7520617265206e6f74206f6e207468652077686974656c69737400000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f75206d6179206e6f74206d696e742074686973206d616e79000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e65772061646d696e20697320746865207a65726f2061646472657373000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f55736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f496e76616c6964206d696e74207175616e746974790000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f546865726520617265206e6f742074686174206d616e7920617661696c61626c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206e6f74207965742073746172746564000000000000000000000000600082015250565b7f43616c6c6572206973206e6f74207468652061646d696e000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f506c656173652073656e64206d6f726520455448000000000000000000000000600082015250565b7f596f752063616e206e6f742075736520746869732066756e6374696f6e000000600082015250565b6148a481613f92565b81146148af57600080fd5b50565b6148bb81613fa4565b81146148c657600080fd5b50565b6148d281613fb6565b81146148dd57600080fd5b50565b6148e981613fc2565b81146148f457600080fd5b50565b6149008161400e565b811461490b57600080fd5b50565b61491781614018565b811461492257600080fd5b5056fea26469706673582212203b2d5ed9e6d1b8d513af134dc254dd724a59b535b36b2c370d54ca625946403664736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102305760003560e01c8063936c5e9b1161012e578063b88d4fde116100ab578063e4adcb2d1161006f578063e4adcb2d146107e2578063e985e9c51461080b578063ed9ec88814610848578063f2fde38b14610885578063f851a440146108ae57610230565b8063b88d4fde146106ff578063c87b56dd14610728578063d1d5190c14610765578063d547cfb71461078e578063e0df5b6f146107b957610230565b8063a22a8b29116100f2578063a22a8b2914610630578063a22cb46514610659578063a377a10a14610682578063afc3cb49146106ab578063b2f590bd146106d457610230565b8063936c5e9b1461055d57806395d89b41146105865780639b19251a146105b15780639bed25d8146105ee578063a035b1fe1461060557610230565b806342842e0e116101bc578063715018a611610180578063715018a6146104ad57806380e3f1ad146104c4578063828e5251146104ed5780638da5cb5b14610509578063927ac44d1461053457610230565b806342842e0e146103c55780635be7cc16146103ee5780636352211e146104175780636ecd23061461045457806370a082311461047057610230565b8063187c701b11610203578063187c701b146103035780631952781e1461032e57806323b872dd1461035757806337d4dd89146103805780633c9b82a1146103a957610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906132d4565b6108d9565b6040516102699190613988565b60405180910390f35b34801561027e57600080fd5b506102876109bb565b60405161029491906139a3565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613377565b610a4d565b6040516102d19190613921565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc919061320b565b610ad2565b005b34801561030f57600080fd5b50610318610bea565b6040516103259190613d05565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190613377565b610bf0565b005b34801561036357600080fd5b5061037e600480360381019061037991906130f5565b610c76565b005b34801561038c57600080fd5b506103a760048036038101906103a29190613377565b610cd6565b005b6103c360048036038101906103be919061305b565b610d5c565b005b3480156103d157600080fd5b506103ec60048036038101906103e791906130f5565b610e13565b005b3480156103fa57600080fd5b506104156004803603810190610410919061305b565b610e33565b005b34801561042357600080fd5b5061043e60048036038101906104399190613377565b610f2b565b60405161044b9190613921565b60405180910390f35b61046e600480360381019061046991906133e4565b610fdd565b005b34801561047c57600080fd5b506104976004803603810190610492919061305b565b6113b3565b6040516104a49190613d05565b60405180910390f35b3480156104b957600080fd5b506104c261146b565b005b3480156104d057600080fd5b506104eb60048036038101906104e691906132a7565b6114f3565b005b610507600480360381019061050291906133a4565b61158c565b005b34801561051557600080fd5b5061051e611653565b60405161052b9190613921565b60405180910390f35b34801561054057600080fd5b5061055b6004803603810190610556919061324b565b61167d565b005b34801561056957600080fd5b50610584600480360381019061057f9190613088565b61178e565b005b34801561059257600080fd5b5061059b61184e565b6040516105a891906139a3565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d3919061305b565b6118e0565b6040516105e59190613988565b60405180910390f35b3480156105fa57600080fd5b50610603611900565b005b34801561061157600080fd5b5061061a611988565b6040516106279190613d05565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190613377565b61198e565b005b34801561066557600080fd5b50610680600480360381019061067b91906131cb565b611a14565b005b34801561068e57600080fd5b506106a960048036038101906106a49190613088565b611a2a565b005b3480156106b757600080fd5b506106d260048036038101906106cd9190613377565b611aea565b005b3480156106e057600080fd5b506106e9611b70565b6040516106f69190613d05565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190613148565b611b76565b005b34801561073457600080fd5b5061074f600480360381019061074a9190613377565b611bd8565b60405161075c91906139a3565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613377565b611c54565b005b34801561079a57600080fd5b506107a3611cda565b6040516107b091906139a3565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db919061332e565b611d68565b005b3480156107ee57600080fd5b5061080960048036038101906108049190613377565b611e15565b005b34801561081757600080fd5b50610832600480360381019061082d91906130b5565b611e9b565b60405161083f9190613988565b60405180910390f35b34801561085457600080fd5b5061086f600480360381019061086a919061305b565b611f2f565b60405161087c9190613d20565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a7919061305b565b611f4f565b005b3480156108ba57600080fd5b506108c3612047565b6040516108d09190613921565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b457506109b382612071565b5b9050919050565b6060600080546109ca90614091565b80601f01602080910402602001604051908101604052809291908181526020018280546109f690614091565b8015610a435780601f10610a1857610100808354040283529160200191610a43565b820191906000526020600020905b815481529060010190602001808311610a2657829003601f168201915b5050505050905090565b6000610a58826120db565b610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90613be5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610add82610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590613c85565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6d612147565b73ffffffffffffffffffffffffffffffffffffffff161480610b9c5750610b9b81610b96612147565b611e9b565b5b610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613b45565b60405180910390fd5b610be5838361214f565b505050565b600c5481565b610bf8612147565b73ffffffffffffffffffffffffffffffffffffffff16610c16612047565b73ffffffffffffffffffffffffffffffffffffffff1614610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6390613c65565b60405180910390fd5b80600c8190555050565b610c87610c81612147565b82612208565b610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd90613ca5565b60405180910390fd5b610cd18383836122e6565b505050565b610cde612147565b73ffffffffffffffffffffffffffffffffffffffff16610cfc612047565b73ffffffffffffffffffffffffffffffffffffffff1614610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4990613c65565b60405180910390fd5b80600d8190555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390613ce5565b60405180910390fd5b610df881600c5461254d565b600c6000815480929190610e0b906140f4565b919050555050565b610e2e83838360405180602001604052806000815250611b76565b505050565b610e3b612147565b73ffffffffffffffffffffffffffffffffffffffff16610e59612047565b73ffffffffffffffffffffffffffffffffffffffff1614610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690613c65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690613ac5565b60405180910390fd5b610f2881612727565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90613b85565b60405180910390fd5b80915050919050565b60001515601160009054906101000a900460ff161515148061104f575060011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b61108e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611085906139c5565b60405180910390fd5b60008160ff16141580156110b35750600c548160ff16600c546110b19190613e46565b115b6110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990613b25565b60405180910390fd5b8060ff166008546111039190613f04565b341015611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90613cc5565b60405180910390fd5b600d548160ff16600c546111599190613e46565b10611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119090613ba5565b60405180910390fd5b6000600b5414806111ab575042600b54105b6111ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e190613c45565b60405180910390fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166112459190613e9c565b92506101000a81548160ff021916908360ff160217905550600e54600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1611156112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e890613a65565b60405180910390fd5b60005b8160ff168110156113365761130b33600c5461254d565b600c600081548092919061131e906140f4565b9190505550808061132e906140f4565b9150506112f4565b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8260ff166009546113849190613f04565b9081150290604051600060405180830381858888f193505050501580156113af573d6000803e3d6000fd5b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b90613b65565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611473612147565b73ffffffffffffffffffffffffffffffffffffffff16611491611653565b73ffffffffffffffffffffffffffffffffffffffff16146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90613c05565b60405180910390fd5b6114f160006127ed565b565b6114fb612147565b73ffffffffffffffffffffffffffffffffffffffff16611519612047565b73ffffffffffffffffffffffffffffffffffffffff161461156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690613c65565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b611594612147565b73ffffffffffffffffffffffffffffffffffffffff166115b2612047565b73ffffffffffffffffffffffffffffffffffffffff1614611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90613c65565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561164e573d6000803e3d6000fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611685612147565b73ffffffffffffffffffffffffffffffffffffffff166116a3612047565b73ffffffffffffffffffffffffffffffffffffffff16146116f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f090613c65565b60405180910390fd5b60005b825181101561178957816012600085848151811061171d5761171c6141fb565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611781906140f4565b9150506116fc565b505050565b611796612147565b73ffffffffffffffffffffffffffffffffffffffff166117b4612047565b73ffffffffffffffffffffffffffffffffffffffff161461180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190613c65565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606001805461185d90614091565b80601f016020809104026020016040519081016040528092919081815260200182805461188990614091565b80156118d65780601f106118ab576101008083540402835291602001916118d6565b820191906000526020600020905b8154815290600101906020018083116118b957829003601f168201915b5050505050905090565b60126020528060005260406000206000915054906101000a900460ff1681565b611908612147565b73ffffffffffffffffffffffffffffffffffffffff16611926612047565b73ffffffffffffffffffffffffffffffffffffffff161461197c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197390613c65565b60405180910390fd5b6119866000612727565b565b60085481565b611996612147565b73ffffffffffffffffffffffffffffffffffffffff166119b4612047565b73ffffffffffffffffffffffffffffffffffffffff1614611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190613c65565b60405180910390fd5b8060088190555050565b611a26611a1f612147565b83836128b3565b5050565b611a32612147565b73ffffffffffffffffffffffffffffffffffffffff16611a50612047565b73ffffffffffffffffffffffffffffffffffffffff1614611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90613c65565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611af2612147565b73ffffffffffffffffffffffffffffffffffffffff16611b10612047565b73ffffffffffffffffffffffffffffffffffffffff1614611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90613c65565b60405180910390fd5b80600e8190555050565b60095481565b611b87611b81612147565b83612208565b611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd90613ca5565b60405180910390fd5b611bd284848484612a20565b50505050565b6060611be3826120db565b611c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1990613c25565b60405180910390fd5b6010611c2d83612a7c565b604051602001611c3e9291906138fd565b6040516020818303038152906040529050919050565b611c5c612147565b73ffffffffffffffffffffffffffffffffffffffff16611c7a612047565b73ffffffffffffffffffffffffffffffffffffffff1614611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790613c65565b60405180910390fd5b80600b8190555050565b60108054611ce790614091565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1390614091565b8015611d605780601f10611d3557610100808354040283529160200191611d60565b820191906000526020600020905b815481529060010190602001808311611d4357829003601f168201915b505050505081565b60011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df290613b05565b60405180910390fd5b8060109080519060200190611e11929190612da7565b5050565b611e1d612147565b73ffffffffffffffffffffffffffffffffffffffff16611e3b612047565b73ffffffffffffffffffffffffffffffffffffffff1614611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890613c65565b60405180910390fd5b8060098190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b611f57612147565b73ffffffffffffffffffffffffffffffffffffffff16611f75611653565b73ffffffffffffffffffffffffffffffffffffffff1614611fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc290613c05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203290613a05565b60405180910390fd5b612044816127ed565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121c283610f2b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612213826120db565b612252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224990613ae5565b60405180910390fd5b600061225d83610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122cc57508373ffffffffffffffffffffffffffffffffffffffff166122b484610a4d565b73ffffffffffffffffffffffffffffffffffffffff16145b806122dd57506122dc8185611e9b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661230682610f2b565b73ffffffffffffffffffffffffffffffffffffffff161461235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235390613a25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c390613a85565b60405180910390fd5b6123d7838383612be3565b6123e260008261214f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124329190613f5e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124899190613e46565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612548838383612be8565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b490613bc5565b60405180910390fd5b6125c6816120db565b15612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd90613a45565b60405180910390fd5b61261260008383612be3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126629190613e46565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461272360008383612be8565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2931ebb3d190545dcf6801c37aa686b74f2e1000e753d0fac6e471a2aa5a621360405160405180910390a35050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291990613aa5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a139190613988565b60405180910390a3505050565b612a2b8484846122e6565b612a3784848484612bed565b612a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6d906139e5565b60405180910390fd5b50505050565b60606000821415612ac4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bde565b600082905060005b60008214612af6578080612adf906140f4565b915050600a82612aef9190613ed3565b9150612acc565b60008167ffffffffffffffff811115612b1257612b1161422a565b5b6040519080825280601f01601f191660200182016040528015612b445781602001600182028036833780820191505090505b50905060008290508593505b60008414612bd657600a84612b65919061413d565b6030612b719190613e46565b60f81b8282612b7f90614067565b92508281518110612b9357612b926141fb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84612bcf9190613ed3565b9350612b50565b819450505050505b919050565b505050565b505050565b6000612c0e8473ffffffffffffffffffffffffffffffffffffffff16612d84565b15612d77578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c37612147565b8786866040518563ffffffff1660e01b8152600401612c59949392919061393c565b602060405180830381600087803b158015612c7357600080fd5b505af1925050508015612ca457506040513d601f19601f82011682018060405250810190612ca19190613301565b60015b612d27573d8060008114612cd4576040519150601f19603f3d011682016040523d82523d6000602084013e612cd9565b606091505b50600081511415612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d16906139e5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d7c565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612db390614091565b90600052602060002090601f016020900481019282612dd55760008555612e1c565b82601f10612dee57805160ff1916838001178555612e1c565b82800160010185558215612e1c579182015b82811115612e1b578251825591602001919060010190612e00565b5b509050612e299190612e2d565b5090565b5b80821115612e46576000816000905550600101612e2e565b5090565b6000612e5d612e5884613d60565b613d3b565b90508083825260208201905082856020860282011115612e8057612e7f61425e565b5b60005b85811015612eb05781612e968882612f53565b845260208401935060208301925050600181019050612e83565b5050509392505050565b6000612ecd612ec884613d8c565b613d3b565b905082815260208101848484011115612ee957612ee8614263565b5b612ef4848285614025565b509392505050565b6000612f0f612f0a84613dbd565b613d3b565b905082815260208101848484011115612f2b57612f2a614263565b5b612f36848285614025565b509392505050565b600081359050612f4d8161489b565b92915050565b600081359050612f62816148b2565b92915050565b600082601f830112612f7d57612f7c614259565b5b8135612f8d848260208601612e4a565b91505092915050565b600081359050612fa5816148c9565b92915050565b600081359050612fba816148e0565b92915050565b600081519050612fcf816148e0565b92915050565b600082601f830112612fea57612fe9614259565b5b8135612ffa848260208601612eba565b91505092915050565b600082601f83011261301857613017614259565b5b8135613028848260208601612efc565b91505092915050565b600081359050613040816148f7565b92915050565b6000813590506130558161490e565b92915050565b6000602082840312156130715761307061426d565b5b600061307f84828501612f3e565b91505092915050565b60006020828403121561309e5761309d61426d565b5b60006130ac84828501612f53565b91505092915050565b600080604083850312156130cc576130cb61426d565b5b60006130da85828601612f3e565b92505060206130eb85828601612f3e565b9150509250929050565b60008060006060848603121561310e5761310d61426d565b5b600061311c86828701612f3e565b935050602061312d86828701612f3e565b925050604061313e86828701613031565b9150509250925092565b600080600080608085870312156131625761316161426d565b5b600061317087828801612f3e565b945050602061318187828801612f3e565b935050604061319287828801613031565b925050606085013567ffffffffffffffff8111156131b3576131b2614268565b5b6131bf87828801612fd5565b91505092959194509250565b600080604083850312156131e2576131e161426d565b5b60006131f085828601612f3e565b925050602061320185828601612f96565b9150509250929050565b600080604083850312156132225761322161426d565b5b600061323085828601612f3e565b925050602061324185828601613031565b9150509250929050565b600080604083850312156132625761326161426d565b5b600083013567ffffffffffffffff8111156132805761327f614268565b5b61328c85828601612f68565b925050602061329d85828601612f96565b9150509250929050565b6000602082840312156132bd576132bc61426d565b5b60006132cb84828501612f96565b91505092915050565b6000602082840312156132ea576132e961426d565b5b60006132f884828501612fab565b91505092915050565b6000602082840312156133175761331661426d565b5b600061332584828501612fc0565b91505092915050565b6000602082840312156133445761334361426d565b5b600082013567ffffffffffffffff81111561336257613361614268565b5b61336e84828501613003565b91505092915050565b60006020828403121561338d5761338c61426d565b5b600061339b84828501613031565b91505092915050565b600080604083850312156133bb576133ba61426d565b5b60006133c985828601613031565b92505060206133da85828601612f53565b9150509250929050565b6000602082840312156133fa576133f961426d565b5b600061340884828501613046565b91505092915050565b61341a81613f92565b82525050565b61342981613fb6565b82525050565b600061343a82613e03565b6134448185613e19565b9350613454818560208601614034565b61345d81614272565b840191505092915050565b600061347382613e0e565b61347d8185613e2a565b935061348d818560208601614034565b61349681614272565b840191505092915050565b60006134ac82613e0e565b6134b68185613e3b565b93506134c6818560208601614034565b80840191505092915050565b600081546134df81614091565b6134e98186613e3b565b94506001821660008114613504576001811461351557613548565b60ff19831686528186019350613548565b61351e85613dee565b60005b8381101561354057815481890152600182019150602081019050613521565b838801955050505b50505092915050565b600061355e601c83613e2a565b915061356982614283565b602082019050919050565b6000613581603283613e2a565b915061358c826142ac565b604082019050919050565b60006135a4602683613e2a565b91506135af826142fb565b604082019050919050565b60006135c7602583613e2a565b91506135d28261434a565b604082019050919050565b60006135ea601c83613e2a565b91506135f582614399565b602082019050919050565b600061360d601a83613e2a565b9150613618826143c2565b602082019050919050565b6000613630602483613e2a565b915061363b826143eb565b604082019050919050565b6000613653601983613e2a565b915061365e8261443a565b602082019050919050565b6000613676601d83613e2a565b915061368182614463565b602082019050919050565b6000613699602c83613e2a565b91506136a48261448c565b604082019050919050565b60006136bc601783613e2a565b91506136c7826144db565b602082019050919050565b60006136df601583613e2a565b91506136ea82614504565b602082019050919050565b6000613702603883613e2a565b915061370d8261452d565b604082019050919050565b6000613725602a83613e2a565b91506137308261457c565b604082019050919050565b6000613748602983613e2a565b9150613753826145cb565b604082019050919050565b600061376b602183613e2a565b91506137768261461a565b604082019050919050565b600061378e602083613e2a565b915061379982614669565b602082019050919050565b60006137b1602c83613e2a565b91506137bc82614692565b604082019050919050565b60006137d4602083613e2a565b91506137df826146e1565b602082019050919050565b60006137f7602f83613e2a565b91506138028261470a565b604082019050919050565b600061381a601483613e2a565b915061382582614759565b602082019050919050565b600061383d601783613e2a565b915061384882614782565b602082019050919050565b6000613860602183613e2a565b915061386b826147ab565b604082019050919050565b6000613883603183613e2a565b915061388e826147fa565b604082019050919050565b60006138a6601483613e2a565b91506138b182614849565b602082019050919050565b60006138c9601d83613e2a565b91506138d482614872565b602082019050919050565b6138e88161400e565b82525050565b6138f781614018565b82525050565b600061390982856134d2565b915061391582846134a1565b91508190509392505050565b60006020820190506139366000830184613411565b92915050565b60006080820190506139516000830187613411565b61395e6020830186613411565b61396b60408301856138df565b818103606083015261397d818461342f565b905095945050505050565b600060208201905061399d6000830184613420565b92915050565b600060208201905081810360008301526139bd8184613468565b905092915050565b600060208201905081810360008301526139de81613551565b9050919050565b600060208201905081810360008301526139fe81613574565b9050919050565b60006020820190508181036000830152613a1e81613597565b9050919050565b60006020820190508181036000830152613a3e816135ba565b9050919050565b60006020820190508181036000830152613a5e816135dd565b9050919050565b60006020820190508181036000830152613a7e81613600565b9050919050565b60006020820190508181036000830152613a9e81613623565b9050919050565b60006020820190508181036000830152613abe81613646565b9050919050565b60006020820190508181036000830152613ade81613669565b9050919050565b60006020820190508181036000830152613afe8161368c565b9050919050565b60006020820190508181036000830152613b1e816136af565b9050919050565b60006020820190508181036000830152613b3e816136d2565b9050919050565b60006020820190508181036000830152613b5e816136f5565b9050919050565b60006020820190508181036000830152613b7e81613718565b9050919050565b60006020820190508181036000830152613b9e8161373b565b9050919050565b60006020820190508181036000830152613bbe8161375e565b9050919050565b60006020820190508181036000830152613bde81613781565b9050919050565b60006020820190508181036000830152613bfe816137a4565b9050919050565b60006020820190508181036000830152613c1e816137c7565b9050919050565b60006020820190508181036000830152613c3e816137ea565b9050919050565b60006020820190508181036000830152613c5e8161380d565b9050919050565b60006020820190508181036000830152613c7e81613830565b9050919050565b60006020820190508181036000830152613c9e81613853565b9050919050565b60006020820190508181036000830152613cbe81613876565b9050919050565b60006020820190508181036000830152613cde81613899565b9050919050565b60006020820190508181036000830152613cfe816138bc565b9050919050565b6000602082019050613d1a60008301846138df565b92915050565b6000602082019050613d3560008301846138ee565b92915050565b6000613d45613d56565b9050613d5182826140c3565b919050565b6000604051905090565b600067ffffffffffffffff821115613d7b57613d7a61422a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613da757613da661422a565b5b613db082614272565b9050602081019050919050565b600067ffffffffffffffff821115613dd857613dd761422a565b5b613de182614272565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e518261400e565b9150613e5c8361400e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e9157613e9061416e565b5b828201905092915050565b6000613ea782614018565b9150613eb283614018565b92508260ff03821115613ec857613ec761416e565b5b828201905092915050565b6000613ede8261400e565b9150613ee98361400e565b925082613ef957613ef861419d565b5b828204905092915050565b6000613f0f8261400e565b9150613f1a8361400e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5357613f5261416e565b5b828202905092915050565b6000613f698261400e565b9150613f748361400e565b925082821015613f8757613f8661416e565b5b828203905092915050565b6000613f9d82613fee565b9050919050565b6000613faf82613fee565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614052578082015181840152602081019050614037565b83811115614061576000848401525b50505050565b60006140728261400e565b915060008214156140865761408561416e565b5b600182039050919050565b600060028204905060018216806140a957607f821691505b602082108114156140bd576140bc6141cc565b5b50919050565b6140cc82614272565b810181811067ffffffffffffffff821117156140eb576140ea61422a565b5b80604052505050565b60006140ff8261400e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141325761413161416e565b5b600182019050919050565b60006141488261400e565b91506141538361400e565b9250826141635761416261419d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f596f7520617265206e6f74206f6e207468652077686974656c69737400000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f75206d6179206e6f74206d696e742074686973206d616e79000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e65772061646d696e20697320746865207a65726f2061646472657373000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f55736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f496e76616c6964206d696e74207175616e746974790000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f546865726520617265206e6f742074686174206d616e7920617661696c61626c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206e6f74207965742073746172746564000000000000000000000000600082015250565b7f43616c6c6572206973206e6f74207468652061646d696e000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f506c656173652073656e64206d6f726520455448000000000000000000000000600082015250565b7f596f752063616e206e6f742075736520746869732066756e6374696f6e000000600082015250565b6148a481613f92565b81146148af57600080fd5b50565b6148bb81613fa4565b81146148c657600080fd5b50565b6148d281613fb6565b81146148dd57600080fd5b50565b6148e981613fc2565b81146148f457600080fd5b50565b6149008161400e565b811461490b57600080fd5b50565b61491781614018565b811461492257600080fd5b5056fea26469706673582212203b2d5ed9e6d1b8d513af134dc254dd724a59b535b36b2c370d54ca625946403664736f6c63430008070033

Deployed Bytecode Sourcemap

39910:6329:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26683:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27628:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29188:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28711:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40968:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44456:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29938:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44245:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42789:242;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30348:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4613:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27322:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41543:1234;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27052:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6955:103;;;;;;;;;;;;;:::i;:::-;;43728:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45405:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6304:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43449:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45081:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27797:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41403:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4339:107;;;;;;;;;;;;;:::i;:::-;;40596:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44649:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29481:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44921:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44042:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40662:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30604:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43066:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43855:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41267:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45211:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44777:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29707:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41191:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7213:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3659:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26683:305;26785:4;26837:25;26822:40;;;:11;:40;;;;:105;;;;26894:33;26879:48;;;:11;:48;;;;26822:105;:158;;;;26944:36;26968:11;26944:23;:36::i;:::-;26822:158;26802:178;;26683:305;;;:::o;27628:100::-;27682:13;27715:5;27708:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27628:100;:::o;29188:221::-;29264:7;29292:16;29300:7;29292;:16::i;:::-;29284:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29377:15;:24;29393:7;29377:24;;;;;;;;;;;;;;;;;;;;;29370:31;;29188:221;;;:::o;28711:411::-;28792:13;28808:23;28823:7;28808:14;:23::i;:::-;28792:39;;28856:5;28850:11;;:2;:11;;;;28842:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28950:5;28934:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28959:37;28976:5;28983:12;:10;:12::i;:::-;28959:16;:37::i;:::-;28934:62;28912:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29093:21;29102:2;29106:7;29093:8;:21::i;:::-;28781:341;28711:411;;:::o;40968:30::-;;;;:::o;44456:154::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44577:11:::1;44563;:25;;;;44456:154:::0;:::o;29938:339::-;30133:41;30152:12;:10;:12::i;:::-;30166:7;30133:18;:41::i;:::-;30125:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30241:28;30251:4;30257:2;30261:7;30241:9;:28::i;:::-;29938:339;;;:::o;44245:156::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44369:10:::1;44359:7;:20;;;;44245:156:::0;:::o;42789:242::-;42908:12;;;;;;;;;;;42896:24;;:10;:24;;;42888:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42971:24;42977:5;42983:11;;42971:5;:24::i;:::-;43008:11;;:13;;;;;;;;;:::i;:::-;;;;;;42789:242;:::o;30348:185::-;30486:39;30503:4;30509:2;30513:7;30486:39;;;;;;;;;;;;:16;:39::i;:::-;30348:185;;;:::o;4613:198::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;4724:1:::1;4704:22;;:8;:22;;;;4696:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4773:28;4792:8;4773:18;:28::i;:::-;4613:198:::0;:::o;27322:239::-;27394:7;27414:13;27430:7;:16;27438:7;27430:16;;;;;;;;;;;;;;;;;;;;;27414:32;;27482:1;27465:19;;:5;:19;;;;27457:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27548:5;27541:12;;;27322:239;;;:::o;41543:1234::-;41659:5;41642:22;;:15;;;;;;;;;;;:22;;;41641:55;;;;41691:4;41668:27;;:9;:21;41678:10;41668:21;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;41641:55;41633:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;41794:1;41786:6;:9;;;;41785:47;;;;;41820:11;;41813:6;41801:18;;:11;;:18;;;;:::i;:::-;:30;41785:47;41777:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;41930:6;41924:12;;:5;;:12;;;;:::i;:::-;41913:9;:23;;41905:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;42077:7;;42070:6;42058:18;;:11;;:18;;;;:::i;:::-;:26;42050:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;42201:1;42190:9;;:12;:39;;;;42214:15;42204:9;;:25;42190:39;42182:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;42326:6;42303:9;:21;42313:10;42303:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42409:7;;42386:9;:21;42396:10;42386:21;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;42378:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42488:9;42484:220;42505:6;42503:8;;:1;:8;42484:220;;;42566:29;42572:10;42583:11;;42566:5;:29::i;:::-;42669:11;;:13;;;;;;;;;:::i;:::-;;;;;;42513:3;;;;;:::i;:::-;;;;42484:220;;;;42720:12;;;;;;;;;;;:21;;:39;42752:6;42742:16;;:9;;:16;;;;:::i;:::-;42720:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41543:1234;:::o;27052:208::-;27124:7;27169:1;27152:19;;:5;:19;;;;27144:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27236:9;:16;27246:5;27236:16;;;;;;;;;;;;;;;;27229:23;;27052:208;;;:::o;6955:103::-;6535:12;:10;:12::i;:::-;6524:23;;:7;:5;:7::i;:::-;:23;;;6516:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7020:30:::1;7047:1;7020:18;:30::i;:::-;6955:103::o:0;43728:111::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43818:11:::1;43802:15;;:27;;;;;;;;;;;;;;;;;;43728:111:::0;:::o;45405:181::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45550:8:::1;45542:26;;:34;45569:6;45542:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45405:181:::0;;:::o;6304:87::-;6350:7;6377:6;;;;;;;;;;;6370:13;;6304:87;:::o;43449:267::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43583:9:::1;43579:128;43597:5;:12;43595:1;:14;43579:128;;;43682:11;43662:9;:19;43672:5;43678:1;43672:8;;;;;;;;:::i;:::-;;;;;;;;43662:19;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;43610:3;;;;;:::i;:::-;;;;43579:128;;;;43449:267:::0;;:::o;45081:110::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45172:9:::1;45159:12;;:22;;;;;;;;;;;;;;;;;;45081:110:::0;:::o;27797:104::-;27853:13;27886:7;27879:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27797:104;:::o;41403:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;4339:107::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;4406:30:::1;4433:1;4406:18;:30::i;:::-;4339:107::o:0;40596:24::-;;;;:::o;44649:92::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44723:8:::1;44717:5;:14;;;;44649:92:::0;:::o;29481:155::-;29576:52;29595:12;:10;:12::i;:::-;29609:8;29619;29576:18;:52::i;:::-;29481:155;;:::o;44921:128::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45024:15:::1;45011:12;;:28;;;;;;;;;;;;;;;;;;44921:128:::0;:::o;44042:156::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44166:10:::1;44156:7;:20;;;;44042:156:::0;:::o;40662:26::-;;;;:::o;30604:328::-;30779:41;30798:12;:10;:12::i;:::-;30812:7;30779:18;:41::i;:::-;30771:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30885:39;30899:4;30905:2;30909:7;30918:5;30885:13;:39::i;:::-;30604:328;;;;:::o;43066:318::-;43139:13;43175:16;43183:7;43175;:16::i;:::-;43167:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43291:12;43305:17;43314:7;43305:8;:17::i;:::-;43274:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43260:64;;43066:318;;;:::o;43855:140::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43964:9:::1;43954;:19;;;;43855:140:::0;:::o;41267:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45211:182::-;45316:4;45293:27;;:9;:21;45303:10;45293:21;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;45285:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45374:9;45361:12;:22;;;;;;;;;;;;:::i;:::-;;45211:182;:::o;44777:108::-;3906:12;:10;:12::i;:::-;3895:23;;:7;:5;:7::i;:::-;:23;;;3887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44863:12:::1;44853:9;:22;;;;44777:108:::0;:::o;29707:164::-;29804:4;29828:18;:25;29847:5;29828:25;;;;;;;;;;;;;;;:35;29854:8;29828:35;;;;;;;;;;;;;;;;;;;;;;;;;29821:42;;29707:164;;;;:::o;41191:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;7213:201::-;6535:12;:10;:12::i;:::-;6524:23;;:7;:5;:7::i;:::-;:23;;;6516:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7322:1:::1;7302:22;;:8;:22;;;;7294:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7378:28;7397:8;7378:18;:28::i;:::-;7213:201:::0;:::o;3659:91::-;3705:7;3734:6;;;;;;;;;;;3727:13;;3659:91;:::o;19293:157::-;19378:4;19417:25;19402:40;;;:11;:40;;;;19395:47;;19293:157;;;:::o;32442:127::-;32507:4;32559:1;32531:30;;:7;:16;32539:7;32531:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32524:37;;32442:127;;;:::o;2909:98::-;2962:7;2989:10;2982:17;;2909:98;:::o;36588:174::-;36690:2;36663:15;:24;36679:7;36663:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36746:7;36742:2;36708:46;;36717:23;36732:7;36717:14;:23::i;:::-;36708:46;;;;;;;;;;;;36588:174;;:::o;32736:348::-;32829:4;32854:16;32862:7;32854;:16::i;:::-;32846:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32930:13;32946:23;32961:7;32946:14;:23::i;:::-;32930:39;;32999:5;32988:16;;:7;:16;;;:51;;;;33032:7;33008:31;;:20;33020:7;33008:11;:20::i;:::-;:31;;;32988:51;:87;;;;33043:32;33060:5;33067:7;33043:16;:32::i;:::-;32988:87;32980:96;;;32736:348;;;;:::o;35845:625::-;36004:4;35977:31;;:23;35992:7;35977:14;:23::i;:::-;:31;;;35969:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36083:1;36069:16;;:2;:16;;;;36061:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36139:39;36160:4;36166:2;36170:7;36139:20;:39::i;:::-;36243:29;36260:1;36264:7;36243:8;:29::i;:::-;36304:1;36285:9;:15;36295:4;36285:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36333:1;36316:9;:13;36326:2;36316:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36364:2;36345:7;:16;36353:7;36345:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36403:7;36399:2;36384:27;;36393:4;36384:27;;;;;;;;;;;;36424:38;36444:4;36450:2;36454:7;36424:19;:38::i;:::-;35845:625;;;:::o;34420:439::-;34514:1;34500:16;;:2;:16;;;;34492:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34573:16;34581:7;34573;:16::i;:::-;34572:17;34564:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34635:45;34664:1;34668:2;34672:7;34635:20;:45::i;:::-;34710:1;34693:9;:13;34703:2;34693:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34741:2;34722:7;:16;34730:7;34722:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34786:7;34782:2;34761:33;;34778:1;34761:33;;;;;;;;;;;;34807:44;34835:1;34839:2;34843:7;34807:19;:44::i;:::-;34420:439;;:::o;4983:199::-;5059:16;5078:6;;;;;;;;;;;5059:25;;5106:8;5097:6;;:17;;;;;;;;;;;;;;;;;;5163:8;5132:40;;5153:8;5132:40;;;;;;;;;;;;5046:136;4983:199;:::o;7574:191::-;7648:16;7667:6;;;;;;;;;;;7648:25;;7693:8;7684:6;;:17;;;;;;;;;;;;;;;;;;7748:8;7717:40;;7738:8;7717:40;;;;;;;;;;;;7637:128;7574:191;:::o;36904:315::-;37059:8;37050:17;;:5;:17;;;;37042:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37146:8;37108:18;:25;37127:5;37108:25;;;;;;;;;;;;;;;:35;37134:8;37108:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37192:8;37170:41;;37185:5;37170:41;;;37202:8;37170:41;;;;;;:::i;:::-;;;;;;;;36904:315;;;:::o;31814:::-;31971:28;31981:4;31987:2;31991:7;31971:9;:28::i;:::-;32018:48;32041:4;32047:2;32051:7;32060:5;32018:22;:48::i;:::-;32010:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31814:315;;;;:::o;45618:608::-;45716:17;45765:1;45759:2;:7;45755:61;;;45792:10;;;;;;;;;;;;;;;;;;;;;45755:61;45828:9;45840:2;45828:14;;45855;45882:81;45894:1;45889;:6;45882:81;;45921:8;;;;;:::i;:::-;;;;45947:2;45942:7;;;;;:::i;:::-;;;45882:81;;;45975:17;46005:6;45995:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45975:37;;46025:9;46037:6;46025:18;;46060:2;46056:6;;46075:111;46087:1;46082;:6;46075:111;;46148:2;46144:1;:6;;;;:::i;:::-;46139:2;:11;;;;:::i;:::-;46126:26;;46114:4;46119:3;;;;:::i;:::-;;;;46114:9;;;;;;;;:::i;:::-;;;;;:38;;;;;;;;;;;46170:2;46165:7;;;;;:::i;:::-;;;46075:111;;;46211:4;46198:18;;45742:484;;;;45618:608;;;;:::o;39155:126::-;;;;:::o;39666:125::-;;;;:::o;37784:799::-;37939:4;37960:15;:2;:13;;;:15::i;:::-;37956:620;;;38012:2;37996:36;;;38033:12;:10;:12::i;:::-;38047:4;38053:7;38062:5;37996:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37992:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38255:1;38238:6;:13;:18;38234:272;;;38281:60;;;;;;;;;;:::i;:::-;;;;;;;;38234:272;38456:6;38450:13;38441:6;38437:2;38433:15;38426:38;37992:529;38129:41;;;38119:51;;;:6;:51;;;;38112:58;;;;;37956:620;38560:4;38553:11;;37784:799;;;;;;;:::o;9043:326::-;9103:4;9360:1;9338:7;:19;;;:23;9331:30;;9043:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;32:746:1:-;136:5;161:89;177:72;242:6;177:72;:::i;:::-;161:89;:::i;:::-;152:98;;270:5;299:6;292:5;285:21;333:4;326:5;322:16;315:23;;359:6;409:3;401:4;393:6;389:17;384:3;380:27;377:36;374:143;;;428:79;;:::i;:::-;374:143;541:1;526:246;551:6;548:1;545:13;526:246;;;619:3;648:45;689:3;677:10;648:45;:::i;:::-;643:3;636:58;723:4;718:3;714:14;707:21;;757:4;752:3;748:14;741:21;;586:186;573:1;570;566:9;561:14;;526:246;;;530:14;142:636;;32:746;;;;;:::o;784:410::-;861:5;886:65;902:48;943:6;902:48;:::i;:::-;886:65;:::i;:::-;877:74;;974:6;967:5;960:21;1012:4;1005:5;1001:16;1050:3;1041:6;1036:3;1032:16;1029:25;1026:112;;;1057:79;;:::i;:::-;1026:112;1147:41;1181:6;1176:3;1171;1147:41;:::i;:::-;867:327;784:410;;;;;:::o;1200:412::-;1278:5;1303:66;1319:49;1361:6;1319:49;:::i;:::-;1303:66;:::i;:::-;1294:75;;1392:6;1385:5;1378:21;1430:4;1423:5;1419:16;1468:3;1459:6;1454:3;1450:16;1447:25;1444:112;;;1475:79;;:::i;:::-;1444:112;1565:41;1599:6;1594:3;1589;1565:41;:::i;:::-;1284:328;1200:412;;;;;:::o;1618:139::-;1664:5;1702:6;1689:20;1680:29;;1718:33;1745:5;1718:33;:::i;:::-;1618:139;;;;:::o;1763:155::-;1817:5;1855:6;1842:20;1833:29;;1871:41;1906:5;1871:41;:::i;:::-;1763:155;;;;:::o;1949:386::-;2028:5;2077:3;2070:4;2062:6;2058:17;2054:27;2044:122;;2085:79;;:::i;:::-;2044:122;2202:6;2189:20;2227:102;2325:3;2317:6;2310:4;2302:6;2298:17;2227:102;:::i;:::-;2218:111;;2034:301;1949:386;;;;:::o;2341:133::-;2384:5;2422:6;2409:20;2400:29;;2438:30;2462:5;2438:30;:::i;:::-;2341:133;;;;:::o;2480:137::-;2525:5;2563:6;2550:20;2541:29;;2579:32;2605:5;2579:32;:::i;:::-;2480:137;;;;:::o;2623:141::-;2679:5;2710:6;2704:13;2695:22;;2726:32;2752:5;2726:32;:::i;:::-;2623:141;;;;:::o;2783:338::-;2838:5;2887:3;2880:4;2872:6;2868:17;2864:27;2854:122;;2895:79;;:::i;:::-;2854:122;3012:6;2999:20;3037:78;3111:3;3103:6;3096:4;3088:6;3084:17;3037:78;:::i;:::-;3028:87;;2844:277;2783:338;;;;:::o;3141:340::-;3197:5;3246:3;3239:4;3231:6;3227:17;3223:27;3213:122;;3254:79;;:::i;:::-;3213:122;3371:6;3358:20;3396:79;3471:3;3463:6;3456:4;3448:6;3444:17;3396:79;:::i;:::-;3387:88;;3203:278;3141:340;;;;:::o;3487:139::-;3533:5;3571:6;3558:20;3549:29;;3587:33;3614:5;3587:33;:::i;:::-;3487:139;;;;:::o;3632:135::-;3676:5;3714:6;3701:20;3692:29;;3730:31;3755:5;3730:31;:::i;:::-;3632:135;;;;:::o;3773:329::-;3832:6;3881:2;3869:9;3860:7;3856:23;3852:32;3849:119;;;3887:79;;:::i;:::-;3849:119;4007:1;4032:53;4077:7;4068:6;4057:9;4053:22;4032:53;:::i;:::-;4022:63;;3978:117;3773:329;;;;:::o;4108:345::-;4175:6;4224:2;4212:9;4203:7;4199:23;4195:32;4192:119;;;4230:79;;:::i;:::-;4192:119;4350:1;4375:61;4428:7;4419:6;4408:9;4404:22;4375:61;:::i;:::-;4365:71;;4321:125;4108:345;;;;:::o;4459:474::-;4527:6;4535;4584:2;4572:9;4563:7;4559:23;4555:32;4552:119;;;4590:79;;:::i;:::-;4552:119;4710:1;4735:53;4780:7;4771:6;4760:9;4756:22;4735:53;:::i;:::-;4725:63;;4681:117;4837:2;4863:53;4908:7;4899:6;4888:9;4884:22;4863:53;:::i;:::-;4853:63;;4808:118;4459:474;;;;;:::o;4939:619::-;5016:6;5024;5032;5081:2;5069:9;5060:7;5056:23;5052:32;5049:119;;;5087:79;;:::i;:::-;5049:119;5207:1;5232:53;5277:7;5268:6;5257:9;5253:22;5232:53;:::i;:::-;5222:63;;5178:117;5334:2;5360:53;5405:7;5396:6;5385:9;5381:22;5360:53;:::i;:::-;5350:63;;5305:118;5462:2;5488:53;5533:7;5524:6;5513:9;5509:22;5488:53;:::i;:::-;5478:63;;5433:118;4939:619;;;;;:::o;5564:943::-;5659:6;5667;5675;5683;5732:3;5720:9;5711:7;5707:23;5703:33;5700:120;;;5739:79;;:::i;:::-;5700:120;5859:1;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5830:117;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6114:2;6140:53;6185:7;6176:6;6165:9;6161:22;6140:53;:::i;:::-;6130:63;;6085:118;6270:2;6259:9;6255:18;6242:32;6301:18;6293:6;6290:30;6287:117;;;6323:79;;:::i;:::-;6287:117;6428:62;6482:7;6473:6;6462:9;6458:22;6428:62;:::i;:::-;6418:72;;6213:287;5564:943;;;;;;;:::o;6513:468::-;6578:6;6586;6635:2;6623:9;6614:7;6610:23;6606:32;6603:119;;;6641:79;;:::i;:::-;6603:119;6761:1;6786:53;6831:7;6822:6;6811:9;6807:22;6786:53;:::i;:::-;6776:63;;6732:117;6888:2;6914:50;6956:7;6947:6;6936:9;6932:22;6914:50;:::i;:::-;6904:60;;6859:115;6513:468;;;;;:::o;6987:474::-;7055:6;7063;7112:2;7100:9;7091:7;7087:23;7083:32;7080:119;;;7118:79;;:::i;:::-;7080:119;7238:1;7263:53;7308:7;7299:6;7288:9;7284:22;7263:53;:::i;:::-;7253:63;;7209:117;7365:2;7391:53;7436:7;7427:6;7416:9;7412:22;7391:53;:::i;:::-;7381:63;;7336:118;6987:474;;;;;:::o;7467:694::-;7565:6;7573;7622:2;7610:9;7601:7;7597:23;7593:32;7590:119;;;7628:79;;:::i;:::-;7590:119;7776:1;7765:9;7761:17;7748:31;7806:18;7798:6;7795:30;7792:117;;;7828:79;;:::i;:::-;7792:117;7933:86;8011:7;8002:6;7991:9;7987:22;7933:86;:::i;:::-;7923:96;;7719:310;8068:2;8094:50;8136:7;8127:6;8116:9;8112:22;8094:50;:::i;:::-;8084:60;;8039:115;7467:694;;;;;:::o;8167:323::-;8223:6;8272:2;8260:9;8251:7;8247:23;8243:32;8240:119;;;8278:79;;:::i;:::-;8240:119;8398:1;8423:50;8465:7;8456:6;8445:9;8441:22;8423:50;:::i;:::-;8413:60;;8369:114;8167:323;;;;:::o;8496:327::-;8554:6;8603:2;8591:9;8582:7;8578:23;8574:32;8571:119;;;8609:79;;:::i;:::-;8571:119;8729:1;8754:52;8798:7;8789:6;8778:9;8774:22;8754:52;:::i;:::-;8744:62;;8700:116;8496:327;;;;:::o;8829:349::-;8898:6;8947:2;8935:9;8926:7;8922:23;8918:32;8915:119;;;8953:79;;:::i;:::-;8915:119;9073:1;9098:63;9153:7;9144:6;9133:9;9129:22;9098:63;:::i;:::-;9088:73;;9044:127;8829:349;;;;:::o;9184:509::-;9253:6;9302:2;9290:9;9281:7;9277:23;9273:32;9270:119;;;9308:79;;:::i;:::-;9270:119;9456:1;9445:9;9441:17;9428:31;9486:18;9478:6;9475:30;9472:117;;;9508:79;;:::i;:::-;9472:117;9613:63;9668:7;9659:6;9648:9;9644:22;9613:63;:::i;:::-;9603:73;;9399:287;9184:509;;;;:::o;9699:329::-;9758:6;9807:2;9795:9;9786:7;9782:23;9778:32;9775:119;;;9813:79;;:::i;:::-;9775:119;9933:1;9958:53;10003:7;9994:6;9983:9;9979:22;9958:53;:::i;:::-;9948:63;;9904:117;9699:329;;;;:::o;10034:490::-;10110:6;10118;10167:2;10155:9;10146:7;10142:23;10138:32;10135:119;;;10173:79;;:::i;:::-;10135:119;10293:1;10318:53;10363:7;10354:6;10343:9;10339:22;10318:53;:::i;:::-;10308:63;;10264:117;10420:2;10446:61;10499:7;10490:6;10479:9;10475:22;10446:61;:::i;:::-;10436:71;;10391:126;10034:490;;;;;:::o;10530:325::-;10587:6;10636:2;10624:9;10615:7;10611:23;10607:32;10604:119;;;10642:79;;:::i;:::-;10604:119;10762:1;10787:51;10830:7;10821:6;10810:9;10806:22;10787:51;:::i;:::-;10777:61;;10733:115;10530:325;;;;:::o;10861:118::-;10948:24;10966:5;10948:24;:::i;:::-;10943:3;10936:37;10861:118;;:::o;10985:109::-;11066:21;11081:5;11066:21;:::i;:::-;11061:3;11054:34;10985:109;;:::o;11100:360::-;11186:3;11214:38;11246:5;11214:38;:::i;:::-;11268:70;11331:6;11326:3;11268:70;:::i;:::-;11261:77;;11347:52;11392:6;11387:3;11380:4;11373:5;11369:16;11347:52;:::i;:::-;11424:29;11446:6;11424:29;:::i;:::-;11419:3;11415:39;11408:46;;11190:270;11100:360;;;;:::o;11466:364::-;11554:3;11582:39;11615:5;11582:39;:::i;:::-;11637:71;11701:6;11696:3;11637:71;:::i;:::-;11630:78;;11717:52;11762:6;11757:3;11750:4;11743:5;11739:16;11717:52;:::i;:::-;11794:29;11816:6;11794:29;:::i;:::-;11789:3;11785:39;11778:46;;11558:272;11466:364;;;;:::o;11836:377::-;11942:3;11970:39;12003:5;11970:39;:::i;:::-;12025:89;12107:6;12102:3;12025:89;:::i;:::-;12018:96;;12123:52;12168:6;12163:3;12156:4;12149:5;12145:16;12123:52;:::i;:::-;12200:6;12195:3;12191:16;12184:23;;11946:267;11836:377;;;;:::o;12243:845::-;12346:3;12383:5;12377:12;12412:36;12438:9;12412:36;:::i;:::-;12464:89;12546:6;12541:3;12464:89;:::i;:::-;12457:96;;12584:1;12573:9;12569:17;12600:1;12595:137;;;;12746:1;12741:341;;;;12562:520;;12595:137;12679:4;12675:9;12664;12660:25;12655:3;12648:38;12715:6;12710:3;12706:16;12699:23;;12595:137;;12741:341;12808:38;12840:5;12808:38;:::i;:::-;12868:1;12882:154;12896:6;12893:1;12890:13;12882:154;;;12970:7;12964:14;12960:1;12955:3;12951:11;12944:35;13020:1;13011:7;13007:15;12996:26;;12918:4;12915:1;12911:12;12906:17;;12882:154;;;13065:6;13060:3;13056:16;13049:23;;12748:334;;12562:520;;12350:738;;12243:845;;;;:::o;13094:366::-;13236:3;13257:67;13321:2;13316:3;13257:67;:::i;:::-;13250:74;;13333:93;13422:3;13333:93;:::i;:::-;13451:2;13446:3;13442:12;13435:19;;13094:366;;;:::o;13466:::-;13608:3;13629:67;13693:2;13688:3;13629:67;:::i;:::-;13622:74;;13705:93;13794:3;13705:93;:::i;:::-;13823:2;13818:3;13814:12;13807:19;;13466:366;;;:::o;13838:::-;13980:3;14001:67;14065:2;14060:3;14001:67;:::i;:::-;13994:74;;14077:93;14166:3;14077:93;:::i;:::-;14195:2;14190:3;14186:12;14179:19;;13838:366;;;:::o;14210:::-;14352:3;14373:67;14437:2;14432:3;14373:67;:::i;:::-;14366:74;;14449:93;14538:3;14449:93;:::i;:::-;14567:2;14562:3;14558:12;14551:19;;14210:366;;;:::o;14582:::-;14724:3;14745:67;14809:2;14804:3;14745:67;:::i;:::-;14738:74;;14821:93;14910:3;14821:93;:::i;:::-;14939:2;14934:3;14930:12;14923:19;;14582:366;;;:::o;14954:::-;15096:3;15117:67;15181:2;15176:3;15117:67;:::i;:::-;15110:74;;15193:93;15282:3;15193:93;:::i;:::-;15311:2;15306:3;15302:12;15295:19;;14954:366;;;:::o;15326:::-;15468:3;15489:67;15553:2;15548:3;15489:67;:::i;:::-;15482:74;;15565:93;15654:3;15565:93;:::i;:::-;15683:2;15678:3;15674:12;15667:19;;15326:366;;;:::o;15698:::-;15840:3;15861:67;15925:2;15920:3;15861:67;:::i;:::-;15854:74;;15937:93;16026:3;15937:93;:::i;:::-;16055:2;16050:3;16046:12;16039:19;;15698:366;;;:::o;16070:::-;16212:3;16233:67;16297:2;16292:3;16233:67;:::i;:::-;16226:74;;16309:93;16398:3;16309:93;:::i;:::-;16427:2;16422:3;16418:12;16411:19;;16070:366;;;:::o;16442:::-;16584:3;16605:67;16669:2;16664:3;16605:67;:::i;:::-;16598:74;;16681:93;16770:3;16681:93;:::i;:::-;16799:2;16794:3;16790:12;16783:19;;16442:366;;;:::o;16814:::-;16956:3;16977:67;17041:2;17036:3;16977:67;:::i;:::-;16970:74;;17053:93;17142:3;17053:93;:::i;:::-;17171:2;17166:3;17162:12;17155:19;;16814:366;;;:::o;17186:::-;17328:3;17349:67;17413:2;17408:3;17349:67;:::i;:::-;17342:74;;17425:93;17514:3;17425:93;:::i;:::-;17543:2;17538:3;17534:12;17527:19;;17186:366;;;:::o;17558:::-;17700:3;17721:67;17785:2;17780:3;17721:67;:::i;:::-;17714:74;;17797:93;17886:3;17797:93;:::i;:::-;17915:2;17910:3;17906:12;17899:19;;17558:366;;;:::o;17930:::-;18072:3;18093:67;18157:2;18152:3;18093:67;:::i;:::-;18086:74;;18169:93;18258:3;18169:93;:::i;:::-;18287:2;18282:3;18278:12;18271:19;;17930:366;;;:::o;18302:::-;18444:3;18465:67;18529:2;18524:3;18465:67;:::i;:::-;18458:74;;18541:93;18630:3;18541:93;:::i;:::-;18659:2;18654:3;18650:12;18643:19;;18302:366;;;:::o;18674:::-;18816:3;18837:67;18901:2;18896:3;18837:67;:::i;:::-;18830:74;;18913:93;19002:3;18913:93;:::i;:::-;19031:2;19026:3;19022:12;19015:19;;18674:366;;;:::o;19046:::-;19188:3;19209:67;19273:2;19268:3;19209:67;:::i;:::-;19202:74;;19285:93;19374:3;19285:93;:::i;:::-;19403:2;19398:3;19394:12;19387:19;;19046:366;;;:::o;19418:::-;19560:3;19581:67;19645:2;19640:3;19581:67;:::i;:::-;19574:74;;19657:93;19746:3;19657:93;:::i;:::-;19775:2;19770:3;19766:12;19759:19;;19418:366;;;:::o;19790:::-;19932:3;19953:67;20017:2;20012:3;19953:67;:::i;:::-;19946:74;;20029:93;20118:3;20029:93;:::i;:::-;20147:2;20142:3;20138:12;20131:19;;19790:366;;;:::o;20162:::-;20304:3;20325:67;20389:2;20384:3;20325:67;:::i;:::-;20318:74;;20401:93;20490:3;20401:93;:::i;:::-;20519:2;20514:3;20510:12;20503:19;;20162:366;;;:::o;20534:::-;20676:3;20697:67;20761:2;20756:3;20697:67;:::i;:::-;20690:74;;20773:93;20862:3;20773:93;:::i;:::-;20891:2;20886:3;20882:12;20875:19;;20534:366;;;:::o;20906:::-;21048:3;21069:67;21133:2;21128:3;21069:67;:::i;:::-;21062:74;;21145:93;21234:3;21145:93;:::i;:::-;21263:2;21258:3;21254:12;21247:19;;20906:366;;;:::o;21278:::-;21420:3;21441:67;21505:2;21500:3;21441:67;:::i;:::-;21434:74;;21517:93;21606:3;21517:93;:::i;:::-;21635:2;21630:3;21626:12;21619:19;;21278:366;;;:::o;21650:::-;21792:3;21813:67;21877:2;21872:3;21813:67;:::i;:::-;21806:74;;21889:93;21978:3;21889:93;:::i;:::-;22007:2;22002:3;21998:12;21991:19;;21650:366;;;:::o;22022:::-;22164:3;22185:67;22249:2;22244:3;22185:67;:::i;:::-;22178:74;;22261:93;22350:3;22261:93;:::i;:::-;22379:2;22374:3;22370:12;22363:19;;22022:366;;;:::o;22394:::-;22536:3;22557:67;22621:2;22616:3;22557:67;:::i;:::-;22550:74;;22633:93;22722:3;22633:93;:::i;:::-;22751:2;22746:3;22742:12;22735:19;;22394:366;;;:::o;22766:118::-;22853:24;22871:5;22853:24;:::i;:::-;22848:3;22841:37;22766:118;;:::o;22890:112::-;22973:22;22989:5;22973:22;:::i;:::-;22968:3;22961:35;22890:112;;:::o;23008:429::-;23185:3;23207:92;23295:3;23286:6;23207:92;:::i;:::-;23200:99;;23316:95;23407:3;23398:6;23316:95;:::i;:::-;23309:102;;23428:3;23421:10;;23008:429;;;;;:::o;23443:222::-;23536:4;23574:2;23563:9;23559:18;23551:26;;23587:71;23655:1;23644:9;23640:17;23631:6;23587:71;:::i;:::-;23443:222;;;;:::o;23671:640::-;23866:4;23904:3;23893:9;23889:19;23881:27;;23918:71;23986:1;23975:9;23971:17;23962:6;23918:71;:::i;:::-;23999:72;24067:2;24056:9;24052:18;24043:6;23999:72;:::i;:::-;24081;24149:2;24138:9;24134:18;24125:6;24081:72;:::i;:::-;24200:9;24194:4;24190:20;24185:2;24174:9;24170:18;24163:48;24228:76;24299:4;24290:6;24228:76;:::i;:::-;24220:84;;23671:640;;;;;;;:::o;24317:210::-;24404:4;24442:2;24431:9;24427:18;24419:26;;24455:65;24517:1;24506:9;24502:17;24493:6;24455:65;:::i;:::-;24317:210;;;;:::o;24533:313::-;24646:4;24684:2;24673:9;24669:18;24661:26;;24733:9;24727:4;24723:20;24719:1;24708:9;24704:17;24697:47;24761:78;24834:4;24825:6;24761:78;:::i;:::-;24753:86;;24533:313;;;;:::o;24852:419::-;25018:4;25056:2;25045:9;25041:18;25033:26;;25105:9;25099:4;25095:20;25091:1;25080:9;25076:17;25069:47;25133:131;25259:4;25133:131;:::i;:::-;25125:139;;24852:419;;;:::o;25277:::-;25443:4;25481:2;25470:9;25466:18;25458:26;;25530:9;25524:4;25520:20;25516:1;25505:9;25501:17;25494:47;25558:131;25684:4;25558:131;:::i;:::-;25550:139;;25277:419;;;:::o;25702:::-;25868:4;25906:2;25895:9;25891:18;25883:26;;25955:9;25949:4;25945:20;25941:1;25930:9;25926:17;25919:47;25983:131;26109:4;25983:131;:::i;:::-;25975:139;;25702:419;;;:::o;26127:::-;26293:4;26331:2;26320:9;26316:18;26308:26;;26380:9;26374:4;26370:20;26366:1;26355:9;26351:17;26344:47;26408:131;26534:4;26408:131;:::i;:::-;26400:139;;26127:419;;;:::o;26552:::-;26718:4;26756:2;26745:9;26741:18;26733:26;;26805:9;26799:4;26795:20;26791:1;26780:9;26776:17;26769:47;26833:131;26959:4;26833:131;:::i;:::-;26825:139;;26552:419;;;:::o;26977:::-;27143:4;27181:2;27170:9;27166:18;27158:26;;27230:9;27224:4;27220:20;27216:1;27205:9;27201:17;27194:47;27258:131;27384:4;27258:131;:::i;:::-;27250:139;;26977:419;;;:::o;27402:::-;27568:4;27606:2;27595:9;27591:18;27583:26;;27655:9;27649:4;27645:20;27641:1;27630:9;27626:17;27619:47;27683:131;27809:4;27683:131;:::i;:::-;27675:139;;27402:419;;;:::o;27827:::-;27993:4;28031:2;28020:9;28016:18;28008:26;;28080:9;28074:4;28070:20;28066:1;28055:9;28051:17;28044:47;28108:131;28234:4;28108:131;:::i;:::-;28100:139;;27827:419;;;:::o;28252:::-;28418:4;28456:2;28445:9;28441:18;28433:26;;28505:9;28499:4;28495:20;28491:1;28480:9;28476:17;28469:47;28533:131;28659:4;28533:131;:::i;:::-;28525:139;;28252:419;;;:::o;28677:::-;28843:4;28881:2;28870:9;28866:18;28858:26;;28930:9;28924:4;28920:20;28916:1;28905:9;28901:17;28894:47;28958:131;29084:4;28958:131;:::i;:::-;28950:139;;28677:419;;;:::o;29102:::-;29268:4;29306:2;29295:9;29291:18;29283:26;;29355:9;29349:4;29345:20;29341:1;29330:9;29326:17;29319:47;29383:131;29509:4;29383:131;:::i;:::-;29375:139;;29102:419;;;:::o;29527:::-;29693:4;29731:2;29720:9;29716:18;29708:26;;29780:9;29774:4;29770:20;29766:1;29755:9;29751:17;29744:47;29808:131;29934:4;29808:131;:::i;:::-;29800:139;;29527:419;;;:::o;29952:::-;30118:4;30156:2;30145:9;30141:18;30133:26;;30205:9;30199:4;30195:20;30191:1;30180:9;30176:17;30169:47;30233:131;30359:4;30233:131;:::i;:::-;30225:139;;29952:419;;;:::o;30377:::-;30543:4;30581:2;30570:9;30566:18;30558:26;;30630:9;30624:4;30620:20;30616:1;30605:9;30601:17;30594:47;30658:131;30784:4;30658:131;:::i;:::-;30650:139;;30377:419;;;:::o;30802:::-;30968:4;31006:2;30995:9;30991:18;30983:26;;31055:9;31049:4;31045:20;31041:1;31030:9;31026:17;31019:47;31083:131;31209:4;31083:131;:::i;:::-;31075:139;;30802:419;;;:::o;31227:::-;31393:4;31431:2;31420:9;31416:18;31408:26;;31480:9;31474:4;31470:20;31466:1;31455:9;31451:17;31444:47;31508:131;31634:4;31508:131;:::i;:::-;31500:139;;31227:419;;;:::o;31652:::-;31818:4;31856:2;31845:9;31841:18;31833:26;;31905:9;31899:4;31895:20;31891:1;31880:9;31876:17;31869:47;31933:131;32059:4;31933:131;:::i;:::-;31925:139;;31652:419;;;:::o;32077:::-;32243:4;32281:2;32270:9;32266:18;32258:26;;32330:9;32324:4;32320:20;32316:1;32305:9;32301:17;32294:47;32358:131;32484:4;32358:131;:::i;:::-;32350:139;;32077:419;;;:::o;32502:::-;32668:4;32706:2;32695:9;32691:18;32683:26;;32755:9;32749:4;32745:20;32741:1;32730:9;32726:17;32719:47;32783:131;32909:4;32783:131;:::i;:::-;32775:139;;32502:419;;;:::o;32927:::-;33093:4;33131:2;33120:9;33116:18;33108:26;;33180:9;33174:4;33170:20;33166:1;33155:9;33151:17;33144:47;33208:131;33334:4;33208:131;:::i;:::-;33200:139;;32927:419;;;:::o;33352:::-;33518:4;33556:2;33545:9;33541:18;33533:26;;33605:9;33599:4;33595:20;33591:1;33580:9;33576:17;33569:47;33633:131;33759:4;33633:131;:::i;:::-;33625:139;;33352:419;;;:::o;33777:::-;33943:4;33981:2;33970:9;33966:18;33958:26;;34030:9;34024:4;34020:20;34016:1;34005:9;34001:17;33994:47;34058:131;34184:4;34058:131;:::i;:::-;34050:139;;33777:419;;;:::o;34202:::-;34368:4;34406:2;34395:9;34391:18;34383:26;;34455:9;34449:4;34445:20;34441:1;34430:9;34426:17;34419:47;34483:131;34609:4;34483:131;:::i;:::-;34475:139;;34202:419;;;:::o;34627:::-;34793:4;34831:2;34820:9;34816:18;34808:26;;34880:9;34874:4;34870:20;34866:1;34855:9;34851:17;34844:47;34908:131;35034:4;34908:131;:::i;:::-;34900:139;;34627:419;;;:::o;35052:::-;35218:4;35256:2;35245:9;35241:18;35233:26;;35305:9;35299:4;35295:20;35291:1;35280:9;35276:17;35269:47;35333:131;35459:4;35333:131;:::i;:::-;35325:139;;35052:419;;;:::o;35477:::-;35643:4;35681:2;35670:9;35666:18;35658:26;;35730:9;35724:4;35720:20;35716:1;35705:9;35701:17;35694:47;35758:131;35884:4;35758:131;:::i;:::-;35750:139;;35477:419;;;:::o;35902:222::-;35995:4;36033:2;36022:9;36018:18;36010:26;;36046:71;36114:1;36103:9;36099:17;36090:6;36046:71;:::i;:::-;35902:222;;;;:::o;36130:214::-;36219:4;36257:2;36246:9;36242:18;36234:26;;36270:67;36334:1;36323:9;36319:17;36310:6;36270:67;:::i;:::-;36130:214;;;;:::o;36350:129::-;36384:6;36411:20;;:::i;:::-;36401:30;;36440:33;36468:4;36460:6;36440:33;:::i;:::-;36350:129;;;:::o;36485:75::-;36518:6;36551:2;36545:9;36535:19;;36485:75;:::o;36566:319::-;36651:4;36741:18;36733:6;36730:30;36727:56;;;36763:18;;:::i;:::-;36727:56;36813:4;36805:6;36801:17;36793:25;;36873:4;36867;36863:15;36855:23;;36566:319;;;:::o;36891:307::-;36952:4;37042:18;37034:6;37031:30;37028:56;;;37064:18;;:::i;:::-;37028:56;37102:29;37124:6;37102:29;:::i;:::-;37094:37;;37186:4;37180;37176:15;37168:23;;36891:307;;;:::o;37204:308::-;37266:4;37356:18;37348:6;37345:30;37342:56;;;37378:18;;:::i;:::-;37342:56;37416:29;37438:6;37416:29;:::i;:::-;37408:37;;37500:4;37494;37490:15;37482:23;;37204:308;;;:::o;37518:141::-;37567:4;37590:3;37582:11;;37613:3;37610:1;37603:14;37647:4;37644:1;37634:18;37626:26;;37518:141;;;:::o;37665:98::-;37716:6;37750:5;37744:12;37734:22;;37665:98;;;:::o;37769:99::-;37821:6;37855:5;37849:12;37839:22;;37769:99;;;:::o;37874:168::-;37957:11;37991:6;37986:3;37979:19;38031:4;38026:3;38022:14;38007:29;;37874:168;;;;:::o;38048:169::-;38132:11;38166:6;38161:3;38154:19;38206:4;38201:3;38197:14;38182:29;;38048:169;;;;:::o;38223:148::-;38325:11;38362:3;38347:18;;38223:148;;;;:::o;38377:305::-;38417:3;38436:20;38454:1;38436:20;:::i;:::-;38431:25;;38470:20;38488:1;38470:20;:::i;:::-;38465:25;;38624:1;38556:66;38552:74;38549:1;38546:81;38543:107;;;38630:18;;:::i;:::-;38543:107;38674:1;38671;38667:9;38660:16;;38377:305;;;;:::o;38688:237::-;38726:3;38745:18;38761:1;38745:18;:::i;:::-;38740:23;;38777:18;38793:1;38777:18;:::i;:::-;38772:23;;38867:1;38861:4;38857:12;38854:1;38851:19;38848:45;;;38873:18;;:::i;:::-;38848:45;38917:1;38914;38910:9;38903:16;;38688:237;;;;:::o;38931:185::-;38971:1;38988:20;39006:1;38988:20;:::i;:::-;38983:25;;39022:20;39040:1;39022:20;:::i;:::-;39017:25;;39061:1;39051:35;;39066:18;;:::i;:::-;39051:35;39108:1;39105;39101:9;39096:14;;38931:185;;;;:::o;39122:348::-;39162:7;39185:20;39203:1;39185:20;:::i;:::-;39180:25;;39219:20;39237:1;39219:20;:::i;:::-;39214:25;;39407:1;39339:66;39335:74;39332:1;39329:81;39324:1;39317:9;39310:17;39306:105;39303:131;;;39414:18;;:::i;:::-;39303:131;39462:1;39459;39455:9;39444:20;;39122:348;;;;:::o;39476:191::-;39516:4;39536:20;39554:1;39536:20;:::i;:::-;39531:25;;39570:20;39588:1;39570:20;:::i;:::-;39565:25;;39609:1;39606;39603:8;39600:34;;;39614:18;;:::i;:::-;39600:34;39659:1;39656;39652:9;39644:17;;39476:191;;;;:::o;39673:96::-;39710:7;39739:24;39757:5;39739:24;:::i;:::-;39728:35;;39673:96;;;:::o;39775:104::-;39820:7;39849:24;39867:5;39849:24;:::i;:::-;39838:35;;39775:104;;;:::o;39885:90::-;39919:7;39962:5;39955:13;39948:21;39937:32;;39885:90;;;:::o;39981:149::-;40017:7;40057:66;40050:5;40046:78;40035:89;;39981:149;;;:::o;40136:126::-;40173:7;40213:42;40206:5;40202:54;40191:65;;40136:126;;;:::o;40268:77::-;40305:7;40334:5;40323:16;;40268:77;;;:::o;40351:86::-;40386:7;40426:4;40419:5;40415:16;40404:27;;40351:86;;;:::o;40443:154::-;40527:6;40522:3;40517;40504:30;40589:1;40580:6;40575:3;40571:16;40564:27;40443:154;;;:::o;40603:307::-;40671:1;40681:113;40695:6;40692:1;40689:13;40681:113;;;40780:1;40775:3;40771:11;40765:18;40761:1;40756:3;40752:11;40745:39;40717:2;40714:1;40710:10;40705:15;;40681:113;;;40812:6;40809:1;40806:13;40803:101;;;40892:1;40883:6;40878:3;40874:16;40867:27;40803:101;40652:258;40603:307;;;:::o;40916:171::-;40955:3;40978:24;40996:5;40978:24;:::i;:::-;40969:33;;41024:4;41017:5;41014:15;41011:41;;;41032:18;;:::i;:::-;41011:41;41079:1;41072:5;41068:13;41061:20;;40916:171;;;:::o;41093:320::-;41137:6;41174:1;41168:4;41164:12;41154:22;;41221:1;41215:4;41211:12;41242:18;41232:81;;41298:4;41290:6;41286:17;41276:27;;41232:81;41360:2;41352:6;41349:14;41329:18;41326:38;41323:84;;;41379:18;;:::i;:::-;41323:84;41144:269;41093:320;;;:::o;41419:281::-;41502:27;41524:4;41502:27;:::i;:::-;41494:6;41490:40;41632:6;41620:10;41617:22;41596:18;41584:10;41581:34;41578:62;41575:88;;;41643:18;;:::i;:::-;41575:88;41683:10;41679:2;41672:22;41462:238;41419:281;;:::o;41706:233::-;41745:3;41768:24;41786:5;41768:24;:::i;:::-;41759:33;;41814:66;41807:5;41804:77;41801:103;;;41884:18;;:::i;:::-;41801:103;41931:1;41924:5;41920:13;41913:20;;41706:233;;;:::o;41945:176::-;41977:1;41994:20;42012:1;41994:20;:::i;:::-;41989:25;;42028:20;42046:1;42028:20;:::i;:::-;42023:25;;42067:1;42057:35;;42072:18;;:::i;:::-;42057:35;42113:1;42110;42106:9;42101:14;;41945:176;;;;:::o;42127:180::-;42175:77;42172:1;42165:88;42272:4;42269:1;42262:15;42296:4;42293:1;42286:15;42313:180;42361:77;42358:1;42351:88;42458:4;42455:1;42448:15;42482:4;42479:1;42472:15;42499:180;42547:77;42544:1;42537:88;42644:4;42641:1;42634:15;42668:4;42665:1;42658:15;42685:180;42733:77;42730:1;42723:88;42830:4;42827:1;42820:15;42854:4;42851:1;42844:15;42871:180;42919:77;42916:1;42909:88;43016:4;43013:1;43006:15;43040:4;43037:1;43030:15;43057:117;43166:1;43163;43156:12;43180:117;43289:1;43286;43279:12;43303:117;43412:1;43409;43402:12;43426:117;43535:1;43532;43525:12;43549:117;43658:1;43655;43648:12;43672:102;43713:6;43764:2;43760:7;43755:2;43748:5;43744:14;43740:28;43730:38;;43672:102;;;:::o;43780:178::-;43920:30;43916:1;43908:6;43904:14;43897:54;43780:178;:::o;43964:237::-;44104:34;44100:1;44092:6;44088:14;44081:58;44173:20;44168:2;44160:6;44156:15;44149:45;43964:237;:::o;44207:225::-;44347:34;44343:1;44335:6;44331:14;44324:58;44416:8;44411:2;44403:6;44399:15;44392:33;44207:225;:::o;44438:224::-;44578:34;44574:1;44566:6;44562:14;44555:58;44647:7;44642:2;44634:6;44630:15;44623:32;44438:224;:::o;44668:178::-;44808:30;44804:1;44796:6;44792:14;44785:54;44668:178;:::o;44852:176::-;44992:28;44988:1;44980:6;44976:14;44969:52;44852:176;:::o;45034:223::-;45174:34;45170:1;45162:6;45158:14;45151:58;45243:6;45238:2;45230:6;45226:15;45219:31;45034:223;:::o;45263:175::-;45403:27;45399:1;45391:6;45387:14;45380:51;45263:175;:::o;45444:179::-;45584:31;45580:1;45572:6;45568:14;45561:55;45444:179;:::o;45629:231::-;45769:34;45765:1;45757:6;45753:14;45746:58;45838:14;45833:2;45825:6;45821:15;45814:39;45629:231;:::o;45866:173::-;46006:25;46002:1;45994:6;45990:14;45983:49;45866:173;:::o;46045:171::-;46185:23;46181:1;46173:6;46169:14;46162:47;46045:171;:::o;46222:243::-;46362:34;46358:1;46350:6;46346:14;46339:58;46431:26;46426:2;46418:6;46414:15;46407:51;46222:243;:::o;46471:229::-;46611:34;46607:1;46599:6;46595:14;46588:58;46680:12;46675:2;46667:6;46663:15;46656:37;46471:229;:::o;46706:228::-;46846:34;46842:1;46834:6;46830:14;46823:58;46915:11;46910:2;46902:6;46898:15;46891:36;46706:228;:::o;46940:220::-;47080:34;47076:1;47068:6;47064:14;47057:58;47149:3;47144:2;47136:6;47132:15;47125:28;46940:220;:::o;47166:182::-;47306:34;47302:1;47294:6;47290:14;47283:58;47166:182;:::o;47354:231::-;47494:34;47490:1;47482:6;47478:14;47471:58;47563:14;47558:2;47550:6;47546:15;47539:39;47354:231;:::o;47591:182::-;47731:34;47727:1;47719:6;47715:14;47708:58;47591:182;:::o;47779:234::-;47919:34;47915:1;47907:6;47903:14;47896:58;47988:17;47983:2;47975:6;47971:15;47964:42;47779:234;:::o;48019:170::-;48159:22;48155:1;48147:6;48143:14;48136:46;48019:170;:::o;48195:173::-;48335:25;48331:1;48323:6;48319:14;48312:49;48195:173;:::o;48374:220::-;48514:34;48510:1;48502:6;48498:14;48491:58;48583:3;48578:2;48570:6;48566:15;48559:28;48374:220;:::o;48600:236::-;48740:34;48736:1;48728:6;48724:14;48717:58;48809:19;48804:2;48796:6;48792:15;48785:44;48600:236;:::o;48842:170::-;48982:22;48978:1;48970:6;48966:14;48959:46;48842:170;:::o;49018:179::-;49158:31;49154:1;49146:6;49142:14;49135:55;49018:179;:::o;49203:122::-;49276:24;49294:5;49276:24;:::i;:::-;49269:5;49266:35;49256:63;;49315:1;49312;49305:12;49256:63;49203:122;:::o;49331:138::-;49412:32;49438:5;49412:32;:::i;:::-;49405:5;49402:43;49392:71;;49459:1;49456;49449:12;49392:71;49331:138;:::o;49475:116::-;49545:21;49560:5;49545:21;:::i;:::-;49538:5;49535:32;49525:60;;49581:1;49578;49571:12;49525:60;49475:116;:::o;49597:120::-;49669:23;49686:5;49669:23;:::i;:::-;49662:5;49659:34;49649:62;;49707:1;49704;49697:12;49649:62;49597:120;:::o;49723:122::-;49796:24;49814:5;49796:24;:::i;:::-;49789:5;49786:35;49776:63;;49835:1;49832;49825:12;49776:63;49723:122;:::o;49851:118::-;49922:22;49938:5;49922:22;:::i;:::-;49915:5;49912:33;49902:61;;49959:1;49956;49949:12;49902:61;49851:118;:::o

Swarm Source

ipfs://3b2d5ed9e6d1b8d513af134dc254dd724a59b535b36b2c370d54ca6259464036
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.