ETH Price: $3,485.14 (+2.06%)
Gas: 3.58 Gwei

Token

ERC20 ***
 

Overview

Max Total Supply

9,402 ERC20 ***

Holders

89

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
krajinka.eth
Balance
1 ERC20 ***
0xd455712e43582134f101a0c686d26548b5438a3b
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:
WeirdAIPaintings

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-07
*/

// File: contracts/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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: contracts/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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
// File: contracts/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 `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}


// File: contracts/Strings.sol

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}

// File: contracts/Address.sol

pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File: contracts/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: contracts/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: contracts/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: contracts/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: contracts/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();
        string memory json = ".json";
        return bytes(baseURI).length > 0
            ? string(abi.encodePacked(baseURI, tokenId.toString(),json))
            : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * 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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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);
    }

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

    /**
     * @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 of token that is not own");
        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);
    }

    /**
     * @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 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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 { }
}
// File: contracts/ERC721URIStorage.sol


pragma solidity ^0.8.0;

/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping (uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();
       

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// File: contracts/WAIP.sol

pragma solidity ^0.8.0;

contract WeirdAIPaintings is ERC721URIStorage, Ownable{

    event DrawPainting (address indexed painter, uint256 startWith, uint256 times);

    uint256 public totalPaintings = 0;
    uint256 internal constant MAX_MINTS_PER_TRANSACTION = 20;
    uint256 internal constant PAINTING_LIMIT = 9402;
    uint256 public price = 50000000000000000; // 0.05 eth
    string public baseURI = "https://metadata.weirdaipaintings.com/metadata/";
    bool private saleStarted;
    uint private nonce = 0;
    uint[PAINTING_LIMIT] private indices;
    bool private mintedForDev = false;

    constructor(string memory name_, string memory symbol_) ERC721(name_, symbol_) {
    }

    function totalSupply() public view virtual returns (uint256) {
        return PAINTING_LIMIT;
    }
    
     function getAmountMinted() external view returns (uint256) {
        return totalPaintings;
    }

    function _baseURI() internal view virtual override returns (string memory){
        return baseURI;
    }

    function setBaseURI(string memory _newURI) public onlyOwner {
        baseURI = _newURI;
    }

    function changePrice(uint256 _newPrice) public onlyOwner {
        price = _newPrice;
    }

    function setTokenURI(uint256 _tokenId, string memory _tokenURI) public onlyOwner {
        _setTokenURI(_tokenId, _tokenURI);
    }

    function setStart(bool _start) public onlyOwner {
        saleStarted = _start;
    }
    
    function getMintPrice() public view returns (uint256) {
        if(totalPaintings <= 500){
            return 0;
        }
        else{
            return price;
        }
    }

    function mint(uint256 _amount) payable public {
        //check sale start
        require(saleStarted == true, "Sale has not started yet!");

        //only 9402 paintings
        require(totalPaintings < PAINTING_LIMIT, "No paintings left!");

        //mint at least one
        require(_amount > 0, "Must mint at least one!");

        //20 max per transaction
        require(_amount <= MAX_MINTS_PER_TRANSACTION, "Trying to mint too many!");

        //dont overmint
        require(_amount <= PAINTING_LIMIT-totalPaintings,"Not enough paintings left to mint!");

        //check payment
        require(msg.value == getMintPrice() * _amount, "msg.value too low!");
        
        uint id;
        emit DrawPainting(_msgSender(), totalPaintings+1, _amount);
        for(uint256 i=0; i< _amount; i++){
            id = randomIndex();
            _mint(_msgSender(), id); 
            totalPaintings = totalPaintings + 1;
        }
    } 
    
    function mintForGiveaway(address _to) payable public onlyOwner {
        //only 9402 paintings
        require(totalPaintings < PAINTING_LIMIT, "No paintings left!");

        //dont overmint
        require(1 <= PAINTING_LIMIT-totalPaintings,"Not enough paintings left to mint!");
        
        uint id;
        emit DrawPainting(_msgSender(), totalPaintings+1, 1);
        id = randomIndex();
        _mint(_to, id); 
        totalPaintings = totalPaintings + 1;
    } 
    
    function randomIndex() internal returns (uint) {
        uint totalSize = PAINTING_LIMIT - totalPaintings;
        uint index = uint(keccak256(abi.encodePacked(nonce, msg.sender, block.difficulty, block.timestamp))) % totalSize;
        uint value = 0;

        if (indices[index] != 0) {
            value = indices[index];
        } else {
            value = index;
        }

        // Move last value to selected position
        if (indices[totalSize - 1] == 0) {
            // Array position not initialized, so use position
            indices[index] = totalSize - 1;
        } else {
            // Array position holds a value so use that
            indices[index] = indices[totalSize - 1];
        }
        nonce++;
        // Don't allow a zero index, start counting at 1
        return value+1;
    }
    
    function give40PaintingsToDev() public onlyOwner {
        require(mintedForDev == false, "Dev paintings already minted!");
        
        uint i;
        uint id;
        emit DrawPainting(_msgSender(), totalPaintings+1, 40);
        for(i = 0; i < 40; i++){
            id = randomIndex();
            _mint(_msgSender(), id);
            totalPaintings = totalPaintings + 1;
        }
        
        mintedForDev = true;
    } 
    
    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(owner()).transfer(balance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"painter","type":"address"},{"indexed":false,"internalType":"uint256","name":"startWith","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"times","type":"uint256"}],"name":"DrawPainting","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":[{"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAmountMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"give40PaintingsToDev","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintForGiveaway","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":"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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"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":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPaintings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600060085566b1a2bc2ec500006009556040518060600160405280602f81526020016200495b602f9139600a90805190602001906200004592919062000191565b506000600c5560006124c760006101000a81548160ff0219169083151502179055503480156200007457600080fd5b506040516200498a3803806200498a83398181016040528101906200009a9190620002bf565b81818160009080519060200190620000b492919062000191565b508060019080519060200190620000cd92919062000191565b5050506000620000e26200018960201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050620004c8565b600033905090565b8280546200019f90620003d9565b90600052602060002090601f016020900481019282620001c357600085556200020f565b82601f10620001de57805160ff19168380011785556200020f565b828001600101855582156200020f579182015b828111156200020e578251825591602001919060010190620001f1565b5b5090506200021e919062000222565b5090565b5b808211156200023d57600081600090555060010162000223565b5090565b60006200025862000252846200036d565b62000344565b905082815260208101848484011115620002775762000276620004a8565b5b62000284848285620003a3565b509392505050565b600082601f830112620002a457620002a3620004a3565b5b8151620002b684826020860162000241565b91505092915050565b60008060408385031215620002d957620002d8620004b2565b5b600083015167ffffffffffffffff811115620002fa57620002f9620004ad565b5b62000308858286016200028c565b925050602083015167ffffffffffffffff8111156200032c576200032b620004ad565b5b6200033a858286016200028c565b9150509250929050565b60006200035062000363565b90506200035e82826200040f565b919050565b6000604051905090565b600067ffffffffffffffff8211156200038b576200038a62000474565b5b6200039682620004b7565b9050602081019050919050565b60005b83811015620003c3578082015181840152602081019050620003a6565b83811115620003d3576000848401525b50505050565b60006002820490506001821680620003f257607f821691505b6020821081141562000409576200040862000445565b5b50919050565b6200041a82620004b7565b810181811067ffffffffffffffff821117156200043c576200043b62000474565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61448380620004d86000396000f3fe6080604052600436106101cd5760003560e01c80638da5cb5b116100f7578063b88d4fde11610095578063e777df2011610064578063e777df201461061e578063e985e9c514610649578063f2fde38b14610686578063fe9c8bfa146106af576101cd565b8063b88d4fde14610585578063c64ac1a6146105ae578063c87b56dd146105ca578063e2ce024614610607576101cd565b8063a0712d68116100d1578063a0712d68146104ec578063a22cb46514610508578063a2b40d1914610531578063a7f93ebd1461055a576101cd565b80638da5cb5b1461046b57806395d89b4114610496578063a035b1fe146104c1576101cd565b80633ccfd60b1161016f57806368e243271161013e57806368e24327146103c35780636c0360eb146103ec57806370a0823114610417578063715018a614610454576101cd565b80633ccfd60b1461031d57806342842e0e1461033457806355f804b31461035d5780636352211e14610386576101cd565b8063095ea7b3116101ab578063095ea7b314610277578063162094c4146102a057806318160ddd146102c957806323b872dd146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612e25565b6106da565b60405161020691906134e2565b60405180910390f35b34801561021b57600080fd5b506102246107bc565b60405161023191906134fd565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190612ec8565b61084e565b60405161026e919061347b565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612db8565b6108d3565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190612ef5565b6109eb565b005b3480156102d557600080fd5b506102de610a75565b6040516102eb919061383f565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612ca2565b610a7f565b005b34801561032957600080fd5b50610332610adf565b005b34801561034057600080fd5b5061035b60048036038101906103569190612ca2565b610bb1565b005b34801561036957600080fd5b50610384600480360381019061037f9190612e7f565b610bd1565b005b34801561039257600080fd5b506103ad60048036038101906103a89190612ec8565b610c67565b6040516103ba919061347b565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190612df8565b610d19565b005b3480156103f857600080fd5b50610401610db2565b60405161040e91906134fd565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612c35565b610e40565b60405161044b919061383f565b60405180910390f35b34801561046057600080fd5b50610469610ef8565b005b34801561047757600080fd5b50610480611035565b60405161048d919061347b565b60405180910390f35b3480156104a257600080fd5b506104ab61105f565b6040516104b891906134fd565b60405180910390f35b3480156104cd57600080fd5b506104d66110f1565b6040516104e3919061383f565b60405180910390f35b61050660048036038101906105019190612ec8565b6110f7565b005b34801561051457600080fd5b5061052f600480360381019061052a9190612d78565b61137a565b005b34801561053d57600080fd5b5061055860048036038101906105539190612ec8565b6114fb565b005b34801561056657600080fd5b5061056f611581565b60405161057c919061383f565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190612cf5565b6115a0565b005b6105c860048036038101906105c39190612c35565b611602565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190612ec8565b6117ac565b6040516105fe91906134fd565b60405180910390f35b34801561061357600080fd5b5061061c6118fe565b005b34801561062a57600080fd5b50610633611aab565b604051610640919061383f565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190612c62565b611ab5565b60405161067d91906134e2565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a89190612c35565b611b49565b005b3480156106bb57600080fd5b506106c4611cf5565b6040516106d1919061383f565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107a557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107b557506107b482611cfb565b5b9050919050565b6060600080546107cb90613b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546107f790613b8e565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b600061085982611d65565b610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f9061371f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108de82610c67565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109469061379f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096e611dd1565b73ffffffffffffffffffffffffffffffffffffffff16148061099d575061099c81610997611dd1565b611ab5565b5b6109dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d39061363f565b60405180910390fd5b6109e68383611dd9565b505050565b6109f3611dd1565b73ffffffffffffffffffffffffffffffffffffffff16610a11611035565b73ffffffffffffffffffffffffffffffffffffffff1614610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e9061373f565b60405180910390fd5b610a718282611e92565b5050565b60006124ba905090565b610a90610a8a611dd1565b82611f06565b610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906137ff565b60405180910390fd5b610ada838383611fe4565b505050565b610ae7611dd1565b73ffffffffffffffffffffffffffffffffffffffff16610b05611035565b73ffffffffffffffffffffffffffffffffffffffff1614610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b529061373f565b60405180910390fd5b6000479050610b68611035565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bad573d6000803e3d6000fd5b5050565b610bcc838383604051806020016040528060008152506115a0565b505050565b610bd9611dd1565b73ffffffffffffffffffffffffffffffffffffffff16610bf7611035565b73ffffffffffffffffffffffffffffffffffffffff1614610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c449061373f565b60405180910390fd5b80600a9080519060200190610c63929190612a49565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d079061367f565b60405180910390fd5b80915050919050565b610d21611dd1565b73ffffffffffffffffffffffffffffffffffffffff16610d3f611035565b73ffffffffffffffffffffffffffffffffffffffff1614610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c9061373f565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b600a8054610dbf90613b8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610deb90613b8e565b8015610e385780601f10610e0d57610100808354040283529160200191610e38565b820191906000526020600020905b815481529060010190602001808311610e1b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea89061365f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f00611dd1565b73ffffffffffffffffffffffffffffffffffffffff16610f1e611035565b73ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b9061373f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461106e90613b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461109a90613b8e565b80156110e75780601f106110bc576101008083540402835291602001916110e7565b820191906000526020600020905b8154815290600101906020018083116110ca57829003601f168201915b5050505050905090565b60095481565b60011515600b60009054906101000a900460ff1615151461114d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111449061359f565b60405180910390fd5b6124ba60085410611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a9061381f565b60405180910390fd5b600081116111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd906135ff565b60405180910390fd5b601481111561121a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112119061351f565b60405180910390fd5b6008546124ba61122a9190613a80565b81111561126c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611263906137bf565b60405180910390fd5b80611275611581565b61127f9190613a26565b34146112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b7906136bf565b60405180910390fd5b60006112ca611dd1565b73ffffffffffffffffffffffffffffffffffffffff167fd05f136c8b9c794ce82ea2b56e8f38730e1efc3284614500323dbc2b119e4b716001600854611310919061399f565b8460405161131f9291906138ac565b60405180910390a260005b828110156113755761133a612240565b915061134d611347611dd1565b83612399565b600160085461135c919061399f565b600881905550808061136d90613bf1565b91505061132a565b505050565b611382611dd1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e7906135df565b60405180910390fd5b80600560006113fd611dd1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114aa611dd1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114ef91906134e2565b60405180910390a35050565b611503611dd1565b73ffffffffffffffffffffffffffffffffffffffff16611521611035565b73ffffffffffffffffffffffffffffffffffffffff1614611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156e9061373f565b60405180910390fd5b8060098190555050565b60006101f460085411611597576000905061159d565b60095490505b90565b6115b16115ab611dd1565b83611f06565b6115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e7906137ff565b60405180910390fd5b6115fc84848484612567565b50505050565b61160a611dd1565b73ffffffffffffffffffffffffffffffffffffffff16611628611035565b73ffffffffffffffffffffffffffffffffffffffff161461167e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116759061373f565b60405180910390fd5b6124ba600854106116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb9061381f565b60405180910390fd5b6008546124ba6116d49190613a80565b60011115611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e906137bf565b60405180910390fd5b6000611721611dd1565b73ffffffffffffffffffffffffffffffffffffffff167fd05f136c8b9c794ce82ea2b56e8f38730e1efc3284614500323dbc2b119e4b716001600854611767919061399f565b600160405161177792919061385a565b60405180910390a2611787612240565b90506117938282612399565b60016008546117a2919061399f565b6008819055505050565b60606117b782611d65565b6117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed906136ff565b60405180910390fd5b600060066000848152602001908152602001600020805461181690613b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461184290613b8e565b801561188f5780601f106118645761010080835404028352916020019161188f565b820191906000526020600020905b81548152906001019060200180831161187257829003601f168201915b5050505050905060006118a06125c3565b90506000815114156118b65781925050506118f9565b6000825111156118eb5780826040516020016118d39291906133d8565b604051602081830303815290604052925050506118f9565b6118f484612655565b925050505b919050565b611906611dd1565b73ffffffffffffffffffffffffffffffffffffffff16611924611035565b73ffffffffffffffffffffffffffffffffffffffff161461197a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119719061373f565b60405180910390fd5b600015156124c760009054906101000a900460ff161515146119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c8906137df565b60405180910390fd5b6000806119dc611dd1565b73ffffffffffffffffffffffffffffffffffffffff167fd05f136c8b9c794ce82ea2b56e8f38730e1efc3284614500323dbc2b119e4b716001600854611a22919061399f565b6028604051611a32929190613883565b60405180910390a2600091505b6028821015611a8b57611a50612240565b9050611a63611a5d611dd1565b82612399565b6001600854611a72919061399f565b6008819055508180611a8390613bf1565b925050611a3f565b60016124c760006101000a81548160ff0219169083151502179055505050565b6000600854905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b51611dd1565b73ffffffffffffffffffffffffffffffffffffffff16611b6f611035565b73ffffffffffffffffffffffffffffffffffffffff1614611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc9061373f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c9061355f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e4c83610c67565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e9b82611d65565b611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed19061369f565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611f01929190612a49565b505050565b6000611f1182611d65565b611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f479061361f565b60405180910390fd5b6000611f5b83610c67565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fca57508373ffffffffffffffffffffffffffffffffffffffff16611fb28461084e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611fdb5750611fda8185611ab5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661200482610c67565b73ffffffffffffffffffffffffffffffffffffffff161461205a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120519061375f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c1906135bf565b60405180910390fd5b6120d5838383612739565b6120e0600082611dd9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121309190613a80565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612187919061399f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000806008546124ba6122539190613a80565b9050600081600c54334442604051602001612271949392919061342d565b6040516020818303038152906040528051906020012060001c6122949190613c68565b9050600080600d836124ba81106122ae576122ad613d26565b5b0154146122d357600d826124ba81106122ca576122c9613d26565b5b015490506122d7565b8190505b6000600d6001856122e89190613a80565b6124ba81106122fa576122f9613d26565b5b0154141561232e5760018361230f9190613a80565b600d836124ba811061232457612323613d26565b5b018190555061236c565b600d60018461233d9190613a80565b6124ba811061234f5761234e613d26565b5b0154600d836124ba811061236657612365613d26565b5b01819055505b600c600081548092919061237f90613bf1565b9190505550600181612391919061399f565b935050505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612400906136df565b60405180910390fd5b61241281611d65565b15612452576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124499061357f565b60405180910390fd5b61245e60008383612739565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ae919061399f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612572848484611fe4565b61257e8484848461273e565b6125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b49061353f565b60405180910390fd5b50505050565b6060600a80546125d290613b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546125fe90613b8e565b801561264b5780601f106126205761010080835404028352916020019161264b565b820191906000526020600020905b81548152906001019060200180831161262e57829003601f168201915b5050505050905090565b606061266082611d65565b61269f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126969061377f565b60405180910390fd5b60006126a96125c3565b905060006040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250905060008251116127035760405180602001604052806000815250612730565b8161270d856128d5565b82604051602001612720939291906133fc565b6040516020818303038152906040525b92505050919050565b505050565b600061275f8473ffffffffffffffffffffffffffffffffffffffff16612a36565b156128c8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612788611dd1565b8786866040518563ffffffff1660e01b81526004016127aa9493929190613496565b602060405180830381600087803b1580156127c457600080fd5b505af19250505080156127f557506040513d601f19601f820116820180604052508101906127f29190612e52565b60015b612878573d8060008114612825576040519150601f19603f3d011682016040523d82523d6000602084013e61282a565b606091505b50600081511415612870576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128679061353f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128cd565b600190505b949350505050565b6060600082141561291d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a31565b600082905060005b6000821461294f57808061293890613bf1565b915050600a8261294891906139f5565b9150612925565b60008167ffffffffffffffff81111561296b5761296a613d55565b5b6040519080825280601f01601f19166020018201604052801561299d5781602001600182028036833780820191505090505b5090505b60008514612a2a576001826129b69190613a80565b9150600a856129c59190613c68565b60306129d1919061399f565b60f81b8183815181106129e7576129e6613d26565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a2391906139f5565b94506129a1565b8093505050505b919050565b600080823b905060008111915050919050565b828054612a5590613b8e565b90600052602060002090601f016020900481019282612a775760008555612abe565b82601f10612a9057805160ff1916838001178555612abe565b82800160010185558215612abe579182015b82811115612abd578251825591602001919060010190612aa2565b5b509050612acb9190612acf565b5090565b5b80821115612ae8576000816000905550600101612ad0565b5090565b6000612aff612afa846138fa565b6138d5565b905082815260208101848484011115612b1b57612b1a613d89565b5b612b26848285613b4c565b509392505050565b6000612b41612b3c8461392b565b6138d5565b905082815260208101848484011115612b5d57612b5c613d89565b5b612b68848285613b4c565b509392505050565b600081359050612b7f816143f1565b92915050565b600081359050612b9481614408565b92915050565b600081359050612ba98161441f565b92915050565b600081519050612bbe8161441f565b92915050565b600082601f830112612bd957612bd8613d84565b5b8135612be9848260208601612aec565b91505092915050565b600082601f830112612c0757612c06613d84565b5b8135612c17848260208601612b2e565b91505092915050565b600081359050612c2f81614436565b92915050565b600060208284031215612c4b57612c4a613d93565b5b6000612c5984828501612b70565b91505092915050565b60008060408385031215612c7957612c78613d93565b5b6000612c8785828601612b70565b9250506020612c9885828601612b70565b9150509250929050565b600080600060608486031215612cbb57612cba613d93565b5b6000612cc986828701612b70565b9350506020612cda86828701612b70565b9250506040612ceb86828701612c20565b9150509250925092565b60008060008060808587031215612d0f57612d0e613d93565b5b6000612d1d87828801612b70565b9450506020612d2e87828801612b70565b9350506040612d3f87828801612c20565b925050606085013567ffffffffffffffff811115612d6057612d5f613d8e565b5b612d6c87828801612bc4565b91505092959194509250565b60008060408385031215612d8f57612d8e613d93565b5b6000612d9d85828601612b70565b9250506020612dae85828601612b85565b9150509250929050565b60008060408385031215612dcf57612dce613d93565b5b6000612ddd85828601612b70565b9250506020612dee85828601612c20565b9150509250929050565b600060208284031215612e0e57612e0d613d93565b5b6000612e1c84828501612b85565b91505092915050565b600060208284031215612e3b57612e3a613d93565b5b6000612e4984828501612b9a565b91505092915050565b600060208284031215612e6857612e67613d93565b5b6000612e7684828501612baf565b91505092915050565b600060208284031215612e9557612e94613d93565b5b600082013567ffffffffffffffff811115612eb357612eb2613d8e565b5b612ebf84828501612bf2565b91505092915050565b600060208284031215612ede57612edd613d93565b5b6000612eec84828501612c20565b91505092915050565b60008060408385031215612f0c57612f0b613d93565b5b6000612f1a85828601612c20565b925050602083013567ffffffffffffffff811115612f3b57612f3a613d8e565b5b612f4785828601612bf2565b9150509250929050565b612f5a81613ab4565b82525050565b612f71612f6c82613ab4565b613c3a565b82525050565b612f8081613ac6565b82525050565b6000612f918261395c565b612f9b8185613972565b9350612fab818560208601613b5b565b612fb481613d98565b840191505092915050565b612fc881613b28565b82525050565b612fd781613b3a565b82525050565b6000612fe882613967565b612ff28185613983565b9350613002818560208601613b5b565b61300b81613d98565b840191505092915050565b600061302182613967565b61302b8185613994565b935061303b818560208601613b5b565b80840191505092915050565b6000613054601883613983565b915061305f82613db6565b602082019050919050565b6000613077603283613983565b915061308282613ddf565b604082019050919050565b600061309a602683613983565b91506130a582613e2e565b604082019050919050565b60006130bd601c83613983565b91506130c882613e7d565b602082019050919050565b60006130e0601983613983565b91506130eb82613ea6565b602082019050919050565b6000613103602483613983565b915061310e82613ecf565b604082019050919050565b6000613126601983613983565b915061313182613f1e565b602082019050919050565b6000613149601783613983565b915061315482613f47565b602082019050919050565b600061316c602c83613983565b915061317782613f70565b604082019050919050565b600061318f603883613983565b915061319a82613fbf565b604082019050919050565b60006131b2602a83613983565b91506131bd8261400e565b604082019050919050565b60006131d5602983613983565b91506131e08261405d565b604082019050919050565b60006131f8602e83613983565b9150613203826140ac565b604082019050919050565b600061321b601283613983565b9150613226826140fb565b602082019050919050565b600061323e602083613983565b915061324982614124565b602082019050919050565b6000613261603183613983565b915061326c8261414d565b604082019050919050565b6000613284602c83613983565b915061328f8261419c565b604082019050919050565b60006132a7602083613983565b91506132b2826141eb565b602082019050919050565b60006132ca602983613983565b91506132d582614214565b604082019050919050565b60006132ed602f83613983565b91506132f882614263565b604082019050919050565b6000613310602183613983565b915061331b826142b2565b604082019050919050565b6000613333602283613983565b915061333e82614301565b604082019050919050565b6000613356601d83613983565b915061336182614350565b602082019050919050565b6000613379603183613983565b915061338482614379565b604082019050919050565b600061339c601283613983565b91506133a7826143c8565b602082019050919050565b6133bb81613b1e565b82525050565b6133d26133cd82613b1e565b613c5e565b82525050565b60006133e48285613016565b91506133f08284613016565b91508190509392505050565b60006134088286613016565b91506134148285613016565b91506134208284613016565b9150819050949350505050565b600061343982876133c1565b6020820191506134498286612f60565b60148201915061345982856133c1565b60208201915061346982846133c1565b60208201915081905095945050505050565b60006020820190506134906000830184612f51565b92915050565b60006080820190506134ab6000830187612f51565b6134b86020830186612f51565b6134c560408301856133b2565b81810360608301526134d78184612f86565b905095945050505050565b60006020820190506134f76000830184612f77565b92915050565b600060208201905081810360008301526135178184612fdd565b905092915050565b6000602082019050818103600083015261353881613047565b9050919050565b600060208201905081810360008301526135588161306a565b9050919050565b600060208201905081810360008301526135788161308d565b9050919050565b60006020820190508181036000830152613598816130b0565b9050919050565b600060208201905081810360008301526135b8816130d3565b9050919050565b600060208201905081810360008301526135d8816130f6565b9050919050565b600060208201905081810360008301526135f881613119565b9050919050565b600060208201905081810360008301526136188161313c565b9050919050565b600060208201905081810360008301526136388161315f565b9050919050565b6000602082019050818103600083015261365881613182565b9050919050565b60006020820190508181036000830152613678816131a5565b9050919050565b60006020820190508181036000830152613698816131c8565b9050919050565b600060208201905081810360008301526136b8816131eb565b9050919050565b600060208201905081810360008301526136d88161320e565b9050919050565b600060208201905081810360008301526136f881613231565b9050919050565b6000602082019050818103600083015261371881613254565b9050919050565b6000602082019050818103600083015261373881613277565b9050919050565b600060208201905081810360008301526137588161329a565b9050919050565b60006020820190508181036000830152613778816132bd565b9050919050565b60006020820190508181036000830152613798816132e0565b9050919050565b600060208201905081810360008301526137b881613303565b9050919050565b600060208201905081810360008301526137d881613326565b9050919050565b600060208201905081810360008301526137f881613349565b9050919050565b600060208201905081810360008301526138188161336c565b9050919050565b600060208201905081810360008301526138388161338f565b9050919050565b600060208201905061385460008301846133b2565b92915050565b600060408201905061386f60008301856133b2565b61387c6020830184612fbf565b9392505050565b600060408201905061389860008301856133b2565b6138a56020830184612fce565b9392505050565b60006040820190506138c160008301856133b2565b6138ce60208301846133b2565b9392505050565b60006138df6138f0565b90506138eb8282613bc0565b919050565b6000604051905090565b600067ffffffffffffffff82111561391557613914613d55565b5b61391e82613d98565b9050602081019050919050565b600067ffffffffffffffff82111561394657613945613d55565b5b61394f82613d98565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139aa82613b1e565b91506139b583613b1e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139ea576139e9613c99565b5b828201905092915050565b6000613a0082613b1e565b9150613a0b83613b1e565b925082613a1b57613a1a613cc8565b5b828204905092915050565b6000613a3182613b1e565b9150613a3c83613b1e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a7557613a74613c99565b5b828202905092915050565b6000613a8b82613b1e565b9150613a9683613b1e565b925082821015613aa957613aa8613c99565b5b828203905092915050565b6000613abf82613afe565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613b3382613b1e565b9050919050565b6000613b4582613b1e565b9050919050565b82818337600083830152505050565b60005b83811015613b79578082015181840152602081019050613b5e565b83811115613b88576000848401525b50505050565b60006002820490506001821680613ba657607f821691505b60208210811415613bba57613bb9613cf7565b5b50919050565b613bc982613d98565b810181811067ffffffffffffffff82111715613be857613be7613d55565b5b80604052505050565b6000613bfc82613b1e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c2f57613c2e613c99565b5b600182019050919050565b6000613c4582613c4c565b9050919050565b6000613c5782613da9565b9050919050565b6000819050919050565b6000613c7382613b1e565b9150613c7e83613b1e565b925082613c8e57613c8d613cc8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f547279696e6720746f206d696e7420746f6f206d616e79210000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c6520686173206e6f742073746172746564207965742100000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d757374206d696e74206174206c65617374206f6e6521000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f6d73672e76616c756520746f6f206c6f77210000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768207061696e74696e6773206c65667420746f206d696e60008201527f7421000000000000000000000000000000000000000000000000000000000000602082015250565b7f446576207061696e74696e677320616c7265616479206d696e74656421000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f207061696e74696e6773206c656674210000000000000000000000000000600082015250565b6143fa81613ab4565b811461440557600080fd5b50565b61441181613ac6565b811461441c57600080fd5b50565b61442881613ad2565b811461443357600080fd5b50565b61443f81613b1e565b811461444a57600080fd5b5056fea264697066735822122033a72ff3f93ac9357e43c5ce21ce93275adfd55f66f83095a4be449ac69c479464736f6c6343000807003368747470733a2f2f6d657461646174612e776569726461697061696e74696e67732e636f6d2f6d657461646174612f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010576569726441495061696e74696e67730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045741495000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c80638da5cb5b116100f7578063b88d4fde11610095578063e777df2011610064578063e777df201461061e578063e985e9c514610649578063f2fde38b14610686578063fe9c8bfa146106af576101cd565b8063b88d4fde14610585578063c64ac1a6146105ae578063c87b56dd146105ca578063e2ce024614610607576101cd565b8063a0712d68116100d1578063a0712d68146104ec578063a22cb46514610508578063a2b40d1914610531578063a7f93ebd1461055a576101cd565b80638da5cb5b1461046b57806395d89b4114610496578063a035b1fe146104c1576101cd565b80633ccfd60b1161016f57806368e243271161013e57806368e24327146103c35780636c0360eb146103ec57806370a0823114610417578063715018a614610454576101cd565b80633ccfd60b1461031d57806342842e0e1461033457806355f804b31461035d5780636352211e14610386576101cd565b8063095ea7b3116101ab578063095ea7b314610277578063162094c4146102a057806318160ddd146102c957806323b872dd146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612e25565b6106da565b60405161020691906134e2565b60405180910390f35b34801561021b57600080fd5b506102246107bc565b60405161023191906134fd565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190612ec8565b61084e565b60405161026e919061347b565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612db8565b6108d3565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190612ef5565b6109eb565b005b3480156102d557600080fd5b506102de610a75565b6040516102eb919061383f565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612ca2565b610a7f565b005b34801561032957600080fd5b50610332610adf565b005b34801561034057600080fd5b5061035b60048036038101906103569190612ca2565b610bb1565b005b34801561036957600080fd5b50610384600480360381019061037f9190612e7f565b610bd1565b005b34801561039257600080fd5b506103ad60048036038101906103a89190612ec8565b610c67565b6040516103ba919061347b565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190612df8565b610d19565b005b3480156103f857600080fd5b50610401610db2565b60405161040e91906134fd565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612c35565b610e40565b60405161044b919061383f565b60405180910390f35b34801561046057600080fd5b50610469610ef8565b005b34801561047757600080fd5b50610480611035565b60405161048d919061347b565b60405180910390f35b3480156104a257600080fd5b506104ab61105f565b6040516104b891906134fd565b60405180910390f35b3480156104cd57600080fd5b506104d66110f1565b6040516104e3919061383f565b60405180910390f35b61050660048036038101906105019190612ec8565b6110f7565b005b34801561051457600080fd5b5061052f600480360381019061052a9190612d78565b61137a565b005b34801561053d57600080fd5b5061055860048036038101906105539190612ec8565b6114fb565b005b34801561056657600080fd5b5061056f611581565b60405161057c919061383f565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190612cf5565b6115a0565b005b6105c860048036038101906105c39190612c35565b611602565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190612ec8565b6117ac565b6040516105fe91906134fd565b60405180910390f35b34801561061357600080fd5b5061061c6118fe565b005b34801561062a57600080fd5b50610633611aab565b604051610640919061383f565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190612c62565b611ab5565b60405161067d91906134e2565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a89190612c35565b611b49565b005b3480156106bb57600080fd5b506106c4611cf5565b6040516106d1919061383f565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107a557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107b557506107b482611cfb565b5b9050919050565b6060600080546107cb90613b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546107f790613b8e565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b600061085982611d65565b610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f9061371f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108de82610c67565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109469061379f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096e611dd1565b73ffffffffffffffffffffffffffffffffffffffff16148061099d575061099c81610997611dd1565b611ab5565b5b6109dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d39061363f565b60405180910390fd5b6109e68383611dd9565b505050565b6109f3611dd1565b73ffffffffffffffffffffffffffffffffffffffff16610a11611035565b73ffffffffffffffffffffffffffffffffffffffff1614610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e9061373f565b60405180910390fd5b610a718282611e92565b5050565b60006124ba905090565b610a90610a8a611dd1565b82611f06565b610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906137ff565b60405180910390fd5b610ada838383611fe4565b505050565b610ae7611dd1565b73ffffffffffffffffffffffffffffffffffffffff16610b05611035565b73ffffffffffffffffffffffffffffffffffffffff1614610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b529061373f565b60405180910390fd5b6000479050610b68611035565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bad573d6000803e3d6000fd5b5050565b610bcc838383604051806020016040528060008152506115a0565b505050565b610bd9611dd1565b73ffffffffffffffffffffffffffffffffffffffff16610bf7611035565b73ffffffffffffffffffffffffffffffffffffffff1614610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c449061373f565b60405180910390fd5b80600a9080519060200190610c63929190612a49565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d079061367f565b60405180910390fd5b80915050919050565b610d21611dd1565b73ffffffffffffffffffffffffffffffffffffffff16610d3f611035565b73ffffffffffffffffffffffffffffffffffffffff1614610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c9061373f565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b600a8054610dbf90613b8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610deb90613b8e565b8015610e385780601f10610e0d57610100808354040283529160200191610e38565b820191906000526020600020905b815481529060010190602001808311610e1b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea89061365f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f00611dd1565b73ffffffffffffffffffffffffffffffffffffffff16610f1e611035565b73ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b9061373f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461106e90613b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461109a90613b8e565b80156110e75780601f106110bc576101008083540402835291602001916110e7565b820191906000526020600020905b8154815290600101906020018083116110ca57829003601f168201915b5050505050905090565b60095481565b60011515600b60009054906101000a900460ff1615151461114d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111449061359f565b60405180910390fd5b6124ba60085410611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a9061381f565b60405180910390fd5b600081116111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd906135ff565b60405180910390fd5b601481111561121a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112119061351f565b60405180910390fd5b6008546124ba61122a9190613a80565b81111561126c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611263906137bf565b60405180910390fd5b80611275611581565b61127f9190613a26565b34146112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b7906136bf565b60405180910390fd5b60006112ca611dd1565b73ffffffffffffffffffffffffffffffffffffffff167fd05f136c8b9c794ce82ea2b56e8f38730e1efc3284614500323dbc2b119e4b716001600854611310919061399f565b8460405161131f9291906138ac565b60405180910390a260005b828110156113755761133a612240565b915061134d611347611dd1565b83612399565b600160085461135c919061399f565b600881905550808061136d90613bf1565b91505061132a565b505050565b611382611dd1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e7906135df565b60405180910390fd5b80600560006113fd611dd1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114aa611dd1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114ef91906134e2565b60405180910390a35050565b611503611dd1565b73ffffffffffffffffffffffffffffffffffffffff16611521611035565b73ffffffffffffffffffffffffffffffffffffffff1614611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156e9061373f565b60405180910390fd5b8060098190555050565b60006101f460085411611597576000905061159d565b60095490505b90565b6115b16115ab611dd1565b83611f06565b6115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e7906137ff565b60405180910390fd5b6115fc84848484612567565b50505050565b61160a611dd1565b73ffffffffffffffffffffffffffffffffffffffff16611628611035565b73ffffffffffffffffffffffffffffffffffffffff161461167e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116759061373f565b60405180910390fd5b6124ba600854106116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb9061381f565b60405180910390fd5b6008546124ba6116d49190613a80565b60011115611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e906137bf565b60405180910390fd5b6000611721611dd1565b73ffffffffffffffffffffffffffffffffffffffff167fd05f136c8b9c794ce82ea2b56e8f38730e1efc3284614500323dbc2b119e4b716001600854611767919061399f565b600160405161177792919061385a565b60405180910390a2611787612240565b90506117938282612399565b60016008546117a2919061399f565b6008819055505050565b60606117b782611d65565b6117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed906136ff565b60405180910390fd5b600060066000848152602001908152602001600020805461181690613b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461184290613b8e565b801561188f5780601f106118645761010080835404028352916020019161188f565b820191906000526020600020905b81548152906001019060200180831161187257829003601f168201915b5050505050905060006118a06125c3565b90506000815114156118b65781925050506118f9565b6000825111156118eb5780826040516020016118d39291906133d8565b604051602081830303815290604052925050506118f9565b6118f484612655565b925050505b919050565b611906611dd1565b73ffffffffffffffffffffffffffffffffffffffff16611924611035565b73ffffffffffffffffffffffffffffffffffffffff161461197a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119719061373f565b60405180910390fd5b600015156124c760009054906101000a900460ff161515146119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c8906137df565b60405180910390fd5b6000806119dc611dd1565b73ffffffffffffffffffffffffffffffffffffffff167fd05f136c8b9c794ce82ea2b56e8f38730e1efc3284614500323dbc2b119e4b716001600854611a22919061399f565b6028604051611a32929190613883565b60405180910390a2600091505b6028821015611a8b57611a50612240565b9050611a63611a5d611dd1565b82612399565b6001600854611a72919061399f565b6008819055508180611a8390613bf1565b925050611a3f565b60016124c760006101000a81548160ff0219169083151502179055505050565b6000600854905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b51611dd1565b73ffffffffffffffffffffffffffffffffffffffff16611b6f611035565b73ffffffffffffffffffffffffffffffffffffffff1614611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc9061373f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c9061355f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e4c83610c67565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e9b82611d65565b611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed19061369f565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611f01929190612a49565b505050565b6000611f1182611d65565b611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f479061361f565b60405180910390fd5b6000611f5b83610c67565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fca57508373ffffffffffffffffffffffffffffffffffffffff16611fb28461084e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611fdb5750611fda8185611ab5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661200482610c67565b73ffffffffffffffffffffffffffffffffffffffff161461205a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120519061375f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c1906135bf565b60405180910390fd5b6120d5838383612739565b6120e0600082611dd9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121309190613a80565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612187919061399f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000806008546124ba6122539190613a80565b9050600081600c54334442604051602001612271949392919061342d565b6040516020818303038152906040528051906020012060001c6122949190613c68565b9050600080600d836124ba81106122ae576122ad613d26565b5b0154146122d357600d826124ba81106122ca576122c9613d26565b5b015490506122d7565b8190505b6000600d6001856122e89190613a80565b6124ba81106122fa576122f9613d26565b5b0154141561232e5760018361230f9190613a80565b600d836124ba811061232457612323613d26565b5b018190555061236c565b600d60018461233d9190613a80565b6124ba811061234f5761234e613d26565b5b0154600d836124ba811061236657612365613d26565b5b01819055505b600c600081548092919061237f90613bf1565b9190505550600181612391919061399f565b935050505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612400906136df565b60405180910390fd5b61241281611d65565b15612452576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124499061357f565b60405180910390fd5b61245e60008383612739565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ae919061399f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612572848484611fe4565b61257e8484848461273e565b6125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b49061353f565b60405180910390fd5b50505050565b6060600a80546125d290613b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546125fe90613b8e565b801561264b5780601f106126205761010080835404028352916020019161264b565b820191906000526020600020905b81548152906001019060200180831161262e57829003601f168201915b5050505050905090565b606061266082611d65565b61269f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126969061377f565b60405180910390fd5b60006126a96125c3565b905060006040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250905060008251116127035760405180602001604052806000815250612730565b8161270d856128d5565b82604051602001612720939291906133fc565b6040516020818303038152906040525b92505050919050565b505050565b600061275f8473ffffffffffffffffffffffffffffffffffffffff16612a36565b156128c8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612788611dd1565b8786866040518563ffffffff1660e01b81526004016127aa9493929190613496565b602060405180830381600087803b1580156127c457600080fd5b505af19250505080156127f557506040513d601f19601f820116820180604052508101906127f29190612e52565b60015b612878573d8060008114612825576040519150601f19603f3d011682016040523d82523d6000602084013e61282a565b606091505b50600081511415612870576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128679061353f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128cd565b600190505b949350505050565b6060600082141561291d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a31565b600082905060005b6000821461294f57808061293890613bf1565b915050600a8261294891906139f5565b9150612925565b60008167ffffffffffffffff81111561296b5761296a613d55565b5b6040519080825280601f01601f19166020018201604052801561299d5781602001600182028036833780820191505090505b5090505b60008514612a2a576001826129b69190613a80565b9150600a856129c59190613c68565b60306129d1919061399f565b60f81b8183815181106129e7576129e6613d26565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a2391906139f5565b94506129a1565b8093505050505b919050565b600080823b905060008111915050919050565b828054612a5590613b8e565b90600052602060002090601f016020900481019282612a775760008555612abe565b82601f10612a9057805160ff1916838001178555612abe565b82800160010185558215612abe579182015b82811115612abd578251825591602001919060010190612aa2565b5b509050612acb9190612acf565b5090565b5b80821115612ae8576000816000905550600101612ad0565b5090565b6000612aff612afa846138fa565b6138d5565b905082815260208101848484011115612b1b57612b1a613d89565b5b612b26848285613b4c565b509392505050565b6000612b41612b3c8461392b565b6138d5565b905082815260208101848484011115612b5d57612b5c613d89565b5b612b68848285613b4c565b509392505050565b600081359050612b7f816143f1565b92915050565b600081359050612b9481614408565b92915050565b600081359050612ba98161441f565b92915050565b600081519050612bbe8161441f565b92915050565b600082601f830112612bd957612bd8613d84565b5b8135612be9848260208601612aec565b91505092915050565b600082601f830112612c0757612c06613d84565b5b8135612c17848260208601612b2e565b91505092915050565b600081359050612c2f81614436565b92915050565b600060208284031215612c4b57612c4a613d93565b5b6000612c5984828501612b70565b91505092915050565b60008060408385031215612c7957612c78613d93565b5b6000612c8785828601612b70565b9250506020612c9885828601612b70565b9150509250929050565b600080600060608486031215612cbb57612cba613d93565b5b6000612cc986828701612b70565b9350506020612cda86828701612b70565b9250506040612ceb86828701612c20565b9150509250925092565b60008060008060808587031215612d0f57612d0e613d93565b5b6000612d1d87828801612b70565b9450506020612d2e87828801612b70565b9350506040612d3f87828801612c20565b925050606085013567ffffffffffffffff811115612d6057612d5f613d8e565b5b612d6c87828801612bc4565b91505092959194509250565b60008060408385031215612d8f57612d8e613d93565b5b6000612d9d85828601612b70565b9250506020612dae85828601612b85565b9150509250929050565b60008060408385031215612dcf57612dce613d93565b5b6000612ddd85828601612b70565b9250506020612dee85828601612c20565b9150509250929050565b600060208284031215612e0e57612e0d613d93565b5b6000612e1c84828501612b85565b91505092915050565b600060208284031215612e3b57612e3a613d93565b5b6000612e4984828501612b9a565b91505092915050565b600060208284031215612e6857612e67613d93565b5b6000612e7684828501612baf565b91505092915050565b600060208284031215612e9557612e94613d93565b5b600082013567ffffffffffffffff811115612eb357612eb2613d8e565b5b612ebf84828501612bf2565b91505092915050565b600060208284031215612ede57612edd613d93565b5b6000612eec84828501612c20565b91505092915050565b60008060408385031215612f0c57612f0b613d93565b5b6000612f1a85828601612c20565b925050602083013567ffffffffffffffff811115612f3b57612f3a613d8e565b5b612f4785828601612bf2565b9150509250929050565b612f5a81613ab4565b82525050565b612f71612f6c82613ab4565b613c3a565b82525050565b612f8081613ac6565b82525050565b6000612f918261395c565b612f9b8185613972565b9350612fab818560208601613b5b565b612fb481613d98565b840191505092915050565b612fc881613b28565b82525050565b612fd781613b3a565b82525050565b6000612fe882613967565b612ff28185613983565b9350613002818560208601613b5b565b61300b81613d98565b840191505092915050565b600061302182613967565b61302b8185613994565b935061303b818560208601613b5b565b80840191505092915050565b6000613054601883613983565b915061305f82613db6565b602082019050919050565b6000613077603283613983565b915061308282613ddf565b604082019050919050565b600061309a602683613983565b91506130a582613e2e565b604082019050919050565b60006130bd601c83613983565b91506130c882613e7d565b602082019050919050565b60006130e0601983613983565b91506130eb82613ea6565b602082019050919050565b6000613103602483613983565b915061310e82613ecf565b604082019050919050565b6000613126601983613983565b915061313182613f1e565b602082019050919050565b6000613149601783613983565b915061315482613f47565b602082019050919050565b600061316c602c83613983565b915061317782613f70565b604082019050919050565b600061318f603883613983565b915061319a82613fbf565b604082019050919050565b60006131b2602a83613983565b91506131bd8261400e565b604082019050919050565b60006131d5602983613983565b91506131e08261405d565b604082019050919050565b60006131f8602e83613983565b9150613203826140ac565b604082019050919050565b600061321b601283613983565b9150613226826140fb565b602082019050919050565b600061323e602083613983565b915061324982614124565b602082019050919050565b6000613261603183613983565b915061326c8261414d565b604082019050919050565b6000613284602c83613983565b915061328f8261419c565b604082019050919050565b60006132a7602083613983565b91506132b2826141eb565b602082019050919050565b60006132ca602983613983565b91506132d582614214565b604082019050919050565b60006132ed602f83613983565b91506132f882614263565b604082019050919050565b6000613310602183613983565b915061331b826142b2565b604082019050919050565b6000613333602283613983565b915061333e82614301565b604082019050919050565b6000613356601d83613983565b915061336182614350565b602082019050919050565b6000613379603183613983565b915061338482614379565b604082019050919050565b600061339c601283613983565b91506133a7826143c8565b602082019050919050565b6133bb81613b1e565b82525050565b6133d26133cd82613b1e565b613c5e565b82525050565b60006133e48285613016565b91506133f08284613016565b91508190509392505050565b60006134088286613016565b91506134148285613016565b91506134208284613016565b9150819050949350505050565b600061343982876133c1565b6020820191506134498286612f60565b60148201915061345982856133c1565b60208201915061346982846133c1565b60208201915081905095945050505050565b60006020820190506134906000830184612f51565b92915050565b60006080820190506134ab6000830187612f51565b6134b86020830186612f51565b6134c560408301856133b2565b81810360608301526134d78184612f86565b905095945050505050565b60006020820190506134f76000830184612f77565b92915050565b600060208201905081810360008301526135178184612fdd565b905092915050565b6000602082019050818103600083015261353881613047565b9050919050565b600060208201905081810360008301526135588161306a565b9050919050565b600060208201905081810360008301526135788161308d565b9050919050565b60006020820190508181036000830152613598816130b0565b9050919050565b600060208201905081810360008301526135b8816130d3565b9050919050565b600060208201905081810360008301526135d8816130f6565b9050919050565b600060208201905081810360008301526135f881613119565b9050919050565b600060208201905081810360008301526136188161313c565b9050919050565b600060208201905081810360008301526136388161315f565b9050919050565b6000602082019050818103600083015261365881613182565b9050919050565b60006020820190508181036000830152613678816131a5565b9050919050565b60006020820190508181036000830152613698816131c8565b9050919050565b600060208201905081810360008301526136b8816131eb565b9050919050565b600060208201905081810360008301526136d88161320e565b9050919050565b600060208201905081810360008301526136f881613231565b9050919050565b6000602082019050818103600083015261371881613254565b9050919050565b6000602082019050818103600083015261373881613277565b9050919050565b600060208201905081810360008301526137588161329a565b9050919050565b60006020820190508181036000830152613778816132bd565b9050919050565b60006020820190508181036000830152613798816132e0565b9050919050565b600060208201905081810360008301526137b881613303565b9050919050565b600060208201905081810360008301526137d881613326565b9050919050565b600060208201905081810360008301526137f881613349565b9050919050565b600060208201905081810360008301526138188161336c565b9050919050565b600060208201905081810360008301526138388161338f565b9050919050565b600060208201905061385460008301846133b2565b92915050565b600060408201905061386f60008301856133b2565b61387c6020830184612fbf565b9392505050565b600060408201905061389860008301856133b2565b6138a56020830184612fce565b9392505050565b60006040820190506138c160008301856133b2565b6138ce60208301846133b2565b9392505050565b60006138df6138f0565b90506138eb8282613bc0565b919050565b6000604051905090565b600067ffffffffffffffff82111561391557613914613d55565b5b61391e82613d98565b9050602081019050919050565b600067ffffffffffffffff82111561394657613945613d55565b5b61394f82613d98565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139aa82613b1e565b91506139b583613b1e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139ea576139e9613c99565b5b828201905092915050565b6000613a0082613b1e565b9150613a0b83613b1e565b925082613a1b57613a1a613cc8565b5b828204905092915050565b6000613a3182613b1e565b9150613a3c83613b1e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a7557613a74613c99565b5b828202905092915050565b6000613a8b82613b1e565b9150613a9683613b1e565b925082821015613aa957613aa8613c99565b5b828203905092915050565b6000613abf82613afe565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613b3382613b1e565b9050919050565b6000613b4582613b1e565b9050919050565b82818337600083830152505050565b60005b83811015613b79578082015181840152602081019050613b5e565b83811115613b88576000848401525b50505050565b60006002820490506001821680613ba657607f821691505b60208210811415613bba57613bb9613cf7565b5b50919050565b613bc982613d98565b810181811067ffffffffffffffff82111715613be857613be7613d55565b5b80604052505050565b6000613bfc82613b1e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c2f57613c2e613c99565b5b600182019050919050565b6000613c4582613c4c565b9050919050565b6000613c5782613da9565b9050919050565b6000819050919050565b6000613c7382613b1e565b9150613c7e83613b1e565b925082613c8e57613c8d613cc8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f547279696e6720746f206d696e7420746f6f206d616e79210000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c6520686173206e6f742073746172746564207965742100000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d757374206d696e74206174206c65617374206f6e6521000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f6d73672e76616c756520746f6f206c6f77210000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768207061696e74696e6773206c65667420746f206d696e60008201527f7421000000000000000000000000000000000000000000000000000000000000602082015250565b7f446576207061696e74696e677320616c7265616479206d696e74656421000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f207061696e74696e6773206c656674210000000000000000000000000000600082015250565b6143fa81613ab4565b811461440557600080fd5b50565b61441181613ac6565b811461441c57600080fd5b50565b61442881613ad2565b811461443357600080fd5b50565b61443f81613b1e565b811461444a57600080fd5b5056fea264697066735822122033a72ff3f93ac9357e43c5ce21ce93275adfd55f66f83095a4be449ac69c479464736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010576569726441495061696e74696e67730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045741495000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): WeirdAIPaintings
Arg [1] : symbol_ (string): WAIP

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [3] : 576569726441495061696e74696e677300000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 5741495000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

36351:4592:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22555:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23487:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24991:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24528:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37578:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37037:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25881:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40801:137;;;;;;;;;;;;;:::i;:::-;;26257:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37373:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23181:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37719:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36717:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22911:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2668:148;;;;;;;;;;;;;:::i;:::-;;2017:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23656:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36658:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38011:969;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25284:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37477:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37818:185;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26479:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38993:485;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34790:688;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40342:446;;;;;;;;;;;;;:::i;:::-;;37151:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25650:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2971:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36501:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22555:292;22657:4;22696:25;22681:40;;;:11;:40;;;;:105;;;;22753:33;22738:48;;;:11;:48;;;;22681:105;:158;;;;22803:36;22827:11;22803:23;:36::i;:::-;22681:158;22674:165;;22555:292;;;:::o;23487:100::-;23541:13;23574:5;23567:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23487:100;:::o;24991:221::-;25067:7;25095:16;25103:7;25095;:16::i;:::-;25087:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25180:15;:24;25196:7;25180:24;;;;;;;;;;;;;;;;;;;;;25173:31;;24991:221;;;:::o;24528:397::-;24609:13;24625:23;24640:7;24625:14;:23::i;:::-;24609:39;;24673:5;24667:11;;:2;:11;;;;24659:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24753:5;24737:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24762:37;24779:5;24786:12;:10;:12::i;:::-;24762:16;:37::i;:::-;24737:62;24729:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;24896:21;24905:2;24909:7;24896:8;:21::i;:::-;24598:327;24528:397;;:::o;37578:133::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37670:33:::1;37683:8;37693:9;37670:12;:33::i;:::-;37578:133:::0;;:::o;37037:101::-;37089:7;36647:4;37109:21;;37037:101;:::o;25881:305::-;26042:41;26061:12;:10;:12::i;:::-;26075:7;26042:18;:41::i;:::-;26034:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26150:28;26160:4;26166:2;26170:7;26150:9;:28::i;:::-;25881:305;;;:::o;40801:137::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40849:12:::1;40864:21;40849:36;;40904:7;:5;:7::i;:::-;40896:25;;:34;40922:7;40896:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40838:100;40801:137::o:0;26257:151::-;26361:39;26378:4;26384:2;26388:7;26361:39;;;;;;;;;;;;:16;:39::i;:::-;26257:151;;;:::o;37373:96::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37454:7:::1;37444;:17;;;;;;;;;;;;:::i;:::-;;37373:96:::0;:::o;23181:239::-;23253:7;23273:13;23289:7;:16;23297:7;23289:16;;;;;;;;;;;;;;;;;;;;;23273:32;;23341:1;23324:19;;:5;:19;;;;23316:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23407:5;23400:12;;;23181:239;;;:::o;37719:87::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37792:6:::1;37778:11;;:20;;;;;;;;;;;;;;;;;;37719:87:::0;:::o;36717:73::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22911:208::-;22983:7;23028:1;23011:19;;:5;:19;;;;23003:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23095:9;:16;23105:5;23095:16;;;;;;;;;;;;;;;;23088:23;;22911:208;;;:::o;2668:148::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2775:1:::1;2738:40;;2759:6;;;;;;;;;;;2738:40;;;;;;;;;;;;2806:1;2789:6;;:19;;;;;;;;;;;;;;;;;;2668:148::o:0;2017:87::-;2063:7;2090:6;;;;;;;;;;;2083:13;;2017:87;:::o;23656:104::-;23712:13;23745:7;23738:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23656:104;:::o;36658:40::-;;;;:::o;38011:969::-;38119:4;38104:19;;:11;;;;;;;;;;;:19;;;38096:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;36647:4;38205:14;;:31;38197:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;38319:1;38309:7;:11;38301:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;36595:2;38403:7;:36;;38395:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38540:14;;36647:4;38525:29;;;;:::i;:::-;38514:7;:40;;38506:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;38668:7;38651:14;:12;:14::i;:::-;:24;;;;:::i;:::-;38638:9;:37;38630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38719:7;38755:12;:10;:12::i;:::-;38742:53;;;38784:1;38769:14;;:16;;;;:::i;:::-;38787:7;38742:53;;;;;;;:::i;:::-;;;;;;;;38810:9;38806:167;38826:7;38823:1;:10;38806:167;;;38859:13;:11;:13::i;:::-;38854:18;;38887:23;38893:12;:10;:12::i;:::-;38907:2;38887:5;:23::i;:::-;38960:1;38943:14;;:18;;;;:::i;:::-;38926:14;:35;;;;38835:3;;;;;:::i;:::-;;;;38806:167;;;;38057:923;38011:969;:::o;25284:295::-;25399:12;:10;:12::i;:::-;25387:24;;:8;:24;;;;25379:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25499:8;25454:18;:32;25473:12;:10;:12::i;:::-;25454:32;;;;;;;;;;;;;;;:42;25487:8;25454:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25552:8;25523:48;;25538:12;:10;:12::i;:::-;25523:48;;;25562:8;25523:48;;;;;;:::i;:::-;;;;;;;;25284:295;;:::o;37477:93::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37553:9:::1;37545:5;:17;;;;37477:93:::0;:::o;37818:185::-;37863:7;37904:3;37886:14;;:21;37883:113;;37930:1;37923:8;;;;37883:113;37979:5;;37972:12;;37818:185;;:::o;26479:285::-;26611:41;26630:12;:10;:12::i;:::-;26644:7;26611:18;:41::i;:::-;26603:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26717:39;26731:4;26737:2;26741:7;26750:5;26717:13;:39::i;:::-;26479:285;;;;:::o;38993:485::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36647:4:::1;39106:14;;:31;39098:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39226:14;;36647:4;39211:29;;;;:::i;:::-;39206:1;:34;;39198:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;39299:7;39335:12;:10;:12::i;:::-;39322:47;;;39364:1;39349:14;;:16;;;;:::i;:::-;39367:1;39322:47;;;;;;;:::i;:::-;;;;;;;;39385:13;:11;:13::i;:::-;39380:18;;39409:14;39415:3;39420:2;39409:5;:14::i;:::-;39469:1;39452:14;;:18;;;;:::i;:::-;39435:14;:35;;;;39056:422;38993:485:::0;:::o;34790:688::-;34863:13;34897:16;34905:7;34897;:16::i;:::-;34889:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;34980:23;35006:10;:19;35017:7;35006:19;;;;;;;;;;;34980:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35036:18;35057:10;:8;:10::i;:::-;35036:31;;35174:1;35158:4;35152:18;:23;35148:72;;;35199:9;35192:16;;;;;;35148:72;35350:1;35330:9;35324:23;:27;35320:108;;;35399:4;35405:9;35382:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35368:48;;;;;;35320:108;35447:23;35462:7;35447:14;:23::i;:::-;35440:30;;;;34790:688;;;;:::o;40342:446::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40426:5:::1;40410:21;;:12;;;;;;;;;;;:21;;;40402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40486:6;40503:7:::0;40539:12:::1;:10;:12::i;:::-;40526:48;;;40568:1;40553:14;;:16;;;;:::i;:::-;40571:2;40526:48;;;;;;;:::i;:::-;;;;;;;;40593:1;40589:5;;40585:156;40600:2;40596:1;:6;40585:156;;;40628:13;:11;:13::i;:::-;40623:18;;40656:23;40662:12;:10;:12::i;:::-;40676:2;40656:5;:23::i;:::-;40728:1;40711:14;;:18;;;;:::i;:::-;40694:14;:35;;;;40604:3;;;;;:::i;:::-;;;;40585:156;;;40776:4;40761:12;;:19;;;;;;;;;;;;;;;;;;40391:397;;40342:446::o:0;37151:99::-;37201:7;37228:14;;37221:21;;37151:99;:::o;25650:164::-;25747:4;25771:18;:25;25790:5;25771:25;;;;;;;;;;;;;;;:35;25797:8;25771:35;;;;;;;;;;;;;;;;;;;;;;;;;25764:42;;25650:164;;;;:::o;2971:244::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3080:1:::1;3060:22;;:8;:22;;;;3052:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3170:8;3141:38;;3162:6;;;;;;;;;;;3141:38;;;;;;;;;;;;3199:8;3190:6;;:17;;;;;;;;;;;;;;;;;;2971:244:::0;:::o;36501:33::-;;;;:::o;21084:157::-;21169:4;21208:25;21193:40;;;:11;:40;;;;21186:47;;21084:157;;;:::o;28231:127::-;28296:4;28348:1;28320:30;;:7;:16;28328:7;28320:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28313:37;;28231:127;;;:::o;600:98::-;653:7;680:10;673:17;;600:98;:::o;32108:174::-;32210:2;32183:15;:24;32199:7;32183:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32266:7;32262:2;32228:46;;32237:23;32252:7;32237:14;:23::i;:::-;32228:46;;;;;;;;;;;;32108:174;;:::o;35634:217::-;35734:16;35742:7;35734;:16::i;:::-;35726:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;35834:9;35812:10;:19;35823:7;35812:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;35634:217;;:::o;28525:348::-;28618:4;28643:16;28651:7;28643;:16::i;:::-;28635:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28719:13;28735:23;28750:7;28735:14;:23::i;:::-;28719:39;;28788:5;28777:16;;:7;:16;;;:51;;;;28821:7;28797:31;;:20;28809:7;28797:11;:20::i;:::-;:31;;;28777:51;:87;;;;28832:32;28849:5;28856:7;28832:16;:32::i;:::-;28777:87;28769:96;;;28525:348;;;;:::o;31446:544::-;31571:4;31544:31;;:23;31559:7;31544:14;:23::i;:::-;:31;;;31536:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31654:1;31640:16;;:2;:16;;;;31632:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31710:39;31731:4;31737:2;31741:7;31710:20;:39::i;:::-;31814:29;31831:1;31835:7;31814:8;:29::i;:::-;31875:1;31856:9;:15;31866:4;31856:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31904:1;31887:9;:13;31897:2;31887:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31935:2;31916:7;:16;31924:7;31916:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31974:7;31970:2;31955:27;;31964:4;31955:27;;;;;;;;;;;;31446:544;;;:::o;39491:839::-;39532:4;39549:14;39583;;36647:4;39566:31;;;;:::i;:::-;39549:48;;39608:10;39711:9;39653:5;;39660:10;39672:16;39690:15;39636:70;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39626:81;;;;;;39621:87;;:99;;;;:::i;:::-;39608:112;;39731:10;39780:1;39762:7;39770:5;39762:14;;;;;;;:::i;:::-;;;;:19;39758:120;;39806:7;39814:5;39806:14;;;;;;;:::i;:::-;;;;39798:22;;39758:120;;;39861:5;39853:13;;39758:120;39969:1;39943:7;39963:1;39951:9;:13;;;;:::i;:::-;39943:22;;;;;;;:::i;:::-;;;;:27;39939:283;;;40080:1;40068:9;:13;;;;:::i;:::-;40051:7;40059:5;40051:14;;;;;;;:::i;:::-;;;:30;;;;39939:283;;;40188:7;40208:1;40196:9;:13;;;;:::i;:::-;40188:22;;;;;;;:::i;:::-;;;;40171:7;40179:5;40171:14;;;;;;;:::i;:::-;;;:39;;;;39939:283;40232:5;;:7;;;;;;;;;:::i;:::-;;;;;;40321:1;40315:5;:7;;;;:::i;:::-;40308:14;;;;;39491:839;:::o;30138:382::-;30232:1;30218:16;;:2;:16;;;;30210:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30291:16;30299:7;30291;:16::i;:::-;30290:17;30282:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30353:45;30382:1;30386:2;30390:7;30353:20;:45::i;:::-;30428:1;30411:9;:13;30421:2;30411:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30459:2;30440:7;:16;30448:7;30440:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30504:7;30500:2;30479:33;;30496:1;30479:33;;;;;;;;;;;;30138:382;;:::o;27646:272::-;27760:28;27770:4;27776:2;27780:7;27760:9;:28::i;:::-;27807:48;27830:4;27836:2;27840:7;27849:5;27807:22;:48::i;:::-;27799:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27646:272;;;;:::o;37258:107::-;37318:13;37350:7;37343:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37258:107;:::o;23831:404::-;23904:13;23938:16;23946:7;23938;:16::i;:::-;23930:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24019:21;24043:10;:8;:10::i;:::-;24019:34;;24064:18;:28;;;;;;;;;;;;;;;;;;;24134:1;24116:7;24110:21;:25;:117;;;;;;;;;;;;;;;;;24175:7;24184:18;:7;:16;:18::i;:::-;24203:4;24158:50;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24110:117;24103:124;;;;23831:404;;;:::o;34303:93::-;;;;:::o;32847:843::-;32968:4;32994:15;:2;:13;;;:15::i;:::-;32990:693;;;33046:2;33030:36;;;33067:12;:10;:12::i;:::-;33081:4;33087:7;33096:5;33030:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33026:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33293:1;33276:6;:13;:18;33272:341;;;33319:60;;;;;;;;;;:::i;:::-;;;;;;;;33272:341;33563:6;33557:13;33548:6;33544:2;33540:15;33533:38;33026:602;33163:45;;;33153:55;;;:6;:55;;;;33146:62;;;;;32990:693;33667:4;33660:11;;32847:843;;;;;;;:::o;4393:723::-;4449:13;4679:1;4670:5;:10;4666:53;;;4697:10;;;;;;;;;;;;;;;;;;;;;4666:53;4729:12;4744:5;4729:20;;4760:14;4785:78;4800:1;4792:4;:9;4785:78;;4818:8;;;;;:::i;:::-;;;;4849:2;4841:10;;;;;:::i;:::-;;;4785:78;;;4873:19;4905:6;4895:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4873:39;;4923:154;4939:1;4930:5;:10;4923:154;;4967:1;4957:11;;;;;:::i;:::-;;;5034:2;5026:5;:10;;;;:::i;:::-;5013:2;:24;;;;:::i;:::-;5000:39;;4983:6;4990;4983:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5063:2;5054:11;;;;;:::i;:::-;;;4923:154;;;5101:6;5087:21;;;;;4393:723;;;;:::o;6892:422::-;6952:4;7160:12;7271:7;7259:20;7251:28;;7305:1;7298:4;:8;7291:15;;;6892:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:654::-;7565:6;7573;7622:2;7610:9;7601:7;7597:23;7593:32;7590:119;;;7628:79;;:::i;:::-;7590:119;7748:1;7773:53;7818:7;7809:6;7798:9;7794:22;7773:53;:::i;:::-;7763:63;;7719:117;7903:2;7892:9;7888:18;7875:32;7934:18;7926:6;7923:30;7920:117;;;7956:79;;:::i;:::-;7920:117;8061:63;8116:7;8107:6;8096:9;8092:22;8061:63;:::i;:::-;8051:73;;7846:288;7487:654;;;;;:::o;8147:118::-;8234:24;8252:5;8234:24;:::i;:::-;8229:3;8222:37;8147:118;;:::o;8271:157::-;8376:45;8396:24;8414:5;8396:24;:::i;:::-;8376:45;:::i;:::-;8371:3;8364:58;8271:157;;:::o;8434:109::-;8515:21;8530:5;8515:21;:::i;:::-;8510:3;8503:34;8434:109;;:::o;8549:360::-;8635:3;8663:38;8695:5;8663:38;:::i;:::-;8717:70;8780:6;8775:3;8717:70;:::i;:::-;8710:77;;8796:52;8841:6;8836:3;8829:4;8822:5;8818:16;8796:52;:::i;:::-;8873:29;8895:6;8873:29;:::i;:::-;8868:3;8864:39;8857:46;;8639:270;8549:360;;;;:::o;8915:147::-;9010:45;9049:5;9010:45;:::i;:::-;9005:3;8998:58;8915:147;;:::o;9068:149::-;9164:46;9204:5;9164:46;:::i;:::-;9159:3;9152:59;9068:149;;:::o;9223:364::-;9311:3;9339:39;9372:5;9339:39;:::i;:::-;9394:71;9458:6;9453:3;9394:71;:::i;:::-;9387:78;;9474:52;9519:6;9514:3;9507:4;9500:5;9496:16;9474:52;:::i;:::-;9551:29;9573:6;9551:29;:::i;:::-;9546:3;9542:39;9535:46;;9315:272;9223:364;;;;:::o;9593:377::-;9699:3;9727:39;9760:5;9727:39;:::i;:::-;9782:89;9864:6;9859:3;9782:89;:::i;:::-;9775:96;;9880:52;9925:6;9920:3;9913:4;9906:5;9902:16;9880:52;:::i;:::-;9957:6;9952:3;9948:16;9941:23;;9703:267;9593:377;;;;:::o;9976:366::-;10118:3;10139:67;10203:2;10198:3;10139:67;:::i;:::-;10132:74;;10215:93;10304:3;10215:93;:::i;:::-;10333:2;10328:3;10324:12;10317:19;;9976:366;;;:::o;10348:::-;10490:3;10511:67;10575:2;10570:3;10511:67;:::i;:::-;10504:74;;10587:93;10676:3;10587:93;:::i;:::-;10705:2;10700:3;10696:12;10689:19;;10348:366;;;:::o;10720:::-;10862:3;10883:67;10947:2;10942:3;10883:67;:::i;:::-;10876:74;;10959:93;11048:3;10959:93;:::i;:::-;11077:2;11072:3;11068:12;11061:19;;10720:366;;;:::o;11092:::-;11234:3;11255:67;11319:2;11314:3;11255:67;:::i;:::-;11248:74;;11331:93;11420:3;11331:93;:::i;:::-;11449:2;11444:3;11440:12;11433:19;;11092:366;;;:::o;11464:::-;11606:3;11627:67;11691:2;11686:3;11627:67;:::i;:::-;11620:74;;11703:93;11792:3;11703:93;:::i;:::-;11821:2;11816:3;11812:12;11805:19;;11464:366;;;:::o;11836:::-;11978:3;11999:67;12063:2;12058:3;11999:67;:::i;:::-;11992:74;;12075:93;12164:3;12075:93;:::i;:::-;12193:2;12188:3;12184:12;12177:19;;11836:366;;;:::o;12208:::-;12350:3;12371:67;12435:2;12430:3;12371:67;:::i;:::-;12364:74;;12447:93;12536:3;12447:93;:::i;:::-;12565:2;12560:3;12556:12;12549:19;;12208:366;;;:::o;12580:::-;12722:3;12743:67;12807:2;12802:3;12743:67;:::i;:::-;12736:74;;12819:93;12908:3;12819:93;:::i;:::-;12937:2;12932:3;12928:12;12921:19;;12580:366;;;:::o;12952:::-;13094:3;13115:67;13179:2;13174:3;13115:67;:::i;:::-;13108:74;;13191:93;13280:3;13191:93;:::i;:::-;13309:2;13304:3;13300:12;13293:19;;12952:366;;;:::o;13324:::-;13466:3;13487:67;13551:2;13546:3;13487:67;:::i;:::-;13480:74;;13563:93;13652:3;13563:93;:::i;:::-;13681:2;13676:3;13672:12;13665:19;;13324:366;;;:::o;13696:::-;13838:3;13859:67;13923:2;13918:3;13859:67;:::i;:::-;13852:74;;13935:93;14024:3;13935:93;:::i;:::-;14053:2;14048:3;14044:12;14037:19;;13696:366;;;:::o;14068:::-;14210:3;14231:67;14295:2;14290:3;14231:67;:::i;:::-;14224:74;;14307:93;14396:3;14307:93;:::i;:::-;14425:2;14420:3;14416:12;14409:19;;14068:366;;;:::o;14440:::-;14582:3;14603:67;14667:2;14662:3;14603:67;:::i;:::-;14596:74;;14679:93;14768:3;14679:93;:::i;:::-;14797:2;14792:3;14788:12;14781:19;;14440:366;;;:::o;14812:::-;14954:3;14975:67;15039:2;15034:3;14975:67;:::i;:::-;14968:74;;15051:93;15140:3;15051:93;:::i;:::-;15169:2;15164:3;15160:12;15153:19;;14812:366;;;:::o;15184:::-;15326:3;15347:67;15411:2;15406:3;15347:67;:::i;:::-;15340:74;;15423:93;15512:3;15423:93;:::i;:::-;15541:2;15536:3;15532:12;15525:19;;15184:366;;;:::o;15556:::-;15698:3;15719:67;15783:2;15778:3;15719:67;:::i;:::-;15712:74;;15795:93;15884:3;15795:93;:::i;:::-;15913:2;15908:3;15904:12;15897:19;;15556:366;;;:::o;15928:::-;16070:3;16091:67;16155:2;16150:3;16091:67;:::i;:::-;16084:74;;16167:93;16256:3;16167:93;:::i;:::-;16285:2;16280:3;16276:12;16269:19;;15928:366;;;:::o;16300:::-;16442:3;16463:67;16527:2;16522:3;16463:67;:::i;:::-;16456:74;;16539:93;16628:3;16539:93;:::i;:::-;16657:2;16652:3;16648:12;16641:19;;16300:366;;;:::o;16672:::-;16814:3;16835:67;16899:2;16894:3;16835:67;:::i;:::-;16828:74;;16911:93;17000:3;16911:93;:::i;:::-;17029:2;17024:3;17020:12;17013:19;;16672:366;;;:::o;17044:::-;17186:3;17207:67;17271:2;17266:3;17207:67;:::i;:::-;17200:74;;17283:93;17372:3;17283:93;:::i;:::-;17401:2;17396:3;17392:12;17385:19;;17044:366;;;:::o;17416:::-;17558:3;17579:67;17643:2;17638:3;17579:67;:::i;:::-;17572:74;;17655:93;17744:3;17655:93;:::i;:::-;17773:2;17768:3;17764:12;17757:19;;17416:366;;;:::o;17788:::-;17930:3;17951:67;18015:2;18010:3;17951:67;:::i;:::-;17944:74;;18027:93;18116:3;18027:93;:::i;:::-;18145:2;18140:3;18136:12;18129:19;;17788:366;;;:::o;18160:::-;18302:3;18323:67;18387:2;18382:3;18323:67;:::i;:::-;18316:74;;18399:93;18488:3;18399:93;:::i;:::-;18517:2;18512:3;18508:12;18501:19;;18160:366;;;:::o;18532:::-;18674:3;18695:67;18759:2;18754:3;18695:67;:::i;:::-;18688:74;;18771:93;18860:3;18771:93;:::i;:::-;18889:2;18884:3;18880:12;18873:19;;18532:366;;;:::o;18904:::-;19046:3;19067:67;19131:2;19126:3;19067:67;:::i;:::-;19060:74;;19143:93;19232:3;19143:93;:::i;:::-;19261:2;19256:3;19252:12;19245:19;;18904:366;;;:::o;19276:118::-;19363:24;19381:5;19363:24;:::i;:::-;19358:3;19351:37;19276:118;;:::o;19400:157::-;19505:45;19525:24;19543:5;19525:24;:::i;:::-;19505:45;:::i;:::-;19500:3;19493:58;19400:157;;:::o;19563:435::-;19743:3;19765:95;19856:3;19847:6;19765:95;:::i;:::-;19758:102;;19877:95;19968:3;19959:6;19877:95;:::i;:::-;19870:102;;19989:3;19982:10;;19563:435;;;;;:::o;20004:595::-;20232:3;20254:95;20345:3;20336:6;20254:95;:::i;:::-;20247:102;;20366:95;20457:3;20448:6;20366:95;:::i;:::-;20359:102;;20478:95;20569:3;20560:6;20478:95;:::i;:::-;20471:102;;20590:3;20583:10;;20004:595;;;;;;:::o;20605:679::-;20801:3;20816:75;20887:3;20878:6;20816:75;:::i;:::-;20916:2;20911:3;20907:12;20900:19;;20929:75;21000:3;20991:6;20929:75;:::i;:::-;21029:2;21024:3;21020:12;21013:19;;21042:75;21113:3;21104:6;21042:75;:::i;:::-;21142:2;21137:3;21133:12;21126:19;;21155:75;21226:3;21217:6;21155:75;:::i;:::-;21255:2;21250:3;21246:12;21239:19;;21275:3;21268:10;;20605:679;;;;;;;:::o;21290:222::-;21383:4;21421:2;21410:9;21406:18;21398:26;;21434:71;21502:1;21491:9;21487:17;21478:6;21434:71;:::i;:::-;21290:222;;;;:::o;21518:640::-;21713:4;21751:3;21740:9;21736:19;21728:27;;21765:71;21833:1;21822:9;21818:17;21809:6;21765:71;:::i;:::-;21846:72;21914:2;21903:9;21899:18;21890:6;21846:72;:::i;:::-;21928;21996:2;21985:9;21981:18;21972:6;21928:72;:::i;:::-;22047:9;22041:4;22037:20;22032:2;22021:9;22017:18;22010:48;22075:76;22146:4;22137:6;22075:76;:::i;:::-;22067:84;;21518:640;;;;;;;:::o;22164:210::-;22251:4;22289:2;22278:9;22274:18;22266:26;;22302:65;22364:1;22353:9;22349:17;22340:6;22302:65;:::i;:::-;22164:210;;;;:::o;22380:313::-;22493:4;22531:2;22520:9;22516:18;22508:26;;22580:9;22574:4;22570:20;22566:1;22555:9;22551:17;22544:47;22608:78;22681:4;22672:6;22608:78;:::i;:::-;22600:86;;22380:313;;;;:::o;22699:419::-;22865:4;22903:2;22892:9;22888:18;22880:26;;22952:9;22946:4;22942:20;22938:1;22927:9;22923:17;22916:47;22980:131;23106:4;22980:131;:::i;:::-;22972:139;;22699:419;;;:::o;23124:::-;23290:4;23328:2;23317:9;23313:18;23305:26;;23377:9;23371:4;23367:20;23363:1;23352:9;23348:17;23341:47;23405:131;23531:4;23405:131;:::i;:::-;23397:139;;23124:419;;;:::o;23549:::-;23715:4;23753:2;23742:9;23738:18;23730:26;;23802:9;23796:4;23792:20;23788:1;23777:9;23773:17;23766:47;23830:131;23956:4;23830:131;:::i;:::-;23822:139;;23549:419;;;:::o;23974:::-;24140:4;24178:2;24167:9;24163:18;24155:26;;24227:9;24221:4;24217:20;24213:1;24202:9;24198:17;24191:47;24255:131;24381:4;24255:131;:::i;:::-;24247:139;;23974:419;;;:::o;24399:::-;24565:4;24603:2;24592:9;24588:18;24580:26;;24652:9;24646:4;24642:20;24638:1;24627:9;24623:17;24616:47;24680:131;24806:4;24680:131;:::i;:::-;24672:139;;24399:419;;;:::o;24824:::-;24990:4;25028:2;25017:9;25013:18;25005:26;;25077:9;25071:4;25067:20;25063:1;25052:9;25048:17;25041:47;25105:131;25231:4;25105:131;:::i;:::-;25097:139;;24824:419;;;:::o;25249:::-;25415:4;25453:2;25442:9;25438:18;25430:26;;25502:9;25496:4;25492:20;25488:1;25477:9;25473:17;25466:47;25530:131;25656:4;25530:131;:::i;:::-;25522:139;;25249:419;;;:::o;25674:::-;25840:4;25878:2;25867:9;25863:18;25855:26;;25927:9;25921:4;25917:20;25913:1;25902:9;25898:17;25891:47;25955:131;26081:4;25955:131;:::i;:::-;25947:139;;25674:419;;;:::o;26099:::-;26265:4;26303:2;26292:9;26288:18;26280:26;;26352:9;26346:4;26342:20;26338:1;26327:9;26323:17;26316:47;26380:131;26506:4;26380:131;:::i;:::-;26372:139;;26099:419;;;:::o;26524:::-;26690:4;26728:2;26717:9;26713:18;26705:26;;26777:9;26771:4;26767:20;26763:1;26752:9;26748:17;26741:47;26805:131;26931:4;26805:131;:::i;:::-;26797:139;;26524:419;;;:::o;26949:::-;27115:4;27153:2;27142:9;27138:18;27130:26;;27202:9;27196:4;27192:20;27188:1;27177:9;27173:17;27166:47;27230:131;27356:4;27230:131;:::i;:::-;27222:139;;26949:419;;;:::o;27374:::-;27540:4;27578:2;27567:9;27563:18;27555:26;;27627:9;27621:4;27617:20;27613:1;27602:9;27598:17;27591:47;27655:131;27781:4;27655:131;:::i;:::-;27647:139;;27374:419;;;:::o;27799:::-;27965:4;28003:2;27992:9;27988:18;27980:26;;28052:9;28046:4;28042:20;28038:1;28027:9;28023:17;28016:47;28080:131;28206:4;28080:131;:::i;:::-;28072:139;;27799:419;;;:::o;28224:::-;28390:4;28428:2;28417:9;28413:18;28405:26;;28477:9;28471:4;28467:20;28463:1;28452:9;28448:17;28441:47;28505:131;28631:4;28505:131;:::i;:::-;28497:139;;28224:419;;;:::o;28649:::-;28815:4;28853:2;28842:9;28838:18;28830:26;;28902:9;28896:4;28892:20;28888:1;28877:9;28873:17;28866:47;28930:131;29056:4;28930:131;:::i;:::-;28922:139;;28649:419;;;:::o;29074:::-;29240:4;29278:2;29267:9;29263:18;29255:26;;29327:9;29321:4;29317:20;29313:1;29302:9;29298:17;29291:47;29355:131;29481:4;29355:131;:::i;:::-;29347:139;;29074:419;;;:::o;29499:::-;29665:4;29703:2;29692:9;29688:18;29680:26;;29752:9;29746:4;29742:20;29738:1;29727:9;29723:17;29716:47;29780:131;29906:4;29780:131;:::i;:::-;29772:139;;29499:419;;;:::o;29924:::-;30090:4;30128:2;30117:9;30113:18;30105:26;;30177:9;30171:4;30167:20;30163:1;30152:9;30148:17;30141:47;30205:131;30331:4;30205:131;:::i;:::-;30197:139;;29924:419;;;:::o;30349:::-;30515:4;30553:2;30542:9;30538:18;30530:26;;30602:9;30596:4;30592:20;30588:1;30577:9;30573:17;30566:47;30630:131;30756:4;30630:131;:::i;:::-;30622:139;;30349:419;;;:::o;30774:::-;30940:4;30978:2;30967:9;30963:18;30955:26;;31027:9;31021:4;31017:20;31013:1;31002:9;30998:17;30991:47;31055:131;31181:4;31055:131;:::i;:::-;31047:139;;30774:419;;;:::o;31199:::-;31365:4;31403:2;31392:9;31388:18;31380:26;;31452:9;31446:4;31442:20;31438:1;31427:9;31423:17;31416:47;31480:131;31606:4;31480:131;:::i;:::-;31472:139;;31199:419;;;:::o;31624:::-;31790:4;31828:2;31817:9;31813:18;31805:26;;31877:9;31871:4;31867:20;31863:1;31852:9;31848:17;31841:47;31905:131;32031:4;31905:131;:::i;:::-;31897:139;;31624:419;;;:::o;32049:::-;32215:4;32253:2;32242:9;32238:18;32230:26;;32302:9;32296:4;32292:20;32288:1;32277:9;32273:17;32266:47;32330:131;32456:4;32330:131;:::i;:::-;32322:139;;32049:419;;;:::o;32474:::-;32640:4;32678:2;32667:9;32663:18;32655:26;;32727:9;32721:4;32717:20;32713:1;32702:9;32698:17;32691:47;32755:131;32881:4;32755:131;:::i;:::-;32747:139;;32474:419;;;:::o;32899:::-;33065:4;33103:2;33092:9;33088:18;33080:26;;33152:9;33146:4;33142:20;33138:1;33127:9;33123:17;33116:47;33180:131;33306:4;33180:131;:::i;:::-;33172:139;;32899:419;;;:::o;33324:222::-;33417:4;33455:2;33444:9;33440:18;33432:26;;33468:71;33536:1;33525:9;33521:17;33512:6;33468:71;:::i;:::-;33324:222;;;;:::o;33552:348::-;33681:4;33719:2;33708:9;33704:18;33696:26;;33732:71;33800:1;33789:9;33785:17;33776:6;33732:71;:::i;:::-;33813:80;33889:2;33878:9;33874:18;33865:6;33813:80;:::i;:::-;33552:348;;;;;:::o;33906:350::-;34036:4;34074:2;34063:9;34059:18;34051:26;;34087:71;34155:1;34144:9;34140:17;34131:6;34087:71;:::i;:::-;34168:81;34245:2;34234:9;34230:18;34221:6;34168:81;:::i;:::-;33906:350;;;;;:::o;34262:332::-;34383:4;34421:2;34410:9;34406:18;34398:26;;34434:71;34502:1;34491:9;34487:17;34478:6;34434:71;:::i;:::-;34515:72;34583:2;34572:9;34568:18;34559:6;34515:72;:::i;:::-;34262:332;;;;;:::o;34600:129::-;34634:6;34661:20;;:::i;:::-;34651:30;;34690:33;34718:4;34710:6;34690:33;:::i;:::-;34600:129;;;:::o;34735:75::-;34768:6;34801:2;34795:9;34785:19;;34735:75;:::o;34816:307::-;34877:4;34967:18;34959:6;34956:30;34953:56;;;34989:18;;:::i;:::-;34953:56;35027:29;35049:6;35027:29;:::i;:::-;35019:37;;35111:4;35105;35101:15;35093:23;;34816:307;;;:::o;35129:308::-;35191:4;35281:18;35273:6;35270:30;35267:56;;;35303:18;;:::i;:::-;35267:56;35341:29;35363:6;35341:29;:::i;:::-;35333:37;;35425:4;35419;35415:15;35407:23;;35129:308;;;:::o;35443:98::-;35494:6;35528:5;35522:12;35512:22;;35443:98;;;:::o;35547:99::-;35599:6;35633:5;35627:12;35617:22;;35547:99;;;:::o;35652:168::-;35735:11;35769:6;35764:3;35757:19;35809:4;35804:3;35800:14;35785:29;;35652:168;;;;:::o;35826:169::-;35910:11;35944:6;35939:3;35932:19;35984:4;35979:3;35975:14;35960:29;;35826:169;;;;:::o;36001:148::-;36103:11;36140:3;36125:18;;36001:148;;;;:::o;36155:305::-;36195:3;36214:20;36232:1;36214:20;:::i;:::-;36209:25;;36248:20;36266:1;36248:20;:::i;:::-;36243:25;;36402:1;36334:66;36330:74;36327:1;36324:81;36321:107;;;36408:18;;:::i;:::-;36321:107;36452:1;36449;36445:9;36438:16;;36155:305;;;;:::o;36466:185::-;36506:1;36523:20;36541:1;36523:20;:::i;:::-;36518:25;;36557:20;36575:1;36557:20;:::i;:::-;36552:25;;36596:1;36586:35;;36601:18;;:::i;:::-;36586:35;36643:1;36640;36636:9;36631:14;;36466:185;;;;:::o;36657:348::-;36697:7;36720:20;36738:1;36720:20;:::i;:::-;36715:25;;36754:20;36772:1;36754:20;:::i;:::-;36749:25;;36942:1;36874:66;36870:74;36867:1;36864:81;36859:1;36852:9;36845:17;36841:105;36838:131;;;36949:18;;:::i;:::-;36838:131;36997:1;36994;36990:9;36979:20;;36657:348;;;;:::o;37011:191::-;37051:4;37071:20;37089:1;37071:20;:::i;:::-;37066:25;;37105:20;37123:1;37105:20;:::i;:::-;37100:25;;37144:1;37141;37138:8;37135:34;;;37149:18;;:::i;:::-;37135:34;37194:1;37191;37187:9;37179:17;;37011:191;;;;:::o;37208:96::-;37245:7;37274:24;37292:5;37274:24;:::i;:::-;37263:35;;37208:96;;;:::o;37310:90::-;37344:7;37387:5;37380:13;37373:21;37362:32;;37310:90;;;:::o;37406:149::-;37442:7;37482:66;37475:5;37471:78;37460:89;;37406:149;;;:::o;37561:126::-;37598:7;37638:42;37631:5;37627:54;37616:65;;37561:126;;;:::o;37693:77::-;37730:7;37759:5;37748:16;;37693:77;;;:::o;37776:121::-;37834:9;37867:24;37885:5;37867:24;:::i;:::-;37854:37;;37776:121;;;:::o;37903:122::-;37962:9;37995:24;38013:5;37995:24;:::i;:::-;37982:37;;37903:122;;;:::o;38031:154::-;38115:6;38110:3;38105;38092:30;38177:1;38168:6;38163:3;38159:16;38152:27;38031:154;;;:::o;38191:307::-;38259:1;38269:113;38283:6;38280:1;38277:13;38269:113;;;38368:1;38363:3;38359:11;38353:18;38349:1;38344:3;38340:11;38333:39;38305:2;38302:1;38298:10;38293:15;;38269:113;;;38400:6;38397:1;38394:13;38391:101;;;38480:1;38471:6;38466:3;38462:16;38455:27;38391:101;38240:258;38191:307;;;:::o;38504:320::-;38548:6;38585:1;38579:4;38575:12;38565:22;;38632:1;38626:4;38622:12;38653:18;38643:81;;38709:4;38701:6;38697:17;38687:27;;38643:81;38771:2;38763:6;38760:14;38740:18;38737:38;38734:84;;;38790:18;;:::i;:::-;38734:84;38555:269;38504:320;;;:::o;38830:281::-;38913:27;38935:4;38913:27;:::i;:::-;38905:6;38901:40;39043:6;39031:10;39028:22;39007:18;38995:10;38992:34;38989:62;38986:88;;;39054:18;;:::i;:::-;38986:88;39094:10;39090:2;39083:22;38873:238;38830:281;;:::o;39117:233::-;39156:3;39179:24;39197:5;39179:24;:::i;:::-;39170:33;;39225:66;39218:5;39215:77;39212:103;;;39295:18;;:::i;:::-;39212:103;39342:1;39335:5;39331:13;39324:20;;39117:233;;;:::o;39356:100::-;39395:7;39424:26;39444:5;39424:26;:::i;:::-;39413:37;;39356:100;;;:::o;39462:94::-;39501:7;39530:20;39544:5;39530:20;:::i;:::-;39519:31;;39462:94;;;:::o;39562:79::-;39601:7;39630:5;39619:16;;39562:79;;;:::o;39647:176::-;39679:1;39696:20;39714:1;39696:20;:::i;:::-;39691:25;;39730:20;39748:1;39730:20;:::i;:::-;39725:25;;39769:1;39759:35;;39774:18;;:::i;:::-;39759:35;39815:1;39812;39808:9;39803:14;;39647:176;;;;:::o;39829:180::-;39877:77;39874:1;39867:88;39974:4;39971:1;39964:15;39998:4;39995:1;39988:15;40015:180;40063:77;40060:1;40053:88;40160:4;40157:1;40150:15;40184:4;40181:1;40174:15;40201:180;40249:77;40246:1;40239:88;40346:4;40343:1;40336:15;40370:4;40367:1;40360:15;40387:180;40435:77;40432:1;40425:88;40532:4;40529:1;40522:15;40556:4;40553:1;40546:15;40573:180;40621:77;40618:1;40611:88;40718:4;40715:1;40708:15;40742:4;40739:1;40732:15;40759:117;40868:1;40865;40858:12;40882:117;40991:1;40988;40981:12;41005:117;41114:1;41111;41104:12;41128:117;41237:1;41234;41227:12;41251:102;41292:6;41343:2;41339:7;41334:2;41327:5;41323:14;41319:28;41309:38;;41251:102;;;:::o;41359:94::-;41392:8;41440:5;41436:2;41432:14;41411:35;;41359:94;;;:::o;41459:174::-;41599:26;41595:1;41587:6;41583:14;41576:50;41459:174;:::o;41639:237::-;41779:34;41775:1;41767:6;41763:14;41756:58;41848:20;41843:2;41835:6;41831:15;41824:45;41639:237;:::o;41882:225::-;42022:34;42018:1;42010:6;42006:14;41999:58;42091:8;42086:2;42078:6;42074:15;42067:33;41882:225;:::o;42113:178::-;42253:30;42249:1;42241:6;42237:14;42230:54;42113:178;:::o;42297:175::-;42437:27;42433:1;42425:6;42421:14;42414:51;42297:175;:::o;42478:223::-;42618:34;42614:1;42606:6;42602:14;42595:58;42687:6;42682:2;42674:6;42670:15;42663:31;42478:223;:::o;42707:175::-;42847:27;42843:1;42835:6;42831:14;42824:51;42707:175;:::o;42888:173::-;43028:25;43024:1;43016:6;43012:14;43005:49;42888:173;:::o;43067:231::-;43207:34;43203:1;43195:6;43191:14;43184:58;43276:14;43271:2;43263:6;43259:15;43252:39;43067:231;:::o;43304:243::-;43444:34;43440:1;43432:6;43428:14;43421:58;43513:26;43508:2;43500:6;43496:15;43489:51;43304:243;:::o;43553:229::-;43693:34;43689:1;43681:6;43677:14;43670:58;43762:12;43757:2;43749:6;43745:15;43738:37;43553:229;:::o;43788:228::-;43928:34;43924:1;43916:6;43912:14;43905:58;43997:11;43992:2;43984:6;43980:15;43973:36;43788:228;:::o;44022:233::-;44162:34;44158:1;44150:6;44146:14;44139:58;44231:16;44226:2;44218:6;44214:15;44207:41;44022:233;:::o;44261:168::-;44401:20;44397:1;44389:6;44385:14;44378:44;44261:168;:::o;44435:182::-;44575:34;44571:1;44563:6;44559:14;44552:58;44435:182;:::o;44623:236::-;44763:34;44759:1;44751:6;44747:14;44740:58;44832:19;44827:2;44819:6;44815:15;44808:44;44623:236;:::o;44865:231::-;45005:34;45001:1;44993:6;44989:14;44982:58;45074:14;45069:2;45061:6;45057:15;45050:39;44865:231;:::o;45102:182::-;45242:34;45238:1;45230:6;45226:14;45219:58;45102:182;:::o;45290:228::-;45430:34;45426:1;45418:6;45414:14;45407:58;45499:11;45494:2;45486:6;45482:15;45475:36;45290:228;:::o;45524:234::-;45664:34;45660:1;45652:6;45648:14;45641:58;45733:17;45728:2;45720:6;45716:15;45709:42;45524:234;:::o;45764:220::-;45904:34;45900:1;45892:6;45888:14;45881:58;45973:3;45968:2;45960:6;45956:15;45949:28;45764:220;:::o;45990:221::-;46130:34;46126:1;46118:6;46114:14;46107:58;46199:4;46194:2;46186:6;46182:15;46175:29;45990:221;:::o;46217:179::-;46357:31;46353:1;46345:6;46341:14;46334:55;46217:179;:::o;46402:236::-;46542:34;46538:1;46530:6;46526:14;46519:58;46611:19;46606:2;46598:6;46594:15;46587:44;46402:236;:::o;46644:168::-;46784:20;46780:1;46772:6;46768:14;46761:44;46644:168;:::o;46818:122::-;46891:24;46909:5;46891:24;:::i;:::-;46884:5;46881:35;46871:63;;46930:1;46927;46920:12;46871:63;46818:122;:::o;46946:116::-;47016:21;47031:5;47016:21;:::i;:::-;47009:5;47006:32;46996:60;;47052:1;47049;47042:12;46996:60;46946:116;:::o;47068:120::-;47140:23;47157:5;47140:23;:::i;:::-;47133:5;47130:34;47120:62;;47178:1;47175;47168:12;47120:62;47068:120;:::o;47194:122::-;47267:24;47285:5;47267:24;:::i;:::-;47260:5;47257:35;47247:63;;47306:1;47303;47296:12;47247:63;47194:122;:::o

Swarm Source

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