ETH Price: $3,057.06 (-1.50%)

Devs for Revolution (DEVS)
 

Overview

TokenID

2471

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
Dev

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2021-08-27
*/

// SPDX-License-Identifier: MIT

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






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




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

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

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

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

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




/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}









/**
 * @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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}





/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}














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







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





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

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

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    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

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









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


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be 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 {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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







/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


contract Dev is ERC721Enumerable, ReentrancyGuard, Ownable {

        string[] private osses = [
        "Kali Linux",
        "Ubuntu",
        "Windows 1.0",
        "Android Marshmallow",
        "Windows 95",
        "FreeBSD",
        "Slackware Linux",
        "Chromium OS",
        "Windows Vista",
        "Google Chrome OS",
        "macOS",
        "DOS",
        "Linux Mint",
        "GM-NAA I/O"
    ];
    
    string[] private texteditors = [
        "VS Code",
        "Brackets",
        "VIM",
        "Emacs",
        "Brackets",
        "Atom",
        "Notepad++",
        "Pen & Paper",
        "Visual Studio",
        "Sand and Stick",
        "Mental Telepathy",
        "Bluefish",
        "Sublime Text",
        "Dreamweaver",
        "Coda"
    ];
    
    string[] private clothing = [
        "Black Hoodie",
        "White Tanktop",
        "Patagonia Vest",
        "Conference T",
        "Blacked Out",
        "Bulls Jersey",
        "Pink Hoodie",
        "Purple Turtleneck",
        "Bra",
        "Navy Suit",
        "Purple Dress",
        "Platinum Trenchcoat",
        "Bubble Gum Wrapper",
        "Sweat"
    ];
    
    string[] private languages = [
        "TypeScript",
        "JavaScript",
        "Python",
        "Fortran",
        "COBOL",
        "Go",
        "Rust",
        "Swift",
        "PHP",
        "Haskell",
        "Scala",
        "Dart",
        "Java",
        "Julia",
        "C",
        "Kotlin",
        "Velato",
        "ArnoldC",
        "Shakespeare",
        "Piet",
        "Brainfuck",
        "Chicken",
        "Legit",
        "Whitespace"
    ];
    
    string[] private industries = [
        "Government",
        "Black Hat",
        "White Hat",
        "Nonprofit",
        "Money Laundering",
        "Crypto",
        "FAANG",
        "AI Startup",
        "VR",
        "Traveling Consultant",
        "Undercover",
        "Farming",
        "Environmental",
        "Hollywood",
        "Influencer"
    ];
    
    string[] private locations = [
        "Bucharest",
        "Hong Kong",
        "Jackson",
        "Budapest",
        "Sao Palo",
        "Lagos",
        "Omaha",
        "Gold Coast",
        "Paris",
        "Tokyo",
        "Shenzhen",
        "Saint Petersburg",
        "Buenos Aires",
        "Kisumu",
        "Ramallah",
        "Goa",
        "London",
        "Pyongyang"
    ];
    
    string[] private minds = [
        "Abstract",
        "Analytical",
        "Creative",
        "Concrete",
        "Critical",
        "Convergent",
        "Divergent",
        "Anarchist"
    ];
    
    string[] private vibes = [
        "Optimist",
        "Cosmic",
        "Chill",
        "Hyper",
        "Kind",
        "Hater",
        "Phobia",
        "Generous",
        "JonGold"
    ];
    
    function random(string memory input) internal pure returns (uint256) {
        return uint256(keccak256(abi.encodePacked(input)));
    }
    
    function getOS(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "OS", osses);
    }
    
    function getTextEditor(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "TEXTEDITOR", texteditors);
    }
    
    function getClothing(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "CLOTHING", clothing);
    }
    
    function getLanguage(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "LANGUAGE", languages);
    }

    function getIndustry(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "INDUSTRY", industries);
    }
    
    function getLocation(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "LOCATION", locations);
    }
    
    function getMind(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "MIND", minds);
    }
    
    function getVibe(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "VIBE", vibes);
    }
    
    function pluck(uint256 tokenId, string memory keyPrefix, string[] memory sourceArray) internal pure returns (string memory) {
        uint256 rand = random(string(abi.encodePacked(keyPrefix, toString(tokenId))));
        string memory output = sourceArray[rand % sourceArray.length];
        return output;
    }

    function tokenURI(uint256 tokenId) override public view returns (string memory) {
        string[19] memory parts;
        parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: black; font-family: serif; font-size: 14px; }</style><rect width="100%" height="100%" fill="white" /><text x="10" y="20" class="base">';

        parts[1] = getOS(tokenId);

        parts[2] = '</text><text x="10" y="40" class="base">';

        parts[3] = getTextEditor(tokenId);

        parts[4] = '</text><text x="10" y="60" class="base">';

        parts[5] = getClothing(tokenId);

        parts[6] = '</text><text x="10" y="80" class="base">';

        parts[7] = getLanguage(tokenId);

        parts[8] = '</text><text x="10" y="100" class="base">';

        parts[9] = getIndustry(tokenId);

        parts[10] = '</text><text x="10" y="120" class="base">';

        parts[11] = getLocation(tokenId);

        parts[14] = '</text><text x="10" y="140" class="base">';

        parts[15] = getMind(tokenId);

        parts[16] = '</text><text x="10" y="160" class="base">';

        parts[17] = getVibe(tokenId);

        parts[18] = '</text></svg>';

        string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8]));
        output = string(abi.encodePacked(output, parts[9], parts[10], parts[11], parts[12], parts[13], parts[14], parts[15], parts[16], parts[17], parts[18]));
        
        string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Dev #', toString(tokenId), '", "description": "Developers around the world are tired of working and contributing their time and effort to enrich the top 1%. Join the movement that is community owned, building the future from the bottom up.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}'))));
        output = string(abi.encodePacked('data:application/json;base64,', json));

        return output;
    }

    function claim(uint256 tokenId) public nonReentrant {
        require(tokenId > 0 && tokenId < 7778, "Token ID invalid");
        _safeMint(_msgSender(), tokenId);
    }
    
    function ownerClaim(uint256 tokenId) public nonReentrant onlyOwner {
        require(tokenId > 7777 && tokenId < 8001, "Token ID invalid");
        _safeMint(owner(), tokenId);
    }
    
    function toString(uint256 value) internal pure returns (string memory) {
    // Inspired by OraclizeAPI's implementation - MIT license
    // 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);
    }
    
    constructor() ERC721("Devs for Revolution", "DEVS") Ownable() {}
}

/// [MIT License]
/// @title Base64
/// @notice Provides a function for encoding some bytes in base64
/// @author Brecht Devos <[email protected]>
library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);

        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)

            for {
                let i := 0
            } lt(i, len) {

            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)

                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)

                mstore(resultPtr, out)

                resultPtr := add(resultPtr, 4)
            }

            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }

            mstore(result, encodedLen)
        }

        return string(result);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getClothing","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getIndustry","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getLanguage","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getLocation","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMind","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTextEditor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getVibe","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"ownerClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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"}]

6080604052604051806101c001604052806040518060400160405280600a81526020017f4b616c69204c696e75780000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f5562756e7475000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f57696e646f777320312e3000000000000000000000000000000000000000000081525081526020016040518060400160405280601381526020017f416e64726f6964204d617273686d616c6c6f770000000000000000000000000081525081526020016040518060400160405280600a81526020017f57696e646f77732039350000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f467265654253440000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f536c61636b77617265204c696e7578000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4368726f6d69756d204f5300000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f57696e646f77732056697374610000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f476f6f676c65204368726f6d65204f530000000000000000000000000000000081525081526020016040518060400160405280600581526020017f6d61634f5300000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f444f53000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4c696e7578204d696e740000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f474d2d4e414120492f4f00000000000000000000000000000000000000000000815250815250600c90600e6200035a92919062001d8d565b50604051806101e001604052806040518060400160405280600781526020017f565320436f64650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f427261636b65747300000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f56494d000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f456d61637300000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f427261636b65747300000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f41746f6d0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4e6f74657061642b2b000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f50656e202620506170657200000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f56697375616c2053747564696f0000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f53616e6420616e6420537469636b00000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4d656e74616c2054656c6570617468790000000000000000000000000000000081525081526020016040518060400160405280600881526020017f426c75656669736800000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5375626c696d652054657874000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f447265616d77656176657200000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f436f646100000000000000000000000000000000000000000000000000000000815250815250600d90600f620006ec92919062001df4565b50604051806101c001604052806040518060400160405280600c81526020017f426c61636b20486f6f646965000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f57686974652054616e6b746f700000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f50617461676f6e6961205665737400000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f436f6e666572656e63652054000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f426c61636b6564204f757400000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f42756c6c73204a6572736579000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f50696e6b20486f6f64696500000000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f507572706c6520547572746c656e65636b00000000000000000000000000000081525081526020016040518060400160405280600381526020017f427261000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4e6176792053756974000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f507572706c65204472657373000000000000000000000000000000000000000081525081526020016040518060400160405280601381526020017f506c6174696e756d205472656e6368636f61740000000000000000000000000081525081526020016040518060400160405280601281526020017f427562626c652047756d2057726170706572000000000000000000000000000081525081526020016040518060400160405280600581526020017f5377656174000000000000000000000000000000000000000000000000000000815250815250600e90600e62000a4392919062001d8d565b506040518061030001604052806040518060400160405280600a81526020017f547970655363726970740000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4a6176615363726970740000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f507974686f6e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f466f727472616e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f434f424f4c00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f476f00000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f527573740000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f537769667400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f504850000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4861736b656c6c0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f5363616c6100000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f446172740000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4a6176610000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4a756c696100000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f430000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4b6f746c696e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f56656c61746f000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f41726e6f6c64430000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f5368616b6573706561726500000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f506965740000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f427261696e6675636b000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f436869636b656e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4c6567697400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f5768697465737061636500000000000000000000000000000000000000000000815250815250600f90601862000fe892919062001e5b565b50604051806101e001604052806040518060400160405280600a81526020017f476f7665726e6d656e740000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f426c61636b20486174000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f576869746520486174000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4e6f6e70726f666974000000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4d6f6e6579204c61756e646572696e670000000000000000000000000000000081525081526020016040518060400160405280600681526020017f43727970746f000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4641414e4700000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f414920537461727475700000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f565200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601481526020017f54726176656c696e6720436f6e73756c74616e7400000000000000000000000081525081526020016040518060400160405280600a81526020017f556e646572636f7665720000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4661726d696e670000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f456e7669726f6e6d656e74616c0000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f486f6c6c79776f6f64000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f496e666c75656e63657200000000000000000000000000000000000000000000815250815250601090600f6200137a92919062001df4565b506040518061024001604052806040518060400160405280600981526020017f427563686172657374000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f486f6e67204b6f6e67000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4a61636b736f6e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f427564617065737400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f53616f2050616c6f00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4c61676f7300000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4f6d61686100000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f476f6c6420436f6173740000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f506172697300000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f546f6b796f00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f5368656e7a68656e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f5361696e7420506574657273627572670000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4275656e6f73204169726573000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4b6973756d75000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f52616d616c6c616800000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f476f61000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4c6f6e646f6e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f50796f6e6779616e6700000000000000000000000000000000000000000000008152508152506011906012620017bd92919062001ec2565b506040518061010001604052806040518060400160405280600881526020017f416273747261637400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f416e616c79746963616c0000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f437265617469766500000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f436f6e637265746500000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f437269746963616c00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f436f6e76657267656e740000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f446976657267656e74000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f416e6172636869737400000000000000000000000000000000000000000000008152508152506012906008620019b292919062001f29565b506040518061012001604052806040518060400160405280600881526020017f4f7074696d69737400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f436f736d6963000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4368696c6c00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f487970657200000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4b696e640000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f486174657200000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f50686f626961000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f47656e65726f757300000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4a6f6e476f6c6400000000000000000000000000000000000000000000000000815250815250601390600962001be292919062001f90565b5034801562001bf057600080fd5b506040518060400160405280601381526020017f4465767320666f72205265766f6c7574696f6e000000000000000000000000008152506040518060400160405280600481526020017f4445565300000000000000000000000000000000000000000000000000000000815250816000908051906020019062001c7592919062001ff7565b50806001908051906020019062001c8e92919062001ff7565b5050506001600a8190555062001cb962001cad62001cbf60201b60201c565b62001cc760201b60201c565b6200217a565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805482825590600052602060002090810192821562001de1579160200282015b8281111562001de057825182908051906020019062001dcf92919062001ff7565b509160200191906001019062001dae565b5b50905062001df0919062002088565b5090565b82805482825590600052602060002090810192821562001e48579160200282015b8281111562001e4757825182908051906020019062001e3692919062001ff7565b509160200191906001019062001e15565b5b50905062001e57919062002088565b5090565b82805482825590600052602060002090810192821562001eaf579160200282015b8281111562001eae57825182908051906020019062001e9d92919062001ff7565b509160200191906001019062001e7c565b5b50905062001ebe919062002088565b5090565b82805482825590600052602060002090810192821562001f16579160200282015b8281111562001f1557825182908051906020019062001f0492919062001ff7565b509160200191906001019062001ee3565b5b50905062001f25919062002088565b5090565b82805482825590600052602060002090810192821562001f7d579160200282015b8281111562001f7c57825182908051906020019062001f6b92919062001ff7565b509160200191906001019062001f4a565b5b50905062001f8c919062002088565b5090565b82805482825590600052602060002090810192821562001fe4579160200282015b8281111562001fe357825182908051906020019062001fd292919062001ff7565b509160200191906001019062001fb1565b5b50905062001ff3919062002088565b5090565b828054620020059062002115565b90600052602060002090601f01602090048101928262002029576000855562002075565b82601f106200204457805160ff191683800117855562002075565b8280016001018555821562002075579182015b828111156200207457825182559160200191906001019062002057565b5b509050620020849190620020b0565b5090565b5b80821115620020ac5760008181620020a29190620020cf565b5060010162002089565b5090565b5b80821115620020cb576000816000905550600101620020b1565b5090565b508054620020dd9062002115565b6000825580601f10620020f1575062002112565b601f016020900490600052602060002090810190620021119190620020b0565b5b50565b600060028204905060018216806200212e57607f821691505b602082108114156200214557620021446200214b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6153bb806200218a6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636352211e11610104578063b88d4fde116100a2578063e440628c11610071578063e440628c1461058a578063e985e9c5146105ba578063f2fde38b146105ea578063f700e6e114610606576101cf565b8063b88d4fde146104de578063c099558f146104fa578063c8734b0a1461052a578063c87b56dd1461055a576101cf565b80637f7b1393116100de5780637f7b1393146104565780638da5cb5b1461048657806395d89b41146104a4578063a22cb465146104c2576101cf565b80636352211e146103ec57806370a082311461041c578063715018a61461044c576101cf565b806323b872dd1161017157806342842e0e1161014b57806342842e0e14610354578063434f48c4146103705780634de4cd991461038c5780634f6ccce7146103bc576101cf565b806323b872dd146102ec5780632f745c5914610308578063379607f514610338576101cf565b8063095ea7b3116101ad578063095ea7b3146102525780630a0eff0d1461026e5780630ec6cd181461029e57806318160ddd146102ce576101cf565b806301ffc9a7146101d457806306fdde0314610204578063081812fc14610222575b600080fd5b6101ee60048036038101906101e99190613cd2565b610636565b6040516101fb9190614363565b60405180910390f35b61020c6106b0565b604051610219919061437e565b60405180910390f35b61023c60048036038101906102379190613d24565b610742565b60405161024991906142fc565b60405180910390f35b61026c60048036038101906102679190613c96565b6107c7565b005b61028860048036038101906102839190613d24565b6108df565b604051610295919061437e565b60405180910390f35b6102b860048036038101906102b39190613d24565b6109f9565b6040516102c5919061437e565b60405180910390f35b6102d6610b13565b6040516102e39190614600565b60405180910390f35b61030660048036038101906103019190613b90565b610b20565b005b610322600480360381019061031d9190613c96565b610b80565b60405161032f9190614600565b60405180910390f35b610352600480360381019061034d9190613d24565b610c25565b005b61036e60048036038101906103699190613b90565b610cdf565b005b61038a60048036038101906103859190613d24565b610cff565b005b6103a660048036038101906103a19190613d24565b610e36565b6040516103b3919061437e565b60405180910390f35b6103d660048036038101906103d19190613d24565b610f50565b6040516103e39190614600565b60405180910390f35b61040660048036038101906104019190613d24565b610fe7565b60405161041391906142fc565b60405180910390f35b61043660048036038101906104319190613b2b565b611099565b6040516104439190614600565b60405180910390f35b610454611151565b005b610470600480360381019061046b9190613d24565b6111d9565b60405161047d919061437e565b60405180910390f35b61048e6112f3565b60405161049b91906142fc565b60405180910390f35b6104ac61131d565b6040516104b9919061437e565b60405180910390f35b6104dc60048036038101906104d79190613c5a565b6113af565b005b6104f860048036038101906104f39190613bdf565b611530565b005b610514600480360381019061050f9190613d24565b611592565b604051610521919061437e565b60405180910390f35b610544600480360381019061053f9190613d24565b6116ac565b604051610551919061437e565b60405180910390f35b610574600480360381019061056f9190613d24565b6117c6565b604051610581919061437e565b60405180910390f35b6105a4600480360381019061059f9190613d24565b6122e8565b6040516105b1919061437e565b60405180910390f35b6105d460048036038101906105cf9190613b54565b612402565b6040516105e19190614363565b60405180910390f35b61060460048036038101906105ff9190613b2b565b612496565b005b610620600480360381019061061b9190613d24565b61258e565b60405161062d919061437e565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106a957506106a8826126a8565b5b9050919050565b6060600080546106bf9061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546106eb9061487f565b80156107385780601f1061070d57610100808354040283529160200191610738565b820191906000526020600020905b81548152906001019060200180831161071b57829003601f168201915b5050505050905090565b600061074d8261278a565b61078c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078390614500565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107d282610fe7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a90614580565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108626127f6565b73ffffffffffffffffffffffffffffffffffffffff16148061089157506108908161088b6127f6565b612402565b5b6108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c790614480565b60405180910390fd5b6108da83836127fe565b505050565b60606109f2826040518060400160405280600a81526020017f54455854454449544f5200000000000000000000000000000000000000000000815250600d805480602002602001604051908101604052809291908181526020016000905b828210156109e957838290600052602060002001805461095c9061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546109889061487f565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b50505050508152602001906001019061093d565b505050506128b7565b9050919050565b6060610b0c826040518060400160405280600481526020017f56494245000000000000000000000000000000000000000000000000000000008152506013805480602002602001604051908101604052809291908181526020016000905b82821015610b03578382906000526020600020018054610a769061487f565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa29061487f565b8015610aef5780601f10610ac457610100808354040283529160200191610aef565b820191906000526020600020905b815481529060010190602001808311610ad257829003601f168201915b505050505081526020019060010190610a57565b505050506128b7565b9050919050565b6000600880549050905090565b610b31610b2b6127f6565b8261294c565b610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b67906145a0565b60405180910390fd5b610b7b838383612a2a565b505050565b6000610b8b83611099565b8210610bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc3906143a0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6002600a541415610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c62906145e0565b60405180910390fd5b6002600a81905550600081118015610c845750611e6281105b610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90614540565b60405180910390fd5b610cd4610cce6127f6565b82612c86565b6001600a8190555050565b610cfa83838360405180602001604052806000815250611530565b505050565b6002600a541415610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c906145e0565b60405180910390fd5b6002600a81905550610d556127f6565b73ffffffffffffffffffffffffffffffffffffffff16610d736112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090614520565b60405180910390fd5b611e6181118015610ddb5750611f4181105b610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190614540565b60405180910390fd5b610e2b610e256112f3565b82612c86565b6001600a8190555050565b6060610f49826040518060400160405280600281526020017f4f53000000000000000000000000000000000000000000000000000000000000815250600c805480602002602001604051908101604052809291908181526020016000905b82821015610f40578382906000526020600020018054610eb39061487f565b80601f0160208091040260200160405190810160405280929190818152602001828054610edf9061487f565b8015610f2c5780601f10610f0157610100808354040283529160200191610f2c565b820191906000526020600020905b815481529060010190602001808311610f0f57829003601f168201915b505050505081526020019060010190610e94565b505050506128b7565b9050919050565b6000610f5a610b13565b8210610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906145c0565b60405180910390fd5b60088281548110610fd5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611090576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611087906144c0565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561110a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611101906144a0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111596127f6565b73ffffffffffffffffffffffffffffffffffffffff166111776112f3565b73ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490614520565b60405180910390fd5b6111d76000612ca4565b565b60606112ec826040518060400160405280600881526020017f4c4f434154494f4e0000000000000000000000000000000000000000000000008152506011805480602002602001604051908101604052809291908181526020016000905b828210156112e35783829060005260206000200180546112569061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546112829061487f565b80156112cf5780601f106112a4576101008083540402835291602001916112cf565b820191906000526020600020905b8154815290600101906020018083116112b257829003601f168201915b505050505081526020019060010190611237565b505050506128b7565b9050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461132c9061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546113589061487f565b80156113a55780601f1061137a576101008083540402835291602001916113a5565b820191906000526020600020905b81548152906001019060200180831161138857829003601f168201915b5050505050905090565b6113b76127f6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614440565b60405180910390fd5b80600560006114326127f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114df6127f6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115249190614363565b60405180910390a35050565b61154161153b6127f6565b8361294c565b611580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611577906145a0565b60405180910390fd5b61158c84848484612d6a565b50505050565b60606116a5826040518060400160405280600881526020017f434c4f5448494e47000000000000000000000000000000000000000000000000815250600e805480602002602001604051908101604052809291908181526020016000905b8282101561169c57838290600052602060002001805461160f9061487f565b80601f016020809104026020016040519081016040528092919081815260200182805461163b9061487f565b80156116885780601f1061165d57610100808354040283529160200191611688565b820191906000526020600020905b81548152906001019060200180831161166b57829003601f168201915b5050505050815260200190600101906115f0565b505050506128b7565b9050919050565b60606117bf826040518060400160405280600481526020017f4d494e44000000000000000000000000000000000000000000000000000000008152506012805480602002602001604051908101604052809291908181526020016000905b828210156117b65783829060005260206000200180546117299061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546117559061487f565b80156117a25780601f10611777576101008083540402835291602001916117a2565b820191906000526020600020905b81548152906001019060200180831161178557829003601f168201915b50505050508152602001906001019061170a565b505050506128b7565b9050919050565b60606117d0613a32565b60405180610120016040528060fd815260200161528960fd913981600060138110611824577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525061183583610e36565b8160016013811061186f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060405180606001604052806028815260200161526160289139816002601381106118ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506118db836108df565b81600360138110611915577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060405180606001604052806028815260200161512d6028913981600460138110611970577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525061198183611592565b816005601381106119bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060600160405280602881526020016151a76028913981600660138110611a16577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250611a278361258e565b81600760138110611a61577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060600160405280602981526020016151cf6029913981600860138110611abc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250611acd836122e8565b81600960138110611b07577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060405180606001604052806029815260200161517e6029913981600a60138110611b62577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250611b73836111d9565b81600b60138110611bad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060600160405280602981526020016151f86029913981600e60138110611c08577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250611c19836116ac565b81600f60138110611c53577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060600160405280602981526020016151556029913981601060138110611cae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250611cbf836109f9565b81601160138110611cf9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e0000000000000000000000000000000000000081525081601260138110611d71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250600081600060138110611db5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015182600160138110611df4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015183600260138110611e33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184600360138110611e72577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015185600460138110611eb1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015186600560138110611ef0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600660138110611f2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015188600760138110611f6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015189600860138110611fad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151604051602001611fca9998979695949392919061417d565b60405160208183030381529060405290508082600960138110612016577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015183600a60138110612055577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184600b60138110612094577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015185600c601381106120d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015186600d60138110612112577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600e60138110612151577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015188600f60138110612190577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151896010601381106121cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201518a60116013811061220e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201518b60126013811061224d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160405160200161226c9b9a999897969594939291906141fc565b604051602081830303815290604052905060006122b961228b86612dc6565b61229484612f73565b6040516020016122a5929190614295565b604051602081830303815290604052612f73565b9050806040516020016122cc91906142da565b6040516020818303038152906040529150819350505050919050565b60606123fb826040518060400160405280600881526020017f494e4455535452590000000000000000000000000000000000000000000000008152506010805480602002602001604051908101604052809291908181526020016000905b828210156123f25783829060005260206000200180546123659061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546123919061487f565b80156123de5780601f106123b3576101008083540402835291602001916123de565b820191906000526020600020905b8154815290600101906020018083116123c157829003601f168201915b505050505081526020019060010190612346565b505050506128b7565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61249e6127f6565b73ffffffffffffffffffffffffffffffffffffffff166124bc6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614612512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250990614520565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612582576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612579906143e0565b60405180910390fd5b61258b81612ca4565b50565b60606126a1826040518060400160405280600881526020017f4c414e4755414745000000000000000000000000000000000000000000000000815250600f805480602002602001604051908101604052809291908181526020016000905b8282101561269857838290600052602060002001805461260b9061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546126379061487f565b80156126845780601f1061265957610100808354040283529160200191612684565b820191906000526020600020905b81548152906001019060200180831161266757829003601f168201915b5050505050815260200190600101906125ec565b505050506128b7565b9050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061277357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612783575061278282613131565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661287183610fe7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606060006128ed846128c887612dc6565b6040516020016128d9929190614159565b60405160208183030381529060405261319b565b90506000838451836128ff919061492b565b81518110612936577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080925050509392505050565b60006129578261278a565b612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614460565b60405180910390fd5b60006129a183610fe7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a1057508373ffffffffffffffffffffffffffffffffffffffff166129f884610742565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a215750612a208185612402565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a4a82610fe7565b73ffffffffffffffffffffffffffffffffffffffff1614612aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9790614560565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0790614420565b60405180910390fd5b612b1b8383836131ce565b612b266000826127fe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b769190614795565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bcd91906146b4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612ca08282604051806020016040528060008152506132e2565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d75848484612a2a565b612d818484848461333d565b612dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db7906143c0565b60405180910390fd5b50505050565b60606000821415612e0e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f6e565b600082905060005b60008214612e40578080612e29906148e2565b915050600a82612e39919061470a565b9150612e16565b60008167ffffffffffffffff811115612e82577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612eb45781602001600182028036833780820191505090505b5090505b60008514612f6757600182612ecd9190614795565b9150600a85612edc919061492b565b6030612ee891906146b4565b60f81b818381518110612f24577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f60919061470a565b9450612eb8565b8093505050505b919050565b60606000825190506000811415612f9c576040518060200160405280600081525091505061312c565b60006003600283612fad91906146b4565b612fb7919061470a565b6004612fc3919061473b565b90506000602082612fd491906146b4565b67ffffffffffffffff811115613013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156130455781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001615221604091399050600181016020830160005b868110156130e95760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050613070565b50600386066001811461310357600281146131135761311e565b613d3d60f01b600283035261311e565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816040516020016131ae9190614142565b6040516020818303038152906040528051906020012060001c9050919050565b6131d98383836134d4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561321c57613217816134d9565b61325b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461325a576132598382613522565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561329e576132998161368f565b6132dd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146132dc576132db82826137d2565b5b5b505050565b6132ec8383613851565b6132f9600084848461333d565b613338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332f906143c0565b60405180910390fd5b505050565b600061335e8473ffffffffffffffffffffffffffffffffffffffff16613a1f565b156134c7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026133876127f6565b8786866040518563ffffffff1660e01b81526004016133a99493929190614317565b602060405180830381600087803b1580156133c357600080fd5b505af19250505080156133f457506040513d601f19601f820116820180604052508101906133f19190613cfb565b60015b613477573d8060008114613424576040519150601f19603f3d011682016040523d82523d6000602084013e613429565b606091505b5060008151141561346f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613466906143c0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506134cc565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161352f84611099565b6135399190614795565b905060006007600084815260200190815260200160002054905081811461361e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136a39190614795565b90506000600960008481526020019081526020016000205490506000600883815481106136f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613741577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806137b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006137dd83611099565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b8906144e0565b60405180910390fd5b6138ca8161278a565b1561390a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390190614400565b60405180910390fd5b613916600083836131ce565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461396691906146b4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6040518061026001604052806013905b6060815260200190600190039081613a425790505090565b6000613a6d613a6884614640565b61461b565b905082815260208101848484011115613a8557600080fd5b613a9084828561483d565b509392505050565b600081359050613aa7816150d0565b92915050565b600081359050613abc816150e7565b92915050565b600081359050613ad1816150fe565b92915050565b600081519050613ae6816150fe565b92915050565b600082601f830112613afd57600080fd5b8135613b0d848260208601613a5a565b91505092915050565b600081359050613b2581615115565b92915050565b600060208284031215613b3d57600080fd5b6000613b4b84828501613a98565b91505092915050565b60008060408385031215613b6757600080fd5b6000613b7585828601613a98565b9250506020613b8685828601613a98565b9150509250929050565b600080600060608486031215613ba557600080fd5b6000613bb386828701613a98565b9350506020613bc486828701613a98565b9250506040613bd586828701613b16565b9150509250925092565b60008060008060808587031215613bf557600080fd5b6000613c0387828801613a98565b9450506020613c1487828801613a98565b9350506040613c2587828801613b16565b925050606085013567ffffffffffffffff811115613c4257600080fd5b613c4e87828801613aec565b91505092959194509250565b60008060408385031215613c6d57600080fd5b6000613c7b85828601613a98565b9250506020613c8c85828601613aad565b9150509250929050565b60008060408385031215613ca957600080fd5b6000613cb785828601613a98565b9250506020613cc885828601613b16565b9150509250929050565b600060208284031215613ce457600080fd5b6000613cf284828501613ac2565b91505092915050565b600060208284031215613d0d57600080fd5b6000613d1b84828501613ad7565b91505092915050565b600060208284031215613d3657600080fd5b6000613d4484828501613b16565b91505092915050565b613d56816147c9565b82525050565b613d65816147db565b82525050565b6000613d7682614671565b613d808185614687565b9350613d9081856020860161484c565b613d9981614a18565b840191505092915050565b6000613daf8261467c565b613db98185614698565b9350613dc981856020860161484c565b613dd281614a18565b840191505092915050565b6000613de88261467c565b613df281856146a9565b9350613e0281856020860161484c565b80840191505092915050565b6000613e1b602b83614698565b9150613e2682614a29565b604082019050919050565b6000613e3e603283614698565b9150613e4982614a78565b604082019050919050565b6000613e61600f836146a9565b9150613e6c82614ac7565b600f82019050919050565b6000613e84602683614698565b9150613e8f82614af0565b604082019050919050565b6000613ea7601c83614698565b9150613eb282614b3f565b602082019050919050565b6000613eca602483614698565b9150613ed582614b68565b604082019050919050565b6000613eed601983614698565b9150613ef882614bb7565b602082019050919050565b6000613f10602c83614698565b9150613f1b82614be0565b604082019050919050565b6000613f33603883614698565b9150613f3e82614c2f565b604082019050919050565b6000613f56602a83614698565b9150613f6182614c7e565b604082019050919050565b6000613f79602983614698565b9150613f8482614ccd565b604082019050919050565b6000613f9c6002836146a9565b9150613fa782614d1c565b600282019050919050565b6000613fbf602083614698565b9150613fca82614d45565b602082019050919050565b6000613fe2602c83614698565b9150613fed82614d6e565b604082019050919050565b6000614005602083614698565b915061401082614dbd565b602082019050919050565b600061402860fa836146a9565b915061403382614de6565b60fa82019050919050565b600061404b601083614698565b915061405682614f19565b602082019050919050565b600061406e602983614698565b915061407982614f42565b604082019050919050565b6000614091602183614698565b915061409c82614f91565b604082019050919050565b60006140b4601d836146a9565b91506140bf82614fe0565b601d82019050919050565b60006140d7603183614698565b91506140e282615009565b604082019050919050565b60006140fa602c83614698565b915061410582615058565b604082019050919050565b600061411d601f83614698565b9150614128826150a7565b602082019050919050565b61413c81614833565b82525050565b600061414e8284613ddd565b915081905092915050565b60006141658285613ddd565b91506141718284613ddd565b91508190509392505050565b6000614189828c613ddd565b9150614195828b613ddd565b91506141a1828a613ddd565b91506141ad8289613ddd565b91506141b98288613ddd565b91506141c58287613ddd565b91506141d18286613ddd565b91506141dd8285613ddd565b91506141e98284613ddd565b91508190509a9950505050505050505050565b6000614208828e613ddd565b9150614214828d613ddd565b9150614220828c613ddd565b915061422c828b613ddd565b9150614238828a613ddd565b91506142448289613ddd565b91506142508288613ddd565b915061425c8287613ddd565b91506142688286613ddd565b91506142748285613ddd565b91506142808284613ddd565b91508190509c9b505050505050505050505050565b60006142a082613e54565b91506142ac8285613ddd565b91506142b78261401b565b91506142c38284613ddd565b91506142ce82613f8f565b91508190509392505050565b60006142e5826140a7565b91506142f18284613ddd565b915081905092915050565b60006020820190506143116000830184613d4d565b92915050565b600060808201905061432c6000830187613d4d565b6143396020830186613d4d565b6143466040830185614133565b81810360608301526143588184613d6b565b905095945050505050565b60006020820190506143786000830184613d5c565b92915050565b600060208201905081810360008301526143988184613da4565b905092915050565b600060208201905081810360008301526143b981613e0e565b9050919050565b600060208201905081810360008301526143d981613e31565b9050919050565b600060208201905081810360008301526143f981613e77565b9050919050565b6000602082019050818103600083015261441981613e9a565b9050919050565b6000602082019050818103600083015261443981613ebd565b9050919050565b6000602082019050818103600083015261445981613ee0565b9050919050565b6000602082019050818103600083015261447981613f03565b9050919050565b6000602082019050818103600083015261449981613f26565b9050919050565b600060208201905081810360008301526144b981613f49565b9050919050565b600060208201905081810360008301526144d981613f6c565b9050919050565b600060208201905081810360008301526144f981613fb2565b9050919050565b6000602082019050818103600083015261451981613fd5565b9050919050565b6000602082019050818103600083015261453981613ff8565b9050919050565b600060208201905081810360008301526145598161403e565b9050919050565b6000602082019050818103600083015261457981614061565b9050919050565b6000602082019050818103600083015261459981614084565b9050919050565b600060208201905081810360008301526145b9816140ca565b9050919050565b600060208201905081810360008301526145d9816140ed565b9050919050565b600060208201905081810360008301526145f981614110565b9050919050565b60006020820190506146156000830184614133565b92915050565b6000614625614636565b905061463182826148b1565b919050565b6000604051905090565b600067ffffffffffffffff82111561465b5761465a6149e9565b5b61466482614a18565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146bf82614833565b91506146ca83614833565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146ff576146fe61495c565b5b828201905092915050565b600061471582614833565b915061472083614833565b9250826147305761472f61498b565b5b828204905092915050565b600061474682614833565b915061475183614833565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561478a5761478961495c565b5b828202905092915050565b60006147a082614833565b91506147ab83614833565b9250828210156147be576147bd61495c565b5b828203905092915050565b60006147d482614813565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561486a57808201518184015260208101905061484f565b83811115614879576000848401525b50505050565b6000600282049050600182168061489757607f821691505b602082108114156148ab576148aa6149ba565b5b50919050565b6148ba82614a18565b810181811067ffffffffffffffff821117156148d9576148d86149e9565b5b80604052505050565b60006148ed82614833565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149205761491f61495c565b5b600182019050919050565b600061493682614833565b915061494183614833565b9250826149515761495061498b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f7b226e616d65223a202244657620230000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f222c20226465736372697074696f6e223a2022446576656c6f7065727320617260008201527f6f756e642074686520776f726c6420617265207469726564206f6620776f726b60208201527f696e6720616e6420636f6e747269627574696e672074686569722074696d652060408201527f616e64206566666f727420746f20656e726963682074686520746f702031252e60608201527f204a6f696e20746865206d6f76656d656e74207468617420697320636f6d6d7560808201527f6e697479206f776e65642c206275696c64696e6720746865206675747572652060a08201527f66726f6d2074686520626f74746f6d2075702e222c2022696d616765223a202260c08201527f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000060e082015250565b7f546f6b656e20494420696e76616c696400000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6150d9816147c9565b81146150e457600080fd5b50565b6150f0816147db565b81146150fb57600080fd5b50565b615107816147e7565b811461511257600080fd5b50565b61511e81614833565b811461512957600080fd5b5056fe3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223136302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223132302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223134302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a20626c61636b3b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22776869746522202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223ea26469706673582212200e3fe7baa7a70b5e6e231a3db327f64f29940a4ac5e21a23dc41016f6eadddfb64736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636352211e11610104578063b88d4fde116100a2578063e440628c11610071578063e440628c1461058a578063e985e9c5146105ba578063f2fde38b146105ea578063f700e6e114610606576101cf565b8063b88d4fde146104de578063c099558f146104fa578063c8734b0a1461052a578063c87b56dd1461055a576101cf565b80637f7b1393116100de5780637f7b1393146104565780638da5cb5b1461048657806395d89b41146104a4578063a22cb465146104c2576101cf565b80636352211e146103ec57806370a082311461041c578063715018a61461044c576101cf565b806323b872dd1161017157806342842e0e1161014b57806342842e0e14610354578063434f48c4146103705780634de4cd991461038c5780634f6ccce7146103bc576101cf565b806323b872dd146102ec5780632f745c5914610308578063379607f514610338576101cf565b8063095ea7b3116101ad578063095ea7b3146102525780630a0eff0d1461026e5780630ec6cd181461029e57806318160ddd146102ce576101cf565b806301ffc9a7146101d457806306fdde0314610204578063081812fc14610222575b600080fd5b6101ee60048036038101906101e99190613cd2565b610636565b6040516101fb9190614363565b60405180910390f35b61020c6106b0565b604051610219919061437e565b60405180910390f35b61023c60048036038101906102379190613d24565b610742565b60405161024991906142fc565b60405180910390f35b61026c60048036038101906102679190613c96565b6107c7565b005b61028860048036038101906102839190613d24565b6108df565b604051610295919061437e565b60405180910390f35b6102b860048036038101906102b39190613d24565b6109f9565b6040516102c5919061437e565b60405180910390f35b6102d6610b13565b6040516102e39190614600565b60405180910390f35b61030660048036038101906103019190613b90565b610b20565b005b610322600480360381019061031d9190613c96565b610b80565b60405161032f9190614600565b60405180910390f35b610352600480360381019061034d9190613d24565b610c25565b005b61036e60048036038101906103699190613b90565b610cdf565b005b61038a60048036038101906103859190613d24565b610cff565b005b6103a660048036038101906103a19190613d24565b610e36565b6040516103b3919061437e565b60405180910390f35b6103d660048036038101906103d19190613d24565b610f50565b6040516103e39190614600565b60405180910390f35b61040660048036038101906104019190613d24565b610fe7565b60405161041391906142fc565b60405180910390f35b61043660048036038101906104319190613b2b565b611099565b6040516104439190614600565b60405180910390f35b610454611151565b005b610470600480360381019061046b9190613d24565b6111d9565b60405161047d919061437e565b60405180910390f35b61048e6112f3565b60405161049b91906142fc565b60405180910390f35b6104ac61131d565b6040516104b9919061437e565b60405180910390f35b6104dc60048036038101906104d79190613c5a565b6113af565b005b6104f860048036038101906104f39190613bdf565b611530565b005b610514600480360381019061050f9190613d24565b611592565b604051610521919061437e565b60405180910390f35b610544600480360381019061053f9190613d24565b6116ac565b604051610551919061437e565b60405180910390f35b610574600480360381019061056f9190613d24565b6117c6565b604051610581919061437e565b60405180910390f35b6105a4600480360381019061059f9190613d24565b6122e8565b6040516105b1919061437e565b60405180910390f35b6105d460048036038101906105cf9190613b54565b612402565b6040516105e19190614363565b60405180910390f35b61060460048036038101906105ff9190613b2b565b612496565b005b610620600480360381019061061b9190613d24565b61258e565b60405161062d919061437e565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106a957506106a8826126a8565b5b9050919050565b6060600080546106bf9061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546106eb9061487f565b80156107385780601f1061070d57610100808354040283529160200191610738565b820191906000526020600020905b81548152906001019060200180831161071b57829003601f168201915b5050505050905090565b600061074d8261278a565b61078c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078390614500565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107d282610fe7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a90614580565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108626127f6565b73ffffffffffffffffffffffffffffffffffffffff16148061089157506108908161088b6127f6565b612402565b5b6108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c790614480565b60405180910390fd5b6108da83836127fe565b505050565b60606109f2826040518060400160405280600a81526020017f54455854454449544f5200000000000000000000000000000000000000000000815250600d805480602002602001604051908101604052809291908181526020016000905b828210156109e957838290600052602060002001805461095c9061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546109889061487f565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b50505050508152602001906001019061093d565b505050506128b7565b9050919050565b6060610b0c826040518060400160405280600481526020017f56494245000000000000000000000000000000000000000000000000000000008152506013805480602002602001604051908101604052809291908181526020016000905b82821015610b03578382906000526020600020018054610a769061487f565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa29061487f565b8015610aef5780601f10610ac457610100808354040283529160200191610aef565b820191906000526020600020905b815481529060010190602001808311610ad257829003601f168201915b505050505081526020019060010190610a57565b505050506128b7565b9050919050565b6000600880549050905090565b610b31610b2b6127f6565b8261294c565b610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b67906145a0565b60405180910390fd5b610b7b838383612a2a565b505050565b6000610b8b83611099565b8210610bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc3906143a0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6002600a541415610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c62906145e0565b60405180910390fd5b6002600a81905550600081118015610c845750611e6281105b610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90614540565b60405180910390fd5b610cd4610cce6127f6565b82612c86565b6001600a8190555050565b610cfa83838360405180602001604052806000815250611530565b505050565b6002600a541415610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c906145e0565b60405180910390fd5b6002600a81905550610d556127f6565b73ffffffffffffffffffffffffffffffffffffffff16610d736112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090614520565b60405180910390fd5b611e6181118015610ddb5750611f4181105b610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190614540565b60405180910390fd5b610e2b610e256112f3565b82612c86565b6001600a8190555050565b6060610f49826040518060400160405280600281526020017f4f53000000000000000000000000000000000000000000000000000000000000815250600c805480602002602001604051908101604052809291908181526020016000905b82821015610f40578382906000526020600020018054610eb39061487f565b80601f0160208091040260200160405190810160405280929190818152602001828054610edf9061487f565b8015610f2c5780601f10610f0157610100808354040283529160200191610f2c565b820191906000526020600020905b815481529060010190602001808311610f0f57829003601f168201915b505050505081526020019060010190610e94565b505050506128b7565b9050919050565b6000610f5a610b13565b8210610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906145c0565b60405180910390fd5b60088281548110610fd5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611090576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611087906144c0565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561110a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611101906144a0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111596127f6565b73ffffffffffffffffffffffffffffffffffffffff166111776112f3565b73ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490614520565b60405180910390fd5b6111d76000612ca4565b565b60606112ec826040518060400160405280600881526020017f4c4f434154494f4e0000000000000000000000000000000000000000000000008152506011805480602002602001604051908101604052809291908181526020016000905b828210156112e35783829060005260206000200180546112569061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546112829061487f565b80156112cf5780601f106112a4576101008083540402835291602001916112cf565b820191906000526020600020905b8154815290600101906020018083116112b257829003601f168201915b505050505081526020019060010190611237565b505050506128b7565b9050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461132c9061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546113589061487f565b80156113a55780601f1061137a576101008083540402835291602001916113a5565b820191906000526020600020905b81548152906001019060200180831161138857829003601f168201915b5050505050905090565b6113b76127f6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614440565b60405180910390fd5b80600560006114326127f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114df6127f6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115249190614363565b60405180910390a35050565b61154161153b6127f6565b8361294c565b611580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611577906145a0565b60405180910390fd5b61158c84848484612d6a565b50505050565b60606116a5826040518060400160405280600881526020017f434c4f5448494e47000000000000000000000000000000000000000000000000815250600e805480602002602001604051908101604052809291908181526020016000905b8282101561169c57838290600052602060002001805461160f9061487f565b80601f016020809104026020016040519081016040528092919081815260200182805461163b9061487f565b80156116885780601f1061165d57610100808354040283529160200191611688565b820191906000526020600020905b81548152906001019060200180831161166b57829003601f168201915b5050505050815260200190600101906115f0565b505050506128b7565b9050919050565b60606117bf826040518060400160405280600481526020017f4d494e44000000000000000000000000000000000000000000000000000000008152506012805480602002602001604051908101604052809291908181526020016000905b828210156117b65783829060005260206000200180546117299061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546117559061487f565b80156117a25780601f10611777576101008083540402835291602001916117a2565b820191906000526020600020905b81548152906001019060200180831161178557829003601f168201915b50505050508152602001906001019061170a565b505050506128b7565b9050919050565b60606117d0613a32565b60405180610120016040528060fd815260200161528960fd913981600060138110611824577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525061183583610e36565b8160016013811061186f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060405180606001604052806028815260200161526160289139816002601381106118ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506118db836108df565b81600360138110611915577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060405180606001604052806028815260200161512d6028913981600460138110611970577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525061198183611592565b816005601381106119bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060600160405280602881526020016151a76028913981600660138110611a16577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250611a278361258e565b81600760138110611a61577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060600160405280602981526020016151cf6029913981600860138110611abc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250611acd836122e8565b81600960138110611b07577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018190525060405180606001604052806029815260200161517e6029913981600a60138110611b62577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250611b73836111d9565b81600b60138110611bad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060600160405280602981526020016151f86029913981600e60138110611c08577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250611c19836116ac565b81600f60138110611c53577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060600160405280602981526020016151556029913981601060138110611cae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250611cbf836109f9565b81601160138110611cf9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e0000000000000000000000000000000000000081525081601260138110611d71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181905250600081600060138110611db5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015182600160138110611df4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015183600260138110611e33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184600360138110611e72577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015185600460138110611eb1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015186600560138110611ef0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600660138110611f2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015188600760138110611f6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015189600860138110611fad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151604051602001611fca9998979695949392919061417d565b60405160208183030381529060405290508082600960138110612016577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015183600a60138110612055577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184600b60138110612094577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015185600c601381106120d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015186600d60138110612112577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600e60138110612151577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015188600f60138110612190577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151896010601381106121cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201518a60116013811061220e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201518b60126013811061224d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160405160200161226c9b9a999897969594939291906141fc565b604051602081830303815290604052905060006122b961228b86612dc6565b61229484612f73565b6040516020016122a5929190614295565b604051602081830303815290604052612f73565b9050806040516020016122cc91906142da565b6040516020818303038152906040529150819350505050919050565b60606123fb826040518060400160405280600881526020017f494e4455535452590000000000000000000000000000000000000000000000008152506010805480602002602001604051908101604052809291908181526020016000905b828210156123f25783829060005260206000200180546123659061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546123919061487f565b80156123de5780601f106123b3576101008083540402835291602001916123de565b820191906000526020600020905b8154815290600101906020018083116123c157829003601f168201915b505050505081526020019060010190612346565b505050506128b7565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61249e6127f6565b73ffffffffffffffffffffffffffffffffffffffff166124bc6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614612512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250990614520565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612582576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612579906143e0565b60405180910390fd5b61258b81612ca4565b50565b60606126a1826040518060400160405280600881526020017f4c414e4755414745000000000000000000000000000000000000000000000000815250600f805480602002602001604051908101604052809291908181526020016000905b8282101561269857838290600052602060002001805461260b9061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546126379061487f565b80156126845780601f1061265957610100808354040283529160200191612684565b820191906000526020600020905b81548152906001019060200180831161266757829003601f168201915b5050505050815260200190600101906125ec565b505050506128b7565b9050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061277357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612783575061278282613131565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661287183610fe7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606060006128ed846128c887612dc6565b6040516020016128d9929190614159565b60405160208183030381529060405261319b565b90506000838451836128ff919061492b565b81518110612936577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080925050509392505050565b60006129578261278a565b612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614460565b60405180910390fd5b60006129a183610fe7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a1057508373ffffffffffffffffffffffffffffffffffffffff166129f884610742565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a215750612a208185612402565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a4a82610fe7565b73ffffffffffffffffffffffffffffffffffffffff1614612aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9790614560565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0790614420565b60405180910390fd5b612b1b8383836131ce565b612b266000826127fe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b769190614795565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bcd91906146b4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612ca08282604051806020016040528060008152506132e2565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d75848484612a2a565b612d818484848461333d565b612dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db7906143c0565b60405180910390fd5b50505050565b60606000821415612e0e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f6e565b600082905060005b60008214612e40578080612e29906148e2565b915050600a82612e39919061470a565b9150612e16565b60008167ffffffffffffffff811115612e82577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612eb45781602001600182028036833780820191505090505b5090505b60008514612f6757600182612ecd9190614795565b9150600a85612edc919061492b565b6030612ee891906146b4565b60f81b818381518110612f24577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f60919061470a565b9450612eb8565b8093505050505b919050565b60606000825190506000811415612f9c576040518060200160405280600081525091505061312c565b60006003600283612fad91906146b4565b612fb7919061470a565b6004612fc3919061473b565b90506000602082612fd491906146b4565b67ffffffffffffffff811115613013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156130455781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001615221604091399050600181016020830160005b868110156130e95760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050613070565b50600386066001811461310357600281146131135761311e565b613d3d60f01b600283035261311e565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816040516020016131ae9190614142565b6040516020818303038152906040528051906020012060001c9050919050565b6131d98383836134d4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561321c57613217816134d9565b61325b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461325a576132598382613522565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561329e576132998161368f565b6132dd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146132dc576132db82826137d2565b5b5b505050565b6132ec8383613851565b6132f9600084848461333d565b613338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332f906143c0565b60405180910390fd5b505050565b600061335e8473ffffffffffffffffffffffffffffffffffffffff16613a1f565b156134c7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026133876127f6565b8786866040518563ffffffff1660e01b81526004016133a99493929190614317565b602060405180830381600087803b1580156133c357600080fd5b505af19250505080156133f457506040513d601f19601f820116820180604052508101906133f19190613cfb565b60015b613477573d8060008114613424576040519150601f19603f3d011682016040523d82523d6000602084013e613429565b606091505b5060008151141561346f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613466906143c0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506134cc565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161352f84611099565b6135399190614795565b905060006007600084815260200190815260200160002054905081811461361e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136a39190614795565b90506000600960008481526020019081526020016000205490506000600883815481106136f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613741577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806137b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006137dd83611099565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b8906144e0565b60405180910390fd5b6138ca8161278a565b1561390a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390190614400565b60405180910390fd5b613916600083836131ce565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461396691906146b4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6040518061026001604052806013905b6060815260200190600190039081613a425790505090565b6000613a6d613a6884614640565b61461b565b905082815260208101848484011115613a8557600080fd5b613a9084828561483d565b509392505050565b600081359050613aa7816150d0565b92915050565b600081359050613abc816150e7565b92915050565b600081359050613ad1816150fe565b92915050565b600081519050613ae6816150fe565b92915050565b600082601f830112613afd57600080fd5b8135613b0d848260208601613a5a565b91505092915050565b600081359050613b2581615115565b92915050565b600060208284031215613b3d57600080fd5b6000613b4b84828501613a98565b91505092915050565b60008060408385031215613b6757600080fd5b6000613b7585828601613a98565b9250506020613b8685828601613a98565b9150509250929050565b600080600060608486031215613ba557600080fd5b6000613bb386828701613a98565b9350506020613bc486828701613a98565b9250506040613bd586828701613b16565b9150509250925092565b60008060008060808587031215613bf557600080fd5b6000613c0387828801613a98565b9450506020613c1487828801613a98565b9350506040613c2587828801613b16565b925050606085013567ffffffffffffffff811115613c4257600080fd5b613c4e87828801613aec565b91505092959194509250565b60008060408385031215613c6d57600080fd5b6000613c7b85828601613a98565b9250506020613c8c85828601613aad565b9150509250929050565b60008060408385031215613ca957600080fd5b6000613cb785828601613a98565b9250506020613cc885828601613b16565b9150509250929050565b600060208284031215613ce457600080fd5b6000613cf284828501613ac2565b91505092915050565b600060208284031215613d0d57600080fd5b6000613d1b84828501613ad7565b91505092915050565b600060208284031215613d3657600080fd5b6000613d4484828501613b16565b91505092915050565b613d56816147c9565b82525050565b613d65816147db565b82525050565b6000613d7682614671565b613d808185614687565b9350613d9081856020860161484c565b613d9981614a18565b840191505092915050565b6000613daf8261467c565b613db98185614698565b9350613dc981856020860161484c565b613dd281614a18565b840191505092915050565b6000613de88261467c565b613df281856146a9565b9350613e0281856020860161484c565b80840191505092915050565b6000613e1b602b83614698565b9150613e2682614a29565b604082019050919050565b6000613e3e603283614698565b9150613e4982614a78565b604082019050919050565b6000613e61600f836146a9565b9150613e6c82614ac7565b600f82019050919050565b6000613e84602683614698565b9150613e8f82614af0565b604082019050919050565b6000613ea7601c83614698565b9150613eb282614b3f565b602082019050919050565b6000613eca602483614698565b9150613ed582614b68565b604082019050919050565b6000613eed601983614698565b9150613ef882614bb7565b602082019050919050565b6000613f10602c83614698565b9150613f1b82614be0565b604082019050919050565b6000613f33603883614698565b9150613f3e82614c2f565b604082019050919050565b6000613f56602a83614698565b9150613f6182614c7e565b604082019050919050565b6000613f79602983614698565b9150613f8482614ccd565b604082019050919050565b6000613f9c6002836146a9565b9150613fa782614d1c565b600282019050919050565b6000613fbf602083614698565b9150613fca82614d45565b602082019050919050565b6000613fe2602c83614698565b9150613fed82614d6e565b604082019050919050565b6000614005602083614698565b915061401082614dbd565b602082019050919050565b600061402860fa836146a9565b915061403382614de6565b60fa82019050919050565b600061404b601083614698565b915061405682614f19565b602082019050919050565b600061406e602983614698565b915061407982614f42565b604082019050919050565b6000614091602183614698565b915061409c82614f91565b604082019050919050565b60006140b4601d836146a9565b91506140bf82614fe0565b601d82019050919050565b60006140d7603183614698565b91506140e282615009565b604082019050919050565b60006140fa602c83614698565b915061410582615058565b604082019050919050565b600061411d601f83614698565b9150614128826150a7565b602082019050919050565b61413c81614833565b82525050565b600061414e8284613ddd565b915081905092915050565b60006141658285613ddd565b91506141718284613ddd565b91508190509392505050565b6000614189828c613ddd565b9150614195828b613ddd565b91506141a1828a613ddd565b91506141ad8289613ddd565b91506141b98288613ddd565b91506141c58287613ddd565b91506141d18286613ddd565b91506141dd8285613ddd565b91506141e98284613ddd565b91508190509a9950505050505050505050565b6000614208828e613ddd565b9150614214828d613ddd565b9150614220828c613ddd565b915061422c828b613ddd565b9150614238828a613ddd565b91506142448289613ddd565b91506142508288613ddd565b915061425c8287613ddd565b91506142688286613ddd565b91506142748285613ddd565b91506142808284613ddd565b91508190509c9b505050505050505050505050565b60006142a082613e54565b91506142ac8285613ddd565b91506142b78261401b565b91506142c38284613ddd565b91506142ce82613f8f565b91508190509392505050565b60006142e5826140a7565b91506142f18284613ddd565b915081905092915050565b60006020820190506143116000830184613d4d565b92915050565b600060808201905061432c6000830187613d4d565b6143396020830186613d4d565b6143466040830185614133565b81810360608301526143588184613d6b565b905095945050505050565b60006020820190506143786000830184613d5c565b92915050565b600060208201905081810360008301526143988184613da4565b905092915050565b600060208201905081810360008301526143b981613e0e565b9050919050565b600060208201905081810360008301526143d981613e31565b9050919050565b600060208201905081810360008301526143f981613e77565b9050919050565b6000602082019050818103600083015261441981613e9a565b9050919050565b6000602082019050818103600083015261443981613ebd565b9050919050565b6000602082019050818103600083015261445981613ee0565b9050919050565b6000602082019050818103600083015261447981613f03565b9050919050565b6000602082019050818103600083015261449981613f26565b9050919050565b600060208201905081810360008301526144b981613f49565b9050919050565b600060208201905081810360008301526144d981613f6c565b9050919050565b600060208201905081810360008301526144f981613fb2565b9050919050565b6000602082019050818103600083015261451981613fd5565b9050919050565b6000602082019050818103600083015261453981613ff8565b9050919050565b600060208201905081810360008301526145598161403e565b9050919050565b6000602082019050818103600083015261457981614061565b9050919050565b6000602082019050818103600083015261459981614084565b9050919050565b600060208201905081810360008301526145b9816140ca565b9050919050565b600060208201905081810360008301526145d9816140ed565b9050919050565b600060208201905081810360008301526145f981614110565b9050919050565b60006020820190506146156000830184614133565b92915050565b6000614625614636565b905061463182826148b1565b919050565b6000604051905090565b600067ffffffffffffffff82111561465b5761465a6149e9565b5b61466482614a18565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146bf82614833565b91506146ca83614833565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146ff576146fe61495c565b5b828201905092915050565b600061471582614833565b915061472083614833565b9250826147305761472f61498b565b5b828204905092915050565b600061474682614833565b915061475183614833565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561478a5761478961495c565b5b828202905092915050565b60006147a082614833565b91506147ab83614833565b9250828210156147be576147bd61495c565b5b828203905092915050565b60006147d482614813565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561486a57808201518184015260208101905061484f565b83811115614879576000848401525b50505050565b6000600282049050600182168061489757607f821691505b602082108114156148ab576148aa6149ba565b5b50919050565b6148ba82614a18565b810181811067ffffffffffffffff821117156148d9576148d86149e9565b5b80604052505050565b60006148ed82614833565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149205761491f61495c565b5b600182019050919050565b600061493682614833565b915061494183614833565b9250826149515761495061498b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f7b226e616d65223a202244657620230000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f222c20226465736372697074696f6e223a2022446576656c6f7065727320617260008201527f6f756e642074686520776f726c6420617265207469726564206f6620776f726b60208201527f696e6720616e6420636f6e747269627574696e672074686569722074696d652060408201527f616e64206566666f727420746f20656e726963682074686520746f702031252e60608201527f204a6f696e20746865206d6f76656d656e74207468617420697320636f6d6d7560808201527f6e697479206f776e65642c206275696c64696e6720746865206675747572652060a08201527f66726f6d2074686520626f74746f6d2075702e222c2022696d616765223a202260c08201527f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000060e082015250565b7f546f6b656e20494420696e76616c696400000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6150d9816147c9565b81146150e457600080fd5b50565b6150f0816147db565b81146150fb57600080fd5b50565b615107816147e7565b811461511257600080fd5b50565b61511e81614833565b811461512957600080fd5b5056fe3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223136302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223132302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223134302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a20626c61636b3b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22776869746522202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223ea26469706673582212200e3fe7baa7a70b5e6e231a3db327f64f29940a4ac5e21a23dc41016f6eadddfb64736f6c63430008040033

Deployed Bytecode Sourcemap

44571:7871:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38421:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25535:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27094:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26617:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47827:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48711:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39061:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27984:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38729:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51267:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28394:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51451;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47694:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39251:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25229:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24959:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9927:94;;;:::i;:::-;;48425:137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9276:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25704:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27387:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28650:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47982:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48574:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49172:2087;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48275:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27753:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10176:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48130:137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38421:224;38523:4;38562:35;38547:50;;;:11;:50;;;;:90;;;;38601:36;38625:11;38601:23;:36::i;:::-;38547:90;38540:97;;38421:224;;;:::o;25535:100::-;25589:13;25622:5;25615:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25535:100;:::o;27094:221::-;27170:7;27198:16;27206:7;27198;:16::i;:::-;27190:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27283:15;:24;27299:7;27283:24;;;;;;;;;;;;;;;;;;;;;27276:31;;27094:221;;;:::o;26617:411::-;26698:13;26714:23;26729:7;26714:14;:23::i;:::-;26698:39;;26762:5;26756:11;;:2;:11;;;;26748:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26856:5;26840:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26865:37;26882:5;26889:12;:10;:12::i;:::-;26865:16;:37::i;:::-;26840:62;26818:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26999:21;27008:2;27012:7;26999:8;:21::i;:::-;26617:411;;;:::o;47827:143::-;47888:13;47921:41;47927:7;47921:41;;;;;;;;;;;;;;;;;47950:11;47921:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:41::i;:::-;47914:48;;47827:143;;;:::o;48711:125::-;48766:13;48799:29;48805:7;48799:29;;;;;;;;;;;;;;;;;48822:5;48799:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:29::i;:::-;48792:36;;48711:125;;;:::o;39061:113::-;39122:7;39149:10;:17;;;;39142:24;;39061:113;:::o;27984:339::-;28179:41;28198:12;:10;:12::i;:::-;28212:7;28179:18;:41::i;:::-;28171:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28287:28;28297:4;28303:2;28307:7;28287:9;:28::i;:::-;27984:339;;;:::o;38729:256::-;38826:7;38862:23;38879:5;38862:16;:23::i;:::-;38854:5;:31;38846:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38951:12;:19;38964:5;38951:19;;;;;;;;;;;;;;;:26;38971:5;38951:26;;;;;;;;;;;;38944:33;;38729:256;;;;:::o;51267:172::-;12215:1;12811:7;;:19;;12803:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12215:1;12944:7;:18;;;;51348:1:::1;51338:7;:11;:29;;;;;51363:4;51353:7;:14;51338:29;51330:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;51399:32;51409:12;:10;:12::i;:::-;51423:7;51399:9;:32::i;:::-;12171:1:::0;13123:7;:22;;;;51267:172;:::o;28394:185::-;28532:39;28549:4;28555:2;28559:7;28532:39;;;;;;;;;;;;:16;:39::i;:::-;28394:185;;;:::o;51451:::-;12215:1;12811:7;;:19;;12803:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12215:1;12944:7;:18;;;;9507:12:::1;:10;:12::i;:::-;9496:23;;:7;:5;:7::i;:::-;:23;;;9488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51547:4:::2;51537:7;:14;:32;;;;;51565:4;51555:7;:14;51537:32;51529:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;51601:27;51611:7;:5;:7::i;:::-;51620;51601:9;:27::i;:::-;12171:1:::0;13123:7;:22;;;;51451:185;:::o;47694:121::-;47747:13;47780:27;47786:7;47780:27;;;;;;;;;;;;;;;;;47801:5;47780:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:27::i;:::-;47773:34;;47694:121;;;:::o;39251:233::-;39326:7;39362:30;:28;:30::i;:::-;39354:5;:38;39346:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39459:10;39470:5;39459:17;;;;;;;;;;;;;;;;;;;;;;;;39452:24;;39251:233;;;:::o;25229:239::-;25301:7;25321:13;25337:7;:16;25345:7;25337:16;;;;;;;;;;;;;;;;;;;;;25321:32;;25389:1;25372:19;;:5;:19;;;;25364:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25455:5;25448:12;;;25229:239;;;:::o;24959:208::-;25031:7;25076:1;25059:19;;:5;:19;;;;25051:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25143:9;:16;25153:5;25143:16;;;;;;;;;;;;;;;;25136:23;;24959:208;;;:::o;9927:94::-;9507:12;:10;:12::i;:::-;9496:23;;:7;:5;:7::i;:::-;:23;;;9488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9992:21:::1;10010:1;9992:9;:21::i;:::-;9927:94::o:0;48425:137::-;48484:13;48517:37;48523:7;48517:37;;;;;;;;;;;;;;;;;48544:9;48517:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:37::i;:::-;48510:44;;48425:137;;;:::o;9276:87::-;9322:7;9349:6;;;;;;;;;;;9342:13;;9276:87;:::o;25704:104::-;25760:13;25793:7;25786:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25704:104;:::o;27387:295::-;27502:12;:10;:12::i;:::-;27490:24;;:8;:24;;;;27482:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27602:8;27557:18;:32;27576:12;:10;:12::i;:::-;27557:32;;;;;;;;;;;;;;;:42;27590:8;27557:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27655:8;27626:48;;27641:12;:10;:12::i;:::-;27626:48;;;27665:8;27626:48;;;;;;:::i;:::-;;;;;;;;27387:295;;:::o;28650:328::-;28825:41;28844:12;:10;:12::i;:::-;28858:7;28825:18;:41::i;:::-;28817:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28931:39;28945:4;28951:2;28955:7;28964:5;28931:13;:39::i;:::-;28650:328;;;;:::o;47982:136::-;48041:13;48074:36;48080:7;48074:36;;;;;;;;;;;;;;;;;48101:8;48074:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:36::i;:::-;48067:43;;47982:136;;;:::o;48574:125::-;48629:13;48662:29;48668:7;48662:29;;;;;;;;;;;;;;;;;48685:5;48662:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:29::i;:::-;48655:36;;48574:125;;;:::o;49172:2087::-;49237:13;49263:23;;:::i;:::-;49297:266;;;;;;;;;;;;;;;;;:5;49303:1;49297:8;;;;;;;;;;;;;;;;;;:266;;;;49587:14;49593:7;49587:5;:14::i;:::-;49576:5;49582:1;49576:8;;;;;;;;;;;;;;;;;;:25;;;;49614:53;;;;;;;;;;;;;;;;;:5;49620:1;49614:8;;;;;;;;;;;;;;;;;;:53;;;;49691:22;49705:7;49691:13;:22::i;:::-;49680:5;49686:1;49680:8;;;;;;;;;;;;;;;;;;:33;;;;49726:53;;;;;;;;;;;;;;;;;:5;49732:1;49726:8;;;;;;;;;;;;;;;;;;:53;;;;49803:20;49815:7;49803:11;:20::i;:::-;49792:5;49798:1;49792:8;;;;;;;;;;;;;;;;;;:31;;;;49836:53;;;;;;;;;;;;;;;;;:5;49842:1;49836:8;;;;;;;;;;;;;;;;;;:53;;;;49913:20;49925:7;49913:11;:20::i;:::-;49902:5;49908:1;49902:8;;;;;;;;;;;;;;;;;;:31;;;;49946:54;;;;;;;;;;;;;;;;;:5;49952:1;49946:8;;;;;;;;;;;;;;;;;;:54;;;;50024:20;50036:7;50024:11;:20::i;:::-;50013:5;50019:1;50013:8;;;;;;;;;;;;;;;;;;:31;;;;50057:55;;;;;;;;;;;;;;;;;:5;50063:2;50057:9;;;;;;;;;;;;;;;;;;:55;;;;50137:20;50149:7;50137:11;:20::i;:::-;50125:5;50131:2;50125:9;;;;;;;;;;;;;;;;;;:32;;;;50170:55;;;;;;;;;;;;;;;;;:5;50176:2;50170:9;;;;;;;;;;;;;;;;;;:55;;;;50250:16;50258:7;50250;:16::i;:::-;50238:5;50244:2;50238:9;;;;;;;;;;;;;;;;;;:28;;;;50279:55;;;;;;;;;;;;;;;;;:5;50285:2;50279:9;;;;;;;;;;;;;;;;;;:55;;;;50359:16;50367:7;50359;:16::i;:::-;50347:5;50353:2;50347:9;;;;;;;;;;;;;;;;;;:28;;;;50388:27;;;;;;;;;;;;;;;;;:5;50394:2;50388:9;;;;;;;;;;;;;;;;;;:27;;;;50428:20;50475:5;50481:1;50475:8;;;;;;;;;;;;;;;;;;;50485:5;50491:1;50485:8;;;;;;;;;;;;;;;;;;;50495:5;50501:1;50495:8;;;;;;;;;;;;;;;;;;;50505:5;50511:1;50505:8;;;;;;;;;;;;;;;;;;;50515:5;50521:1;50515:8;;;;;;;;;;;;;;;;;;;50525:5;50531:1;50525:8;;;;;;;;;;;;;;;;;;;50535:5;50541:1;50535:8;;;;;;;;;;;;;;;;;;;50545:5;50551:1;50545:8;;;;;;;;;;;;;;;;;;;50555:5;50561:1;50555:8;;;;;;;;;;;;;;;;;;;50458:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50428:137;;50609:6;50617:5;50623:1;50617:8;;;;;;;;;;;;;;;;;;;50627:5;50633:2;50627:9;;;;;;;;;;;;;;;;;;;50638:5;50644:2;50638:9;;;;;;;;;;;;;;;;;;;50649:5;50655:2;50649:9;;;;;;;;;;;;;;;;;;;50660:5;50666:2;50660:9;;;;;;;;;;;;;;;;;;;50671:5;50677:2;50671:9;;;;;;;;;;;;;;;;;;;50682:5;50688:2;50682:9;;;;;;;;;;;;;;;;;;;50693:5;50699:2;50693:9;;;;;;;;;;;;;;;;;;;50704:5;50710:2;50704:9;;;;;;;;;;;;;;;;;;;50715:5;50721:2;50715:9;;;;;;;;;;;;;;;;;;;50592:133;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50576:150;;50747:18;50768:374;50831:17;50840:7;50831:8;:17::i;:::-;51104:28;51124:6;51104:13;:28::i;:::-;50795:344;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50768:13;:374::i;:::-;50747:395;;51219:4;51169:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;51153:72;;51245:6;51238:13;;;;;49172:2087;;;:::o;48275:138::-;48334:13;48367:38;48373:7;48367:38;;;;;;;;;;;;;;;;;48394:10;48367:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:38::i;:::-;48360:45;;48275:138;;;:::o;27753:164::-;27850:4;27874:18;:25;27893:5;27874:25;;;;;;;;;;;;;;;:35;27900:8;27874:35;;;;;;;;;;;;;;;;;;;;;;;;;27867:42;;27753:164;;;;:::o;10176:192::-;9507:12;:10;:12::i;:::-;9496:23;;:7;:5;:7::i;:::-;:23;;;9488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10285:1:::1;10265:22;;:8;:22;;;;10257:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10341:19;10351:8;10341:9;:19::i;:::-;10176:192:::0;:::o;48130:137::-;48189:13;48222:37;48228:7;48222:37;;;;;;;;;;;;;;;;;48249:9;48222:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:37::i;:::-;48215:44;;48130:137;;;:::o;24590:305::-;24692:4;24744:25;24729:40;;;:11;:40;;;;:105;;;;24801:33;24786:48;;;:11;:48;;;;24729:105;:158;;;;24851:36;24875:11;24851:23;:36::i;:::-;24729:158;24709:178;;24590:305;;;:::o;30488:127::-;30553:4;30605:1;30577:30;;:7;:16;30585:7;30577:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30570:37;;30488:127;;;:::o;8136:98::-;8189:7;8216:10;8209:17;;8136:98;:::o;34470:174::-;34572:2;34545:15;:24;34561:7;34545:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34628:7;34624:2;34590:46;;34599:23;34614:7;34599:14;:23::i;:::-;34590:46;;;;;;;;;;;;34470:174;;:::o;48848:316::-;48957:13;48983:12;48998:62;49029:9;49040:17;49049:7;49040:8;:17::i;:::-;49012:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48998:6;:62::i;:::-;48983:77;;49071:20;49094:11;49113;:18;49106:4;:25;;;;:::i;:::-;49094:38;;;;;;;;;;;;;;;;;;;;;;49071:61;;49150:6;49143:13;;;;48848:316;;;;;:::o;30782:348::-;30875:4;30900:16;30908:7;30900;:16::i;:::-;30892:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30976:13;30992:23;31007:7;30992:14;:23::i;:::-;30976:39;;31045:5;31034:16;;:7;:16;;;:51;;;;31078:7;31054:31;;:20;31066:7;31054:11;:20::i;:::-;:31;;;31034:51;:87;;;;31089:32;31106:5;31113:7;31089:16;:32::i;:::-;31034:87;31026:96;;;30782:348;;;;:::o;33774:578::-;33933:4;33906:31;;:23;33921:7;33906:14;:23::i;:::-;:31;;;33898:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34016:1;34002:16;;:2;:16;;;;33994:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34072:39;34093:4;34099:2;34103:7;34072:20;:39::i;:::-;34176:29;34193:1;34197:7;34176:8;:29::i;:::-;34237:1;34218:9;:15;34228:4;34218:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34266:1;34249:9;:13;34259:2;34249:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34297:2;34278:7;:16;34286:7;34278:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34336:7;34332:2;34317:27;;34326:4;34317:27;;;;;;;;;;;;33774:578;;;:::o;31472:110::-;31548:26;31558:2;31562:7;31548:26;;;;;;;;;;;;:9;:26::i;:::-;31472:110;;:::o;10376:173::-;10432:16;10451:6;;;;;;;;;;;10432:25;;10477:8;10468:6;;:17;;;;;;;;;;;;;;;;;;10532:8;10501:40;;10522:8;10501:40;;;;;;;;;;;;10376:173;;:::o;29860:315::-;30017:28;30027:4;30033:2;30037:7;30017:9;:28::i;:::-;30064:48;30087:4;30093:2;30097:7;30106:5;30064:22;:48::i;:::-;30056:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29860:315;;;;:::o;51648:715::-;51704:13;51926:1;51917:5;:10;51913:53;;;51944:10;;;;;;;;;;;;;;;;;;;;;51913:53;51976:12;51991:5;51976:20;;52007:14;52032:78;52047:1;52039:4;:9;52032:78;;52065:8;;;;;:::i;:::-;;;;52096:2;52088:10;;;;;:::i;:::-;;;52032:78;;;52120:19;52152:6;52142:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52120:39;;52170:154;52186:1;52177:5;:10;52170:154;;52214:1;52204:11;;;;;:::i;:::-;;;52281:2;52273:5;:10;;;;:::i;:::-;52260:2;:24;;;;:::i;:::-;52247:39;;52230:6;52237;52230:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;52310:2;52301:11;;;;;:::i;:::-;;;52170:154;;;52348:6;52334:21;;;;;51648:715;;;;:::o;52793:1607::-;52851:13;52877:11;52891:4;:11;52877:25;;52924:1;52917:3;:8;52913:23;;;52927:9;;;;;;;;;;;;;;;;;52913:23;52988:18;53026:1;53021;53015:3;:7;;;;:::i;:::-;53014:13;;;;:::i;:::-;53009:1;:19;;;;:::i;:::-;52988:40;;53086:19;53131:2;53118:10;:15;;;;:::i;:::-;53108:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53086:48;;53147:18;53168:5;;;;;;;;;;;;;;;;;53147:26;;53237:1;53230:5;53226:13;53282:2;53274:6;53270:15;53333:1;53301:777;53356:3;53353:1;53350:10;53301:777;;;53411:1;53408;53404:9;53399:14;;53469:8;53464:1;53458:4;53454:12;53448:19;53444:34;53549:4;53541:5;53537:2;53533:14;53529:25;53519:8;53515:40;53509:47;53588:3;53585:1;53581:11;53574:18;;53679:4;53670;53662:5;53658:2;53654:14;53650:25;53640:8;53636:40;53630:47;53626:58;53621:3;53617:68;53610:75;;53717:3;53714:1;53710:11;53703:18;;53807:4;53798;53790:5;53787:1;53783:13;53779:24;53769:8;53765:39;53759:46;53755:57;53750:3;53746:67;53739:74;;53845:3;53842:1;53838:11;53831:18;;53927:4;53918;53911:5;53907:16;53897:8;53893:31;53887:38;53883:49;53878:3;53874:59;53867:66;;53967:3;53962;53958:13;53951:20;;54009:3;53998:9;53991:22;54061:1;54050:9;54046:17;54033:30;;53380:698;;53301:777;;;53305:44;54110:1;54105:3;54101:11;54131:1;54126:84;;;;54229:1;54224:82;;;;54094:212;;54126:84;54187:6;54182:3;54178:16;54174:1;54163:9;54159:17;54152:43;54126:84;;54224:82;54285:4;54280:3;54276:14;54272:1;54261:9;54257:17;54250:41;54094:212;;54337:10;54329:6;54322:26;53195:1164;;54385:6;54371:21;;;;;;52793:1607;;;;:::o;23197:157::-;23282:4;23321:25;23306:40;;;:11;:40;;;;23299:47;;23197:157;;;:::o;47544:138::-;47604:7;47666:5;47649:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;47639:34;;;;;;47631:43;;47624:50;;47544:138;;;:::o;40097:589::-;40241:45;40268:4;40274:2;40278:7;40241:26;:45::i;:::-;40319:1;40303:18;;:4;:18;;;40299:187;;;40338:40;40370:7;40338:31;:40::i;:::-;40299:187;;;40408:2;40400:10;;:4;:10;;;40396:90;;40427:47;40460:4;40466:7;40427:32;:47::i;:::-;40396:90;40299:187;40514:1;40500:16;;:2;:16;;;40496:183;;;40533:45;40570:7;40533:36;:45::i;:::-;40496:183;;;40606:4;40600:10;;:2;:10;;;40596:83;;40627:40;40655:2;40659:7;40627:27;:40::i;:::-;40596:83;40496:183;40097:589;;;:::o;31809:321::-;31939:18;31945:2;31949:7;31939:5;:18::i;:::-;31990:54;32021:1;32025:2;32029:7;32038:5;31990:22;:54::i;:::-;31968:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31809:321;;;:::o;35209:803::-;35364:4;35385:15;:2;:13;;;:15::i;:::-;35381:624;;;35437:2;35421:36;;;35458:12;:10;:12::i;:::-;35472:4;35478:7;35487:5;35421:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35417:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35684:1;35667:6;:13;:18;35663:272;;;35710:60;;;;;;;;;;:::i;:::-;;;;;;;;35663:272;35885:6;35879:13;35870:6;35866:2;35862:15;35855:38;35417:533;35554:45;;;35544:55;;;:6;:55;;;;35537:62;;;;;35381:624;35989:4;35982:11;;35209:803;;;;;;;:::o;36584:126::-;;;;:::o;41409:164::-;41513:10;:17;;;;41486:15;:24;41502:7;41486:24;;;;;;;;;;;:44;;;;41541:10;41557:7;41541:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41409:164;:::o;42200:988::-;42466:22;42516:1;42491:22;42508:4;42491:16;:22::i;:::-;:26;;;;:::i;:::-;42466:51;;42528:18;42549:17;:26;42567:7;42549:26;;;;;;;;;;;;42528:47;;42696:14;42682:10;:28;42678:328;;42727:19;42749:12;:18;42762:4;42749:18;;;;;;;;;;;;;;;:34;42768:14;42749:34;;;;;;;;;;;;42727:56;;42833:11;42800:12;:18;42813:4;42800:18;;;;;;;;;;;;;;;:30;42819:10;42800:30;;;;;;;;;;;:44;;;;42950:10;42917:17;:30;42935:11;42917:30;;;;;;;;;;;:43;;;;42678:328;;43102:17;:26;43120:7;43102:26;;;;;;;;;;;43095:33;;;43146:12;:18;43159:4;43146:18;;;;;;;;;;;;;;;:34;43165:14;43146:34;;;;;;;;;;;43139:41;;;42200:988;;;;:::o;43483:1079::-;43736:22;43781:1;43761:10;:17;;;;:21;;;;:::i;:::-;43736:46;;43793:18;43814:15;:24;43830:7;43814:24;;;;;;;;;;;;43793:45;;44165:19;44187:10;44198:14;44187:26;;;;;;;;;;;;;;;;;;;;;;;;44165:48;;44251:11;44226:10;44237;44226:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;44362:10;44331:15;:28;44347:11;44331:28;;;;;;;;;;;:41;;;;44503:15;:24;44519:7;44503:24;;;;;;;;;;;44496:31;;;44538:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43483:1079;;;;:::o;40987:221::-;41072:14;41089:20;41106:2;41089:16;:20::i;:::-;41072:37;;41147:7;41120:12;:16;41133:2;41120:16;;;;;;;;;;;;;;;:24;41137:6;41120:24;;;;;;;;;;;:34;;;;41194:6;41165:17;:26;41183:7;41165:26;;;;;;;;;;;:35;;;;40987:221;;;:::o;32466:382::-;32560:1;32546:16;;:2;:16;;;;32538:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32619:16;32627:7;32619;:16::i;:::-;32618:17;32610:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32681:45;32710:1;32714:2;32718:7;32681:20;:45::i;:::-;32756:1;32739:9;:13;32749:2;32739:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32787:2;32768:7;:16;32776:7;32768:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32832:7;32828:2;32807:33;;32824:1;32807:33;;;;;;;;;;;;32466:382;;:::o;15369:387::-;15429:4;15637:12;15704:7;15692:20;15684:28;;15747:1;15740:4;:8;15733:15;;;15369:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:343: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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:133::-;544:5;582:6;569:20;560:29;;598:30;622:5;598:30;:::i;:::-;550:84;;;;:::o;640:137::-;685:5;723:6;710:20;701:29;;739:32;765:5;739:32;:::i;:::-;691:86;;;;:::o;783:141::-;839:5;870:6;864:13;855:22;;886:32;912:5;886:32;:::i;:::-;845:79;;;;:::o;943:271::-;998:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1065:1;1062;1055:12;1014:2;1105:6;1092:20;1130:78;1204:3;1196:6;1189:4;1181:6;1177:17;1130:78;:::i;:::-;1121:87;;1004:210;;;;;:::o;1220:139::-;1266:5;1304:6;1291:20;1282:29;;1320:33;1347:5;1320:33;:::i;:::-;1272:87;;;;:::o;1365:262::-;1424:6;1473:2;1461:9;1452:7;1448:23;1444:32;1441:2;;;1489:1;1486;1479:12;1441:2;1532:1;1557:53;1602:7;1593:6;1582:9;1578:22;1557:53;:::i;:::-;1547:63;;1503:117;1431:196;;;;:::o;1633:407::-;1701:6;1709;1758:2;1746:9;1737:7;1733:23;1729:32;1726:2;;;1774:1;1771;1764:12;1726:2;1817:1;1842:53;1887:7;1878:6;1867:9;1863:22;1842:53;:::i;:::-;1832:63;;1788:117;1944:2;1970:53;2015:7;2006:6;1995:9;1991:22;1970:53;:::i;:::-;1960:63;;1915:118;1716:324;;;;;:::o;2046:552::-;2123:6;2131;2139;2188:2;2176:9;2167:7;2163:23;2159:32;2156:2;;;2204:1;2201;2194:12;2156:2;2247:1;2272:53;2317:7;2308:6;2297:9;2293:22;2272:53;:::i;:::-;2262:63;;2218:117;2374:2;2400:53;2445:7;2436:6;2425:9;2421:22;2400:53;:::i;:::-;2390:63;;2345:118;2502:2;2528:53;2573:7;2564:6;2553:9;2549:22;2528:53;:::i;:::-;2518:63;;2473:118;2146:452;;;;;:::o;2604:809::-;2699:6;2707;2715;2723;2772:3;2760:9;2751:7;2747:23;2743:33;2740:2;;;2789:1;2786;2779:12;2740:2;2832:1;2857:53;2902:7;2893:6;2882:9;2878:22;2857:53;:::i;:::-;2847:63;;2803:117;2959:2;2985:53;3030:7;3021:6;3010:9;3006:22;2985:53;:::i;:::-;2975:63;;2930:118;3087:2;3113:53;3158:7;3149:6;3138:9;3134:22;3113:53;:::i;:::-;3103:63;;3058:118;3243:2;3232:9;3228:18;3215:32;3274:18;3266:6;3263:30;3260:2;;;3306:1;3303;3296:12;3260:2;3334:62;3388:7;3379:6;3368:9;3364:22;3334:62;:::i;:::-;3324:72;;3186:220;2730:683;;;;;;;:::o;3419:401::-;3484:6;3492;3541:2;3529:9;3520:7;3516:23;3512:32;3509:2;;;3557:1;3554;3547:12;3509:2;3600:1;3625:53;3670:7;3661:6;3650:9;3646:22;3625:53;:::i;:::-;3615:63;;3571:117;3727:2;3753:50;3795:7;3786:6;3775:9;3771:22;3753:50;:::i;:::-;3743:60;;3698:115;3499:321;;;;;:::o;3826:407::-;3894:6;3902;3951:2;3939:9;3930:7;3926:23;3922:32;3919:2;;;3967:1;3964;3957:12;3919:2;4010:1;4035:53;4080:7;4071:6;4060:9;4056:22;4035:53;:::i;:::-;4025:63;;3981:117;4137:2;4163:53;4208:7;4199:6;4188:9;4184:22;4163:53;:::i;:::-;4153:63;;4108:118;3909:324;;;;;:::o;4239:260::-;4297:6;4346:2;4334:9;4325:7;4321:23;4317:32;4314:2;;;4362:1;4359;4352:12;4314:2;4405:1;4430:52;4474:7;4465:6;4454:9;4450:22;4430:52;:::i;:::-;4420:62;;4376:116;4304:195;;;;:::o;4505:282::-;4574:6;4623:2;4611:9;4602:7;4598:23;4594:32;4591:2;;;4639:1;4636;4629:12;4591:2;4682:1;4707:63;4762:7;4753:6;4742:9;4738:22;4707:63;:::i;:::-;4697:73;;4653:127;4581:206;;;;:::o;4793:262::-;4852:6;4901:2;4889:9;4880:7;4876:23;4872:32;4869:2;;;4917:1;4914;4907:12;4869:2;4960:1;4985:53;5030:7;5021:6;5010:9;5006:22;4985:53;:::i;:::-;4975:63;;4931:117;4859:196;;;;:::o;5061:118::-;5148:24;5166:5;5148:24;:::i;:::-;5143:3;5136:37;5126:53;;:::o;5185:109::-;5266:21;5281:5;5266:21;:::i;:::-;5261:3;5254:34;5244:50;;:::o;5300:360::-;5386:3;5414:38;5446:5;5414:38;:::i;:::-;5468:70;5531:6;5526:3;5468:70;:::i;:::-;5461:77;;5547:52;5592:6;5587:3;5580:4;5573:5;5569:16;5547:52;:::i;:::-;5624:29;5646:6;5624:29;:::i;:::-;5619:3;5615:39;5608:46;;5390:270;;;;;:::o;5666:364::-;5754:3;5782:39;5815:5;5782:39;:::i;:::-;5837:71;5901:6;5896:3;5837:71;:::i;:::-;5830:78;;5917:52;5962:6;5957:3;5950:4;5943:5;5939:16;5917:52;:::i;:::-;5994:29;6016:6;5994:29;:::i;:::-;5989:3;5985:39;5978:46;;5758:272;;;;;:::o;6036:377::-;6142:3;6170:39;6203:5;6170:39;:::i;:::-;6225:89;6307:6;6302:3;6225:89;:::i;:::-;6218:96;;6323:52;6368:6;6363:3;6356:4;6349:5;6345:16;6323:52;:::i;:::-;6400:6;6395:3;6391:16;6384:23;;6146:267;;;;;:::o;6419:366::-;6561:3;6582:67;6646:2;6641:3;6582:67;:::i;:::-;6575:74;;6658:93;6747:3;6658:93;:::i;:::-;6776:2;6771:3;6767:12;6760:19;;6565:220;;;:::o;6791:366::-;6933:3;6954:67;7018:2;7013:3;6954:67;:::i;:::-;6947:74;;7030:93;7119:3;7030:93;:::i;:::-;7148:2;7143:3;7139:12;7132:19;;6937:220;;;:::o;7163:402::-;7323:3;7344:85;7426:2;7421:3;7344:85;:::i;:::-;7337:92;;7438:93;7527:3;7438:93;:::i;:::-;7556:2;7551:3;7547:12;7540:19;;7327:238;;;:::o;7571:366::-;7713:3;7734:67;7798:2;7793:3;7734:67;:::i;:::-;7727:74;;7810:93;7899:3;7810:93;:::i;:::-;7928:2;7923:3;7919:12;7912:19;;7717:220;;;:::o;7943:366::-;8085:3;8106:67;8170:2;8165:3;8106:67;:::i;:::-;8099:74;;8182:93;8271:3;8182:93;:::i;:::-;8300:2;8295:3;8291:12;8284:19;;8089:220;;;:::o;8315:366::-;8457:3;8478:67;8542:2;8537:3;8478:67;:::i;:::-;8471:74;;8554:93;8643:3;8554:93;:::i;:::-;8672:2;8667:3;8663:12;8656:19;;8461:220;;;:::o;8687:366::-;8829:3;8850:67;8914:2;8909:3;8850:67;:::i;:::-;8843:74;;8926:93;9015:3;8926:93;:::i;:::-;9044:2;9039:3;9035:12;9028:19;;8833:220;;;:::o;9059:366::-;9201:3;9222:67;9286:2;9281:3;9222:67;:::i;:::-;9215:74;;9298:93;9387:3;9298:93;:::i;:::-;9416:2;9411:3;9407:12;9400:19;;9205:220;;;:::o;9431:366::-;9573:3;9594:67;9658:2;9653:3;9594:67;:::i;:::-;9587:74;;9670:93;9759:3;9670:93;:::i;:::-;9788:2;9783:3;9779:12;9772:19;;9577:220;;;:::o;9803:366::-;9945:3;9966:67;10030:2;10025:3;9966:67;:::i;:::-;9959:74;;10042:93;10131:3;10042:93;:::i;:::-;10160:2;10155:3;10151:12;10144:19;;9949:220;;;:::o;10175:366::-;10317:3;10338:67;10402:2;10397:3;10338:67;:::i;:::-;10331:74;;10414:93;10503:3;10414:93;:::i;:::-;10532:2;10527:3;10523:12;10516:19;;10321:220;;;:::o;10547:400::-;10707:3;10728:84;10810:1;10805:3;10728:84;:::i;:::-;10721:91;;10821:93;10910:3;10821:93;:::i;:::-;10939:1;10934:3;10930:11;10923:18;;10711:236;;;:::o;10953:366::-;11095:3;11116:67;11180:2;11175:3;11116:67;:::i;:::-;11109:74;;11192:93;11281:3;11192:93;:::i;:::-;11310:2;11305:3;11301:12;11294:19;;11099:220;;;:::o;11325:366::-;11467:3;11488:67;11552:2;11547:3;11488:67;:::i;:::-;11481:74;;11564:93;11653:3;11564:93;:::i;:::-;11682:2;11677:3;11673:12;11666:19;;11471:220;;;:::o;11697:366::-;11839:3;11860:67;11924:2;11919:3;11860:67;:::i;:::-;11853:74;;11936:93;12025:3;11936:93;:::i;:::-;12054:2;12049:3;12045:12;12038:19;;11843:220;;;:::o;12069:404::-;12229:3;12250:86;12332:3;12327;12250:86;:::i;:::-;12243:93;;12345;12434:3;12345:93;:::i;:::-;12463:3;12458;12454:13;12447:20;;12233:240;;;:::o;12479:366::-;12621:3;12642:67;12706:2;12701:3;12642:67;:::i;:::-;12635:74;;12718:93;12807:3;12718:93;:::i;:::-;12836:2;12831:3;12827:12;12820:19;;12625:220;;;:::o;12851:366::-;12993:3;13014:67;13078:2;13073:3;13014:67;:::i;:::-;13007:74;;13090:93;13179:3;13090:93;:::i;:::-;13208:2;13203:3;13199:12;13192:19;;12997:220;;;:::o;13223:366::-;13365:3;13386:67;13450:2;13445:3;13386:67;:::i;:::-;13379:74;;13462:93;13551:3;13462:93;:::i;:::-;13580:2;13575:3;13571:12;13564:19;;13369:220;;;:::o;13595:402::-;13755:3;13776:85;13858:2;13853:3;13776:85;:::i;:::-;13769:92;;13870:93;13959:3;13870:93;:::i;:::-;13988:2;13983:3;13979:12;13972:19;;13759:238;;;:::o;14003:366::-;14145:3;14166:67;14230:2;14225:3;14166:67;:::i;:::-;14159:74;;14242:93;14331:3;14242:93;:::i;:::-;14360:2;14355:3;14351:12;14344:19;;14149:220;;;:::o;14375:366::-;14517:3;14538:67;14602:2;14597:3;14538:67;:::i;:::-;14531:74;;14614:93;14703:3;14614:93;:::i;:::-;14732:2;14727:3;14723:12;14716:19;;14521:220;;;:::o;14747:366::-;14889:3;14910:67;14974:2;14969:3;14910:67;:::i;:::-;14903:74;;14986:93;15075:3;14986:93;:::i;:::-;15104:2;15099:3;15095:12;15088:19;;14893:220;;;:::o;15119:118::-;15206:24;15224:5;15206:24;:::i;:::-;15201:3;15194:37;15184:53;;:::o;15243:275::-;15375:3;15397:95;15488:3;15479:6;15397:95;:::i;:::-;15390:102;;15509:3;15502:10;;15379:139;;;;:::o;15524:435::-;15704:3;15726:95;15817:3;15808:6;15726:95;:::i;:::-;15719:102;;15838:95;15929:3;15920:6;15838:95;:::i;:::-;15831:102;;15950:3;15943:10;;15708:251;;;;;:::o;15965:1555::-;16481:3;16503:95;16594:3;16585:6;16503:95;:::i;:::-;16496:102;;16615:95;16706:3;16697:6;16615:95;:::i;:::-;16608:102;;16727:95;16818:3;16809:6;16727:95;:::i;:::-;16720:102;;16839:95;16930:3;16921:6;16839:95;:::i;:::-;16832:102;;16951:95;17042:3;17033:6;16951:95;:::i;:::-;16944:102;;17063:95;17154:3;17145:6;17063:95;:::i;:::-;17056:102;;17175:95;17266:3;17257:6;17175:95;:::i;:::-;17168:102;;17287:95;17378:3;17369:6;17287:95;:::i;:::-;17280:102;;17399:95;17490:3;17481:6;17399:95;:::i;:::-;17392:102;;17511:3;17504:10;;16485:1035;;;;;;;;;;;;:::o;17526:1877::-;18139:3;18161:95;18252:3;18243:6;18161:95;:::i;:::-;18154:102;;18273:95;18364:3;18355:6;18273:95;:::i;:::-;18266:102;;18385:95;18476:3;18467:6;18385:95;:::i;:::-;18378:102;;18497:95;18588:3;18579:6;18497:95;:::i;:::-;18490:102;;18609:95;18700:3;18691:6;18609:95;:::i;:::-;18602:102;;18721:95;18812:3;18803:6;18721:95;:::i;:::-;18714:102;;18833:95;18924:3;18915:6;18833:95;:::i;:::-;18826:102;;18945:95;19036:3;19027:6;18945:95;:::i;:::-;18938:102;;19057:95;19148:3;19139:6;19057:95;:::i;:::-;19050:102;;19169:95;19260:3;19251:6;19169:95;:::i;:::-;19162:102;;19281:96;19373:3;19363:7;19281:96;:::i;:::-;19274:103;;19394:3;19387:10;;18143:1260;;;;;;;;;;;;;;:::o;19409:1233::-;19892:3;19914:148;20058:3;19914:148;:::i;:::-;19907:155;;20079:95;20170:3;20161:6;20079:95;:::i;:::-;20072:102;;20191:148;20335:3;20191:148;:::i;:::-;20184:155;;20356:95;20447:3;20438:6;20356:95;:::i;:::-;20349:102;;20468:148;20612:3;20468:148;:::i;:::-;20461:155;;20633:3;20626:10;;19896:746;;;;;:::o;20648:541::-;20881:3;20903:148;21047:3;20903:148;:::i;:::-;20896:155;;21068:95;21159:3;21150:6;21068:95;:::i;:::-;21061:102;;21180:3;21173:10;;20885:304;;;;:::o;21195:222::-;21288:4;21326:2;21315:9;21311:18;21303:26;;21339:71;21407:1;21396:9;21392:17;21383:6;21339:71;:::i;:::-;21293:124;;;;:::o;21423:640::-;21618:4;21656:3;21645:9;21641:19;21633:27;;21670:71;21738:1;21727:9;21723:17;21714:6;21670:71;:::i;:::-;21751:72;21819:2;21808:9;21804:18;21795:6;21751:72;:::i;:::-;21833;21901:2;21890:9;21886:18;21877:6;21833:72;:::i;:::-;21952:9;21946:4;21942:20;21937:2;21926:9;21922:18;21915:48;21980:76;22051:4;22042:6;21980:76;:::i;:::-;21972:84;;21623:440;;;;;;;:::o;22069:210::-;22156:4;22194:2;22183:9;22179:18;22171:26;;22207:65;22269:1;22258:9;22254:17;22245:6;22207:65;:::i;:::-;22161:118;;;;:::o;22285:313::-;22398:4;22436:2;22425:9;22421:18;22413:26;;22485:9;22479:4;22475:20;22471:1;22460:9;22456:17;22449:47;22513:78;22586:4;22577:6;22513:78;:::i;:::-;22505:86;;22403:195;;;;:::o;22604:419::-;22770:4;22808:2;22797:9;22793:18;22785:26;;22857:9;22851:4;22847:20;22843:1;22832:9;22828:17;22821:47;22885:131;23011:4;22885:131;:::i;:::-;22877:139;;22775:248;;;:::o;23029:419::-;23195:4;23233:2;23222:9;23218:18;23210:26;;23282:9;23276:4;23272:20;23268:1;23257:9;23253:17;23246:47;23310:131;23436:4;23310:131;:::i;:::-;23302:139;;23200:248;;;:::o;23454:419::-;23620:4;23658:2;23647:9;23643:18;23635:26;;23707:9;23701:4;23697:20;23693:1;23682:9;23678:17;23671:47;23735:131;23861:4;23735:131;:::i;:::-;23727:139;;23625:248;;;:::o;23879:419::-;24045:4;24083:2;24072:9;24068:18;24060:26;;24132:9;24126:4;24122:20;24118:1;24107:9;24103:17;24096:47;24160:131;24286:4;24160:131;:::i;:::-;24152:139;;24050:248;;;:::o;24304:419::-;24470:4;24508:2;24497:9;24493:18;24485:26;;24557:9;24551:4;24547:20;24543:1;24532:9;24528:17;24521:47;24585:131;24711:4;24585:131;:::i;:::-;24577:139;;24475:248;;;:::o;24729:419::-;24895:4;24933:2;24922:9;24918:18;24910:26;;24982:9;24976:4;24972:20;24968:1;24957:9;24953:17;24946:47;25010:131;25136:4;25010:131;:::i;:::-;25002:139;;24900:248;;;:::o;25154:419::-;25320:4;25358:2;25347:9;25343:18;25335:26;;25407:9;25401:4;25397:20;25393:1;25382:9;25378:17;25371:47;25435:131;25561:4;25435:131;:::i;:::-;25427:139;;25325:248;;;:::o;25579:419::-;25745:4;25783:2;25772:9;25768:18;25760:26;;25832:9;25826:4;25822:20;25818:1;25807:9;25803:17;25796:47;25860:131;25986:4;25860:131;:::i;:::-;25852:139;;25750:248;;;:::o;26004:419::-;26170:4;26208:2;26197:9;26193:18;26185:26;;26257:9;26251:4;26247:20;26243:1;26232:9;26228:17;26221:47;26285:131;26411:4;26285:131;:::i;:::-;26277:139;;26175:248;;;:::o;26429:419::-;26595:4;26633:2;26622:9;26618:18;26610:26;;26682:9;26676:4;26672:20;26668:1;26657:9;26653:17;26646:47;26710:131;26836:4;26710:131;:::i;:::-;26702:139;;26600:248;;;:::o;26854:419::-;27020:4;27058:2;27047:9;27043:18;27035:26;;27107:9;27101:4;27097:20;27093:1;27082:9;27078:17;27071:47;27135:131;27261:4;27135:131;:::i;:::-;27127:139;;27025:248;;;:::o;27279:419::-;27445:4;27483:2;27472:9;27468:18;27460:26;;27532:9;27526:4;27522:20;27518:1;27507:9;27503:17;27496:47;27560:131;27686:4;27560:131;:::i;:::-;27552:139;;27450:248;;;:::o;27704:419::-;27870:4;27908:2;27897:9;27893:18;27885:26;;27957:9;27951:4;27947:20;27943:1;27932:9;27928:17;27921:47;27985:131;28111:4;27985:131;:::i;:::-;27977:139;;27875:248;;;:::o;28129:419::-;28295:4;28333:2;28322:9;28318:18;28310:26;;28382:9;28376:4;28372:20;28368:1;28357:9;28353:17;28346:47;28410:131;28536:4;28410:131;:::i;:::-;28402:139;;28300:248;;;:::o;28554:419::-;28720:4;28758:2;28747:9;28743:18;28735:26;;28807:9;28801:4;28797:20;28793:1;28782:9;28778:17;28771:47;28835:131;28961:4;28835:131;:::i;:::-;28827:139;;28725:248;;;:::o;28979:419::-;29145:4;29183:2;29172:9;29168:18;29160:26;;29232:9;29226:4;29222:20;29218:1;29207:9;29203:17;29196:47;29260:131;29386:4;29260:131;:::i;:::-;29252:139;;29150:248;;;:::o;29404:419::-;29570:4;29608:2;29597:9;29593:18;29585:26;;29657:9;29651:4;29647:20;29643:1;29632:9;29628:17;29621:47;29685:131;29811:4;29685:131;:::i;:::-;29677:139;;29575:248;;;:::o;29829:419::-;29995:4;30033:2;30022:9;30018:18;30010:26;;30082:9;30076:4;30072:20;30068:1;30057:9;30053:17;30046:47;30110:131;30236:4;30110:131;:::i;:::-;30102:139;;30000:248;;;:::o;30254:419::-;30420:4;30458:2;30447:9;30443:18;30435:26;;30507:9;30501:4;30497:20;30493:1;30482:9;30478:17;30471:47;30535:131;30661:4;30535:131;:::i;:::-;30527:139;;30425:248;;;:::o;30679:222::-;30772:4;30810:2;30799:9;30795:18;30787:26;;30823:71;30891:1;30880:9;30876:17;30867:6;30823:71;:::i;:::-;30777:124;;;;:::o;30907:129::-;30941:6;30968:20;;:::i;:::-;30958:30;;30997:33;31025:4;31017:6;30997:33;:::i;:::-;30948:88;;;:::o;31042:75::-;31075:6;31108:2;31102:9;31092:19;;31082:35;:::o;31123:307::-;31184:4;31274:18;31266:6;31263:30;31260:2;;;31296:18;;:::i;:::-;31260:2;31334:29;31356:6;31334:29;:::i;:::-;31326:37;;31418:4;31412;31408:15;31400:23;;31189:241;;;:::o;31436:98::-;31487:6;31521:5;31515:12;31505:22;;31494:40;;;:::o;31540:99::-;31592:6;31626:5;31620:12;31610:22;;31599:40;;;:::o;31645:168::-;31728:11;31762:6;31757:3;31750:19;31802:4;31797:3;31793:14;31778:29;;31740:73;;;;:::o;31819:169::-;31903:11;31937:6;31932:3;31925:19;31977:4;31972:3;31968:14;31953:29;;31915:73;;;;:::o;31994:148::-;32096:11;32133:3;32118:18;;32108:34;;;;:::o;32148:305::-;32188:3;32207:20;32225:1;32207:20;:::i;:::-;32202:25;;32241:20;32259:1;32241:20;:::i;:::-;32236:25;;32395:1;32327:66;32323:74;32320:1;32317:81;32314:2;;;32401:18;;:::i;:::-;32314:2;32445:1;32442;32438:9;32431:16;;32192:261;;;;:::o;32459:185::-;32499:1;32516:20;32534:1;32516:20;:::i;:::-;32511:25;;32550:20;32568:1;32550:20;:::i;:::-;32545:25;;32589:1;32579:2;;32594:18;;:::i;:::-;32579:2;32636:1;32633;32629:9;32624:14;;32501:143;;;;:::o;32650:348::-;32690:7;32713:20;32731:1;32713:20;:::i;:::-;32708:25;;32747:20;32765:1;32747:20;:::i;:::-;32742:25;;32935:1;32867:66;32863:74;32860:1;32857:81;32852:1;32845:9;32838:17;32834:105;32831:2;;;32942:18;;:::i;:::-;32831:2;32990:1;32987;32983:9;32972:20;;32698:300;;;;:::o;33004:191::-;33044:4;33064:20;33082:1;33064:20;:::i;:::-;33059:25;;33098:20;33116:1;33098:20;:::i;:::-;33093:25;;33137:1;33134;33131:8;33128:2;;;33142:18;;:::i;:::-;33128:2;33187:1;33184;33180:9;33172:17;;33049:146;;;;:::o;33201:96::-;33238:7;33267:24;33285:5;33267:24;:::i;:::-;33256:35;;33246:51;;;:::o;33303:90::-;33337:7;33380:5;33373:13;33366:21;33355:32;;33345:48;;;:::o;33399:149::-;33435:7;33475:66;33468:5;33464:78;33453:89;;33443:105;;;:::o;33554:126::-;33591:7;33631:42;33624:5;33620:54;33609:65;;33599:81;;;:::o;33686:77::-;33723:7;33752:5;33741:16;;33731:32;;;:::o;33769:154::-;33853:6;33848:3;33843;33830:30;33915:1;33906:6;33901:3;33897:16;33890:27;33820:103;;;:::o;33929:307::-;33997:1;34007:113;34021:6;34018:1;34015:13;34007:113;;;34106:1;34101:3;34097:11;34091:18;34087:1;34082:3;34078:11;34071:39;34043:2;34040:1;34036:10;34031:15;;34007:113;;;34138:6;34135:1;34132:13;34129:2;;;34218:1;34209:6;34204:3;34200:16;34193:27;34129:2;33978:258;;;;:::o;34242:320::-;34286:6;34323:1;34317:4;34313:12;34303:22;;34370:1;34364:4;34360:12;34391:18;34381:2;;34447:4;34439:6;34435:17;34425:27;;34381:2;34509;34501:6;34498:14;34478:18;34475:38;34472:2;;;34528:18;;:::i;:::-;34472:2;34293:269;;;;:::o;34568:281::-;34651:27;34673:4;34651:27;:::i;:::-;34643:6;34639:40;34781:6;34769:10;34766:22;34745:18;34733:10;34730:34;34727:62;34724:2;;;34792:18;;:::i;:::-;34724:2;34832:10;34828:2;34821:22;34611:238;;;:::o;34855:233::-;34894:3;34917:24;34935:5;34917:24;:::i;:::-;34908:33;;34963:66;34956:5;34953:77;34950:2;;;35033:18;;:::i;:::-;34950:2;35080:1;35073:5;35069:13;35062:20;;34898:190;;;:::o;35094:176::-;35126:1;35143:20;35161:1;35143:20;:::i;:::-;35138:25;;35177:20;35195:1;35177:20;:::i;:::-;35172:25;;35216:1;35206:2;;35221:18;;:::i;:::-;35206:2;35262:1;35259;35255:9;35250:14;;35128:142;;;;:::o;35276:180::-;35324:77;35321:1;35314:88;35421:4;35418:1;35411:15;35445:4;35442:1;35435:15;35462:180;35510:77;35507:1;35500:88;35607:4;35604:1;35597:15;35631:4;35628:1;35621:15;35648:180;35696:77;35693:1;35686:88;35793:4;35790:1;35783:15;35817:4;35814:1;35807:15;35834:180;35882:77;35879:1;35872:88;35979:4;35976:1;35969:15;36003:4;36000:1;35993:15;36020:102;36061:6;36112:2;36108:7;36103:2;36096:5;36092:14;36088:28;36078:38;;36068:54;;;:::o;36128:230::-;36268:34;36264:1;36256:6;36252:14;36245:58;36337:13;36332:2;36324:6;36320:15;36313:38;36234:124;:::o;36364:237::-;36504:34;36500:1;36492:6;36488:14;36481:58;36573:20;36568:2;36560:6;36556:15;36549:45;36470:131;:::o;36607:214::-;36747:66;36743:1;36735:6;36731:14;36724:90;36713:108;:::o;36827:225::-;36967:34;36963:1;36955:6;36951:14;36944:58;37036:8;37031:2;37023:6;37019:15;37012:33;36933:119;:::o;37058:178::-;37198:30;37194:1;37186:6;37182:14;37175:54;37164:72;:::o;37242:223::-;37382:34;37378:1;37370:6;37366:14;37359:58;37451:6;37446:2;37438:6;37434:15;37427:31;37348:117;:::o;37471:175::-;37611:27;37607:1;37599:6;37595:14;37588:51;37577:69;:::o;37652:231::-;37792:34;37788:1;37780:6;37776:14;37769:58;37861:14;37856:2;37848:6;37844:15;37837:39;37758:125;:::o;37889:243::-;38029:34;38025:1;38017:6;38013:14;38006:58;38098:26;38093:2;38085:6;38081:15;38074:51;37995:137;:::o;38138:229::-;38278:34;38274:1;38266:6;38262:14;38255:58;38347:12;38342:2;38334:6;38330:15;38323:37;38244:123;:::o;38373:228::-;38513:34;38509:1;38501:6;38497:14;38490:58;38582:11;38577:2;38569:6;38565:15;38558:36;38479:122;:::o;38607:214::-;38747:66;38743:1;38735:6;38731:14;38724:90;38713:108;:::o;38827:182::-;38967:34;38963:1;38955:6;38951:14;38944:58;38933:76;:::o;39015:231::-;39155:34;39151:1;39143:6;39139:14;39132:58;39224:14;39219:2;39211:6;39207:15;39200:39;39121:125;:::o;39252:182::-;39392:34;39388:1;39380:6;39376:14;39369:58;39358:76;:::o;39440:727::-;39580:66;39576:1;39568:6;39564:14;39557:90;39681:34;39676:2;39668:6;39664:15;39657:59;39750:34;39745:2;39737:6;39733:15;39726:59;39819:34;39814:2;39806:6;39802:15;39795:59;39889:34;39883:3;39875:6;39871:16;39864:60;39959:34;39953:3;39945:6;39941:16;39934:60;40029:66;40023:3;40015:6;40011:16;40004:92;40131:28;40125:3;40117:6;40113:16;40106:54;39546:621;:::o;40173:166::-;40313:18;40309:1;40301:6;40297:14;40290:42;40279:60;:::o;40345:228::-;40485:34;40481:1;40473:6;40469:14;40462:58;40554:11;40549:2;40541:6;40537:15;40530:36;40451:122;:::o;40579:220::-;40719:34;40715:1;40707:6;40703:14;40696:58;40788:3;40783:2;40775:6;40771:15;40764:28;40685:114;:::o;40805:179::-;40945:31;40941:1;40933:6;40929:14;40922:55;40911:73;:::o;40990:236::-;41130:34;41126:1;41118:6;41114:14;41107:58;41199:19;41194:2;41186:6;41182:15;41175:44;41096:130;:::o;41232:231::-;41372:34;41368:1;41360:6;41356:14;41349:58;41441:14;41436:2;41428:6;41424:15;41417:39;41338:125;:::o;41469:181::-;41609:33;41605:1;41597:6;41593:14;41586:57;41575:75;:::o;41656:122::-;41729:24;41747:5;41729:24;:::i;:::-;41722:5;41719:35;41709:2;;41768:1;41765;41758:12;41709:2;41699:79;:::o;41784:116::-;41854:21;41869:5;41854:21;:::i;:::-;41847:5;41844:32;41834:2;;41890:1;41887;41880:12;41834:2;41824:76;:::o;41906:120::-;41978:23;41995:5;41978:23;:::i;:::-;41971:5;41968:34;41958:2;;42016:1;42013;42006:12;41958:2;41948:78;:::o;42032:122::-;42105:24;42123:5;42105:24;:::i;:::-;42098:5;42095:35;42085:2;;42144:1;42141;42134:12;42085:2;42075:79;:::o

Swarm Source

ipfs://0e3fe7baa7a70b5e6e231a3db327f64f29940a4ac5e21a23dc41016f6eadddfb
Loading...
Loading
Loading...
Loading
[ 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.