ETH Price: $3,244.77 (+2.51%)
Gas: 2 Gwei

Token

Headache Army (HAA)
 

Overview

Max Total Supply

155 HAA

Holders

57

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 HAA
0x464132D57420c1b1fCc36F7979B1c5126a13A9C5
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:
HEADACHE_ARMY

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-05
*/

// SPDX-License-Identifier: GPL-3.0

/*

##     ## ########    ###    ########     ###     ######  ##     ## ######## 
##     ## ##         ## ##   ##     ##   ## ##   ##    ## ##     ## ##       
##     ## ##        ##   ##  ##     ##  ##   ##  ##       ##     ## ##       
######### ######   ##     ## ##     ## ##     ## ##       ######### ######   
##     ## ##       ######### ##     ## ######### ##       ##     ## ##       
##     ## ##       ##     ## ##     ## ##     ## ##    ## ##     ## ##       
##     ## ######## ##     ## ########  ##     ##  ######  ##     ## ######## 

*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol

pragma solidity ^0.8.0;

abstract contract ReentrancyGuard {
    
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    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;

        _;

        _status = _NOT_ENTERED;
    }
}


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


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

pragma solidity ^0.8.0;

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

    function toString(uint256 value) internal pure returns (string memory) {

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

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

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

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


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

pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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


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

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

interface IERC721Receiver {
  
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

  
    function ownerOf(uint256 tokenId) external view returns (address owner);


    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

  
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

 
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;


    function approve(address to, uint256 tokenId) external;


    function setApprovalForAll(address operator, bool _approved) external;


    function getApproved(uint256 tokenId) external view returns (address operator);

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


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

pragma solidity ^0.8.0;


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

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

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

// File: erc721a/contracts/IERC721A.sol


// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;



/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A is IERC721, IERC721Metadata {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     * 
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);
}


// File: erc721a/contracts/ERC721A.sol

// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721A {
    using Address for address;
    using Strings for uint256;

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @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 override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr) if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        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 override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

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

        _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 {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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


    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        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 TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

 
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}


    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}


// File: contracts/HeadacheArmy.sol

pragma solidity >= 0.8.0 < 0.9.0;

contract HEADACHE_ARMY is ERC721A, Ownable, ReentrancyGuard {

  using Strings for uint256;

  string public uriPrefix;
  string public notRevealedURI;
  string public uriSuffix = ".json";
  
  uint256 public cost = 0.1 ether;

  uint256 public maxSupply = 500;

  uint256 public MaxperTx = 5;
  uint256 public nftPerAddressLimit = 5;

  bool public paused = true;
  uint256 public revealed = 0;

  bool public publicMintEnabled = false;
  bool public dappMintEnabled = false;
  
  mapping(address => bool) controllers;
  mapping(address => uint256) public addressMintedBalance;

  constructor() ERC721A ( "Headache Army", "HAA" ) {}

// ~~~~~~~~~~~~~~~~~~~~ URI's ~~~~~~~~~~~~~~~~~~~~

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

// ~~~~~~~~~~~~~~~~~~~~ Modifiers ~~~~~~~~~~~~~~~~~~~~

  modifier mintCompliance(uint256 _mintAmount) {
    require(!paused, "The contract is paused!");
    require(_mintAmount <= MaxperTx, "Max mint per transaction exceeded!");
    require(addressMintedBalance[msg.sender] + _mintAmount <= nftPerAddressLimit, "Max mint amount per address exceeded!");
    require(_mintAmount > 0, "Mint amount can't be zero.");
    require(totalSupply() + _mintAmount <= maxSupply, "Mint amount exceeds max supply!");
    _;
  }

  modifier mintPriceCompliance(uint256 _mintAmount) {
    if (msg.sender != owner()) {
        require(msg.value >= cost * _mintAmount, "Insufficient funds!");
        }
    _;
  }

// ~~~~~~~~~~~~~~~~~~~~ Mint Functions ~~~~~~~~~~~~~~~~~~~~
  
  // MINT 
  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) {
    require(publicMintEnabled, "Public mint is not active yet!");

    addressMintedBalance[msg.sender] += _mintAmount;
    _safeMint(msg.sender, _mintAmount);
  }

  // MINT FROM STAKING DAPP
  function mintDapp(uint256 _mintAmount, address _receiver) external mintCompliance(_mintAmount) {
    require(dappMintEnabled, "Dapp mint is not active yet!");
    require(controllers[msg.sender], "Only controllers can mint");

    addressMintedBalance[_receiver] += _mintAmount;
    _safeMint(_receiver, _mintAmount);
  }

  // MINT for address
  function mintToAddress(uint256 _mintAmount, address _receiver) public onlyOwner {
    require(totalSupply() + _mintAmount <= maxSupply, "Mint amount exceeds max supply!");
    _safeMint(_receiver, _mintAmount);
  }

// ~~~~~~~~~~~~~~~~~~~~ Checks ~~~~~~~~~~~~~~~~~~~~

  // Check Wallet assets
  function walletOfOwner(address _owner) public view returns (uint256[] memory) {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = _startTokenId();
    uint256 ownedTokenIndex = 0;
    address latestOwnerAddress;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId < _currentIndex) {
      TokenOwnership memory ownership = _ownerships[currentTokenId];

      if (!ownership.burned) {
        if (ownership.addr != address(0)) {
          latestOwnerAddress = ownership.addr;
        }

        if (latestOwnerAddress == _owner) {
          ownedTokenIds[ownedTokenIndex] = currentTokenId;
          ownedTokenIndex++;
        }
      }
      currentTokenId++;
    }
    return ownedTokenIds;
  }

  // Start Token
  function _startTokenId() internal view virtual override returns (uint256) {
    return 1;
  }

  // TOKEN URI
  function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
    require(_exists(_tokenId),"ERC721Metadata: URI query for nonexistent token.");
    
    if (_tokenId > revealed) { return notRevealedURI; }

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

// ~~~~~~~~~~~~~~~~~~~~ onlyOwner Functions ~~~~~~~~~~~~~~~~~~~~
  
  // ADD CONTROLLER
  function addController(address controller) external onlyOwner {
    controllers[controller] = true;
  }

  // REMOVE CONTROLLER
  function removeController(address controller) external onlyOwner {
    controllers[controller] = false;
  }

  // REVEAL
  function setRevealed(uint256 _amountRevealed) public onlyOwner {
    revealed = _amountRevealed;
  }
  
  // PAUSE
  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  // SET COST
  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  // SET MAX SUPPLY
  function setMaxSupply(uint256 _MaxSupply) public onlyOwner {
    maxSupply = _MaxSupply;
  }
  
  // SET MAX MINT PER TRX
  function setMaxMintPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    MaxperTx = _maxMintAmountPerTx;
  }
  
  // SET MAX PER ADDRESS LIMIT
  function setMaxPerAddLimit(uint256 _maxPerAddLimit) public onlyOwner {
    nftPerAddressLimit = _maxPerAddLimit;
  }
  
  // SET BASE URI
  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  // SET NOT REVEALED URI
  function setUriHidden(string memory _notRevealedUri) public onlyOwner {
    notRevealedURI = _notRevealedUri;
  }

  // SET PUBLIC MINT STATE
  function setPublicMintState(bool _state) public onlyOwner {
    publicMintEnabled = _state;
  }

  // SET DAPP MINT STATE
  function setDappMintState(bool _state) public onlyOwner {
    dappMintEnabled = _state;
  }

  function withdraw() public onlyOwner nonReentrant {
    (bool os, ) = payable(owner()).call{value: address(this).balance}('');
    require(os);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MaxperTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"addController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dappMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"removeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","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":"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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setDappMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerAddLimit","type":"uint256"}],"name":"setMaxPerAddLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountRevealed","type":"uint256"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedUri","type":"string"}],"name":"setUriHidden","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000519291906200028d565b5067016345785d8a0000600d556101f4600e556005600f5560056010556001601160006101000a81548160ff02191690831515021790555060006012556000601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff021916908315150217905550348015620000d157600080fd5b506040518060400160405280600d81526020017f48656164616368652041726d79000000000000000000000000000000000000008152506040518060400160405280600381526020017f48414100000000000000000000000000000000000000000000000000000000008152508160029080519060200190620001569291906200028d565b5080600390805190602001906200016f9291906200028d565b5062000180620001b660201b60201c565b6000819055505050620001a86200019c620001bf60201b60201c565b620001c760201b60201c565b6001600981905550620003a2565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200029b906200033d565b90600052602060002090601f016020900481019282620002bf57600085556200030b565b82601f10620002da57805160ff19168380011785556200030b565b828001600101855582156200030b579182015b828111156200030a578251825591602001919060010190620002ed565b5b5090506200031a91906200031e565b5090565b5b80821115620003395760008160009055506001016200031f565b5090565b600060028204905060018216806200035657607f821691505b602082108114156200036d576200036c62000373565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614cec80620003b26000396000f3fe60806040526004361061027d5760003560e01c8063616cdb1e1161014f57806395d89b41116100c1578063c87b56dd1161007a578063c87b56dd1461094b578063d5abeb0114610988578063e985e9c5146109b3578063f2fde38b146109f0578063f6a74ed714610a19578063ff64569114610a425761027d565b806395d89b411461085e578063a0712d6814610889578063a22cb465146108a5578063a7fc7a07146108ce578063b88d4fde146108f7578063ba7d2c76146109205761027d565b806370a082311161011357806370a0823114610762578063715018a61461079f57806372250380146107b65780637ec4a659146107e1578063879fbedf1461080a5780638da5cb5b146108335761027d565b8063616cdb1e1461067f57806362b99ad4146106a85780636352211e146106d357806368e00d77146107105780636f8b44b0146107395761027d565b806323b872dd116101f35780634652be95116101ac5780634652be9514610583578063489f2bcd146105ac578063512b658d146105d557806351830227146105fe5780635503a0e8146106295780635c975abb146106545761027d565b806323b872dd1461048b5780632fd5bce2146104b45780633ccfd60b146104dd57806342842e0e146104f4578063438b63001461051d57806344a0d68a1461055a5761027d565b80630f4161aa116102455780630f4161aa146103795780630fecec05146103a457806313faede6146103cf57806316c38b3c146103fa57806318160ddd1461042357806318cae2691461044e5761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063095ea7b3146103275780630b12d64b14610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613d3a565b610a6d565b6040516102b691906142d7565b60405180910390f35b3480156102cb57600080fd5b506102d4610b4f565b6040516102e191906142f2565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613ddd565b610be1565b60405161031e919061424e565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190613ccd565b610c5d565b005b34801561035c57600080fd5b5061037760048036038101906103729190613e0a565b610d62565b005b34801561038557600080fd5b5061038e611061565b60405161039b91906142d7565b60405180910390f35b3480156103b057600080fd5b506103b9611074565b6040516103c691906142d7565b60405180910390f35b3480156103db57600080fd5b506103e4611087565b6040516103f191906144b4565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190613d0d565b61108d565b005b34801561042f57600080fd5b50610438611126565b60405161044591906144b4565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190613b4a565b61113d565b60405161048291906144b4565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613bb7565b611155565b005b3480156104c057600080fd5b506104db60048036038101906104d69190613ddd565b611165565b005b3480156104e957600080fd5b506104f26111eb565b005b34801561050057600080fd5b5061051b60048036038101906105169190613bb7565b61133d565b005b34801561052957600080fd5b50610544600480360381019061053f9190613b4a565b61135d565b60405161055191906142b5565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190613ddd565b611571565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190613d0d565b6115f7565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190613ddd565b611690565b005b3480156105e157600080fd5b506105fc60048036038101906105f79190613e0a565b611716565b005b34801561060a57600080fd5b506106136117f7565b60405161062091906144b4565b60405180910390f35b34801561063557600080fd5b5061063e6117fd565b60405161064b91906142f2565b60405180910390f35b34801561066057600080fd5b5061066961188b565b60405161067691906142d7565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190613ddd565b61189e565b005b3480156106b457600080fd5b506106bd611924565b6040516106ca91906142f2565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190613ddd565b6119b2565b604051610707919061424e565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190613d94565b6119c8565b005b34801561074557600080fd5b50610760600480360381019061075b9190613ddd565b611a5e565b005b34801561076e57600080fd5b5061078960048036038101906107849190613b4a565b611ae4565b60405161079691906144b4565b60405180910390f35b3480156107ab57600080fd5b506107b4611bb4565b005b3480156107c257600080fd5b506107cb611c3c565b6040516107d891906142f2565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190613d94565b611cca565b005b34801561081657600080fd5b50610831600480360381019061082c9190613d0d565b611d60565b005b34801561083f57600080fd5b50610848611df9565b604051610855919061424e565b60405180910390f35b34801561086a57600080fd5b50610873611e23565b60405161088091906142f2565b60405180910390f35b6108a3600480360381019061089e9190613ddd565b611eb5565b005b3480156108b157600080fd5b506108cc60048036038101906108c79190613c8d565b6121b4565b005b3480156108da57600080fd5b506108f560048036038101906108f09190613b4a565b61232c565b005b34801561090357600080fd5b5061091e60048036038101906109199190613c0a565b612403565b005b34801561092c57600080fd5b5061093561247b565b60405161094291906144b4565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d9190613ddd565b612481565b60405161097f91906142f2565b60405180910390f35b34801561099457600080fd5b5061099d6125c8565b6040516109aa91906144b4565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190613b77565b6125ce565b6040516109e791906142d7565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a129190613b4a565b612662565b005b348015610a2557600080fd5b50610a406004803603810190610a3b9190613b4a565b61275a565b005b348015610a4e57600080fd5b50610a57612831565b604051610a6491906144b4565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b3857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b485750610b4782612837565b5b9050919050565b606060028054610b5e906147bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8a906147bd565b8015610bd75780601f10610bac57610100808354040283529160200191610bd7565b820191906000526020600020905b815481529060010190602001808311610bba57829003601f168201915b5050505050905090565b6000610bec826128a1565b610c22576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c68826119b2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cd0576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cef6128ef565b73ffffffffffffffffffffffffffffffffffffffff1614610d5257610d1b81610d166128ef565b6125ce565b610d51576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610d5d8383836128f7565b505050565b81601160009054906101000a900460ff1615610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa906143f4565b60405180910390fd5b600f54811115610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def90614434565b60405180910390fd5b60105481601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e4691906145f2565b1115610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90614414565b60405180910390fd5b60008111610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec1906143b4565b60405180910390fd5b600e5481610ed6611126565b610ee091906145f2565b1115610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890614354565b60405180910390fd5b601360019054906101000a900460ff16610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6790614394565b60405180910390fd5b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390614374565b60405180910390fd5b82601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461104b91906145f2565b9250508190555061105c82846129a9565b505050565b601360009054906101000a900460ff1681565b601360019054906101000a900460ff1681565b600d5481565b6110956128ef565b73ffffffffffffffffffffffffffffffffffffffff166110b3611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611109576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611100906143d4565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b60006111306129c7565b6001546000540303905090565b60156020528060005260406000206000915090505481565b6111608383836129d0565b505050565b61116d6128ef565b73ffffffffffffffffffffffffffffffffffffffff1661118b611df9565b73ffffffffffffffffffffffffffffffffffffffff16146111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d8906143d4565b60405180910390fd5b8060128190555050565b6111f36128ef565b73ffffffffffffffffffffffffffffffffffffffff16611211611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e906143d4565b60405180910390fd5b600260095414156112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490614454565b60405180910390fd5b600260098190555060006112bf611df9565b73ffffffffffffffffffffffffffffffffffffffff16476040516112e290614239565b60006040518083038185875af1925050503d806000811461131f576040519150601f19603f3d011682016040523d82523d6000602084013e611324565b606091505b505090508061133257600080fd5b506001600981905550565b61135883838360405180602001604052806000815250612403565b505050565b6060600061136a83611ae4565b905060008167ffffffffffffffff81111561138857611387614956565b5b6040519080825280602002602001820160405280156113b65781602001602082028036833780820191505090505b50905060006113c36129c7565b90506000805b84821080156113d9575060005483105b15611564576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161155057600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146114ec57806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561154f578385848151811061153457611533614927565b5b602002602001018181525050828061154b90614820565b9350505b5b838061155b90614820565b945050506113c9565b8395505050505050919050565b6115796128ef565b73ffffffffffffffffffffffffffffffffffffffff16611597611df9565b73ffffffffffffffffffffffffffffffffffffffff16146115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e4906143d4565b60405180910390fd5b80600d8190555050565b6115ff6128ef565b73ffffffffffffffffffffffffffffffffffffffff1661161d611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a906143d4565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b6116986128ef565b73ffffffffffffffffffffffffffffffffffffffff166116b6611df9565b73ffffffffffffffffffffffffffffffffffffffff161461170c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611703906143d4565b60405180910390fd5b8060108190555050565b61171e6128ef565b73ffffffffffffffffffffffffffffffffffffffff1661173c611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611792576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611789906143d4565b60405180910390fd5b600e548261179e611126565b6117a891906145f2565b11156117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090614354565b60405180910390fd5b6117f381836129a9565b5050565b60125481565b600c805461180a906147bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611836906147bd565b80156118835780601f1061185857610100808354040283529160200191611883565b820191906000526020600020905b81548152906001019060200180831161186657829003601f168201915b505050505081565b601160009054906101000a900460ff1681565b6118a66128ef565b73ffffffffffffffffffffffffffffffffffffffff166118c4611df9565b73ffffffffffffffffffffffffffffffffffffffff161461191a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611911906143d4565b60405180910390fd5b80600f8190555050565b600a8054611931906147bd565b80601f016020809104026020016040519081016040528092919081815260200182805461195d906147bd565b80156119aa5780601f1061197f576101008083540402835291602001916119aa565b820191906000526020600020905b81548152906001019060200180831161198d57829003601f168201915b505050505081565b60006119bd82612e86565b600001519050919050565b6119d06128ef565b73ffffffffffffffffffffffffffffffffffffffff166119ee611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b906143d4565b60405180910390fd5b80600b9080519060200190611a5a92919061391b565b5050565b611a666128ef565b73ffffffffffffffffffffffffffffffffffffffff16611a84611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad1906143d4565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611bbc6128ef565b73ffffffffffffffffffffffffffffffffffffffff16611bda611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c27906143d4565b60405180910390fd5b611c3a6000613111565b565b600b8054611c49906147bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611c75906147bd565b8015611cc25780601f10611c9757610100808354040283529160200191611cc2565b820191906000526020600020905b815481529060010190602001808311611ca557829003601f168201915b505050505081565b611cd26128ef565b73ffffffffffffffffffffffffffffffffffffffff16611cf0611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d906143d4565b60405180910390fd5b80600a9080519060200190611d5c92919061391b565b5050565b611d686128ef565b73ffffffffffffffffffffffffffffffffffffffff16611d86611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd3906143d4565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611e32906147bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5e906147bd565b8015611eab5780601f10611e8057610100808354040283529160200191611eab565b820191906000526020600020905b815481529060010190602001808311611e8e57829003601f168201915b5050505050905090565b80601160009054906101000a900460ff1615611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd906143f4565b60405180910390fd5b600f54811115611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290614434565b60405180910390fd5b60105481601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9991906145f2565b1115611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614414565b60405180910390fd5b6000811161201d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612014906143b4565b60405180910390fd5b600e5481612029611126565b61203391906145f2565b1115612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90614354565b60405180910390fd5b8161207d611df9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121005780600d546120bd9190614679565b3410156120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f690614494565b60405180910390fd5b5b601360009054906101000a900460ff1661214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690614334565b60405180910390fd5b82601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219e91906145f2565b925050819055506121af33846129a9565b505050565b6121bc6128ef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612221576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061222e6128ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166122db6128ef565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161232091906142d7565b60405180910390a35050565b6123346128ef565b73ffffffffffffffffffffffffffffffffffffffff16612352611df9565b73ffffffffffffffffffffffffffffffffffffffff16146123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239f906143d4565b60405180910390fd5b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61240e8484846129d0565b61242d8373ffffffffffffffffffffffffffffffffffffffff166131d7565b156124755761243e848484846131fa565b612474576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60105481565b606061248c826128a1565b6124cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c290614474565b60405180910390fd5b60125482111561256757600b80546124e2906147bd565b80601f016020809104026020016040519081016040528092919081815260200182805461250e906147bd565b801561255b5780601f106125305761010080835404028352916020019161255b565b820191906000526020600020905b81548152906001019060200180831161253e57829003601f168201915b505050505090506125c3565b600061257161335a565b9050600081511161259157604051806020016040528060008152506125bf565b8061259b846133ec565b600c6040516020016125af93929190614208565b6040516020818303038152906040525b9150505b919050565b600e5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61266a6128ef565b73ffffffffffffffffffffffffffffffffffffffff16612688611df9565b73ffffffffffffffffffffffffffffffffffffffff16146126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d5906143d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590614314565b60405180910390fd5b61275781613111565b50565b6127626128ef565b73ffffffffffffffffffffffffffffffffffffffff16612780611df9565b73ffffffffffffffffffffffffffffffffffffffff16146127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd906143d4565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600f5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816128ac6129c7565b111580156128bb575060005482105b80156128e8575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6129c382826040518060200160405280600081525061354d565b5050565b60006001905090565b60006129db82612e86565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a46576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612a676128ef565b73ffffffffffffffffffffffffffffffffffffffff161480612a965750612a9585612a906128ef565b6125ce565b5b80612adb5750612aa46128ef565b73ffffffffffffffffffffffffffffffffffffffff16612ac384610be1565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612b14576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b7b576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b88858585600161390f565b612b94600084876128f7565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e14576000548214612e1357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e7f8585856001613915565b5050505050565b612e8e6139a1565b600082905080612e9c6129c7565b116130da576000548110156130d9576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516130d757600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612fbb57809250505061310c565b5b6001156130d657818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146130d157809250505061310c565b612fbc565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132206128ef565b8786866040518563ffffffff1660e01b81526004016132429493929190614269565b602060405180830381600087803b15801561325c57600080fd5b505af192505050801561328d57506040513d601f19601f8201168201806040525081019061328a9190613d67565b60015b613307573d80600081146132bd576040519150601f19603f3d011682016040523d82523d6000602084013e6132c2565b606091505b506000815114156132ff576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a8054613369906147bd565b80601f0160208091040260200160405190810160405280929190818152602001828054613395906147bd565b80156133e25780601f106133b7576101008083540402835291602001916133e2565b820191906000526020600020905b8154815290600101906020018083116133c557829003601f168201915b5050505050905090565b60606000821415613434576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613548565b600082905060005b6000821461346657808061344f90614820565b915050600a8261345f9190614648565b915061343c565b60008167ffffffffffffffff81111561348257613481614956565b5b6040519080825280601f01601f1916602001820160405280156134b45781602001600182028036833780820191505090505b5090505b60008514613541576001826134cd91906146d3565b9150600a856134dc9190614869565b60306134e891906145f2565b60f81b8183815181106134fe576134fd614927565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561353a9190614648565b94506134b8565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156135ba576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156135f5576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613602600085838661390f565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506137c38673ffffffffffffffffffffffffffffffffffffffff166131d7565b15613888575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461383860008784806001019550876131fa565b61386e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106137c957826000541461388357600080fd5b6138f3565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613889575b8160008190555050506139096000858386613915565b50505050565b50505050565b50505050565b828054613927906147bd565b90600052602060002090601f0160209004810192826139495760008555613990565b82601f1061396257805160ff1916838001178555613990565b82800160010185558215613990579182015b8281111561398f578251825591602001919060010190613974565b5b50905061399d91906139e4565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156139fd5760008160009055506001016139e5565b5090565b6000613a14613a0f846144f4565b6144cf565b905082815260208101848484011115613a3057613a2f61498a565b5b613a3b84828561477b565b509392505050565b6000613a56613a5184614525565b6144cf565b905082815260208101848484011115613a7257613a7161498a565b5b613a7d84828561477b565b509392505050565b600081359050613a9481614c5a565b92915050565b600081359050613aa981614c71565b92915050565b600081359050613abe81614c88565b92915050565b600081519050613ad381614c88565b92915050565b600082601f830112613aee57613aed614985565b5b8135613afe848260208601613a01565b91505092915050565b600082601f830112613b1c57613b1b614985565b5b8135613b2c848260208601613a43565b91505092915050565b600081359050613b4481614c9f565b92915050565b600060208284031215613b6057613b5f614994565b5b6000613b6e84828501613a85565b91505092915050565b60008060408385031215613b8e57613b8d614994565b5b6000613b9c85828601613a85565b9250506020613bad85828601613a85565b9150509250929050565b600080600060608486031215613bd057613bcf614994565b5b6000613bde86828701613a85565b9350506020613bef86828701613a85565b9250506040613c0086828701613b35565b9150509250925092565b60008060008060808587031215613c2457613c23614994565b5b6000613c3287828801613a85565b9450506020613c4387828801613a85565b9350506040613c5487828801613b35565b925050606085013567ffffffffffffffff811115613c7557613c7461498f565b5b613c8187828801613ad9565b91505092959194509250565b60008060408385031215613ca457613ca3614994565b5b6000613cb285828601613a85565b9250506020613cc385828601613a9a565b9150509250929050565b60008060408385031215613ce457613ce3614994565b5b6000613cf285828601613a85565b9250506020613d0385828601613b35565b9150509250929050565b600060208284031215613d2357613d22614994565b5b6000613d3184828501613a9a565b91505092915050565b600060208284031215613d5057613d4f614994565b5b6000613d5e84828501613aaf565b91505092915050565b600060208284031215613d7d57613d7c614994565b5b6000613d8b84828501613ac4565b91505092915050565b600060208284031215613daa57613da9614994565b5b600082013567ffffffffffffffff811115613dc857613dc761498f565b5b613dd484828501613b07565b91505092915050565b600060208284031215613df357613df2614994565b5b6000613e0184828501613b35565b91505092915050565b60008060408385031215613e2157613e20614994565b5b6000613e2f85828601613b35565b9250506020613e4085828601613a85565b9150509250929050565b6000613e5683836141ea565b60208301905092915050565b613e6b81614707565b82525050565b6000613e7c8261457b565b613e8681856145a9565b9350613e9183614556565b8060005b83811015613ec2578151613ea98882613e4a565b9750613eb48361459c565b925050600181019050613e95565b5085935050505092915050565b613ed881614719565b82525050565b6000613ee982614586565b613ef381856145ba565b9350613f0381856020860161478a565b613f0c81614999565b840191505092915050565b6000613f2282614591565b613f2c81856145d6565b9350613f3c81856020860161478a565b613f4581614999565b840191505092915050565b6000613f5b82614591565b613f6581856145e7565b9350613f7581856020860161478a565b80840191505092915050565b60008154613f8e816147bd565b613f9881866145e7565b94506001821660008114613fb35760018114613fc457613ff7565b60ff19831686528186019350613ff7565b613fcd85614566565b60005b83811015613fef57815481890152600182019150602081019050613fd0565b838801955050505b50505092915050565b600061400d6026836145d6565b9150614018826149aa565b604082019050919050565b6000614030601e836145d6565b915061403b826149f9565b602082019050919050565b6000614053601f836145d6565b915061405e82614a22565b602082019050919050565b60006140766019836145d6565b915061408182614a4b565b602082019050919050565b6000614099601c836145d6565b91506140a482614a74565b602082019050919050565b60006140bc601a836145d6565b91506140c782614a9d565b602082019050919050565b60006140df6020836145d6565b91506140ea82614ac6565b602082019050919050565b60006141026017836145d6565b915061410d82614aef565b602082019050919050565b60006141256000836145cb565b915061413082614b18565b600082019050919050565b60006141486025836145d6565b915061415382614b1b565b604082019050919050565b600061416b6022836145d6565b915061417682614b6a565b604082019050919050565b600061418e601f836145d6565b915061419982614bb9565b602082019050919050565b60006141b16030836145d6565b91506141bc82614be2565b604082019050919050565b60006141d46013836145d6565b91506141df82614c31565b602082019050919050565b6141f381614771565b82525050565b61420281614771565b82525050565b60006142148286613f50565b91506142208285613f50565b915061422c8284613f81565b9150819050949350505050565b600061424482614118565b9150819050919050565b60006020820190506142636000830184613e62565b92915050565b600060808201905061427e6000830187613e62565b61428b6020830186613e62565b61429860408301856141f9565b81810360608301526142aa8184613ede565b905095945050505050565b600060208201905081810360008301526142cf8184613e71565b905092915050565b60006020820190506142ec6000830184613ecf565b92915050565b6000602082019050818103600083015261430c8184613f17565b905092915050565b6000602082019050818103600083015261432d81614000565b9050919050565b6000602082019050818103600083015261434d81614023565b9050919050565b6000602082019050818103600083015261436d81614046565b9050919050565b6000602082019050818103600083015261438d81614069565b9050919050565b600060208201905081810360008301526143ad8161408c565b9050919050565b600060208201905081810360008301526143cd816140af565b9050919050565b600060208201905081810360008301526143ed816140d2565b9050919050565b6000602082019050818103600083015261440d816140f5565b9050919050565b6000602082019050818103600083015261442d8161413b565b9050919050565b6000602082019050818103600083015261444d8161415e565b9050919050565b6000602082019050818103600083015261446d81614181565b9050919050565b6000602082019050818103600083015261448d816141a4565b9050919050565b600060208201905081810360008301526144ad816141c7565b9050919050565b60006020820190506144c960008301846141f9565b92915050565b60006144d96144ea565b90506144e582826147ef565b919050565b6000604051905090565b600067ffffffffffffffff82111561450f5761450e614956565b5b61451882614999565b9050602081019050919050565b600067ffffffffffffffff8211156145405761453f614956565b5b61454982614999565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006145fd82614771565b915061460883614771565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561463d5761463c61489a565b5b828201905092915050565b600061465382614771565b915061465e83614771565b92508261466e5761466d6148c9565b5b828204905092915050565b600061468482614771565b915061468f83614771565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146c8576146c761489a565b5b828202905092915050565b60006146de82614771565b91506146e983614771565b9250828210156146fc576146fb61489a565b5b828203905092915050565b600061471282614751565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147a857808201518184015260208101905061478d565b838111156147b7576000848401525b50505050565b600060028204905060018216806147d557607f821691505b602082108114156147e9576147e86148f8565b5b50919050565b6147f882614999565b810181811067ffffffffffffffff8211171561481757614816614956565b5b80604052505050565b600061482b82614771565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561485e5761485d61489a565b5b600182019050919050565b600061487482614771565b915061487f83614771565b92508261488f5761488e6148c9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74206973206e6f742061637469766520796574210000600082015250565b7f4d696e7420616d6f756e742065786365656473206d617820737570706c792100600082015250565b7f4f6e6c7920636f6e74726f6c6c6572732063616e206d696e7400000000000000600082015250565b7f44617070206d696e74206973206e6f7420616374697665207965742100000000600082015250565b7f4d696e7420616d6f756e742063616e2774206265207a65726f2e000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b50565b7f4d6178206d696e7420616d6f756e74207065722061646472657373206578636560008201527f6564656421000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420706572207472616e73616374696f6e206578636565646560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614c6381614707565b8114614c6e57600080fd5b50565b614c7a81614719565b8114614c8557600080fd5b50565b614c9181614725565b8114614c9c57600080fd5b50565b614ca881614771565b8114614cb357600080fd5b5056fea26469706673582212208e9c4689925f0018c7ea56f2ad8ba8b7c2cbddb6c2d7b2382ebad3d77f5e835464736f6c63430008070033

Deployed Bytecode

0x60806040526004361061027d5760003560e01c8063616cdb1e1161014f57806395d89b41116100c1578063c87b56dd1161007a578063c87b56dd1461094b578063d5abeb0114610988578063e985e9c5146109b3578063f2fde38b146109f0578063f6a74ed714610a19578063ff64569114610a425761027d565b806395d89b411461085e578063a0712d6814610889578063a22cb465146108a5578063a7fc7a07146108ce578063b88d4fde146108f7578063ba7d2c76146109205761027d565b806370a082311161011357806370a0823114610762578063715018a61461079f57806372250380146107b65780637ec4a659146107e1578063879fbedf1461080a5780638da5cb5b146108335761027d565b8063616cdb1e1461067f57806362b99ad4146106a85780636352211e146106d357806368e00d77146107105780636f8b44b0146107395761027d565b806323b872dd116101f35780634652be95116101ac5780634652be9514610583578063489f2bcd146105ac578063512b658d146105d557806351830227146105fe5780635503a0e8146106295780635c975abb146106545761027d565b806323b872dd1461048b5780632fd5bce2146104b45780633ccfd60b146104dd57806342842e0e146104f4578063438b63001461051d57806344a0d68a1461055a5761027d565b80630f4161aa116102455780630f4161aa146103795780630fecec05146103a457806313faede6146103cf57806316c38b3c146103fa57806318160ddd1461042357806318cae2691461044e5761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063095ea7b3146103275780630b12d64b14610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613d3a565b610a6d565b6040516102b691906142d7565b60405180910390f35b3480156102cb57600080fd5b506102d4610b4f565b6040516102e191906142f2565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613ddd565b610be1565b60405161031e919061424e565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190613ccd565b610c5d565b005b34801561035c57600080fd5b5061037760048036038101906103729190613e0a565b610d62565b005b34801561038557600080fd5b5061038e611061565b60405161039b91906142d7565b60405180910390f35b3480156103b057600080fd5b506103b9611074565b6040516103c691906142d7565b60405180910390f35b3480156103db57600080fd5b506103e4611087565b6040516103f191906144b4565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190613d0d565b61108d565b005b34801561042f57600080fd5b50610438611126565b60405161044591906144b4565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190613b4a565b61113d565b60405161048291906144b4565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613bb7565b611155565b005b3480156104c057600080fd5b506104db60048036038101906104d69190613ddd565b611165565b005b3480156104e957600080fd5b506104f26111eb565b005b34801561050057600080fd5b5061051b60048036038101906105169190613bb7565b61133d565b005b34801561052957600080fd5b50610544600480360381019061053f9190613b4a565b61135d565b60405161055191906142b5565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190613ddd565b611571565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190613d0d565b6115f7565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190613ddd565b611690565b005b3480156105e157600080fd5b506105fc60048036038101906105f79190613e0a565b611716565b005b34801561060a57600080fd5b506106136117f7565b60405161062091906144b4565b60405180910390f35b34801561063557600080fd5b5061063e6117fd565b60405161064b91906142f2565b60405180910390f35b34801561066057600080fd5b5061066961188b565b60405161067691906142d7565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190613ddd565b61189e565b005b3480156106b457600080fd5b506106bd611924565b6040516106ca91906142f2565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190613ddd565b6119b2565b604051610707919061424e565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190613d94565b6119c8565b005b34801561074557600080fd5b50610760600480360381019061075b9190613ddd565b611a5e565b005b34801561076e57600080fd5b5061078960048036038101906107849190613b4a565b611ae4565b60405161079691906144b4565b60405180910390f35b3480156107ab57600080fd5b506107b4611bb4565b005b3480156107c257600080fd5b506107cb611c3c565b6040516107d891906142f2565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190613d94565b611cca565b005b34801561081657600080fd5b50610831600480360381019061082c9190613d0d565b611d60565b005b34801561083f57600080fd5b50610848611df9565b604051610855919061424e565b60405180910390f35b34801561086a57600080fd5b50610873611e23565b60405161088091906142f2565b60405180910390f35b6108a3600480360381019061089e9190613ddd565b611eb5565b005b3480156108b157600080fd5b506108cc60048036038101906108c79190613c8d565b6121b4565b005b3480156108da57600080fd5b506108f560048036038101906108f09190613b4a565b61232c565b005b34801561090357600080fd5b5061091e60048036038101906109199190613c0a565b612403565b005b34801561092c57600080fd5b5061093561247b565b60405161094291906144b4565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d9190613ddd565b612481565b60405161097f91906142f2565b60405180910390f35b34801561099457600080fd5b5061099d6125c8565b6040516109aa91906144b4565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190613b77565b6125ce565b6040516109e791906142d7565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a129190613b4a565b612662565b005b348015610a2557600080fd5b50610a406004803603810190610a3b9190613b4a565b61275a565b005b348015610a4e57600080fd5b50610a57612831565b604051610a6491906144b4565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b3857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b485750610b4782612837565b5b9050919050565b606060028054610b5e906147bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8a906147bd565b8015610bd75780601f10610bac57610100808354040283529160200191610bd7565b820191906000526020600020905b815481529060010190602001808311610bba57829003601f168201915b5050505050905090565b6000610bec826128a1565b610c22576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c68826119b2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cd0576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cef6128ef565b73ffffffffffffffffffffffffffffffffffffffff1614610d5257610d1b81610d166128ef565b6125ce565b610d51576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610d5d8383836128f7565b505050565b81601160009054906101000a900460ff1615610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa906143f4565b60405180910390fd5b600f54811115610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def90614434565b60405180910390fd5b60105481601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e4691906145f2565b1115610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90614414565b60405180910390fd5b60008111610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec1906143b4565b60405180910390fd5b600e5481610ed6611126565b610ee091906145f2565b1115610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890614354565b60405180910390fd5b601360019054906101000a900460ff16610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6790614394565b60405180910390fd5b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390614374565b60405180910390fd5b82601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461104b91906145f2565b9250508190555061105c82846129a9565b505050565b601360009054906101000a900460ff1681565b601360019054906101000a900460ff1681565b600d5481565b6110956128ef565b73ffffffffffffffffffffffffffffffffffffffff166110b3611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611109576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611100906143d4565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b60006111306129c7565b6001546000540303905090565b60156020528060005260406000206000915090505481565b6111608383836129d0565b505050565b61116d6128ef565b73ffffffffffffffffffffffffffffffffffffffff1661118b611df9565b73ffffffffffffffffffffffffffffffffffffffff16146111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d8906143d4565b60405180910390fd5b8060128190555050565b6111f36128ef565b73ffffffffffffffffffffffffffffffffffffffff16611211611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e906143d4565b60405180910390fd5b600260095414156112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490614454565b60405180910390fd5b600260098190555060006112bf611df9565b73ffffffffffffffffffffffffffffffffffffffff16476040516112e290614239565b60006040518083038185875af1925050503d806000811461131f576040519150601f19603f3d011682016040523d82523d6000602084013e611324565b606091505b505090508061133257600080fd5b506001600981905550565b61135883838360405180602001604052806000815250612403565b505050565b6060600061136a83611ae4565b905060008167ffffffffffffffff81111561138857611387614956565b5b6040519080825280602002602001820160405280156113b65781602001602082028036833780820191505090505b50905060006113c36129c7565b90506000805b84821080156113d9575060005483105b15611564576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161155057600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146114ec57806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561154f578385848151811061153457611533614927565b5b602002602001018181525050828061154b90614820565b9350505b5b838061155b90614820565b945050506113c9565b8395505050505050919050565b6115796128ef565b73ffffffffffffffffffffffffffffffffffffffff16611597611df9565b73ffffffffffffffffffffffffffffffffffffffff16146115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e4906143d4565b60405180910390fd5b80600d8190555050565b6115ff6128ef565b73ffffffffffffffffffffffffffffffffffffffff1661161d611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a906143d4565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b6116986128ef565b73ffffffffffffffffffffffffffffffffffffffff166116b6611df9565b73ffffffffffffffffffffffffffffffffffffffff161461170c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611703906143d4565b60405180910390fd5b8060108190555050565b61171e6128ef565b73ffffffffffffffffffffffffffffffffffffffff1661173c611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611792576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611789906143d4565b60405180910390fd5b600e548261179e611126565b6117a891906145f2565b11156117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090614354565b60405180910390fd5b6117f381836129a9565b5050565b60125481565b600c805461180a906147bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611836906147bd565b80156118835780601f1061185857610100808354040283529160200191611883565b820191906000526020600020905b81548152906001019060200180831161186657829003601f168201915b505050505081565b601160009054906101000a900460ff1681565b6118a66128ef565b73ffffffffffffffffffffffffffffffffffffffff166118c4611df9565b73ffffffffffffffffffffffffffffffffffffffff161461191a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611911906143d4565b60405180910390fd5b80600f8190555050565b600a8054611931906147bd565b80601f016020809104026020016040519081016040528092919081815260200182805461195d906147bd565b80156119aa5780601f1061197f576101008083540402835291602001916119aa565b820191906000526020600020905b81548152906001019060200180831161198d57829003601f168201915b505050505081565b60006119bd82612e86565b600001519050919050565b6119d06128ef565b73ffffffffffffffffffffffffffffffffffffffff166119ee611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b906143d4565b60405180910390fd5b80600b9080519060200190611a5a92919061391b565b5050565b611a666128ef565b73ffffffffffffffffffffffffffffffffffffffff16611a84611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad1906143d4565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611bbc6128ef565b73ffffffffffffffffffffffffffffffffffffffff16611bda611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c27906143d4565b60405180910390fd5b611c3a6000613111565b565b600b8054611c49906147bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611c75906147bd565b8015611cc25780601f10611c9757610100808354040283529160200191611cc2565b820191906000526020600020905b815481529060010190602001808311611ca557829003601f168201915b505050505081565b611cd26128ef565b73ffffffffffffffffffffffffffffffffffffffff16611cf0611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d906143d4565b60405180910390fd5b80600a9080519060200190611d5c92919061391b565b5050565b611d686128ef565b73ffffffffffffffffffffffffffffffffffffffff16611d86611df9565b73ffffffffffffffffffffffffffffffffffffffff1614611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd3906143d4565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611e32906147bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5e906147bd565b8015611eab5780601f10611e8057610100808354040283529160200191611eab565b820191906000526020600020905b815481529060010190602001808311611e8e57829003601f168201915b5050505050905090565b80601160009054906101000a900460ff1615611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd906143f4565b60405180910390fd5b600f54811115611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290614434565b60405180910390fd5b60105481601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9991906145f2565b1115611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614414565b60405180910390fd5b6000811161201d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612014906143b4565b60405180910390fd5b600e5481612029611126565b61203391906145f2565b1115612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90614354565b60405180910390fd5b8161207d611df9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121005780600d546120bd9190614679565b3410156120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f690614494565b60405180910390fd5b5b601360009054906101000a900460ff1661214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690614334565b60405180910390fd5b82601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219e91906145f2565b925050819055506121af33846129a9565b505050565b6121bc6128ef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612221576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061222e6128ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166122db6128ef565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161232091906142d7565b60405180910390a35050565b6123346128ef565b73ffffffffffffffffffffffffffffffffffffffff16612352611df9565b73ffffffffffffffffffffffffffffffffffffffff16146123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239f906143d4565b60405180910390fd5b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61240e8484846129d0565b61242d8373ffffffffffffffffffffffffffffffffffffffff166131d7565b156124755761243e848484846131fa565b612474576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60105481565b606061248c826128a1565b6124cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c290614474565b60405180910390fd5b60125482111561256757600b80546124e2906147bd565b80601f016020809104026020016040519081016040528092919081815260200182805461250e906147bd565b801561255b5780601f106125305761010080835404028352916020019161255b565b820191906000526020600020905b81548152906001019060200180831161253e57829003601f168201915b505050505090506125c3565b600061257161335a565b9050600081511161259157604051806020016040528060008152506125bf565b8061259b846133ec565b600c6040516020016125af93929190614208565b6040516020818303038152906040525b9150505b919050565b600e5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61266a6128ef565b73ffffffffffffffffffffffffffffffffffffffff16612688611df9565b73ffffffffffffffffffffffffffffffffffffffff16146126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d5906143d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590614314565b60405180910390fd5b61275781613111565b50565b6127626128ef565b73ffffffffffffffffffffffffffffffffffffffff16612780611df9565b73ffffffffffffffffffffffffffffffffffffffff16146127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd906143d4565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600f5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816128ac6129c7565b111580156128bb575060005482105b80156128e8575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6129c382826040518060200160405280600081525061354d565b5050565b60006001905090565b60006129db82612e86565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a46576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612a676128ef565b73ffffffffffffffffffffffffffffffffffffffff161480612a965750612a9585612a906128ef565b6125ce565b5b80612adb5750612aa46128ef565b73ffffffffffffffffffffffffffffffffffffffff16612ac384610be1565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612b14576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b7b576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b88858585600161390f565b612b94600084876128f7565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e14576000548214612e1357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e7f8585856001613915565b5050505050565b612e8e6139a1565b600082905080612e9c6129c7565b116130da576000548110156130d9576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516130d757600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612fbb57809250505061310c565b5b6001156130d657818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146130d157809250505061310c565b612fbc565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132206128ef565b8786866040518563ffffffff1660e01b81526004016132429493929190614269565b602060405180830381600087803b15801561325c57600080fd5b505af192505050801561328d57506040513d601f19601f8201168201806040525081019061328a9190613d67565b60015b613307573d80600081146132bd576040519150601f19603f3d011682016040523d82523d6000602084013e6132c2565b606091505b506000815114156132ff576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a8054613369906147bd565b80601f0160208091040260200160405190810160405280929190818152602001828054613395906147bd565b80156133e25780601f106133b7576101008083540402835291602001916133e2565b820191906000526020600020905b8154815290600101906020018083116133c557829003601f168201915b5050505050905090565b60606000821415613434576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613548565b600082905060005b6000821461346657808061344f90614820565b915050600a8261345f9190614648565b915061343c565b60008167ffffffffffffffff81111561348257613481614956565b5b6040519080825280601f01601f1916602001820160405280156134b45781602001600182028036833780820191505090505b5090505b60008514613541576001826134cd91906146d3565b9150600a856134dc9190614869565b60306134e891906145f2565b60f81b8183815181106134fe576134fd614927565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561353a9190614648565b94506134b8565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156135ba576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156135f5576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613602600085838661390f565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506137c38673ffffffffffffffffffffffffffffffffffffffff166131d7565b15613888575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461383860008784806001019550876131fa565b61386e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106137c957826000541461388357600080fd5b6138f3565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613889575b8160008190555050506139096000858386613915565b50505050565b50505050565b50505050565b828054613927906147bd565b90600052602060002090601f0160209004810192826139495760008555613990565b82601f1061396257805160ff1916838001178555613990565b82800160010185558215613990579182015b8281111561398f578251825591602001919060010190613974565b5b50905061399d91906139e4565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156139fd5760008160009055506001016139e5565b5090565b6000613a14613a0f846144f4565b6144cf565b905082815260208101848484011115613a3057613a2f61498a565b5b613a3b84828561477b565b509392505050565b6000613a56613a5184614525565b6144cf565b905082815260208101848484011115613a7257613a7161498a565b5b613a7d84828561477b565b509392505050565b600081359050613a9481614c5a565b92915050565b600081359050613aa981614c71565b92915050565b600081359050613abe81614c88565b92915050565b600081519050613ad381614c88565b92915050565b600082601f830112613aee57613aed614985565b5b8135613afe848260208601613a01565b91505092915050565b600082601f830112613b1c57613b1b614985565b5b8135613b2c848260208601613a43565b91505092915050565b600081359050613b4481614c9f565b92915050565b600060208284031215613b6057613b5f614994565b5b6000613b6e84828501613a85565b91505092915050565b60008060408385031215613b8e57613b8d614994565b5b6000613b9c85828601613a85565b9250506020613bad85828601613a85565b9150509250929050565b600080600060608486031215613bd057613bcf614994565b5b6000613bde86828701613a85565b9350506020613bef86828701613a85565b9250506040613c0086828701613b35565b9150509250925092565b60008060008060808587031215613c2457613c23614994565b5b6000613c3287828801613a85565b9450506020613c4387828801613a85565b9350506040613c5487828801613b35565b925050606085013567ffffffffffffffff811115613c7557613c7461498f565b5b613c8187828801613ad9565b91505092959194509250565b60008060408385031215613ca457613ca3614994565b5b6000613cb285828601613a85565b9250506020613cc385828601613a9a565b9150509250929050565b60008060408385031215613ce457613ce3614994565b5b6000613cf285828601613a85565b9250506020613d0385828601613b35565b9150509250929050565b600060208284031215613d2357613d22614994565b5b6000613d3184828501613a9a565b91505092915050565b600060208284031215613d5057613d4f614994565b5b6000613d5e84828501613aaf565b91505092915050565b600060208284031215613d7d57613d7c614994565b5b6000613d8b84828501613ac4565b91505092915050565b600060208284031215613daa57613da9614994565b5b600082013567ffffffffffffffff811115613dc857613dc761498f565b5b613dd484828501613b07565b91505092915050565b600060208284031215613df357613df2614994565b5b6000613e0184828501613b35565b91505092915050565b60008060408385031215613e2157613e20614994565b5b6000613e2f85828601613b35565b9250506020613e4085828601613a85565b9150509250929050565b6000613e5683836141ea565b60208301905092915050565b613e6b81614707565b82525050565b6000613e7c8261457b565b613e8681856145a9565b9350613e9183614556565b8060005b83811015613ec2578151613ea98882613e4a565b9750613eb48361459c565b925050600181019050613e95565b5085935050505092915050565b613ed881614719565b82525050565b6000613ee982614586565b613ef381856145ba565b9350613f0381856020860161478a565b613f0c81614999565b840191505092915050565b6000613f2282614591565b613f2c81856145d6565b9350613f3c81856020860161478a565b613f4581614999565b840191505092915050565b6000613f5b82614591565b613f6581856145e7565b9350613f7581856020860161478a565b80840191505092915050565b60008154613f8e816147bd565b613f9881866145e7565b94506001821660008114613fb35760018114613fc457613ff7565b60ff19831686528186019350613ff7565b613fcd85614566565b60005b83811015613fef57815481890152600182019150602081019050613fd0565b838801955050505b50505092915050565b600061400d6026836145d6565b9150614018826149aa565b604082019050919050565b6000614030601e836145d6565b915061403b826149f9565b602082019050919050565b6000614053601f836145d6565b915061405e82614a22565b602082019050919050565b60006140766019836145d6565b915061408182614a4b565b602082019050919050565b6000614099601c836145d6565b91506140a482614a74565b602082019050919050565b60006140bc601a836145d6565b91506140c782614a9d565b602082019050919050565b60006140df6020836145d6565b91506140ea82614ac6565b602082019050919050565b60006141026017836145d6565b915061410d82614aef565b602082019050919050565b60006141256000836145cb565b915061413082614b18565b600082019050919050565b60006141486025836145d6565b915061415382614b1b565b604082019050919050565b600061416b6022836145d6565b915061417682614b6a565b604082019050919050565b600061418e601f836145d6565b915061419982614bb9565b602082019050919050565b60006141b16030836145d6565b91506141bc82614be2565b604082019050919050565b60006141d46013836145d6565b91506141df82614c31565b602082019050919050565b6141f381614771565b82525050565b61420281614771565b82525050565b60006142148286613f50565b91506142208285613f50565b915061422c8284613f81565b9150819050949350505050565b600061424482614118565b9150819050919050565b60006020820190506142636000830184613e62565b92915050565b600060808201905061427e6000830187613e62565b61428b6020830186613e62565b61429860408301856141f9565b81810360608301526142aa8184613ede565b905095945050505050565b600060208201905081810360008301526142cf8184613e71565b905092915050565b60006020820190506142ec6000830184613ecf565b92915050565b6000602082019050818103600083015261430c8184613f17565b905092915050565b6000602082019050818103600083015261432d81614000565b9050919050565b6000602082019050818103600083015261434d81614023565b9050919050565b6000602082019050818103600083015261436d81614046565b9050919050565b6000602082019050818103600083015261438d81614069565b9050919050565b600060208201905081810360008301526143ad8161408c565b9050919050565b600060208201905081810360008301526143cd816140af565b9050919050565b600060208201905081810360008301526143ed816140d2565b9050919050565b6000602082019050818103600083015261440d816140f5565b9050919050565b6000602082019050818103600083015261442d8161413b565b9050919050565b6000602082019050818103600083015261444d8161415e565b9050919050565b6000602082019050818103600083015261446d81614181565b9050919050565b6000602082019050818103600083015261448d816141a4565b9050919050565b600060208201905081810360008301526144ad816141c7565b9050919050565b60006020820190506144c960008301846141f9565b92915050565b60006144d96144ea565b90506144e582826147ef565b919050565b6000604051905090565b600067ffffffffffffffff82111561450f5761450e614956565b5b61451882614999565b9050602081019050919050565b600067ffffffffffffffff8211156145405761453f614956565b5b61454982614999565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006145fd82614771565b915061460883614771565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561463d5761463c61489a565b5b828201905092915050565b600061465382614771565b915061465e83614771565b92508261466e5761466d6148c9565b5b828204905092915050565b600061468482614771565b915061468f83614771565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146c8576146c761489a565b5b828202905092915050565b60006146de82614771565b91506146e983614771565b9250828210156146fc576146fb61489a565b5b828203905092915050565b600061471282614751565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147a857808201518184015260208101905061478d565b838111156147b7576000848401525b50505050565b600060028204905060018216806147d557607f821691505b602082108114156147e9576147e86148f8565b5b50919050565b6147f882614999565b810181811067ffffffffffffffff8211171561481757614816614956565b5b80604052505050565b600061482b82614771565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561485e5761485d61489a565b5b600182019050919050565b600061487482614771565b915061487f83614771565b92508261488f5761488e6148c9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74206973206e6f742061637469766520796574210000600082015250565b7f4d696e7420616d6f756e742065786365656473206d617820737570706c792100600082015250565b7f4f6e6c7920636f6e74726f6c6c6572732063616e206d696e7400000000000000600082015250565b7f44617070206d696e74206973206e6f7420616374697665207965742100000000600082015250565b7f4d696e7420616d6f756e742063616e2774206265207a65726f2e000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b50565b7f4d6178206d696e7420616d6f756e74207065722061646472657373206578636560008201527f6564656421000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420706572207472616e73616374696f6e206578636565646560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614c6381614707565b8114614c6e57600080fd5b50565b614c7a81614719565b8114614c8557600080fd5b50565b614c9181614725565b8114614c9c57600080fd5b50565b614ca881614771565b8114614cb357600080fd5b5056fea26469706673582212208e9c4689925f0018c7ea56f2ad8ba8b7c2cbddb6c2d7b2382ebad3d77f5e835464736f6c63430008070033

Deployed Bytecode Sourcemap

37373:5764:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20249:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23364:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24868:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24430:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39309:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37790:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37832:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37575:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41847:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19489:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37917:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25733:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41725:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42984:150;;;;;;;;;;;;;:::i;:::-;;25974:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39969:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41945:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42885:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42329:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39665:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37756:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37533:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37726:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42175:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37472:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23172:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42607:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42046:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20618:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4636:103;;;;;;;;;;;;;:::i;:::-;;37500:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42474:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42756:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3985:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23533:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38993:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25144:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41462:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26230:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37682:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40937:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37613:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25502:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4894:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41597:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37650:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20249:305;20351:4;20403:25;20388:40;;;:11;:40;;;;:105;;;;20460:33;20445:48;;;:11;:48;;;;20388:105;:158;;;;20510:36;20534:11;20510:23;:36::i;:::-;20388:158;20368:178;;20249:305;;;:::o;23364:100::-;23418:13;23451:5;23444:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23364:100;:::o;24868:204::-;24936:7;24961:16;24969:7;24961;:16::i;:::-;24956:64;;24986:34;;;;;;;;;;;;;;24956:64;25040:15;:24;25056:7;25040:24;;;;;;;;;;;;;;;;;;;;;25033:31;;24868:204;;;:::o;24430:372::-;24503:13;24519:24;24535:7;24519:15;:24::i;:::-;24503:40;;24564:5;24558:11;;:2;:11;;;24554:48;;;24578:24;;;;;;;;;;;;;;24554:48;24635:5;24619:21;;:12;:10;:12::i;:::-;:21;;;24615:139;;24646:37;24663:5;24670:12;:10;:12::i;:::-;24646:16;:37::i;:::-;24642:112;;24707:35;;;;;;;;;;;;;;24642:112;24615:139;24766:28;24775:2;24779:7;24788:5;24766:8;:28::i;:::-;24492:310;24430:372;;:::o;39309:327::-;39391:11;38319:6;;;;;;;;;;;38318:7;38310:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;38383:8;;38368:11;:23;;38360:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38495:18;;38480:11;38445:20;:32;38466:10;38445:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:68;;38437:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;38584:1;38570:11;:15;38562:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38662:9;;38647:11;38631:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;38623:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;39419:15:::1;;;;;;;;;;;39411:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;39482:11;:23;39494:10;39482:23;;;;;;;;;;;;;;;;;;;;;;;;;39474:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39579:11;39544:20;:31;39565:9;39544:31;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;39597:33;39607:9;39618:11;39597:9;:33::i;:::-;39309:327:::0;;;:::o;37790:37::-;;;;;;;;;;;;;:::o;37832:35::-;;;;;;;;;;;;;:::o;37575:31::-;;;;:::o;41847:77::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41912:6:::1;41903;;:15;;;;;;;;;;;;;;;;;;41847:77:::0;:::o;19489:312::-;19542:7;19767:15;:13;:15::i;:::-;19752:12;;19736:13;;:28;:46;19729:53;;19489:312;:::o;37917:55::-;;;;;;;;;;;;;;;;;:::o;25733:170::-;25867:28;25877:4;25883:2;25887:7;25867:9;:28::i;:::-;25733:170;;;:::o;41725:102::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41806:15:::1;41795:8;:26;;;;41725:102:::0;:::o;42984:150::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;829:1:::1;1049:7;;:19;;1041:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;829:1;1182:7;:18;;;;43042:7:::2;43063;:5;:7::i;:::-;43055:21;;43084;43055:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43041:69;;;43125:2;43117:11;;;::::0;::::2;;43034:100;785:1:::1;1227:7;:22;;;;42984:150::o:0;25974:185::-;26112:39;26129:4;26135:2;26139:7;26112:39;;;;;;;;;;;;:16;:39::i;:::-;25974:185;;;:::o;39969:827::-;40029:16;40054:23;40080:17;40090:6;40080:9;:17::i;:::-;40054:43;;40104:30;40151:15;40137:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40104:63;;40174:22;40199:15;:13;:15::i;:::-;40174:40;;40221:23;40255:26;40290:474;40315:15;40297;:33;:67;;;;;40351:13;;40334:14;:30;40297:67;40290:474;;;40375:31;40409:11;:27;40421:14;40409:27;;;;;;;;;;;40375:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40452:9;:16;;;40447:285;;40511:1;40485:28;;:9;:14;;;:28;;;40481:94;;40549:9;:14;;;40528:35;;40481:94;40613:6;40591:28;;:18;:28;;;40587:136;;;40667:14;40634:13;40648:15;40634:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;40694:17;;;;;:::i;:::-;;;;40587:136;40447:285;40740:16;;;;;:::i;:::-;;;;40366:398;40290:474;;;40777:13;40770:20;;;;;;;39969:827;;;:::o;41945:74::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42008:5:::1;42001:4;:12;;;;41945:74:::0;:::o;42885:93::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42966:6:::1;42948:15;;:24;;;;;;;;;;;;;;;;;;42885:93:::0;:::o;42329:118::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42426:15:::1;42405:18;:36;;;;42329:118:::0;:::o;39665:217::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39791:9:::1;;39776:11;39760:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;39752:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;39843:33;39853:9;39864:11;39843:9;:33::i;:::-;39665:217:::0;;:::o;37756:27::-;;;;:::o;37533:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37726:25::-;;;;;;;;;;;;;:::o;42175:114::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42264:19:::1;42253:8;:30;;;;42175:114:::0;:::o;37472:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23172:125::-;23236:7;23263:21;23276:7;23263:12;:21::i;:::-;:26;;;23256:33;;23172:125;;;:::o;42607:115::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42701:15:::1;42684:14;:32;;;;;;;;;;;;:::i;:::-;;42607:115:::0;:::o;42046:94::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42124:10:::1;42112:9;:22;;;;42046:94:::0;:::o;20618:206::-;20682:7;20723:1;20706:19;;:5;:19;;;20702:60;;;20734:28;;;;;;;;;;;;;;20702:60;20788:12;:19;20801:5;20788:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;20780:36;;20773:43;;20618:206;;;:::o;4636:103::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4701:30:::1;4728:1;4701:18;:30::i;:::-;4636:103::o:0;37500:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42474:100::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42558:10:::1;42546:9;:22;;;;;;;;;;;;:::i;:::-;;42474:100:::0;:::o;42756:97::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42841:6:::1;42821:17;;:26;;;;;;;;;;;;;;;;;;42756:97:::0;:::o;3985:87::-;4031:7;4058:6;;;;;;;;;;;4051:13;;3985:87;:::o;23533:104::-;23589:13;23622:7;23615:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23533:104;:::o;38993:281::-;39058:11;38319:6;;;;;;;;;;;38318:7;38310:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;38383:8;;38368:11;:23;;38360:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38495:18;;38480:11;38445:20;:32;38466:10;38445:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:68;;38437:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;38584:1;38570:11;:15;38562:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38662:9;;38647:11;38631:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;38623:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;39091:11:::1;38802:7;:5;:7::i;:::-;38788:21;;:10;:21;;;38784:113;;38850:11;38843:4;;:18;;;;:::i;:::-;38830:9;:31;;38822:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;38784:113;39119:17:::2;;;;;;;;;;;39111:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39216:11;39180:20;:32;39201:10;39180:32;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;39234:34;39244:10;39256:11;39234:9;:34::i;:::-;38714:1:::1;38993:281:::0;;:::o;25144:287::-;25255:12;:10;:12::i;:::-;25243:24;;:8;:24;;;25239:54;;;25276:17;;;;;;;;;;;;;;25239:54;25351:8;25306:18;:32;25325:12;:10;:12::i;:::-;25306:32;;;;;;;;;;;;;;;:42;25339:8;25306:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25404:8;25375:48;;25390:12;:10;:12::i;:::-;25375:48;;;25414:8;25375:48;;;;;;:::i;:::-;;;;;;;;25144:287;;:::o;41462:105::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41557:4:::1;41531:11;:23;41543:10;41531:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;41462:105:::0;:::o;26230:370::-;26397:28;26407:4;26413:2;26417:7;26397:9;:28::i;:::-;26440:15;:2;:13;;;:15::i;:::-;26436:157;;;26461:56;26492:4;26498:2;26502:7;26511:5;26461:30;:56::i;:::-;26457:136;;26541:40;;;;;;;;;;;;;;26457:136;26436:157;26230:370;;;;:::o;37682:37::-;;;;:::o;40937:428::-;41011:13;41041:17;41049:8;41041:7;:17::i;:::-;41033:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;41138:8;;41127;:19;41123:51;;;41157:14;41150:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41123:51;41182:28;41213:10;:8;:10::i;:::-;41182:41;;41268:1;41243:14;41237:28;:32;:122;;;;;;;;;;;;;;;;;41301:14;41317:19;:8;:17;:19::i;:::-;41338:9;41284:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41237:122;41230:129;;;40937:428;;;;:::o;37613:30::-;;;;:::o;25502:164::-;25599:4;25623:18;:25;25642:5;25623:25;;;;;;;;;;;;;;;:35;25649:8;25623:35;;;;;;;;;;;;;;;;;;;;;;;;;25616:42;;25502:164;;;;:::o;4894:201::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5003:1:::1;4983:22;;:8;:22;;;;4975:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5059:28;5078:8;5059:18;:28::i;:::-;4894:201:::0;:::o;41597:109::-;4216:12;:10;:12::i;:::-;4205:23;;:7;:5;:7::i;:::-;:23;;;4197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41695:5:::1;41669:11;:23;41681:10;41669:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;41597:109:::0;:::o;37650:27::-;;;;:::o;11477:157::-;11562:4;11601:25;11586:40;;;:11;:40;;;;11579:47;;11477:157;;;:::o;26855:174::-;26912:4;26955:7;26936:15;:13;:15::i;:::-;:26;;:53;;;;;26976:13;;26966:7;:23;26936:53;:85;;;;;26994:11;:20;27006:7;26994:20;;;;;;;;;;;:27;;;;;;;;;;;;26993:28;26936:85;26929:92;;26855:174;;;:::o;3275:98::-;3328:7;3355:10;3348:17;;3275:98;:::o;36077:196::-;36219:2;36192:15;:24;36208:7;36192:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36257:7;36253:2;36237:28;;36246:5;36237:28;;;;;;;;;;;;36077:196;;;:::o;27113:104::-;27182:27;27192:2;27196:8;27182:27;;;;;;;;;;;;:9;:27::i;:::-;27113:104;;:::o;40820:95::-;40885:7;40908:1;40901:8;;40820:95;:::o;31025:2130::-;31140:35;31178:21;31191:7;31178:12;:21::i;:::-;31140:59;;31238:4;31216:26;;:13;:18;;;:26;;;31212:67;;31251:28;;;;;;;;;;;;;;31212:67;31292:22;31334:4;31318:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;31355:36;31372:4;31378:12;:10;:12::i;:::-;31355:16;:36::i;:::-;31318:73;:126;;;;31432:12;:10;:12::i;:::-;31408:36;;:20;31420:7;31408:11;:20::i;:::-;:36;;;31318:126;31292:153;;31463:17;31458:66;;31489:35;;;;;;;;;;;;;;31458:66;31553:1;31539:16;;:2;:16;;;31535:52;;;31564:23;;;;;;;;;;;;;;31535:52;31600:43;31622:4;31628:2;31632:7;31641:1;31600:21;:43::i;:::-;31708:35;31725:1;31729:7;31738:4;31708:8;:35::i;:::-;32069:1;32039:12;:18;32052:4;32039:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32113:1;32085:12;:16;32098:2;32085:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32131:31;32165:11;:20;32177:7;32165:20;;;;;;;;;;;32131:54;;32216:2;32200:8;:13;;;:18;;;;;;;;;;;;;;;;;;32266:15;32233:8;:23;;;:49;;;;;;;;;;;;;;;;;;32534:19;32566:1;32556:7;:11;32534:33;;32582:31;32616:11;:24;32628:11;32616:24;;;;;;;;;;;32582:58;;32684:1;32659:27;;:8;:13;;;;;;;;;;;;:27;;;32655:384;;;32869:13;;32854:11;:28;32850:174;;32923:4;32907:8;:13;;;:20;;;;;;;;;;;;;;;;;;32976:13;:28;;;32950:8;:23;;;:54;;;;;;;;;;;;;;;;;;32850:174;32655:384;32014:1036;;;33086:7;33082:2;33067:27;;33076:4;33067:27;;;;;;;;;;;;33105:42;33126:4;33132:2;33136:7;33145:1;33105:20;:42::i;:::-;31129:2026;;31025:2130;;;:::o;21999:1111::-;22061:21;;:::i;:::-;22095:12;22110:7;22095:22;;22178:4;22159:15;:13;:15::i;:::-;:23;22155:888;;22195:13;;22188:4;:20;22184:859;;;22229:31;22263:11;:17;22275:4;22263:17;;;;;;;;;;;22229:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22304:9;:16;;;22299:729;;22375:1;22349:28;;:9;:14;;;:28;;;22345:101;;22413:9;22406:16;;;;;;22345:101;22748:261;22755:4;22748:261;;;22788:6;;;;;;;;22833:11;:17;22845:4;22833:17;;;;;;;;;;;22821:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22907:1;22881:28;;:9;:14;;;:28;;;22877:109;;22949:9;22942:16;;;;;;22877:109;22748:261;;;22299:729;22210:833;22184:859;22155:888;23071:31;;;;;;;;;;;;;;21999:1111;;;;:::o;5255:191::-;5329:16;5348:6;;;;;;;;;;;5329:25;;5374:8;5365:6;;:17;;;;;;;;;;;;;;;;;;5429:8;5398:40;;5419:8;5398:40;;;;;;;;;;;;5318:128;5255:191;:::o;5707:115::-;5767:4;5813:1;5791:7;:19;;;:23;5784:30;;5707:115;;;:::o;36283:667::-;36446:4;36483:2;36467:36;;;36504:12;:10;:12::i;:::-;36518:4;36524:7;36533:5;36467:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36463:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36718:1;36701:6;:13;:18;36697:235;;;36747:40;;;;;;;;;;;;;;36697:235;36890:6;36884:13;36875:6;36871:2;36867:15;36860:38;36463:480;36596:45;;;36586:55;;;:6;:55;;;;36579:62;;;36283:667;;;;;;:::o;38090:104::-;38150:13;38179:9;38172:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38090:104;:::o;1533:534::-;1589:13;1630:1;1621:5;:10;1617:53;;;1648:10;;;;;;;;;;;;;;;;;;;;;1617:53;1680:12;1695:5;1680:20;;1711:14;1736:78;1751:1;1743:4;:9;1736:78;;1769:8;;;;;:::i;:::-;;;;1800:2;1792:10;;;;;:::i;:::-;;;1736:78;;;1824:19;1856:6;1846:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1824:39;;1874:154;1890:1;1881:5;:10;1874:154;;1918:1;1908:11;;;;;:::i;:::-;;;1985:2;1977:5;:10;;;;:::i;:::-;1964:2;:24;;;;:::i;:::-;1951:39;;1934:6;1941;1934:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2014:2;2005:11;;;;;:::i;:::-;;;1874:154;;;2052:6;2038:21;;;;;1533:534;;;;:::o;27590:1749::-;27713:20;27736:13;;27713:36;;27778:1;27764:16;;:2;:16;;;27760:48;;;27789:19;;;;;;;;;;;;;;27760:48;27835:1;27823:8;:13;27819:44;;;27845:18;;;;;;;;;;;;;;27819:44;27876:61;27906:1;27910:2;27914:12;27928:8;27876:21;:61::i;:::-;28249:8;28214:12;:16;28227:2;28214:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28313:8;28273:12;:16;28286:2;28273:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28372:2;28339:11;:25;28351:12;28339:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;28439:15;28389:11;:25;28401:12;28389:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;28472:20;28495:12;28472:35;;28522:11;28551:8;28536:12;:23;28522:37;;28580:15;:2;:13;;;:15::i;:::-;28576:631;;;28616:313;28672:12;28668:2;28647:38;;28664:1;28647:38;;;;;;;;;;;;28713:69;28752:1;28756:2;28760:14;;;;;;28776:5;28713:30;:69::i;:::-;28708:174;;28818:40;;;;;;;;;;;;;;28708:174;28924:3;28909:12;:18;28616:313;;29010:12;28993:13;;:29;28989:43;;29024:8;;;28989:43;28576:631;;;29073:119;29129:14;;;;;;29125:2;29104:40;;29121:1;29104:40;;;;;;;;;;;;29187:3;29172:12;:18;29073:119;;28576:631;29237:12;29221:13;:28;;;;28189:1072;;29271:60;29300:1;29304:2;29308:12;29322:8;29271:20;:60::i;:::-;27702:1637;27590:1749;;;:::o;36961:159::-;;;;;:::o;37130:158::-;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:474::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:53;7808:7;7799:6;7788:9;7784:22;7763:53;:::i;:::-;7753:63;;7709:117;7865:2;7891:53;7936:7;7927:6;7916:9;7912:22;7891:53;:::i;:::-;7881:63;;7836:118;7487:474;;;;;:::o;7967:179::-;8036:10;8057:46;8099:3;8091:6;8057:46;:::i;:::-;8135:4;8130:3;8126:14;8112:28;;7967:179;;;;:::o;8152:118::-;8239:24;8257:5;8239:24;:::i;:::-;8234:3;8227:37;8152:118;;:::o;8306:732::-;8425:3;8454:54;8502:5;8454:54;:::i;:::-;8524:86;8603:6;8598:3;8524:86;:::i;:::-;8517:93;;8634:56;8684:5;8634:56;:::i;:::-;8713:7;8744:1;8729:284;8754:6;8751:1;8748:13;8729:284;;;8830:6;8824:13;8857:63;8916:3;8901:13;8857:63;:::i;:::-;8850:70;;8943:60;8996:6;8943:60;:::i;:::-;8933:70;;8789:224;8776:1;8773;8769:9;8764:14;;8729:284;;;8733:14;9029:3;9022:10;;8430:608;;;8306:732;;;;:::o;9044:109::-;9125:21;9140:5;9125:21;:::i;:::-;9120:3;9113:34;9044:109;;:::o;9159:360::-;9245:3;9273:38;9305:5;9273:38;:::i;:::-;9327:70;9390:6;9385:3;9327:70;:::i;:::-;9320:77;;9406:52;9451:6;9446:3;9439:4;9432:5;9428:16;9406:52;:::i;:::-;9483:29;9505:6;9483:29;:::i;:::-;9478:3;9474:39;9467:46;;9249:270;9159:360;;;;:::o;9525:364::-;9613:3;9641:39;9674:5;9641:39;:::i;:::-;9696:71;9760:6;9755:3;9696:71;:::i;:::-;9689:78;;9776:52;9821:6;9816:3;9809:4;9802:5;9798:16;9776:52;:::i;:::-;9853:29;9875:6;9853:29;:::i;:::-;9848:3;9844:39;9837:46;;9617:272;9525:364;;;;:::o;9895:377::-;10001:3;10029:39;10062:5;10029:39;:::i;:::-;10084:89;10166:6;10161:3;10084:89;:::i;:::-;10077:96;;10182:52;10227:6;10222:3;10215:4;10208:5;10204:16;10182:52;:::i;:::-;10259:6;10254:3;10250:16;10243:23;;10005:267;9895:377;;;;:::o;10302:845::-;10405:3;10442:5;10436:12;10471:36;10497:9;10471:36;:::i;:::-;10523:89;10605:6;10600:3;10523:89;:::i;:::-;10516:96;;10643:1;10632:9;10628:17;10659:1;10654:137;;;;10805:1;10800:341;;;;10621:520;;10654:137;10738:4;10734:9;10723;10719:25;10714:3;10707:38;10774:6;10769:3;10765:16;10758:23;;10654:137;;10800:341;10867:38;10899:5;10867:38;:::i;:::-;10927:1;10941:154;10955:6;10952:1;10949:13;10941:154;;;11029:7;11023:14;11019:1;11014:3;11010:11;11003:35;11079:1;11070:7;11066:15;11055:26;;10977:4;10974:1;10970:12;10965:17;;10941:154;;;11124:6;11119:3;11115:16;11108:23;;10807:334;;10621:520;;10409:738;;10302:845;;;;:::o;11153:366::-;11295:3;11316:67;11380:2;11375:3;11316:67;:::i;:::-;11309:74;;11392:93;11481:3;11392:93;:::i;:::-;11510:2;11505:3;11501:12;11494:19;;11153:366;;;:::o;11525:::-;11667:3;11688:67;11752:2;11747:3;11688:67;:::i;:::-;11681:74;;11764:93;11853:3;11764:93;:::i;:::-;11882:2;11877:3;11873:12;11866:19;;11525:366;;;:::o;11897:::-;12039:3;12060:67;12124:2;12119:3;12060:67;:::i;:::-;12053:74;;12136:93;12225:3;12136:93;:::i;:::-;12254:2;12249:3;12245:12;12238:19;;11897:366;;;:::o;12269:::-;12411:3;12432:67;12496:2;12491:3;12432:67;:::i;:::-;12425:74;;12508:93;12597:3;12508:93;:::i;:::-;12626:2;12621:3;12617:12;12610:19;;12269:366;;;:::o;12641:::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12641:366;;;:::o;13013:::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13013:366;;;:::o;13385:::-;13527:3;13548:67;13612:2;13607:3;13548:67;:::i;:::-;13541:74;;13624:93;13713:3;13624:93;:::i;:::-;13742:2;13737:3;13733:12;13726:19;;13385:366;;;:::o;13757:::-;13899:3;13920:67;13984:2;13979:3;13920:67;:::i;:::-;13913:74;;13996:93;14085:3;13996:93;:::i;:::-;14114:2;14109:3;14105:12;14098:19;;13757:366;;;:::o;14129:398::-;14288:3;14309:83;14390:1;14385:3;14309:83;:::i;:::-;14302:90;;14401:93;14490:3;14401:93;:::i;:::-;14519:1;14514:3;14510:11;14503:18;;14129:398;;;:::o;14533:366::-;14675:3;14696:67;14760:2;14755:3;14696:67;:::i;:::-;14689:74;;14772:93;14861:3;14772:93;:::i;:::-;14890:2;14885:3;14881:12;14874:19;;14533:366;;;:::o;14905:::-;15047:3;15068:67;15132:2;15127:3;15068:67;:::i;:::-;15061:74;;15144:93;15233:3;15144:93;:::i;:::-;15262:2;15257:3;15253:12;15246:19;;14905:366;;;:::o;15277:::-;15419:3;15440:67;15504:2;15499:3;15440:67;:::i;:::-;15433:74;;15516:93;15605:3;15516:93;:::i;:::-;15634:2;15629:3;15625:12;15618:19;;15277:366;;;:::o;15649:::-;15791:3;15812:67;15876:2;15871:3;15812:67;:::i;:::-;15805:74;;15888:93;15977:3;15888:93;:::i;:::-;16006:2;16001:3;15997:12;15990:19;;15649:366;;;:::o;16021:::-;16163:3;16184:67;16248:2;16243:3;16184:67;:::i;:::-;16177:74;;16260:93;16349:3;16260:93;:::i;:::-;16378:2;16373:3;16369:12;16362:19;;16021:366;;;:::o;16393:108::-;16470:24;16488:5;16470:24;:::i;:::-;16465:3;16458:37;16393:108;;:::o;16507:118::-;16594:24;16612:5;16594:24;:::i;:::-;16589:3;16582:37;16507:118;;:::o;16631:589::-;16856:3;16878:95;16969:3;16960:6;16878:95;:::i;:::-;16871:102;;16990:95;17081:3;17072:6;16990:95;:::i;:::-;16983:102;;17102:92;17190:3;17181:6;17102:92;:::i;:::-;17095:99;;17211:3;17204:10;;16631:589;;;;;;:::o;17226:379::-;17410:3;17432:147;17575:3;17432:147;:::i;:::-;17425:154;;17596:3;17589:10;;17226:379;;;:::o;17611:222::-;17704:4;17742:2;17731:9;17727:18;17719:26;;17755:71;17823:1;17812:9;17808:17;17799:6;17755:71;:::i;:::-;17611:222;;;;:::o;17839:640::-;18034:4;18072:3;18061:9;18057:19;18049:27;;18086:71;18154:1;18143:9;18139:17;18130:6;18086:71;:::i;:::-;18167:72;18235:2;18224:9;18220:18;18211:6;18167:72;:::i;:::-;18249;18317:2;18306:9;18302:18;18293:6;18249:72;:::i;:::-;18368:9;18362:4;18358:20;18353:2;18342:9;18338:18;18331:48;18396:76;18467:4;18458:6;18396:76;:::i;:::-;18388:84;;17839:640;;;;;;;:::o;18485:373::-;18628:4;18666:2;18655:9;18651:18;18643:26;;18715:9;18709:4;18705:20;18701:1;18690:9;18686:17;18679:47;18743:108;18846:4;18837:6;18743:108;:::i;:::-;18735:116;;18485:373;;;;:::o;18864:210::-;18951:4;18989:2;18978:9;18974:18;18966:26;;19002:65;19064:1;19053:9;19049:17;19040:6;19002:65;:::i;:::-;18864:210;;;;:::o;19080:313::-;19193:4;19231:2;19220:9;19216:18;19208:26;;19280:9;19274:4;19270:20;19266:1;19255:9;19251:17;19244:47;19308:78;19381:4;19372:6;19308:78;:::i;:::-;19300:86;;19080:313;;;;:::o;19399:419::-;19565:4;19603:2;19592:9;19588:18;19580:26;;19652:9;19646:4;19642:20;19638:1;19627:9;19623:17;19616:47;19680:131;19806:4;19680:131;:::i;:::-;19672:139;;19399:419;;;:::o;19824:::-;19990:4;20028:2;20017:9;20013:18;20005:26;;20077:9;20071:4;20067:20;20063:1;20052:9;20048:17;20041:47;20105:131;20231:4;20105:131;:::i;:::-;20097:139;;19824:419;;;:::o;20249:::-;20415:4;20453:2;20442:9;20438:18;20430:26;;20502:9;20496:4;20492:20;20488:1;20477:9;20473:17;20466:47;20530:131;20656:4;20530:131;:::i;:::-;20522:139;;20249:419;;;:::o;20674:::-;20840:4;20878:2;20867:9;20863:18;20855:26;;20927:9;20921:4;20917:20;20913:1;20902:9;20898:17;20891:47;20955:131;21081:4;20955:131;:::i;:::-;20947:139;;20674:419;;;:::o;21099:::-;21265:4;21303:2;21292:9;21288:18;21280:26;;21352:9;21346:4;21342:20;21338:1;21327:9;21323:17;21316:47;21380:131;21506:4;21380:131;:::i;:::-;21372:139;;21099:419;;;:::o;21524:::-;21690:4;21728:2;21717:9;21713:18;21705:26;;21777:9;21771:4;21767:20;21763:1;21752:9;21748:17;21741:47;21805:131;21931:4;21805:131;:::i;:::-;21797:139;;21524:419;;;:::o;21949:::-;22115:4;22153:2;22142:9;22138:18;22130:26;;22202:9;22196:4;22192:20;22188:1;22177:9;22173:17;22166:47;22230:131;22356:4;22230:131;:::i;:::-;22222:139;;21949:419;;;:::o;22374:::-;22540:4;22578:2;22567:9;22563:18;22555:26;;22627:9;22621:4;22617:20;22613:1;22602:9;22598:17;22591:47;22655:131;22781:4;22655:131;:::i;:::-;22647:139;;22374:419;;;:::o;22799:::-;22965:4;23003:2;22992:9;22988:18;22980:26;;23052:9;23046:4;23042:20;23038:1;23027:9;23023:17;23016:47;23080:131;23206:4;23080:131;:::i;:::-;23072:139;;22799:419;;;:::o;23224:::-;23390:4;23428:2;23417:9;23413:18;23405:26;;23477:9;23471:4;23467:20;23463:1;23452:9;23448:17;23441:47;23505:131;23631:4;23505:131;:::i;:::-;23497:139;;23224:419;;;:::o;23649:::-;23815:4;23853:2;23842:9;23838:18;23830:26;;23902:9;23896:4;23892:20;23888:1;23877:9;23873:17;23866:47;23930:131;24056:4;23930:131;:::i;:::-;23922:139;;23649:419;;;:::o;24074:::-;24240:4;24278:2;24267:9;24263:18;24255:26;;24327:9;24321:4;24317:20;24313:1;24302:9;24298:17;24291:47;24355:131;24481:4;24355:131;:::i;:::-;24347:139;;24074:419;;;:::o;24499:::-;24665:4;24703:2;24692:9;24688:18;24680:26;;24752:9;24746:4;24742:20;24738:1;24727:9;24723:17;24716:47;24780:131;24906:4;24780:131;:::i;:::-;24772:139;;24499:419;;;:::o;24924:222::-;25017:4;25055:2;25044:9;25040:18;25032:26;;25068:71;25136:1;25125:9;25121:17;25112:6;25068:71;:::i;:::-;24924:222;;;;:::o;25152:129::-;25186:6;25213:20;;:::i;:::-;25203:30;;25242:33;25270:4;25262:6;25242:33;:::i;:::-;25152:129;;;:::o;25287:75::-;25320:6;25353:2;25347:9;25337:19;;25287:75;:::o;25368:307::-;25429:4;25519:18;25511:6;25508:30;25505:56;;;25541:18;;:::i;:::-;25505:56;25579:29;25601:6;25579:29;:::i;:::-;25571:37;;25663:4;25657;25653:15;25645:23;;25368:307;;;:::o;25681:308::-;25743:4;25833:18;25825:6;25822:30;25819:56;;;25855:18;;:::i;:::-;25819:56;25893:29;25915:6;25893:29;:::i;:::-;25885:37;;25977:4;25971;25967:15;25959:23;;25681:308;;;:::o;25995:132::-;26062:4;26085:3;26077:11;;26115:4;26110:3;26106:14;26098:22;;25995:132;;;:::o;26133:141::-;26182:4;26205:3;26197:11;;26228:3;26225:1;26218:14;26262:4;26259:1;26249:18;26241:26;;26133:141;;;:::o;26280:114::-;26347:6;26381:5;26375:12;26365:22;;26280:114;;;:::o;26400:98::-;26451:6;26485:5;26479:12;26469:22;;26400:98;;;:::o;26504:99::-;26556:6;26590:5;26584:12;26574:22;;26504:99;;;:::o;26609:113::-;26679:4;26711;26706:3;26702:14;26694:22;;26609:113;;;:::o;26728:184::-;26827:11;26861:6;26856:3;26849:19;26901:4;26896:3;26892:14;26877:29;;26728:184;;;;:::o;26918:168::-;27001:11;27035:6;27030:3;27023:19;27075:4;27070:3;27066:14;27051:29;;26918:168;;;;:::o;27092:147::-;27193:11;27230:3;27215:18;;27092:147;;;;:::o;27245:169::-;27329:11;27363:6;27358:3;27351:19;27403:4;27398:3;27394:14;27379:29;;27245:169;;;;:::o;27420:148::-;27522:11;27559:3;27544:18;;27420:148;;;;:::o;27574:305::-;27614:3;27633:20;27651:1;27633:20;:::i;:::-;27628:25;;27667:20;27685:1;27667:20;:::i;:::-;27662:25;;27821:1;27753:66;27749:74;27746:1;27743:81;27740:107;;;27827:18;;:::i;:::-;27740:107;27871:1;27868;27864:9;27857:16;;27574:305;;;;:::o;27885:185::-;27925:1;27942:20;27960:1;27942:20;:::i;:::-;27937:25;;27976:20;27994:1;27976:20;:::i;:::-;27971:25;;28015:1;28005:35;;28020:18;;:::i;:::-;28005:35;28062:1;28059;28055:9;28050:14;;27885:185;;;;:::o;28076:348::-;28116:7;28139:20;28157:1;28139:20;:::i;:::-;28134:25;;28173:20;28191:1;28173:20;:::i;:::-;28168:25;;28361:1;28293:66;28289:74;28286:1;28283:81;28278:1;28271:9;28264:17;28260:105;28257:131;;;28368:18;;:::i;:::-;28257:131;28416:1;28413;28409:9;28398:20;;28076:348;;;;:::o;28430:191::-;28470:4;28490:20;28508:1;28490:20;:::i;:::-;28485:25;;28524:20;28542:1;28524:20;:::i;:::-;28519:25;;28563:1;28560;28557:8;28554:34;;;28568:18;;:::i;:::-;28554:34;28613:1;28610;28606:9;28598:17;;28430:191;;;;:::o;28627:96::-;28664:7;28693:24;28711:5;28693:24;:::i;:::-;28682:35;;28627:96;;;:::o;28729:90::-;28763:7;28806:5;28799:13;28792:21;28781:32;;28729:90;;;:::o;28825:149::-;28861:7;28901:66;28894:5;28890:78;28879:89;;28825:149;;;:::o;28980:126::-;29017:7;29057:42;29050:5;29046:54;29035:65;;28980:126;;;:::o;29112:77::-;29149:7;29178:5;29167:16;;29112:77;;;:::o;29195:154::-;29279:6;29274:3;29269;29256:30;29341:1;29332:6;29327:3;29323:16;29316:27;29195:154;;;:::o;29355:307::-;29423:1;29433:113;29447:6;29444:1;29441:13;29433:113;;;29532:1;29527:3;29523:11;29517:18;29513:1;29508:3;29504:11;29497:39;29469:2;29466:1;29462:10;29457:15;;29433:113;;;29564:6;29561:1;29558:13;29555:101;;;29644:1;29635:6;29630:3;29626:16;29619:27;29555:101;29404:258;29355:307;;;:::o;29668:320::-;29712:6;29749:1;29743:4;29739:12;29729:22;;29796:1;29790:4;29786:12;29817:18;29807:81;;29873:4;29865:6;29861:17;29851:27;;29807:81;29935:2;29927:6;29924:14;29904:18;29901:38;29898:84;;;29954:18;;:::i;:::-;29898:84;29719:269;29668:320;;;:::o;29994:281::-;30077:27;30099:4;30077:27;:::i;:::-;30069:6;30065:40;30207:6;30195:10;30192:22;30171:18;30159:10;30156:34;30153:62;30150:88;;;30218:18;;:::i;:::-;30150:88;30258:10;30254:2;30247:22;30037:238;29994:281;;:::o;30281:233::-;30320:3;30343:24;30361:5;30343:24;:::i;:::-;30334:33;;30389:66;30382:5;30379:77;30376:103;;;30459:18;;:::i;:::-;30376:103;30506:1;30499:5;30495:13;30488:20;;30281:233;;;:::o;30520:176::-;30552:1;30569:20;30587:1;30569:20;:::i;:::-;30564:25;;30603:20;30621:1;30603:20;:::i;:::-;30598:25;;30642:1;30632:35;;30647:18;;:::i;:::-;30632:35;30688:1;30685;30681:9;30676:14;;30520:176;;;;:::o;30702:180::-;30750:77;30747:1;30740:88;30847:4;30844:1;30837:15;30871:4;30868:1;30861:15;30888:180;30936:77;30933:1;30926:88;31033:4;31030:1;31023:15;31057:4;31054:1;31047:15;31074:180;31122:77;31119:1;31112:88;31219:4;31216:1;31209:15;31243:4;31240:1;31233:15;31260:180;31308:77;31305:1;31298:88;31405:4;31402:1;31395:15;31429:4;31426:1;31419:15;31446:180;31494:77;31491:1;31484:88;31591:4;31588:1;31581:15;31615:4;31612:1;31605:15;31632:117;31741:1;31738;31731:12;31755:117;31864:1;31861;31854:12;31878:117;31987:1;31984;31977:12;32001:117;32110:1;32107;32100:12;32124:102;32165:6;32216:2;32212:7;32207:2;32200:5;32196:14;32192:28;32182:38;;32124:102;;;:::o;32232:225::-;32372:34;32368:1;32360:6;32356:14;32349:58;32441:8;32436:2;32428:6;32424:15;32417:33;32232:225;:::o;32463:180::-;32603:32;32599:1;32591:6;32587:14;32580:56;32463:180;:::o;32649:181::-;32789:33;32785:1;32777:6;32773:14;32766:57;32649:181;:::o;32836:175::-;32976:27;32972:1;32964:6;32960:14;32953:51;32836:175;:::o;33017:178::-;33157:30;33153:1;33145:6;33141:14;33134:54;33017:178;:::o;33201:176::-;33341:28;33337:1;33329:6;33325:14;33318:52;33201:176;:::o;33383:182::-;33523:34;33519:1;33511:6;33507:14;33500:58;33383:182;:::o;33571:173::-;33711:25;33707:1;33699:6;33695:14;33688:49;33571:173;:::o;33750:114::-;;:::o;33870:224::-;34010:34;34006:1;33998:6;33994:14;33987:58;34079:7;34074:2;34066:6;34062:15;34055:32;33870:224;:::o;34100:221::-;34240:34;34236:1;34228:6;34224:14;34217:58;34309:4;34304:2;34296:6;34292:15;34285:29;34100:221;:::o;34327:181::-;34467:33;34463:1;34455:6;34451:14;34444:57;34327:181;:::o;34514:235::-;34654:34;34650:1;34642:6;34638:14;34631:58;34723:18;34718:2;34710:6;34706:15;34699:43;34514:235;:::o;34755:169::-;34895:21;34891:1;34883:6;34879:14;34872:45;34755:169;:::o;34930:122::-;35003:24;35021:5;35003:24;:::i;:::-;34996:5;34993:35;34983:63;;35042:1;35039;35032:12;34983:63;34930:122;:::o;35058:116::-;35128:21;35143:5;35128:21;:::i;:::-;35121:5;35118:32;35108:60;;35164:1;35161;35154:12;35108:60;35058:116;:::o;35180:120::-;35252:23;35269:5;35252:23;:::i;:::-;35245:5;35242:34;35232:62;;35290:1;35287;35280:12;35232:62;35180:120;:::o;35306:122::-;35379:24;35397:5;35379:24;:::i;:::-;35372:5;35369:35;35359:63;;35418:1;35415;35408:12;35359:63;35306:122;:::o

Swarm Source

ipfs://8e9c4689925f0018c7ea56f2ad8ba8b7c2cbddb6c2d7b2382ebad3d77f5e8354
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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