ETH Price: $3,376.33 (-1.16%)
Gas: 11 Gwei

Token

KINGSGALA (Kings)
 

Overview

Max Total Supply

3,600 Kings

Holders

662

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
525960.eth
Balance
6 Kings
0x97013995b4866f7279e2bf6dbd7677529b21a762
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:
kingsGala

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-29
*/

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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


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



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @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/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: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol



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





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





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



pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

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

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

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

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


pragma solidity ^0.8.0;

contract kingsGala is ERC721Enumerable, Ownable {
    using Strings for uint256;
    uint256 public PRICE = 0 ether;
    
    uint256 public MAX_KINGSGALA = 9999;
    uint256 public MAX_TEAMMINT = 33;
    uint256 public MAX_PRESALE = 3333;
    uint256 public MAX_PER_MINT = 15;
    uint256 public MAX_PRESALE_MINT = 0;
    uint256 public MAX_PRESALE_WALLET = 0;
    address public constant founderAddress = 0x33a7dBC18c618a3202D1E8E788846399088eaF85;
    address public constant INCOOOMAddress = 0x906642380fD9B7AA726BCe9c6AbeE7378396061B;
    uint256 public numkingsgalaMinted;
    string public baseTokenURI = "https://racecar.mypinata.cloud/ipfs/QmSrgnBGG5jmbaymzKHHJaVrsfxfVvQHqQQDk4dZ4TS4Mz/";
    bool public teamMintStarted = true;
    bool public presaleStarted = false;
    bool public pause = true;
    
    mapping(address => bool) private _presaleEligible;
    mapping(address => uint256) private _totalClaimed;

    event KingsMint(address minter, uint256 amountOfkings);
    
    constructor() ERC721("KINGSGALA", "Kings") {}
    
    IERC721 token = IERC721(INCOOOMAddress);

    
    function toggleTeamMintStarted() external onlyOwner {
       teamMintStarted = !teamMintStarted;
    }
    
    function togglePresaleStarted() external onlyOwner {
        presaleStarted = !presaleStarted;
        PRICE = .011 ether;
    }
    
    
    function togglePause() external onlyOwner {
        pause = !pause;
    }
    
    function setbaseTokenURI(string memory baseURI) public onlyOwner returns (string memory) {
        baseTokenURI = baseURI;
        return baseTokenURI;
    }
    
    function setPrice(uint256 inPrice) public onlyOwner returns (uint256) {
        PRICE = inPrice;
        return PRICE;
    }
    
    function checkBal(address owner) external view returns (uint256) {
        uint256 currentBal = address(this).balance;
        return currentBal;
    }
    
    function checkPresaleBal(address addr) public view returns (uint256) {
        uint256 presaleBal = 0;
        if (_presaleEligible[addr] == true) {
                presaleBal = 1 + token.balanceOf(addr);
            } else {
                presaleBal = token.balanceOf(addr);
            }
        return presaleBal;
    }
    
    function addToPresale(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            _presaleEligible[addresses[i]] = true;

            _totalClaimed[addresses[i]] > 0 ? _totalClaimed[addresses[i]] : 0;
        }
    }

    function checkPresaleEligiblity(address addr) external view returns (bool) {
        return _presaleEligible[addr];
    }

    function amountClaimedBy(address owner) external view returns (uint256) {
        require(owner != address(0), "Cannot add null address");

        return _totalClaimed[owner];
    }
    
    function teamMint(uint256 amountOfkings) external payable onlyOwner{
        require(teamMintStarted, "Team minting not started.");
        require(totalSupply() < MAX_TEAMMINT, "All team tokens minted.");
        require(totalSupply() + amountOfkings <= MAX_TEAMMINT, "Minting would exceed team mint supply!");
        require(PRICE * amountOfkings == msg.value, "ETH amount is incorrect.");
        
        for (uint256 i = 0; i < amountOfkings; i++) {
            uint256 tokenId = numkingsgalaMinted + 1;

            numkingsgalaMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit KingsMint(msg.sender, amountOfkings);
    }
        
    
    function mint(uint256 amountOfkings) external payable {
        require(pause == false);
        
        if (presaleStarted == true) {
            PRICE = .011 ether;
            if (_presaleEligible[msg.sender] == true) {
                MAX_PRESALE_MINT = 1 + token.balanceOf(msg.sender);
                MAX_PRESALE_WALLET = 1 + token.balanceOf(msg.sender);
            } else {
                MAX_PRESALE_MINT = token.balanceOf(msg.sender);
                MAX_PRESALE_WALLET = token.balanceOf(msg.sender);
            }
            require(_presaleEligible[msg.sender] || token.balanceOf(msg.sender) > 0, "You are not eligible for the presale!");
            require(amountOfkings <= MAX_PRESALE_MINT, "You are over your max presale mint amount");
            require(totalSupply() < MAX_PRESALE, "All presale tokens minted.");
            require(totalSupply() + amountOfkings <= MAX_PRESALE, "Minting would exceed presale supply!");
            require(balanceOf(msg.sender) < MAX_PRESALE_WALLET, "You have minted your maximum presale amount.");
        }
        
        if (presaleStarted == false) {
            PRICE = .033 ether;
            require(totalSupply() < MAX_KINGSGALA, "All tokens have been minted.");
            require(amountOfkings <= MAX_PER_MINT, "You can only mint 15 King's Gala per transaction.");
            require(totalSupply() + amountOfkings <= MAX_KINGSGALA, "Minting would exceed max supply!");
        }
        
        require(amountOfkings > 0, "Must mint at least one Mushrohm.");
        require(PRICE * amountOfkings == msg.value, "ETH amount is incorrect.");
        
        for (uint256 i = 0; i < amountOfkings; i++) {
            uint256 tokenId = numkingsgalaMinted + 1;

            numkingsgalaMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit KingsMint(msg.sender, amountOfkings);
    }
    
    function withdrawAll() public onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "Insufficent balance");
        _widthdraw(founderAddress, balance);
    }
    
    function _widthdraw(address _address, uint256 _amount) private {
        (bool success, ) = _address.call{ value: _amount }("");
        require(success, "Failed to widthdraw Ether");
    }
    
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return bytes(baseTokenURI).length > 0 ? string(abi.encodePacked(baseTokenURI, tokenId.toString(), ".json")) : "";
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfkings","type":"uint256"}],"name":"KingsMint","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":"INCOOOMAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_KINGSGALA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRESALE_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRESALE_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TEAMMINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"amountClaimedBy","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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"checkBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkPresaleBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkPresaleEligiblity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"founderAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"amountOfkings","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numkingsgalaMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inPrice","type":"uint256"}],"name":"setPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setbaseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"amountOfkings","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"teamMintStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePresaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleTeamMintStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600b5561270f600c556021600d55610d05600e55600f80556000601055600060115560405180608001604052806053815260200162006003605391396013908051906020019062000059929190620002a2565b506001601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff0219169083151502179055506001601460026101000a81548160ff02191690831515021790555073906642380fd9b7aa726bce9c6abee7378396061b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200010d57600080fd5b506040518060400160405280600981526020017f4b494e475347414c4100000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4b696e6773000000000000000000000000000000000000000000000000000000815250816000908051906020019062000192929190620002a2565b508060019080519060200190620001ab929190620002a2565b505050620001ce620001c2620001d460201b60201c565b620001dc60201b60201c565b620003b7565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002b09062000352565b90600052602060002090601f016020900481019282620002d4576000855562000320565b82601f10620002ef57805160ff191683800117855562000320565b8280016001018555821562000320579182015b828111156200031f57825182559160200191906001019062000302565b5b5090506200032f919062000333565b5090565b5b808211156200034e57600081600090555060010162000334565b5090565b600060028204905060018216806200036b57607f821691505b6020821081141562000382576200038162000388565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615c3c80620003c76000396000f3fe60806040526004361061027d5760003560e01c806370a082311161014f578063a70f1fbe116100c1578063c4ae31681161007a578063c4ae3168146109ac578063c87b56dd146109c3578063d547cfb714610a00578063e985e9c514610a2b578063ed1fc2a214610a68578063f2fde38b14610a7f5761027d565b8063a70f1fbe1461089c578063ae70da67146108c7578063aef6ee1f14610904578063b1dc63ac1461092d578063b528dfb614610958578063b88d4fde146109835761027d565b80638da5cb5b116101135780638da5cb5b1461079957806391b7f5ed146107c457806395d89b41146108015780639cbcf68f1461082c578063a0712d6814610857578063a22cb465146108735761027d565b806370a08231146106d8578063715018a6146107155780638456cb591461072c578063853828b6146107575780638d859f3e1461076e5761027d565b80632b4403bb116101f357806346bb2833116101ac57806346bb2833146105b45780634d4c4e99146105df5780634f6ccce71461060a578063584a0927146106475780635a7dab1d146106845780636352211e1461069b5761027d565b80632b4403bb1461049f5780632f745c59146104ca5780632fbba1151461050757806337c0df0c146105235780633a636c9c1461056057806342842e0e1461058b5761027d565b8063095ea7b311610245578063095ea7b31461037d57806309d42b30146103a657806318160ddd146103d1578063191f65ac146103fc5780631978f4691461043957806323b872dd146104765761027d565b806301ffc9a71461028257806304549d6f146102bf57806306fdde03146102ea578063081812fc14610315578063090f279214610352575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190614195565b610aa8565b6040516102b691906149a1565b60405180910390f35b3480156102cb57600080fd5b506102d4610b22565b6040516102e191906149a1565b60405180910390f35b3480156102f657600080fd5b506102ff610b35565b60405161030c91906149bc565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190614238565b610bc7565b6040516103499190614911565b60405180910390f35b34801561035e57600080fd5b50610367610c4c565b6040516103749190614911565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190614108565b610c64565b005b3480156103b257600080fd5b506103bb610d7c565b6040516103c89190614e1e565b60405180910390f35b3480156103dd57600080fd5b506103e6610d82565b6040516103f39190614e1e565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e9190613f85565b610d8f565b60405161043091906149a1565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190613f85565b610de5565b60405161046d9190614e1e565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613ff2565b610e9d565b005b3480156104ab57600080fd5b506104b4610efd565b6040516104c191906149a1565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190614108565b610f10565b6040516104fe9190614e1e565b60405180910390f35b610521600480360381019061051c9190614238565b610fb5565b005b34801561052f57600080fd5b5061054a600480360381019061054591906141ef565b61125b565b60405161055791906149bc565b60405180910390f35b34801561056c57600080fd5b50610575611382565b6040516105829190614e1e565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad9190613ff2565b611388565b005b3480156105c057600080fd5b506105c96113a8565b6040516105d69190614911565b60405180910390f35b3480156105eb57600080fd5b506105f46113c0565b6040516106019190614e1e565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190614238565b6113c6565b60405161063e9190614e1e565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190613f85565b611437565b60405161067b9190614e1e565b60405180910390f35b34801561069057600080fd5b50610699611446565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190614238565b6114ee565b6040516106cf9190614911565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa9190613f85565b6115a0565b60405161070c9190614e1e565b60405180910390f35b34801561072157600080fd5b5061072a611658565b005b34801561073857600080fd5b506107416116e0565b60405161074e91906149a1565b60405180910390f35b34801561076357600080fd5b5061076c6116f3565b005b34801561077a57600080fd5b506107836117d8565b6040516107909190614e1e565b60405180910390f35b3480156107a557600080fd5b506107ae6117de565b6040516107bb9190614911565b60405180910390f35b3480156107d057600080fd5b506107eb60048036038101906107e69190614238565b611808565b6040516107f89190614e1e565b60405180910390f35b34801561080d57600080fd5b50610816611897565b60405161082391906149bc565b60405180910390f35b34801561083857600080fd5b50610841611929565b60405161084e9190614e1e565b60405180910390f35b610871600480360381019061086c9190614238565b61192f565b005b34801561087f57600080fd5b5061089a600480360381019061089591906140c8565b6121b7565b005b3480156108a857600080fd5b506108b1612338565b6040516108be9190614e1e565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e99190613f85565b61233e565b6040516108fb9190614e1e565b60405180910390f35b34801561091057600080fd5b5061092b60048036038101906109269190614148565b612513565b005b34801561093957600080fd5b506109426127a9565b60405161094f9190614e1e565b60405180910390f35b34801561096457600080fd5b5061096d6127af565b60405161097a9190614e1e565b60405180910390f35b34801561098f57600080fd5b506109aa60048036038101906109a59190614045565b6127b5565b005b3480156109b857600080fd5b506109c1612817565b005b3480156109cf57600080fd5b506109ea60048036038101906109e59190614238565b6128bf565b6040516109f791906149bc565b60405180910390f35b348015610a0c57600080fd5b50610a15612967565b604051610a2291906149bc565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d9190613fb2565b6129f5565b604051610a5f91906149a1565b60405180910390f35b348015610a7457600080fd5b50610a7d612a89565b005b348015610a8b57600080fd5b50610aa66004803603810190610aa19190613f85565b612b3f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b1b5750610b1a82612c37565b5b9050919050565b601460019054906101000a900460ff1681565b606060008054610b44906150ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610b70906150ee565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd282612d19565b610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0890614c3e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b73906642380fd9b7aa726bce9c6abee7378396061b81565b6000610c6f826114ee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790614cfe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cff612d85565b73ffffffffffffffffffffffffffffffffffffffff161480610d2e5750610d2d81610d28612d85565b6129f5565b5b610d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6490614bbe565b60405180910390fd5b610d778383612d8d565b505050565b600f5481565b6000600880549050905090565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d90614d1e565b60405180910390fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610eae610ea8612d85565b82612e46565b610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490614d3e565b60405180910390fd5b610ef8838383612f24565b505050565b601460009054906101000a900460ff1681565b6000610f1b836115a0565b8210610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5390614a3e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610fbd612d85565b73ffffffffffffffffffffffffffffffffffffffff16610fdb6117de565b73ffffffffffffffffffffffffffffffffffffffff1614611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890614c7e565b60405180910390fd5b601460009054906101000a900460ff16611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790614dbe565b60405180910390fd5b600d5461108b610d82565b106110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290614dde565b60405180910390fd5b600d54816110d7610d82565b6110e19190614f23565b1115611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111990614d9e565b60405180910390fd5b3481600b546111319190614faa565b14611171576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116890614dfe565b60405180910390fd5b60005b8181101561121e576000600160125461118d9190614f23565b90506001601260008282546111a29190614f23565b925050819055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f99190614f23565b9250508190555061120a3382613180565b50808061121690615151565b915050611174565b507fc278a04ec3b4e69e5e37f579f5a47b34281fbbeaabc08bd3621695611d8b47fc3382604051611250929190614978565b60405180910390a150565b6060611265612d85565b73ffffffffffffffffffffffffffffffffffffffff166112836117de565b73ffffffffffffffffffffffffffffffffffffffff16146112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090614c7e565b60405180910390fd5b81601390805190602001906112ef929190613d2e565b50601380546112fd906150ee565b80601f0160208091040260200160405190810160405280929190818152602001828054611329906150ee565b80156113765780601f1061134b57610100808354040283529160200191611376565b820191906000526020600020905b81548152906001019060200180831161135957829003601f168201915b50505050509050919050565b60125481565b6113a3838383604051806020016040528060008152506127b5565b505050565b7333a7dbc18c618a3202d1e8e788846399088eaf8581565b600e5481565b60006113d0610d82565b8210611411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140890614d5e565b60405180910390fd5b6008828154811061142557611424615287565b5b90600052602060002001549050919050565b60008047905080915050919050565b61144e612d85565b73ffffffffffffffffffffffffffffffffffffffff1661146c6117de565b73ffffffffffffffffffffffffffffffffffffffff16146114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990614c7e565b60405180910390fd5b601460009054906101000a900460ff1615601460006101000a81548160ff021916908315150217905550565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90614bfe565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890614bde565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611660612d85565b73ffffffffffffffffffffffffffffffffffffffff1661167e6117de565b73ffffffffffffffffffffffffffffffffffffffff16146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb90614c7e565b60405180910390fd5b6116de600061319e565b565b601460029054906101000a900460ff1681565b6116fb612d85565b73ffffffffffffffffffffffffffffffffffffffff166117196117de565b73ffffffffffffffffffffffffffffffffffffffff161461176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176690614c7e565b60405180910390fd5b6000479050600081116117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90614c5e565b60405180910390fd5b6117d57333a7dbc18c618a3202d1e8e788846399088eaf8582613264565b50565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611812612d85565b73ffffffffffffffffffffffffffffffffffffffff166118306117de565b73ffffffffffffffffffffffffffffffffffffffff1614611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90614c7e565b60405180910390fd5b81600b81905550600b549050919050565b6060600180546118a6906150ee565b80601f01602080910402602001604051908101604052809291908181526020018280546118d2906150ee565b801561191f5780601f106118f45761010080835404028352916020019161191f565b820191906000526020600020905b81548152906001019060200180831161190257829003601f168201915b5050505050905090565b600d5481565b60001515601460029054906101000a900460ff1615151461194f57600080fd5b60011515601460019054906101000a900460ff1615151415611f29576627147114878000600b8190555060011515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611b5157601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611a2d9190614911565b60206040518083038186803b158015611a4557600080fd5b505afa158015611a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7d9190614265565b6001611a899190614f23565b601081905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611aea9190614911565b60206040518083038186803b158015611b0257600080fd5b505afa158015611b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3a9190614265565b6001611b469190614f23565b601181905550611cb4565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611bac9190614911565b60206040518083038186803b158015611bc457600080fd5b505afa158015611bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfc9190614265565b601081905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611c5d9190614911565b60206040518083038186803b158015611c7557600080fd5b505afa158015611c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cad9190614265565b6011819055505b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611db657506000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611d649190614911565b60206040518083038186803b158015611d7c57600080fd5b505afa158015611d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db49190614265565b115b611df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dec90614d7e565b60405180910390fd5b601054811115611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190614a1e565b60405180910390fd5b600e54611e45610d82565b10611e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c90614afe565b60405180910390fd5b600e5481611e91610d82565b611e9b9190614f23565b1115611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390614a7e565b60405180910390fd5b601154611ee8336115a0565b10611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90614ade565b60405180910390fd5b5b60001515601460019054906101000a900460ff161515141561203b5766753d533d968000600b81905550600c54611f5e610d82565b10611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9590614b1e565b60405180910390fd5b600f54811115611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda906149de565b60405180910390fd5b600c5481611fef610d82565b611ff99190614f23565b111561203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190614b9e565b60405180910390fd5b5b6000811161207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906149fe565b60405180910390fd5b3481600b5461208d9190614faa565b146120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c490614dfe565b60405180910390fd5b60005b8181101561217a57600060016012546120e99190614f23565b90506001601260008282546120fe9190614f23565b925050819055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121559190614f23565b925050819055506121663382613180565b50808061217290615151565b9150506120d0565b507fc278a04ec3b4e69e5e37f579f5a47b34281fbbeaabc08bd3621695611d8b47fc33826040516121ac929190614978565b60405180910390a150565b6121bf612d85565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561222d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222490614b5e565b60405180910390fd5b806005600061223a612d85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166122e7612d85565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161232c91906149a1565b60405180910390a35050565b60105481565b6000806000905060011515601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561245c57601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016123f99190614911565b60206040518083038186803b15801561241157600080fd5b505afa158015612425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124499190614265565b60016124559190614f23565b905061250a565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016124b79190614911565b60206040518083038186803b1580156124cf57600080fd5b505afa1580156124e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125079190614265565b90505b80915050919050565b61251b612d85565b73ffffffffffffffffffffffffffffffffffffffff166125396117de565b73ffffffffffffffffffffffffffffffffffffffff161461258f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258690614c7e565b60405180910390fd5b60005b828290508110156127a457600073ffffffffffffffffffffffffffffffffffffffff168383838181106125c8576125c7615287565b5b90506020020160208101906125dd9190613f85565b73ffffffffffffffffffffffffffffffffffffffff161415612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b90614d1e565b60405180910390fd5b60016015600085858581811061264d5761264c615287565b5b90506020020160208101906126629190613f85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601660008585858181106126cc576126cb615287565b5b90506020020160208101906126e19190613f85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612728576000612790565b6016600084848481811061273f5761273e615287565b5b90506020020160208101906127549190613f85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b50808061279c90615151565b915050612592565b505050565b600c5481565b60115481565b6127c66127c0612d85565b83612e46565b612805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fc90614d3e565b60405180910390fd5b61281184848484613315565b50505050565b61281f612d85565b73ffffffffffffffffffffffffffffffffffffffff1661283d6117de565b73ffffffffffffffffffffffffffffffffffffffff1614612893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288a90614c7e565b60405180910390fd5b601460029054906101000a900460ff1615601460026101000a81548160ff021916908315150217905550565b60606128ca82612d19565b612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290090614cbe565b60405180910390fd5b600060138054612918906150ee565b9050116129345760405180602001604052806000815250612960565b601361293f83613371565b6040516020016129509291906148cd565b6040516020818303038152906040525b9050919050565b60138054612974906150ee565b80601f01602080910402602001604051908101604052809291908181526020018280546129a0906150ee565b80156129ed5780601f106129c2576101008083540402835291602001916129ed565b820191906000526020600020905b8154815290600101906020018083116129d057829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612a91612d85565b73ffffffffffffffffffffffffffffffffffffffff16612aaf6117de565b73ffffffffffffffffffffffffffffffffffffffff1614612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90614c7e565b60405180910390fd5b601460019054906101000a900460ff1615601460016101000a81548160ff0219169083151502179055506627147114878000600b81905550565b612b47612d85565b73ffffffffffffffffffffffffffffffffffffffff16612b656117de565b73ffffffffffffffffffffffffffffffffffffffff1614612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb290614c7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2290614a9e565b60405180910390fd5b612c348161319e565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d0257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d125750612d11826134d2565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612e00836114ee565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612e5182612d19565b612e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8790614b7e565b60405180910390fd5b6000612e9b836114ee565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f0a57508373ffffffffffffffffffffffffffffffffffffffff16612ef284610bc7565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f1b5750612f1a81856129f5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f44826114ee565b73ffffffffffffffffffffffffffffffffffffffff1614612f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9190614c9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561300a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300190614b3e565b60405180910390fd5b61301583838361353c565b613020600082612d8d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130709190615004565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130c79190614f23565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61319a828260405180602001604052806000815250613650565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161328a906148fc565b60006040518083038185875af1925050503d80600081146132c7576040519150601f19603f3d011682016040523d82523d6000602084013e6132cc565b606091505b5050905080613310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330790614cde565b60405180910390fd5b505050565b613320848484612f24565b61332c848484846136ab565b61336b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336290614a5e565b60405180910390fd5b50505050565b606060008214156133b9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134cd565b600082905060005b600082146133eb5780806133d490615151565b915050600a826133e49190614f79565b91506133c1565b60008167ffffffffffffffff811115613407576134066152b6565b5b6040519080825280601f01601f1916602001820160405280156134395781602001600182028036833780820191505090505b5090505b600085146134c6576001826134529190615004565b9150600a85613461919061519a565b603061346d9190614f23565b60f81b81838151811061348357613482615287565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134bf9190614f79565b945061343d565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613547838383613842565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561358a5761358581613847565b6135c9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146135c8576135c78382613890565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561360c57613607816139fd565b61364b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461364a576136498282613ace565b5b5b505050565b61365a8383613b4d565b61366760008484846136ab565b6136a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369d90614a5e565b60405180910390fd5b505050565b60006136cc8473ffffffffffffffffffffffffffffffffffffffff16613d1b565b15613835578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026136f5612d85565b8786866040518563ffffffff1660e01b8152600401613717949392919061492c565b602060405180830381600087803b15801561373157600080fd5b505af192505050801561376257506040513d601f19601f8201168201806040525081019061375f91906141c2565b60015b6137e5573d8060008114613792576040519150601f19603f3d011682016040523d82523d6000602084013e613797565b606091505b506000815114156137dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d490614a5e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061383a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161389d846115a0565b6138a79190615004565b905060006007600084815260200190815260200160002054905081811461398c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613a119190615004565b9050600060096000848152602001908152602001600020549050600060088381548110613a4157613a40615287565b5b906000526020600020015490508060088381548110613a6357613a62615287565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613ab257613ab1615258565b5b6001900381819060005260206000200160009055905550505050565b6000613ad9836115a0565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bb490614c1e565b60405180910390fd5b613bc681612d19565b15613c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bfd90614abe565b60405180910390fd5b613c126000838361353c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c629190614f23565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613d3a906150ee565b90600052602060002090601f016020900481019282613d5c5760008555613da3565b82601f10613d7557805160ff1916838001178555613da3565b82800160010185558215613da3579182015b82811115613da2578251825591602001919060010190613d87565b5b509050613db09190613db4565b5090565b5b80821115613dcd576000816000905550600101613db5565b5090565b6000613de4613ddf84614e5e565b614e39565b905082815260208101848484011115613e0057613dff6152f4565b5b613e0b8482856150ac565b509392505050565b6000613e26613e2184614e8f565b614e39565b905082815260208101848484011115613e4257613e416152f4565b5b613e4d8482856150ac565b509392505050565b600081359050613e6481615baa565b92915050565b60008083601f840112613e8057613e7f6152ea565b5b8235905067ffffffffffffffff811115613e9d57613e9c6152e5565b5b602083019150836020820283011115613eb957613eb86152ef565b5b9250929050565b600081359050613ecf81615bc1565b92915050565b600081359050613ee481615bd8565b92915050565b600081519050613ef981615bd8565b92915050565b600082601f830112613f1457613f136152ea565b5b8135613f24848260208601613dd1565b91505092915050565b600082601f830112613f4257613f416152ea565b5b8135613f52848260208601613e13565b91505092915050565b600081359050613f6a81615bef565b92915050565b600081519050613f7f81615bef565b92915050565b600060208284031215613f9b57613f9a6152fe565b5b6000613fa984828501613e55565b91505092915050565b60008060408385031215613fc957613fc86152fe565b5b6000613fd785828601613e55565b9250506020613fe885828601613e55565b9150509250929050565b60008060006060848603121561400b5761400a6152fe565b5b600061401986828701613e55565b935050602061402a86828701613e55565b925050604061403b86828701613f5b565b9150509250925092565b6000806000806080858703121561405f5761405e6152fe565b5b600061406d87828801613e55565b945050602061407e87828801613e55565b935050604061408f87828801613f5b565b925050606085013567ffffffffffffffff8111156140b0576140af6152f9565b5b6140bc87828801613eff565b91505092959194509250565b600080604083850312156140df576140de6152fe565b5b60006140ed85828601613e55565b92505060206140fe85828601613ec0565b9150509250929050565b6000806040838503121561411f5761411e6152fe565b5b600061412d85828601613e55565b925050602061413e85828601613f5b565b9150509250929050565b6000806020838503121561415f5761415e6152fe565b5b600083013567ffffffffffffffff81111561417d5761417c6152f9565b5b61418985828601613e6a565b92509250509250929050565b6000602082840312156141ab576141aa6152fe565b5b60006141b984828501613ed5565b91505092915050565b6000602082840312156141d8576141d76152fe565b5b60006141e684828501613eea565b91505092915050565b600060208284031215614205576142046152fe565b5b600082013567ffffffffffffffff811115614223576142226152f9565b5b61422f84828501613f2d565b91505092915050565b60006020828403121561424e5761424d6152fe565b5b600061425c84828501613f5b565b91505092915050565b60006020828403121561427b5761427a6152fe565b5b600061428984828501613f70565b91505092915050565b61429b81615038565b82525050565b6142aa8161504a565b82525050565b60006142bb82614ed5565b6142c58185614eeb565b93506142d58185602086016150bb565b6142de81615303565b840191505092915050565b60006142f482614ee0565b6142fe8185614f07565b935061430e8185602086016150bb565b61431781615303565b840191505092915050565b600061432d82614ee0565b6143378185614f18565b93506143478185602086016150bb565b80840191505092915050565b60008154614360816150ee565b61436a8186614f18565b945060018216600081146143855760018114614396576143c9565b60ff198316865281860193506143c9565b61439f85614ec0565b60005b838110156143c1578154818901526001820191506020810190506143a2565b838801955050505b50505092915050565b60006143df603183614f07565b91506143ea82615314565b604082019050919050565b6000614402602083614f07565b915061440d82615363565b602082019050919050565b6000614425602983614f07565b91506144308261538c565b604082019050919050565b6000614448602b83614f07565b9150614453826153db565b604082019050919050565b600061446b603283614f07565b91506144768261542a565b604082019050919050565b600061448e602483614f07565b915061449982615479565b604082019050919050565b60006144b1602683614f07565b91506144bc826154c8565b604082019050919050565b60006144d4601c83614f07565b91506144df82615517565b602082019050919050565b60006144f7602c83614f07565b915061450282615540565b604082019050919050565b600061451a601a83614f07565b91506145258261558f565b602082019050919050565b600061453d601c83614f07565b9150614548826155b8565b602082019050919050565b6000614560602483614f07565b915061456b826155e1565b604082019050919050565b6000614583601983614f07565b915061458e82615630565b602082019050919050565b60006145a6602c83614f07565b91506145b182615659565b604082019050919050565b60006145c9602083614f07565b91506145d4826156a8565b602082019050919050565b60006145ec603883614f07565b91506145f7826156d1565b604082019050919050565b600061460f602a83614f07565b915061461a82615720565b604082019050919050565b6000614632602983614f07565b915061463d8261576f565b604082019050919050565b6000614655602083614f07565b9150614660826157be565b602082019050919050565b6000614678602c83614f07565b9150614683826157e7565b604082019050919050565b600061469b600583614f18565b91506146a682615836565b600582019050919050565b60006146be601383614f07565b91506146c98261585f565b602082019050919050565b60006146e1602083614f07565b91506146ec82615888565b602082019050919050565b6000614704602983614f07565b915061470f826158b1565b604082019050919050565b6000614727602f83614f07565b915061473282615900565b604082019050919050565b600061474a601983614f07565b91506147558261594f565b602082019050919050565b600061476d602183614f07565b915061477882615978565b604082019050919050565b6000614790600083614efc565b915061479b826159c7565b600082019050919050565b60006147b3601783614f07565b91506147be826159ca565b602082019050919050565b60006147d6603183614f07565b91506147e1826159f3565b604082019050919050565b60006147f9602c83614f07565b915061480482615a42565b604082019050919050565b600061481c602583614f07565b915061482782615a91565b604082019050919050565b600061483f602683614f07565b915061484a82615ae0565b604082019050919050565b6000614862601983614f07565b915061486d82615b2f565b602082019050919050565b6000614885601783614f07565b915061489082615b58565b602082019050919050565b60006148a8601883614f07565b91506148b382615b81565b602082019050919050565b6148c7816150a2565b82525050565b60006148d98285614353565b91506148e58284614322565b91506148f08261468e565b91508190509392505050565b600061490782614783565b9150819050919050565b60006020820190506149266000830184614292565b92915050565b60006080820190506149416000830187614292565b61494e6020830186614292565b61495b60408301856148be565b818103606083015261496d81846142b0565b905095945050505050565b600060408201905061498d6000830185614292565b61499a60208301846148be565b9392505050565b60006020820190506149b660008301846142a1565b92915050565b600060208201905081810360008301526149d681846142e9565b905092915050565b600060208201905081810360008301526149f7816143d2565b9050919050565b60006020820190508181036000830152614a17816143f5565b9050919050565b60006020820190508181036000830152614a3781614418565b9050919050565b60006020820190508181036000830152614a578161443b565b9050919050565b60006020820190508181036000830152614a778161445e565b9050919050565b60006020820190508181036000830152614a9781614481565b9050919050565b60006020820190508181036000830152614ab7816144a4565b9050919050565b60006020820190508181036000830152614ad7816144c7565b9050919050565b60006020820190508181036000830152614af7816144ea565b9050919050565b60006020820190508181036000830152614b178161450d565b9050919050565b60006020820190508181036000830152614b3781614530565b9050919050565b60006020820190508181036000830152614b5781614553565b9050919050565b60006020820190508181036000830152614b7781614576565b9050919050565b60006020820190508181036000830152614b9781614599565b9050919050565b60006020820190508181036000830152614bb7816145bc565b9050919050565b60006020820190508181036000830152614bd7816145df565b9050919050565b60006020820190508181036000830152614bf781614602565b9050919050565b60006020820190508181036000830152614c1781614625565b9050919050565b60006020820190508181036000830152614c3781614648565b9050919050565b60006020820190508181036000830152614c578161466b565b9050919050565b60006020820190508181036000830152614c77816146b1565b9050919050565b60006020820190508181036000830152614c97816146d4565b9050919050565b60006020820190508181036000830152614cb7816146f7565b9050919050565b60006020820190508181036000830152614cd78161471a565b9050919050565b60006020820190508181036000830152614cf78161473d565b9050919050565b60006020820190508181036000830152614d1781614760565b9050919050565b60006020820190508181036000830152614d37816147a6565b9050919050565b60006020820190508181036000830152614d57816147c9565b9050919050565b60006020820190508181036000830152614d77816147ec565b9050919050565b60006020820190508181036000830152614d978161480f565b9050919050565b60006020820190508181036000830152614db781614832565b9050919050565b60006020820190508181036000830152614dd781614855565b9050919050565b60006020820190508181036000830152614df781614878565b9050919050565b60006020820190508181036000830152614e178161489b565b9050919050565b6000602082019050614e3360008301846148be565b92915050565b6000614e43614e54565b9050614e4f8282615120565b919050565b6000604051905090565b600067ffffffffffffffff821115614e7957614e786152b6565b5b614e8282615303565b9050602081019050919050565b600067ffffffffffffffff821115614eaa57614ea96152b6565b5b614eb382615303565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f2e826150a2565b9150614f39836150a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f6e57614f6d6151cb565b5b828201905092915050565b6000614f84826150a2565b9150614f8f836150a2565b925082614f9f57614f9e6151fa565b5b828204905092915050565b6000614fb5826150a2565b9150614fc0836150a2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ff957614ff86151cb565b5b828202905092915050565b600061500f826150a2565b915061501a836150a2565b92508282101561502d5761502c6151cb565b5b828203905092915050565b600061504382615082565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156150d95780820151818401526020810190506150be565b838111156150e8576000848401525b50505050565b6000600282049050600182168061510657607f821691505b6020821081141561511a57615119615229565b5b50919050565b61512982615303565b810181811067ffffffffffffffff82111715615148576151476152b6565b5b80604052505050565b600061515c826150a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561518f5761518e6151cb565b5b600182019050919050565b60006151a5826150a2565b91506151b0836150a2565b9250826151c0576151bf6151fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f596f752063616e206f6e6c79206d696e74203135204b696e6727732047616c6160008201527f20706572207472616e73616374696f6e2e000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374206f6e65204d757368726f686d2e600082015250565b7f596f7520617265206f76657220796f7572206d61782070726573616c65206d6960008201527f6e7420616d6f756e740000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c64206578636565642070726573616c652073757060008201527f706c792100000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f752068617665206d696e74656420796f7572206d6178696d756d2070726560008201527f73616c6520616d6f756e742e0000000000000000000000000000000000000000602082015250565b7f416c6c2070726573616c6520746f6b656e73206d696e7465642e000000000000600082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465642e00000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7921600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f496e737566666963656e742062616c616e636500000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077696474686472617720457468657200000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560008201527f73616c6521000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564207465616d206d696e74207360008201527f7570706c79210000000000000000000000000000000000000000000000000000602082015250565b7f5465616d206d696e74696e67206e6f7420737461727465642e00000000000000600082015250565b7f416c6c207465616d20746f6b656e73206d696e7465642e000000000000000000600082015250565b7f45544820616d6f756e7420697320696e636f72726563742e0000000000000000600082015250565b615bb381615038565b8114615bbe57600080fd5b50565b615bca8161504a565b8114615bd557600080fd5b50565b615be181615056565b8114615bec57600080fd5b50565b615bf8816150a2565b8114615c0357600080fd5b5056fea26469706673582212200f69aed9379b91fa697d2d915e6c5eac547307d7e996320aaecaea8acb0d54fb64736f6c6343000807003368747470733a2f2f726163656361722e6d7970696e6174612e636c6f75642f697066732f516d5372676e424747356a6d6261796d7a4b48484a6156727366786656765148715151446b34645a345453344d7a2f

Deployed Bytecode

0x60806040526004361061027d5760003560e01c806370a082311161014f578063a70f1fbe116100c1578063c4ae31681161007a578063c4ae3168146109ac578063c87b56dd146109c3578063d547cfb714610a00578063e985e9c514610a2b578063ed1fc2a214610a68578063f2fde38b14610a7f5761027d565b8063a70f1fbe1461089c578063ae70da67146108c7578063aef6ee1f14610904578063b1dc63ac1461092d578063b528dfb614610958578063b88d4fde146109835761027d565b80638da5cb5b116101135780638da5cb5b1461079957806391b7f5ed146107c457806395d89b41146108015780639cbcf68f1461082c578063a0712d6814610857578063a22cb465146108735761027d565b806370a08231146106d8578063715018a6146107155780638456cb591461072c578063853828b6146107575780638d859f3e1461076e5761027d565b80632b4403bb116101f357806346bb2833116101ac57806346bb2833146105b45780634d4c4e99146105df5780634f6ccce71461060a578063584a0927146106475780635a7dab1d146106845780636352211e1461069b5761027d565b80632b4403bb1461049f5780632f745c59146104ca5780632fbba1151461050757806337c0df0c146105235780633a636c9c1461056057806342842e0e1461058b5761027d565b8063095ea7b311610245578063095ea7b31461037d57806309d42b30146103a657806318160ddd146103d1578063191f65ac146103fc5780631978f4691461043957806323b872dd146104765761027d565b806301ffc9a71461028257806304549d6f146102bf57806306fdde03146102ea578063081812fc14610315578063090f279214610352575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190614195565b610aa8565b6040516102b691906149a1565b60405180910390f35b3480156102cb57600080fd5b506102d4610b22565b6040516102e191906149a1565b60405180910390f35b3480156102f657600080fd5b506102ff610b35565b60405161030c91906149bc565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190614238565b610bc7565b6040516103499190614911565b60405180910390f35b34801561035e57600080fd5b50610367610c4c565b6040516103749190614911565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190614108565b610c64565b005b3480156103b257600080fd5b506103bb610d7c565b6040516103c89190614e1e565b60405180910390f35b3480156103dd57600080fd5b506103e6610d82565b6040516103f39190614e1e565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e9190613f85565b610d8f565b60405161043091906149a1565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190613f85565b610de5565b60405161046d9190614e1e565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613ff2565b610e9d565b005b3480156104ab57600080fd5b506104b4610efd565b6040516104c191906149a1565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190614108565b610f10565b6040516104fe9190614e1e565b60405180910390f35b610521600480360381019061051c9190614238565b610fb5565b005b34801561052f57600080fd5b5061054a600480360381019061054591906141ef565b61125b565b60405161055791906149bc565b60405180910390f35b34801561056c57600080fd5b50610575611382565b6040516105829190614e1e565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad9190613ff2565b611388565b005b3480156105c057600080fd5b506105c96113a8565b6040516105d69190614911565b60405180910390f35b3480156105eb57600080fd5b506105f46113c0565b6040516106019190614e1e565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190614238565b6113c6565b60405161063e9190614e1e565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190613f85565b611437565b60405161067b9190614e1e565b60405180910390f35b34801561069057600080fd5b50610699611446565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190614238565b6114ee565b6040516106cf9190614911565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa9190613f85565b6115a0565b60405161070c9190614e1e565b60405180910390f35b34801561072157600080fd5b5061072a611658565b005b34801561073857600080fd5b506107416116e0565b60405161074e91906149a1565b60405180910390f35b34801561076357600080fd5b5061076c6116f3565b005b34801561077a57600080fd5b506107836117d8565b6040516107909190614e1e565b60405180910390f35b3480156107a557600080fd5b506107ae6117de565b6040516107bb9190614911565b60405180910390f35b3480156107d057600080fd5b506107eb60048036038101906107e69190614238565b611808565b6040516107f89190614e1e565b60405180910390f35b34801561080d57600080fd5b50610816611897565b60405161082391906149bc565b60405180910390f35b34801561083857600080fd5b50610841611929565b60405161084e9190614e1e565b60405180910390f35b610871600480360381019061086c9190614238565b61192f565b005b34801561087f57600080fd5b5061089a600480360381019061089591906140c8565b6121b7565b005b3480156108a857600080fd5b506108b1612338565b6040516108be9190614e1e565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e99190613f85565b61233e565b6040516108fb9190614e1e565b60405180910390f35b34801561091057600080fd5b5061092b60048036038101906109269190614148565b612513565b005b34801561093957600080fd5b506109426127a9565b60405161094f9190614e1e565b60405180910390f35b34801561096457600080fd5b5061096d6127af565b60405161097a9190614e1e565b60405180910390f35b34801561098f57600080fd5b506109aa60048036038101906109a59190614045565b6127b5565b005b3480156109b857600080fd5b506109c1612817565b005b3480156109cf57600080fd5b506109ea60048036038101906109e59190614238565b6128bf565b6040516109f791906149bc565b60405180910390f35b348015610a0c57600080fd5b50610a15612967565b604051610a2291906149bc565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d9190613fb2565b6129f5565b604051610a5f91906149a1565b60405180910390f35b348015610a7457600080fd5b50610a7d612a89565b005b348015610a8b57600080fd5b50610aa66004803603810190610aa19190613f85565b612b3f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b1b5750610b1a82612c37565b5b9050919050565b601460019054906101000a900460ff1681565b606060008054610b44906150ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610b70906150ee565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd282612d19565b610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0890614c3e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b73906642380fd9b7aa726bce9c6abee7378396061b81565b6000610c6f826114ee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790614cfe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cff612d85565b73ffffffffffffffffffffffffffffffffffffffff161480610d2e5750610d2d81610d28612d85565b6129f5565b5b610d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6490614bbe565b60405180910390fd5b610d778383612d8d565b505050565b600f5481565b6000600880549050905090565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d90614d1e565b60405180910390fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610eae610ea8612d85565b82612e46565b610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490614d3e565b60405180910390fd5b610ef8838383612f24565b505050565b601460009054906101000a900460ff1681565b6000610f1b836115a0565b8210610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5390614a3e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610fbd612d85565b73ffffffffffffffffffffffffffffffffffffffff16610fdb6117de565b73ffffffffffffffffffffffffffffffffffffffff1614611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890614c7e565b60405180910390fd5b601460009054906101000a900460ff16611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790614dbe565b60405180910390fd5b600d5461108b610d82565b106110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290614dde565b60405180910390fd5b600d54816110d7610d82565b6110e19190614f23565b1115611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111990614d9e565b60405180910390fd5b3481600b546111319190614faa565b14611171576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116890614dfe565b60405180910390fd5b60005b8181101561121e576000600160125461118d9190614f23565b90506001601260008282546111a29190614f23565b925050819055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f99190614f23565b9250508190555061120a3382613180565b50808061121690615151565b915050611174565b507fc278a04ec3b4e69e5e37f579f5a47b34281fbbeaabc08bd3621695611d8b47fc3382604051611250929190614978565b60405180910390a150565b6060611265612d85565b73ffffffffffffffffffffffffffffffffffffffff166112836117de565b73ffffffffffffffffffffffffffffffffffffffff16146112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090614c7e565b60405180910390fd5b81601390805190602001906112ef929190613d2e565b50601380546112fd906150ee565b80601f0160208091040260200160405190810160405280929190818152602001828054611329906150ee565b80156113765780601f1061134b57610100808354040283529160200191611376565b820191906000526020600020905b81548152906001019060200180831161135957829003601f168201915b50505050509050919050565b60125481565b6113a3838383604051806020016040528060008152506127b5565b505050565b7333a7dbc18c618a3202d1e8e788846399088eaf8581565b600e5481565b60006113d0610d82565b8210611411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140890614d5e565b60405180910390fd5b6008828154811061142557611424615287565b5b90600052602060002001549050919050565b60008047905080915050919050565b61144e612d85565b73ffffffffffffffffffffffffffffffffffffffff1661146c6117de565b73ffffffffffffffffffffffffffffffffffffffff16146114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990614c7e565b60405180910390fd5b601460009054906101000a900460ff1615601460006101000a81548160ff021916908315150217905550565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90614bfe565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890614bde565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611660612d85565b73ffffffffffffffffffffffffffffffffffffffff1661167e6117de565b73ffffffffffffffffffffffffffffffffffffffff16146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb90614c7e565b60405180910390fd5b6116de600061319e565b565b601460029054906101000a900460ff1681565b6116fb612d85565b73ffffffffffffffffffffffffffffffffffffffff166117196117de565b73ffffffffffffffffffffffffffffffffffffffff161461176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176690614c7e565b60405180910390fd5b6000479050600081116117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90614c5e565b60405180910390fd5b6117d57333a7dbc18c618a3202d1e8e788846399088eaf8582613264565b50565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611812612d85565b73ffffffffffffffffffffffffffffffffffffffff166118306117de565b73ffffffffffffffffffffffffffffffffffffffff1614611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90614c7e565b60405180910390fd5b81600b81905550600b549050919050565b6060600180546118a6906150ee565b80601f01602080910402602001604051908101604052809291908181526020018280546118d2906150ee565b801561191f5780601f106118f45761010080835404028352916020019161191f565b820191906000526020600020905b81548152906001019060200180831161190257829003601f168201915b5050505050905090565b600d5481565b60001515601460029054906101000a900460ff1615151461194f57600080fd5b60011515601460019054906101000a900460ff1615151415611f29576627147114878000600b8190555060011515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611b5157601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611a2d9190614911565b60206040518083038186803b158015611a4557600080fd5b505afa158015611a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7d9190614265565b6001611a899190614f23565b601081905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611aea9190614911565b60206040518083038186803b158015611b0257600080fd5b505afa158015611b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3a9190614265565b6001611b469190614f23565b601181905550611cb4565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611bac9190614911565b60206040518083038186803b158015611bc457600080fd5b505afa158015611bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfc9190614265565b601081905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611c5d9190614911565b60206040518083038186803b158015611c7557600080fd5b505afa158015611c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cad9190614265565b6011819055505b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611db657506000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611d649190614911565b60206040518083038186803b158015611d7c57600080fd5b505afa158015611d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db49190614265565b115b611df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dec90614d7e565b60405180910390fd5b601054811115611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190614a1e565b60405180910390fd5b600e54611e45610d82565b10611e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c90614afe565b60405180910390fd5b600e5481611e91610d82565b611e9b9190614f23565b1115611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390614a7e565b60405180910390fd5b601154611ee8336115a0565b10611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90614ade565b60405180910390fd5b5b60001515601460019054906101000a900460ff161515141561203b5766753d533d968000600b81905550600c54611f5e610d82565b10611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9590614b1e565b60405180910390fd5b600f54811115611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda906149de565b60405180910390fd5b600c5481611fef610d82565b611ff99190614f23565b111561203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190614b9e565b60405180910390fd5b5b6000811161207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906149fe565b60405180910390fd5b3481600b5461208d9190614faa565b146120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c490614dfe565b60405180910390fd5b60005b8181101561217a57600060016012546120e99190614f23565b90506001601260008282546120fe9190614f23565b925050819055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121559190614f23565b925050819055506121663382613180565b50808061217290615151565b9150506120d0565b507fc278a04ec3b4e69e5e37f579f5a47b34281fbbeaabc08bd3621695611d8b47fc33826040516121ac929190614978565b60405180910390a150565b6121bf612d85565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561222d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222490614b5e565b60405180910390fd5b806005600061223a612d85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166122e7612d85565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161232c91906149a1565b60405180910390a35050565b60105481565b6000806000905060011515601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561245c57601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016123f99190614911565b60206040518083038186803b15801561241157600080fd5b505afa158015612425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124499190614265565b60016124559190614f23565b905061250a565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016124b79190614911565b60206040518083038186803b1580156124cf57600080fd5b505afa1580156124e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125079190614265565b90505b80915050919050565b61251b612d85565b73ffffffffffffffffffffffffffffffffffffffff166125396117de565b73ffffffffffffffffffffffffffffffffffffffff161461258f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258690614c7e565b60405180910390fd5b60005b828290508110156127a457600073ffffffffffffffffffffffffffffffffffffffff168383838181106125c8576125c7615287565b5b90506020020160208101906125dd9190613f85565b73ffffffffffffffffffffffffffffffffffffffff161415612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b90614d1e565b60405180910390fd5b60016015600085858581811061264d5761264c615287565b5b90506020020160208101906126629190613f85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601660008585858181106126cc576126cb615287565b5b90506020020160208101906126e19190613f85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612728576000612790565b6016600084848481811061273f5761273e615287565b5b90506020020160208101906127549190613f85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b50808061279c90615151565b915050612592565b505050565b600c5481565b60115481565b6127c66127c0612d85565b83612e46565b612805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fc90614d3e565b60405180910390fd5b61281184848484613315565b50505050565b61281f612d85565b73ffffffffffffffffffffffffffffffffffffffff1661283d6117de565b73ffffffffffffffffffffffffffffffffffffffff1614612893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288a90614c7e565b60405180910390fd5b601460029054906101000a900460ff1615601460026101000a81548160ff021916908315150217905550565b60606128ca82612d19565b612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290090614cbe565b60405180910390fd5b600060138054612918906150ee565b9050116129345760405180602001604052806000815250612960565b601361293f83613371565b6040516020016129509291906148cd565b6040516020818303038152906040525b9050919050565b60138054612974906150ee565b80601f01602080910402602001604051908101604052809291908181526020018280546129a0906150ee565b80156129ed5780601f106129c2576101008083540402835291602001916129ed565b820191906000526020600020905b8154815290600101906020018083116129d057829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612a91612d85565b73ffffffffffffffffffffffffffffffffffffffff16612aaf6117de565b73ffffffffffffffffffffffffffffffffffffffff1614612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90614c7e565b60405180910390fd5b601460019054906101000a900460ff1615601460016101000a81548160ff0219169083151502179055506627147114878000600b81905550565b612b47612d85565b73ffffffffffffffffffffffffffffffffffffffff16612b656117de565b73ffffffffffffffffffffffffffffffffffffffff1614612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb290614c7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2290614a9e565b60405180910390fd5b612c348161319e565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d0257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d125750612d11826134d2565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612e00836114ee565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612e5182612d19565b612e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8790614b7e565b60405180910390fd5b6000612e9b836114ee565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f0a57508373ffffffffffffffffffffffffffffffffffffffff16612ef284610bc7565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f1b5750612f1a81856129f5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f44826114ee565b73ffffffffffffffffffffffffffffffffffffffff1614612f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9190614c9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561300a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300190614b3e565b60405180910390fd5b61301583838361353c565b613020600082612d8d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130709190615004565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130c79190614f23565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61319a828260405180602001604052806000815250613650565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161328a906148fc565b60006040518083038185875af1925050503d80600081146132c7576040519150601f19603f3d011682016040523d82523d6000602084013e6132cc565b606091505b5050905080613310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330790614cde565b60405180910390fd5b505050565b613320848484612f24565b61332c848484846136ab565b61336b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336290614a5e565b60405180910390fd5b50505050565b606060008214156133b9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134cd565b600082905060005b600082146133eb5780806133d490615151565b915050600a826133e49190614f79565b91506133c1565b60008167ffffffffffffffff811115613407576134066152b6565b5b6040519080825280601f01601f1916602001820160405280156134395781602001600182028036833780820191505090505b5090505b600085146134c6576001826134529190615004565b9150600a85613461919061519a565b603061346d9190614f23565b60f81b81838151811061348357613482615287565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134bf9190614f79565b945061343d565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613547838383613842565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561358a5761358581613847565b6135c9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146135c8576135c78382613890565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561360c57613607816139fd565b61364b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461364a576136498282613ace565b5b5b505050565b61365a8383613b4d565b61366760008484846136ab565b6136a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369d90614a5e565b60405180910390fd5b505050565b60006136cc8473ffffffffffffffffffffffffffffffffffffffff16613d1b565b15613835578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026136f5612d85565b8786866040518563ffffffff1660e01b8152600401613717949392919061492c565b602060405180830381600087803b15801561373157600080fd5b505af192505050801561376257506040513d601f19601f8201168201806040525081019061375f91906141c2565b60015b6137e5573d8060008114613792576040519150601f19603f3d011682016040523d82523d6000602084013e613797565b606091505b506000815114156137dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d490614a5e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061383a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161389d846115a0565b6138a79190615004565b905060006007600084815260200190815260200160002054905081811461398c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613a119190615004565b9050600060096000848152602001908152602001600020549050600060088381548110613a4157613a40615287565b5b906000526020600020015490508060088381548110613a6357613a62615287565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613ab257613ab1615258565b5b6001900381819060005260206000200160009055905550505050565b6000613ad9836115a0565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bb490614c1e565b60405180910390fd5b613bc681612d19565b15613c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bfd90614abe565b60405180910390fd5b613c126000838361353c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c629190614f23565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613d3a906150ee565b90600052602060002090601f016020900481019282613d5c5760008555613da3565b82601f10613d7557805160ff1916838001178555613da3565b82800160010185558215613da3579182015b82811115613da2578251825591602001919060010190613d87565b5b509050613db09190613db4565b5090565b5b80821115613dcd576000816000905550600101613db5565b5090565b6000613de4613ddf84614e5e565b614e39565b905082815260208101848484011115613e0057613dff6152f4565b5b613e0b8482856150ac565b509392505050565b6000613e26613e2184614e8f565b614e39565b905082815260208101848484011115613e4257613e416152f4565b5b613e4d8482856150ac565b509392505050565b600081359050613e6481615baa565b92915050565b60008083601f840112613e8057613e7f6152ea565b5b8235905067ffffffffffffffff811115613e9d57613e9c6152e5565b5b602083019150836020820283011115613eb957613eb86152ef565b5b9250929050565b600081359050613ecf81615bc1565b92915050565b600081359050613ee481615bd8565b92915050565b600081519050613ef981615bd8565b92915050565b600082601f830112613f1457613f136152ea565b5b8135613f24848260208601613dd1565b91505092915050565b600082601f830112613f4257613f416152ea565b5b8135613f52848260208601613e13565b91505092915050565b600081359050613f6a81615bef565b92915050565b600081519050613f7f81615bef565b92915050565b600060208284031215613f9b57613f9a6152fe565b5b6000613fa984828501613e55565b91505092915050565b60008060408385031215613fc957613fc86152fe565b5b6000613fd785828601613e55565b9250506020613fe885828601613e55565b9150509250929050565b60008060006060848603121561400b5761400a6152fe565b5b600061401986828701613e55565b935050602061402a86828701613e55565b925050604061403b86828701613f5b565b9150509250925092565b6000806000806080858703121561405f5761405e6152fe565b5b600061406d87828801613e55565b945050602061407e87828801613e55565b935050604061408f87828801613f5b565b925050606085013567ffffffffffffffff8111156140b0576140af6152f9565b5b6140bc87828801613eff565b91505092959194509250565b600080604083850312156140df576140de6152fe565b5b60006140ed85828601613e55565b92505060206140fe85828601613ec0565b9150509250929050565b6000806040838503121561411f5761411e6152fe565b5b600061412d85828601613e55565b925050602061413e85828601613f5b565b9150509250929050565b6000806020838503121561415f5761415e6152fe565b5b600083013567ffffffffffffffff81111561417d5761417c6152f9565b5b61418985828601613e6a565b92509250509250929050565b6000602082840312156141ab576141aa6152fe565b5b60006141b984828501613ed5565b91505092915050565b6000602082840312156141d8576141d76152fe565b5b60006141e684828501613eea565b91505092915050565b600060208284031215614205576142046152fe565b5b600082013567ffffffffffffffff811115614223576142226152f9565b5b61422f84828501613f2d565b91505092915050565b60006020828403121561424e5761424d6152fe565b5b600061425c84828501613f5b565b91505092915050565b60006020828403121561427b5761427a6152fe565b5b600061428984828501613f70565b91505092915050565b61429b81615038565b82525050565b6142aa8161504a565b82525050565b60006142bb82614ed5565b6142c58185614eeb565b93506142d58185602086016150bb565b6142de81615303565b840191505092915050565b60006142f482614ee0565b6142fe8185614f07565b935061430e8185602086016150bb565b61431781615303565b840191505092915050565b600061432d82614ee0565b6143378185614f18565b93506143478185602086016150bb565b80840191505092915050565b60008154614360816150ee565b61436a8186614f18565b945060018216600081146143855760018114614396576143c9565b60ff198316865281860193506143c9565b61439f85614ec0565b60005b838110156143c1578154818901526001820191506020810190506143a2565b838801955050505b50505092915050565b60006143df603183614f07565b91506143ea82615314565b604082019050919050565b6000614402602083614f07565b915061440d82615363565b602082019050919050565b6000614425602983614f07565b91506144308261538c565b604082019050919050565b6000614448602b83614f07565b9150614453826153db565b604082019050919050565b600061446b603283614f07565b91506144768261542a565b604082019050919050565b600061448e602483614f07565b915061449982615479565b604082019050919050565b60006144b1602683614f07565b91506144bc826154c8565b604082019050919050565b60006144d4601c83614f07565b91506144df82615517565b602082019050919050565b60006144f7602c83614f07565b915061450282615540565b604082019050919050565b600061451a601a83614f07565b91506145258261558f565b602082019050919050565b600061453d601c83614f07565b9150614548826155b8565b602082019050919050565b6000614560602483614f07565b915061456b826155e1565b604082019050919050565b6000614583601983614f07565b915061458e82615630565b602082019050919050565b60006145a6602c83614f07565b91506145b182615659565b604082019050919050565b60006145c9602083614f07565b91506145d4826156a8565b602082019050919050565b60006145ec603883614f07565b91506145f7826156d1565b604082019050919050565b600061460f602a83614f07565b915061461a82615720565b604082019050919050565b6000614632602983614f07565b915061463d8261576f565b604082019050919050565b6000614655602083614f07565b9150614660826157be565b602082019050919050565b6000614678602c83614f07565b9150614683826157e7565b604082019050919050565b600061469b600583614f18565b91506146a682615836565b600582019050919050565b60006146be601383614f07565b91506146c98261585f565b602082019050919050565b60006146e1602083614f07565b91506146ec82615888565b602082019050919050565b6000614704602983614f07565b915061470f826158b1565b604082019050919050565b6000614727602f83614f07565b915061473282615900565b604082019050919050565b600061474a601983614f07565b91506147558261594f565b602082019050919050565b600061476d602183614f07565b915061477882615978565b604082019050919050565b6000614790600083614efc565b915061479b826159c7565b600082019050919050565b60006147b3601783614f07565b91506147be826159ca565b602082019050919050565b60006147d6603183614f07565b91506147e1826159f3565b604082019050919050565b60006147f9602c83614f07565b915061480482615a42565b604082019050919050565b600061481c602583614f07565b915061482782615a91565b604082019050919050565b600061483f602683614f07565b915061484a82615ae0565b604082019050919050565b6000614862601983614f07565b915061486d82615b2f565b602082019050919050565b6000614885601783614f07565b915061489082615b58565b602082019050919050565b60006148a8601883614f07565b91506148b382615b81565b602082019050919050565b6148c7816150a2565b82525050565b60006148d98285614353565b91506148e58284614322565b91506148f08261468e565b91508190509392505050565b600061490782614783565b9150819050919050565b60006020820190506149266000830184614292565b92915050565b60006080820190506149416000830187614292565b61494e6020830186614292565b61495b60408301856148be565b818103606083015261496d81846142b0565b905095945050505050565b600060408201905061498d6000830185614292565b61499a60208301846148be565b9392505050565b60006020820190506149b660008301846142a1565b92915050565b600060208201905081810360008301526149d681846142e9565b905092915050565b600060208201905081810360008301526149f7816143d2565b9050919050565b60006020820190508181036000830152614a17816143f5565b9050919050565b60006020820190508181036000830152614a3781614418565b9050919050565b60006020820190508181036000830152614a578161443b565b9050919050565b60006020820190508181036000830152614a778161445e565b9050919050565b60006020820190508181036000830152614a9781614481565b9050919050565b60006020820190508181036000830152614ab7816144a4565b9050919050565b60006020820190508181036000830152614ad7816144c7565b9050919050565b60006020820190508181036000830152614af7816144ea565b9050919050565b60006020820190508181036000830152614b178161450d565b9050919050565b60006020820190508181036000830152614b3781614530565b9050919050565b60006020820190508181036000830152614b5781614553565b9050919050565b60006020820190508181036000830152614b7781614576565b9050919050565b60006020820190508181036000830152614b9781614599565b9050919050565b60006020820190508181036000830152614bb7816145bc565b9050919050565b60006020820190508181036000830152614bd7816145df565b9050919050565b60006020820190508181036000830152614bf781614602565b9050919050565b60006020820190508181036000830152614c1781614625565b9050919050565b60006020820190508181036000830152614c3781614648565b9050919050565b60006020820190508181036000830152614c578161466b565b9050919050565b60006020820190508181036000830152614c77816146b1565b9050919050565b60006020820190508181036000830152614c97816146d4565b9050919050565b60006020820190508181036000830152614cb7816146f7565b9050919050565b60006020820190508181036000830152614cd78161471a565b9050919050565b60006020820190508181036000830152614cf78161473d565b9050919050565b60006020820190508181036000830152614d1781614760565b9050919050565b60006020820190508181036000830152614d37816147a6565b9050919050565b60006020820190508181036000830152614d57816147c9565b9050919050565b60006020820190508181036000830152614d77816147ec565b9050919050565b60006020820190508181036000830152614d978161480f565b9050919050565b60006020820190508181036000830152614db781614832565b9050919050565b60006020820190508181036000830152614dd781614855565b9050919050565b60006020820190508181036000830152614df781614878565b9050919050565b60006020820190508181036000830152614e178161489b565b9050919050565b6000602082019050614e3360008301846148be565b92915050565b6000614e43614e54565b9050614e4f8282615120565b919050565b6000604051905090565b600067ffffffffffffffff821115614e7957614e786152b6565b5b614e8282615303565b9050602081019050919050565b600067ffffffffffffffff821115614eaa57614ea96152b6565b5b614eb382615303565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f2e826150a2565b9150614f39836150a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f6e57614f6d6151cb565b5b828201905092915050565b6000614f84826150a2565b9150614f8f836150a2565b925082614f9f57614f9e6151fa565b5b828204905092915050565b6000614fb5826150a2565b9150614fc0836150a2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ff957614ff86151cb565b5b828202905092915050565b600061500f826150a2565b915061501a836150a2565b92508282101561502d5761502c6151cb565b5b828203905092915050565b600061504382615082565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156150d95780820151818401526020810190506150be565b838111156150e8576000848401525b50505050565b6000600282049050600182168061510657607f821691505b6020821081141561511a57615119615229565b5b50919050565b61512982615303565b810181811067ffffffffffffffff82111715615148576151476152b6565b5b80604052505050565b600061515c826150a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561518f5761518e6151cb565b5b600182019050919050565b60006151a5826150a2565b91506151b0836150a2565b9250826151c0576151bf6151fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f596f752063616e206f6e6c79206d696e74203135204b696e6727732047616c6160008201527f20706572207472616e73616374696f6e2e000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374206f6e65204d757368726f686d2e600082015250565b7f596f7520617265206f76657220796f7572206d61782070726573616c65206d6960008201527f6e7420616d6f756e740000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c64206578636565642070726573616c652073757060008201527f706c792100000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f752068617665206d696e74656420796f7572206d6178696d756d2070726560008201527f73616c6520616d6f756e742e0000000000000000000000000000000000000000602082015250565b7f416c6c2070726573616c6520746f6b656e73206d696e7465642e000000000000600082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465642e00000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7921600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f496e737566666963656e742062616c616e636500000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077696474686472617720457468657200000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560008201527f73616c6521000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564207465616d206d696e74207360008201527f7570706c79210000000000000000000000000000000000000000000000000000602082015250565b7f5465616d206d696e74696e67206e6f7420737461727465642e00000000000000600082015250565b7f416c6c207465616d20746f6b656e73206d696e7465642e000000000000000000600082015250565b7f45544820616d6f756e7420697320696e636f72726563742e0000000000000000600082015250565b615bb381615038565b8114615bbe57600080fd5b50565b615bca8161504a565b8114615bd557600080fd5b50565b615be181615056565b8114615bec57600080fd5b50565b615bf8816150a2565b8114615c0357600080fd5b5056fea26469706673582212200f69aed9379b91fa697d2d915e6c5eac547307d7e996320aaecaea8acb0d54fb64736f6c63430008070033

Deployed Bytecode Sourcemap

45043:6433:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39153:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45801:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27036:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28604:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45509:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28127:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45294:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39793:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47713:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47844:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29494:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45760:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39461:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48042:718;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46523:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45599:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29904:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45419:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45254:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39983:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46834:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46171:104;;;;;;;;;;;;;:::i;:::-;;26730:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26460:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11017:94;;;;;;;;;;;;;:::i;:::-;;45842:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50753:198;;;;;;;;;;;;;:::i;:::-;;45130:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10366:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46695:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27205:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45215:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48782:1959;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28897:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45333:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47000:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47344:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45173:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45375:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30160:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46436:75;;;;;;;;;;;;;:::i;:::-;;51167:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45639:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29263:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46287:131;;;;;;;;;;;;;:::i;:::-;;11266:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39153:224;39255:4;39294:35;39279:50;;;:11;:50;;;;:90;;;;39333:36;39357:11;39333:23;:36::i;:::-;39279:90;39272:97;;39153:224;;;:::o;45801:34::-;;;;;;;;;;;;;:::o;27036:100::-;27090:13;27123:5;27116:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27036:100;:::o;28604:221::-;28680:7;28708:16;28716:7;28708;:16::i;:::-;28700:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28793:15;:24;28809:7;28793:24;;;;;;;;;;;;;;;;;;;;;28786:31;;28604:221;;;:::o;45509:83::-;45550:42;45509:83;:::o;28127:411::-;28208:13;28224:23;28239:7;28224:14;:23::i;:::-;28208:39;;28272:5;28266:11;;:2;:11;;;;28258:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28366:5;28350:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28375:37;28392:5;28399:12;:10;:12::i;:::-;28375:16;:37::i;:::-;28350:62;28328:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28509:21;28518:2;28522:7;28509:8;:21::i;:::-;28197:341;28127:411;;:::o;45294:32::-;;;;:::o;39793:113::-;39854:7;39881:10;:17;;;;39874:24;;39793:113;:::o;47713:123::-;47782:4;47806:16;:22;47823:4;47806:22;;;;;;;;;;;;;;;;;;;;;;;;;47799:29;;47713:123;;;:::o;47844:186::-;47907:7;47952:1;47935:19;;:5;:19;;;;47927:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;48002:13;:20;48016:5;48002:20;;;;;;;;;;;;;;;;47995:27;;47844:186;;;:::o;29494:339::-;29689:41;29708:12;:10;:12::i;:::-;29722:7;29689:18;:41::i;:::-;29681:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29797:28;29807:4;29813:2;29817:7;29797:9;:28::i;:::-;29494:339;;;:::o;45760:34::-;;;;;;;;;;;;;:::o;39461:256::-;39558:7;39594:23;39611:5;39594:16;:23::i;:::-;39586:5;:31;39578:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39683:12;:19;39696:5;39683:19;;;;;;;;;;;;;;;:26;39703:5;39683:26;;;;;;;;;;;;39676:33;;39461:256;;;;:::o;48042:718::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48128:15:::1;;;;;;;;;;;48120:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;48208:12;;48192:13;:11;:13::i;:::-;:28;48184:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;48300:12;;48283:13;48267;:11;:13::i;:::-;:29;;;;:::i;:::-;:45;;48259:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;48399:9;48382:13;48374:5;;:21;;;;:::i;:::-;:34;48366:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48463:9;48458:241;48482:13;48478:1;:17;48458:241;;;48517:15;48556:1;48535:18;;:22;;;;:::i;:::-;48517:40;;48596:1;48574:18;;:23;;;;;;;:::i;:::-;;;;;;;;48641:1;48612:13;:25;48626:10;48612:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;48657;48667:10;48679:7;48657:9;:30::i;:::-;48502:197;48497:3;;;;;:::i;:::-;;;;48458:241;;;;48716:36;48726:10;48738:13;48716:36;;;;;;;:::i;:::-;;;;;;;;48042:718:::0;:::o;46523:160::-;46597:13;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46638:7:::1;46623:12;:22;;;;;;;;;;;;:::i;:::-;;46663:12;46656:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46523:160:::0;;;:::o;45599:33::-;;;;:::o;29904:185::-;30042:39;30059:4;30065:2;30069:7;30042:39;;;;;;;;;;;;:16;:39::i;:::-;29904:185;;;:::o;45419:83::-;45460:42;45419:83;:::o;45254:33::-;;;;:::o;39983:233::-;40058:7;40094:30;:28;:30::i;:::-;40086:5;:38;40078:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40191:10;40202:5;40191:17;;;;;;;;:::i;:::-;;;;;;;;;;40184:24;;39983:233;;;:::o;46834:154::-;46890:7;46910:18;46931:21;46910:42;;46970:10;46963:17;;;46834:154;;;:::o;46171:104::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46252:15:::1;;;;;;;;;;;46251:16;46233:15;;:34;;;;;;;;;;;;;;;;;;46171:104::o:0;26730:239::-;26802:7;26822:13;26838:7;:16;26846:7;26838:16;;;;;;;;;;;;;;;;;;;;;26822:32;;26890:1;26873:19;;:5;:19;;;;26865:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26956:5;26949:12;;;26730:239;;;:::o;26460:208::-;26532:7;26577:1;26560:19;;:5;:19;;;;26552:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26644:9;:16;26654:5;26644:16;;;;;;;;;;;;;;;;26637:23;;26460:208;;;:::o;11017:94::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11082:21:::1;11100:1;11082:9;:21::i;:::-;11017:94::o:0;45842:24::-;;;;;;;;;;;;;:::o;50753:198::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50804:15:::1;50822:21;50804:39;;50872:1;50862:7;:11;50854:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;50908:35;45460:42;50935:7;50908:10;:35::i;:::-;50793:158;50753:198::o:0;45130:30::-;;;;:::o;10366:87::-;10412:7;10439:6;;;;;;;;;;;10432:13;;10366:87;:::o;46695:127::-;46756:7;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46784:7:::1;46776:5;:15;;;;46809:5;;46802:12;;46695:127:::0;;;:::o;27205:104::-;27261:13;27294:7;27287:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27205:104;:::o;45215:32::-;;;;:::o;48782:1959::-;48864:5;48855:14;;:5;;;;;;;;;;;:14;;;48847:23;;;;;;48913:4;48895:22;;:14;;;;;;;;;;;:22;;;48891:972;;;48942:10;48934:5;:18;;;;49003:4;48971:36;;:16;:28;48988:10;48971:28;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;48967:352;;;49051:5;;;;;;;;;;;:15;;;49067:10;49051:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49047:1;:31;;;;:::i;:::-;49028:16;:50;;;;49122:5;;;;;;;;;;;:15;;;49138:10;49122:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49118:1;:31;;;;:::i;:::-;49097:18;:52;;;;48967:352;;;49209:5;;;;;;;;;;;:15;;;49225:10;49209:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49190:16;:46;;;;49276:5;;;;;;;;;;;:15;;;49292:10;49276:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49255:18;:48;;;;48967:352;49341:16;:28;49358:10;49341:28;;;;;;;;;;;;;;;;;;;;;;;;;:63;;;;49403:1;49373:5;;;;;;;;;;;:15;;;49389:10;49373:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;49341:63;49333:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;49486:16;;49469:13;:33;;49461:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;49587:11;;49571:13;:11;:13::i;:::-;:27;49563:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;49685:11;;49668:13;49652;:11;:13::i;:::-;:29;;;;:::i;:::-;:44;;49644:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;49784:18;;49760:21;49770:10;49760:9;:21::i;:::-;:42;49752:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;48891:972;49905:5;49887:23;;:14;;;;;;;;;;;:23;;;49883:371;;;49935:10;49927:5;:18;;;;49984:13;;49968;:11;:13::i;:::-;:29;49960:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50070:12;;50053:13;:29;;50045:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;50192:13;;50175;50159;:11;:13::i;:::-;:29;;;;:::i;:::-;:46;;50151:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;49883:371;50298:1;50282:13;:17;50274:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;50380:9;50363:13;50355:5;;:21;;;;:::i;:::-;:34;50347:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;50444:9;50439:241;50463:13;50459:1;:17;50439:241;;;50498:15;50537:1;50516:18;;:22;;;;:::i;:::-;50498:40;;50577:1;50555:18;;:23;;;;;;;:::i;:::-;;;;;;;;50622:1;50593:13;:25;50607:10;50593:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;50638;50648:10;50660:7;50638:9;:30::i;:::-;50483:197;50478:3;;;;;:::i;:::-;;;;50439:241;;;;50697:36;50707:10;50719:13;50697:36;;;;;;;:::i;:::-;;;;;;;;48782:1959;:::o;28897:295::-;29012:12;:10;:12::i;:::-;29000:24;;:8;:24;;;;28992:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29112:8;29067:18;:32;29086:12;:10;:12::i;:::-;29067:32;;;;;;;;;;;;;;;:42;29100:8;29067:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29165:8;29136:48;;29151:12;:10;:12::i;:::-;29136:48;;;29175:8;29136:48;;;;;;:::i;:::-;;;;;;;;28897:295;;:::o;45333:35::-;;;;:::o;47000:332::-;47060:7;47080:18;47101:1;47080:22;;47143:4;47117:30;;:16;:22;47134:4;47117:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;47113:184;;;47185:5;;;;;;;;;;;:15;;;47201:4;47185:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47181:1;:25;;;;:::i;:::-;47168:38;;47113:184;;;47260:5;;;;;;;;;;;:15;;;47276:4;47260:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47247:34;;47113:184;47314:10;47307:17;;;47000:332;;;:::o;47344:361::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47431:9:::1;47426:272;47450:9;;:16;;47446:1;:20;47426:272;;;47520:1;47496:26;;:9;;47506:1;47496:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;47488:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47600:4;47567:16;:30;47584:9;;47594:1;47584:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47567:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;47651:1;47621:13;:27;47635:9;;47645:1;47635:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47621:27;;;;;;;;;;;;;;;;:31;:65;;47685:1;47621:65;;;47655:13;:27;47669:9;;47679:1;47669:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47655:27;;;;;;;;;;;;;;;;47621:65;;47468:3;;;;;:::i;:::-;;;;47426:272;;;;47344:361:::0;;:::o;45173:35::-;;;;:::o;45375:37::-;;;;:::o;30160:328::-;30335:41;30354:12;:10;:12::i;:::-;30368:7;30335:18;:41::i;:::-;30327:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30441:39;30455:4;30461:2;30465:7;30474:5;30441:13;:39::i;:::-;30160:328;;;;:::o;46436:75::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46498:5:::1;;;;;;;;;;;46497:6;46489:5;;:14;;;;;;;;;;;;;;;;;;46436:75::o:0;51167:306::-;51240:13;51274:16;51282:7;51274;:16::i;:::-;51266:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;51389:1;51366:12;51360:26;;;;;:::i;:::-;;;:30;:105;;;;;;;;;;;;;;;;;51417:12;51431:18;:7;:16;:18::i;:::-;51400:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51360:105;51353:112;;51167:306;;;:::o;45639:114::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29263:164::-;29360:4;29384:18;:25;29403:5;29384:25;;;;;;;;;;;;;;;:35;29410:8;29384:35;;;;;;;;;;;;;;;;;;;;;;;;;29377:42;;29263:164;;;;:::o;46287:131::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46367:14:::1;;;;;;;;;;;46366:15;46349:14;;:32;;;;;;;;;;;;;;;;;;46400:10;46392:5;:18;;;;46287:131::o:0;11266:192::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11375:1:::1;11355:22;;:8;:22;;;;11347:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11431:19;11441:8;11431:9;:19::i;:::-;11266:192:::0;:::o;26091:305::-;26193:4;26245:25;26230:40;;;:11;:40;;;;:105;;;;26302:33;26287:48;;;:11;:48;;;;26230:105;:158;;;;26352:36;26376:11;26352:23;:36::i;:::-;26230:158;26210:178;;26091:305;;;:::o;31998:127::-;32063:4;32115:1;32087:30;;:7;:16;32095:7;32087:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32080:37;;31998:127;;;:::o;567:98::-;620:7;647:10;640:17;;567:98;:::o;35980:174::-;36082:2;36055:15;:24;36071:7;36055:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36138:7;36134:2;36100:46;;36109:23;36124:7;36109:14;:23::i;:::-;36100:46;;;;;;;;;;;;35980:174;;:::o;32292:348::-;32385:4;32410:16;32418:7;32410;:16::i;:::-;32402:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32486:13;32502:23;32517:7;32502:14;:23::i;:::-;32486:39;;32555:5;32544:16;;:7;:16;;;:51;;;;32588:7;32564:31;;:20;32576:7;32564:11;:20::i;:::-;:31;;;32544:51;:87;;;;32599:32;32616:5;32623:7;32599:16;:32::i;:::-;32544:87;32536:96;;;32292:348;;;;:::o;35284:578::-;35443:4;35416:31;;:23;35431:7;35416:14;:23::i;:::-;:31;;;35408:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35526:1;35512:16;;:2;:16;;;;35504:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35582:39;35603:4;35609:2;35613:7;35582:20;:39::i;:::-;35686:29;35703:1;35707:7;35686:8;:29::i;:::-;35747:1;35728:9;:15;35738:4;35728:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35776:1;35759:9;:13;35769:2;35759:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35807:2;35788:7;:16;35796:7;35788:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35846:7;35842:2;35827:27;;35836:4;35827:27;;;;;;;;;;;;35284:578;;;:::o;32982:110::-;33058:26;33068:2;33072:7;33058:26;;;;;;;;;;;;:9;:26::i;:::-;32982:110;;:::o;11466:173::-;11522:16;11541:6;;;;;;;;;;;11522:25;;11567:8;11558:6;;:17;;;;;;;;;;;;;;;;;;11622:8;11591:40;;11612:8;11591:40;;;;;;;;;;;;11511:128;11466:173;:::o;50963:192::-;51038:12;51056:8;:13;;51078:7;51056:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51037:54;;;51110:7;51102:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;51026:129;50963:192;;:::o;31370:315::-;31527:28;31537:4;31543:2;31547:7;31527:9;:28::i;:::-;31574:48;31597:4;31603:2;31607:7;31616:5;31574:22;:48::i;:::-;31566:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31370:315;;;;:::o;13910:723::-;13966:13;14196:1;14187:5;:10;14183:53;;;14214:10;;;;;;;;;;;;;;;;;;;;;14183:53;14246:12;14261:5;14246:20;;14277:14;14302:78;14317:1;14309:4;:9;14302:78;;14335:8;;;;;:::i;:::-;;;;14366:2;14358:10;;;;;:::i;:::-;;;14302:78;;;14390:19;14422:6;14412:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14390:39;;14440:154;14456:1;14447:5;:10;14440:154;;14484:1;14474:11;;;;;:::i;:::-;;;14551:2;14543:5;:10;;;;:::i;:::-;14530:2;:24;;;;:::i;:::-;14517:39;;14500:6;14507;14500:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;14580:2;14571:11;;;;;:::i;:::-;;;14440:154;;;14618:6;14604:21;;;;;13910:723;;;;:::o;13435:157::-;13520:4;13559:25;13544:40;;;:11;:40;;;;13537:47;;13435:157;;;:::o;40829:589::-;40973:45;41000:4;41006:2;41010:7;40973:26;:45::i;:::-;41051:1;41035:18;;:4;:18;;;41031:187;;;41070:40;41102:7;41070:31;:40::i;:::-;41031:187;;;41140:2;41132:10;;:4;:10;;;41128:90;;41159:47;41192:4;41198:7;41159:32;:47::i;:::-;41128:90;41031:187;41246:1;41232:16;;:2;:16;;;41228:183;;;41265:45;41302:7;41265:36;:45::i;:::-;41228:183;;;41338:4;41332:10;;:2;:10;;;41328:83;;41359:40;41387:2;41391:7;41359:27;:40::i;:::-;41328:83;41228:183;40829:589;;;:::o;33319:321::-;33449:18;33455:2;33459:7;33449:5;:18::i;:::-;33500:54;33531:1;33535:2;33539:7;33548:5;33500:22;:54::i;:::-;33478:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33319:321;;;:::o;36719:799::-;36874:4;36895:15;:2;:13;;;:15::i;:::-;36891:620;;;36947:2;36931:36;;;36968:12;:10;:12::i;:::-;36982:4;36988:7;36997:5;36931:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36927:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37190:1;37173:6;:13;:18;37169:272;;;37216:60;;;;;;;;;;:::i;:::-;;;;;;;;37169:272;37391:6;37385:13;37376:6;37372:2;37368:15;37361:38;36927:529;37064:41;;;37054:51;;;:6;:51;;;;37047:58;;;;;36891:620;37495:4;37488:11;;36719:799;;;;;;;:::o;38090:126::-;;;;:::o;42141:164::-;42245:10;:17;;;;42218:15;:24;42234:7;42218:24;;;;;;;;;;;:44;;;;42273:10;42289:7;42273:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42141:164;:::o;42932:988::-;43198:22;43248:1;43223:22;43240:4;43223:16;:22::i;:::-;:26;;;;:::i;:::-;43198:51;;43260:18;43281:17;:26;43299:7;43281:26;;;;;;;;;;;;43260:47;;43428:14;43414:10;:28;43410:328;;43459:19;43481:12;:18;43494:4;43481:18;;;;;;;;;;;;;;;:34;43500:14;43481:34;;;;;;;;;;;;43459:56;;43565:11;43532:12;:18;43545:4;43532:18;;;;;;;;;;;;;;;:30;43551:10;43532:30;;;;;;;;;;;:44;;;;43682:10;43649:17;:30;43667:11;43649:30;;;;;;;;;;;:43;;;;43444:294;43410:328;43834:17;:26;43852:7;43834:26;;;;;;;;;;;43827:33;;;43878:12;:18;43891:4;43878:18;;;;;;;;;;;;;;;:34;43897:14;43878:34;;;;;;;;;;;43871:41;;;43013:907;;42932:988;;:::o;43928:1079::-;44181:22;44226:1;44206:10;:17;;;;:21;;;;:::i;:::-;44181:46;;44238:18;44259:15;:24;44275:7;44259:24;;;;;;;;;;;;44238:45;;44610:19;44632:10;44643:14;44632:26;;;;;;;;:::i;:::-;;;;;;;;;;44610:48;;44696:11;44671:10;44682;44671:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44807:10;44776:15;:28;44792:11;44776:28;;;;;;;;;;;:41;;;;44948:15;:24;44964:7;44948:24;;;;;;;;;;;44941:31;;;44983:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43999:1008;;;43928:1079;:::o;41719:221::-;41804:14;41821:20;41838:2;41821:16;:20::i;:::-;41804:37;;41879:7;41852:12;:16;41865:2;41852:16;;;;;;;;;;;;;;;:24;41869:6;41852:24;;;;;;;;;;;:34;;;;41926:6;41897:17;:26;41915:7;41897:26;;;;;;;;;;;:35;;;;41793:147;41719:221;;:::o;33976:382::-;34070:1;34056:16;;:2;:16;;;;34048:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34129:16;34137:7;34129;:16::i;:::-;34128:17;34120:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34191:45;34220:1;34224:2;34228:7;34191:20;:45::i;:::-;34266:1;34249:9;:13;34259:2;34249:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34297:2;34278:7;:16;34286:7;34278:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34342:7;34338:2;34317:33;;34334:1;34317:33;;;;;;;;;;;;33976:382;;:::o;16491:387::-;16551:4;16759:12;16826:7;16814:20;16806:28;;16869:1;16862:4;:8;16855:15;;;16491:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:143::-;2925:5;2956:6;2950:13;2941:22;;2972:33;2999:5;2972:33;:::i;:::-;2868:143;;;;:::o;3017:329::-;3076:6;3125:2;3113:9;3104:7;3100:23;3096:32;3093:119;;;3131:79;;:::i;:::-;3093:119;3251:1;3276:53;3321:7;3312:6;3301:9;3297:22;3276:53;:::i;:::-;3266:63;;3222:117;3017:329;;;;:::o;3352:474::-;3420:6;3428;3477:2;3465:9;3456:7;3452:23;3448:32;3445:119;;;3483:79;;:::i;:::-;3445:119;3603:1;3628:53;3673:7;3664:6;3653:9;3649:22;3628:53;:::i;:::-;3618:63;;3574:117;3730:2;3756:53;3801:7;3792:6;3781:9;3777:22;3756:53;:::i;:::-;3746:63;;3701:118;3352:474;;;;;:::o;3832:619::-;3909:6;3917;3925;3974:2;3962:9;3953:7;3949:23;3945:32;3942:119;;;3980:79;;:::i;:::-;3942:119;4100:1;4125:53;4170:7;4161:6;4150:9;4146:22;4125:53;:::i;:::-;4115:63;;4071:117;4227:2;4253:53;4298:7;4289:6;4278:9;4274:22;4253:53;:::i;:::-;4243:63;;4198:118;4355:2;4381:53;4426:7;4417:6;4406:9;4402:22;4381:53;:::i;:::-;4371:63;;4326:118;3832:619;;;;;:::o;4457:943::-;4552:6;4560;4568;4576;4625:3;4613:9;4604:7;4600:23;4596:33;4593:120;;;4632:79;;:::i;:::-;4593:120;4752:1;4777:53;4822:7;4813:6;4802:9;4798:22;4777:53;:::i;:::-;4767:63;;4723:117;4879:2;4905:53;4950:7;4941:6;4930:9;4926:22;4905:53;:::i;:::-;4895:63;;4850:118;5007:2;5033:53;5078:7;5069:6;5058:9;5054:22;5033:53;:::i;:::-;5023:63;;4978:118;5163:2;5152:9;5148:18;5135:32;5194:18;5186:6;5183:30;5180:117;;;5216:79;;:::i;:::-;5180:117;5321:62;5375:7;5366:6;5355:9;5351:22;5321:62;:::i;:::-;5311:72;;5106:287;4457:943;;;;;;;:::o;5406:468::-;5471:6;5479;5528:2;5516:9;5507:7;5503:23;5499:32;5496:119;;;5534:79;;:::i;:::-;5496:119;5654:1;5679:53;5724:7;5715:6;5704:9;5700:22;5679:53;:::i;:::-;5669:63;;5625:117;5781:2;5807:50;5849:7;5840:6;5829:9;5825:22;5807:50;:::i;:::-;5797:60;;5752:115;5406:468;;;;;:::o;5880:474::-;5948:6;5956;6005:2;5993:9;5984:7;5980:23;5976:32;5973:119;;;6011:79;;:::i;:::-;5973:119;6131:1;6156:53;6201:7;6192:6;6181:9;6177:22;6156:53;:::i;:::-;6146:63;;6102:117;6258:2;6284:53;6329:7;6320:6;6309:9;6305:22;6284:53;:::i;:::-;6274:63;;6229:118;5880:474;;;;;:::o;6360:559::-;6446:6;6454;6503:2;6491:9;6482:7;6478:23;6474:32;6471:119;;;6509:79;;:::i;:::-;6471:119;6657:1;6646:9;6642:17;6629:31;6687:18;6679:6;6676:30;6673:117;;;6709:79;;:::i;:::-;6673:117;6822:80;6894:7;6885:6;6874:9;6870:22;6822:80;:::i;:::-;6804:98;;;;6600:312;6360:559;;;;;:::o;6925:327::-;6983:6;7032:2;7020:9;7011:7;7007:23;7003:32;7000:119;;;7038:79;;:::i;:::-;7000:119;7158:1;7183:52;7227:7;7218:6;7207:9;7203:22;7183:52;:::i;:::-;7173:62;;7129:116;6925:327;;;;:::o;7258:349::-;7327:6;7376:2;7364:9;7355:7;7351:23;7347:32;7344:119;;;7382:79;;:::i;:::-;7344:119;7502:1;7527:63;7582:7;7573:6;7562:9;7558:22;7527:63;:::i;:::-;7517:73;;7473:127;7258:349;;;;:::o;7613:509::-;7682:6;7731:2;7719:9;7710:7;7706:23;7702:32;7699:119;;;7737:79;;:::i;:::-;7699:119;7885:1;7874:9;7870:17;7857:31;7915:18;7907:6;7904:30;7901:117;;;7937:79;;:::i;:::-;7901:117;8042:63;8097:7;8088:6;8077:9;8073:22;8042:63;:::i;:::-;8032:73;;7828:287;7613:509;;;;:::o;8128:329::-;8187:6;8236:2;8224:9;8215:7;8211:23;8207:32;8204:119;;;8242:79;;:::i;:::-;8204:119;8362:1;8387:53;8432:7;8423:6;8412:9;8408:22;8387:53;:::i;:::-;8377:63;;8333:117;8128:329;;;;:::o;8463:351::-;8533:6;8582:2;8570:9;8561:7;8557:23;8553:32;8550:119;;;8588:79;;:::i;:::-;8550:119;8708:1;8733:64;8789:7;8780:6;8769:9;8765:22;8733:64;:::i;:::-;8723:74;;8679:128;8463:351;;;;:::o;8820:118::-;8907:24;8925:5;8907:24;:::i;:::-;8902:3;8895:37;8820:118;;:::o;8944:109::-;9025:21;9040:5;9025:21;:::i;:::-;9020:3;9013:34;8944:109;;:::o;9059:360::-;9145:3;9173:38;9205:5;9173:38;:::i;:::-;9227:70;9290:6;9285:3;9227:70;:::i;:::-;9220:77;;9306:52;9351:6;9346:3;9339:4;9332:5;9328:16;9306:52;:::i;:::-;9383:29;9405:6;9383:29;:::i;:::-;9378:3;9374:39;9367:46;;9149:270;9059:360;;;;:::o;9425:364::-;9513:3;9541:39;9574:5;9541:39;:::i;:::-;9596:71;9660:6;9655:3;9596:71;:::i;:::-;9589:78;;9676:52;9721:6;9716:3;9709:4;9702:5;9698:16;9676:52;:::i;:::-;9753:29;9775:6;9753:29;:::i;:::-;9748:3;9744:39;9737:46;;9517:272;9425:364;;;;:::o;9795:377::-;9901:3;9929:39;9962:5;9929:39;:::i;:::-;9984:89;10066:6;10061:3;9984:89;:::i;:::-;9977:96;;10082:52;10127:6;10122:3;10115:4;10108:5;10104:16;10082:52;:::i;:::-;10159:6;10154:3;10150:16;10143:23;;9905:267;9795:377;;;;:::o;10202:845::-;10305:3;10342:5;10336:12;10371:36;10397:9;10371:36;:::i;:::-;10423:89;10505:6;10500:3;10423:89;:::i;:::-;10416:96;;10543:1;10532:9;10528:17;10559:1;10554:137;;;;10705:1;10700:341;;;;10521:520;;10554:137;10638:4;10634:9;10623;10619:25;10614:3;10607:38;10674:6;10669:3;10665:16;10658:23;;10554:137;;10700:341;10767:38;10799:5;10767:38;:::i;:::-;10827:1;10841:154;10855:6;10852:1;10849:13;10841:154;;;10929:7;10923:14;10919:1;10914:3;10910:11;10903:35;10979:1;10970:7;10966:15;10955:26;;10877:4;10874:1;10870:12;10865:17;;10841:154;;;11024:6;11019:3;11015:16;11008:23;;10707:334;;10521:520;;10309:738;;10202:845;;;;:::o;11053:366::-;11195:3;11216:67;11280:2;11275:3;11216:67;:::i;:::-;11209:74;;11292:93;11381:3;11292:93;:::i;:::-;11410:2;11405:3;11401:12;11394:19;;11053:366;;;:::o;11425:::-;11567:3;11588:67;11652:2;11647:3;11588:67;:::i;:::-;11581:74;;11664:93;11753:3;11664:93;:::i;:::-;11782:2;11777:3;11773:12;11766:19;;11425:366;;;:::o;11797:::-;11939:3;11960:67;12024:2;12019:3;11960:67;:::i;:::-;11953:74;;12036:93;12125:3;12036:93;:::i;:::-;12154:2;12149:3;12145:12;12138:19;;11797:366;;;:::o;12169:::-;12311:3;12332:67;12396:2;12391:3;12332:67;:::i;:::-;12325:74;;12408:93;12497:3;12408:93;:::i;:::-;12526:2;12521:3;12517:12;12510:19;;12169:366;;;:::o;12541:::-;12683:3;12704:67;12768:2;12763:3;12704:67;:::i;:::-;12697:74;;12780:93;12869:3;12780:93;:::i;:::-;12898:2;12893:3;12889:12;12882:19;;12541:366;;;:::o;12913:::-;13055:3;13076:67;13140:2;13135:3;13076:67;:::i;:::-;13069:74;;13152:93;13241:3;13152:93;:::i;:::-;13270:2;13265:3;13261:12;13254:19;;12913:366;;;:::o;13285:::-;13427:3;13448:67;13512:2;13507:3;13448:67;:::i;:::-;13441:74;;13524:93;13613:3;13524:93;:::i;:::-;13642:2;13637:3;13633:12;13626:19;;13285:366;;;:::o;13657:::-;13799:3;13820:67;13884:2;13879:3;13820:67;:::i;:::-;13813:74;;13896:93;13985:3;13896:93;:::i;:::-;14014:2;14009:3;14005:12;13998:19;;13657:366;;;:::o;14029:::-;14171:3;14192:67;14256:2;14251:3;14192:67;:::i;:::-;14185:74;;14268:93;14357:3;14268:93;:::i;:::-;14386:2;14381:3;14377:12;14370:19;;14029:366;;;:::o;14401:::-;14543:3;14564:67;14628:2;14623:3;14564:67;:::i;:::-;14557:74;;14640:93;14729:3;14640:93;:::i;:::-;14758:2;14753:3;14749:12;14742:19;;14401:366;;;:::o;14773:::-;14915:3;14936:67;15000:2;14995:3;14936:67;:::i;:::-;14929:74;;15012:93;15101:3;15012:93;:::i;:::-;15130:2;15125:3;15121:12;15114:19;;14773:366;;;:::o;15145:::-;15287:3;15308:67;15372:2;15367:3;15308:67;:::i;:::-;15301:74;;15384:93;15473:3;15384:93;:::i;:::-;15502:2;15497:3;15493:12;15486:19;;15145:366;;;:::o;15517:::-;15659:3;15680:67;15744:2;15739:3;15680:67;:::i;:::-;15673:74;;15756:93;15845:3;15756:93;:::i;:::-;15874:2;15869:3;15865:12;15858:19;;15517:366;;;:::o;15889:::-;16031:3;16052:67;16116:2;16111:3;16052:67;:::i;:::-;16045:74;;16128:93;16217:3;16128:93;:::i;:::-;16246:2;16241:3;16237:12;16230:19;;15889:366;;;:::o;16261:::-;16403:3;16424:67;16488:2;16483:3;16424:67;:::i;:::-;16417:74;;16500:93;16589:3;16500:93;:::i;:::-;16618:2;16613:3;16609:12;16602:19;;16261:366;;;:::o;16633:::-;16775:3;16796:67;16860:2;16855:3;16796:67;:::i;:::-;16789:74;;16872:93;16961:3;16872:93;:::i;:::-;16990:2;16985:3;16981:12;16974:19;;16633:366;;;:::o;17005:::-;17147:3;17168:67;17232:2;17227:3;17168:67;:::i;:::-;17161:74;;17244:93;17333:3;17244:93;:::i;:::-;17362:2;17357:3;17353:12;17346:19;;17005:366;;;:::o;17377:::-;17519:3;17540:67;17604:2;17599:3;17540:67;:::i;:::-;17533:74;;17616:93;17705:3;17616:93;:::i;:::-;17734:2;17729:3;17725:12;17718:19;;17377:366;;;:::o;17749:::-;17891:3;17912:67;17976:2;17971:3;17912:67;:::i;:::-;17905:74;;17988:93;18077:3;17988:93;:::i;:::-;18106:2;18101:3;18097:12;18090:19;;17749:366;;;:::o;18121:::-;18263:3;18284:67;18348:2;18343:3;18284:67;:::i;:::-;18277:74;;18360:93;18449:3;18360:93;:::i;:::-;18478:2;18473:3;18469:12;18462:19;;18121:366;;;:::o;18493:400::-;18653:3;18674:84;18756:1;18751:3;18674:84;:::i;:::-;18667:91;;18767:93;18856:3;18767:93;:::i;:::-;18885:1;18880:3;18876:11;18869:18;;18493:400;;;:::o;18899:366::-;19041:3;19062:67;19126:2;19121:3;19062:67;:::i;:::-;19055:74;;19138:93;19227:3;19138:93;:::i;:::-;19256:2;19251:3;19247:12;19240:19;;18899:366;;;:::o;19271:::-;19413:3;19434:67;19498:2;19493:3;19434:67;:::i;:::-;19427:74;;19510:93;19599:3;19510:93;:::i;:::-;19628:2;19623:3;19619:12;19612:19;;19271:366;;;:::o;19643:::-;19785:3;19806:67;19870:2;19865:3;19806:67;:::i;:::-;19799:74;;19882:93;19971:3;19882:93;:::i;:::-;20000:2;19995:3;19991:12;19984:19;;19643:366;;;:::o;20015:::-;20157:3;20178:67;20242:2;20237:3;20178:67;:::i;:::-;20171:74;;20254:93;20343:3;20254:93;:::i;:::-;20372:2;20367:3;20363:12;20356:19;;20015:366;;;:::o;20387:::-;20529:3;20550:67;20614:2;20609:3;20550:67;:::i;:::-;20543:74;;20626:93;20715:3;20626:93;:::i;:::-;20744:2;20739:3;20735:12;20728:19;;20387:366;;;:::o;20759:::-;20901:3;20922:67;20986:2;20981:3;20922:67;:::i;:::-;20915:74;;20998:93;21087:3;20998:93;:::i;:::-;21116:2;21111:3;21107:12;21100:19;;20759:366;;;:::o;21131:398::-;21290:3;21311:83;21392:1;21387:3;21311:83;:::i;:::-;21304:90;;21403:93;21492:3;21403:93;:::i;:::-;21521:1;21516:3;21512:11;21505:18;;21131:398;;;:::o;21535:366::-;21677:3;21698:67;21762:2;21757:3;21698:67;:::i;:::-;21691:74;;21774:93;21863:3;21774:93;:::i;:::-;21892:2;21887:3;21883:12;21876:19;;21535:366;;;:::o;21907:::-;22049:3;22070:67;22134:2;22129:3;22070:67;:::i;:::-;22063:74;;22146:93;22235:3;22146:93;:::i;:::-;22264:2;22259:3;22255:12;22248:19;;21907:366;;;:::o;22279:::-;22421:3;22442:67;22506:2;22501:3;22442:67;:::i;:::-;22435:74;;22518:93;22607:3;22518:93;:::i;:::-;22636:2;22631:3;22627:12;22620:19;;22279:366;;;:::o;22651:::-;22793:3;22814:67;22878:2;22873:3;22814:67;:::i;:::-;22807:74;;22890:93;22979:3;22890:93;:::i;:::-;23008:2;23003:3;22999:12;22992:19;;22651:366;;;:::o;23023:::-;23165:3;23186:67;23250:2;23245:3;23186:67;:::i;:::-;23179:74;;23262:93;23351:3;23262:93;:::i;:::-;23380:2;23375:3;23371:12;23364:19;;23023:366;;;:::o;23395:::-;23537:3;23558:67;23622:2;23617:3;23558:67;:::i;:::-;23551:74;;23634:93;23723:3;23634:93;:::i;:::-;23752:2;23747:3;23743:12;23736:19;;23395:366;;;:::o;23767:::-;23909:3;23930:67;23994:2;23989:3;23930:67;:::i;:::-;23923:74;;24006:93;24095:3;24006:93;:::i;:::-;24124:2;24119:3;24115:12;24108:19;;23767:366;;;:::o;24139:::-;24281:3;24302:67;24366:2;24361:3;24302:67;:::i;:::-;24295:74;;24378:93;24467:3;24378:93;:::i;:::-;24496:2;24491:3;24487:12;24480:19;;24139:366;;;:::o;24511:118::-;24598:24;24616:5;24598:24;:::i;:::-;24593:3;24586:37;24511:118;;:::o;24635:695::-;24913:3;24935:92;25023:3;25014:6;24935:92;:::i;:::-;24928:99;;25044:95;25135:3;25126:6;25044:95;:::i;:::-;25037:102;;25156:148;25300:3;25156:148;:::i;:::-;25149:155;;25321:3;25314:10;;24635:695;;;;;:::o;25336:379::-;25520:3;25542:147;25685:3;25542:147;:::i;:::-;25535:154;;25706:3;25699:10;;25336:379;;;:::o;25721:222::-;25814:4;25852:2;25841:9;25837:18;25829:26;;25865:71;25933:1;25922:9;25918:17;25909:6;25865:71;:::i;:::-;25721:222;;;;:::o;25949:640::-;26144:4;26182:3;26171:9;26167:19;26159:27;;26196:71;26264:1;26253:9;26249:17;26240:6;26196:71;:::i;:::-;26277:72;26345:2;26334:9;26330:18;26321:6;26277:72;:::i;:::-;26359;26427:2;26416:9;26412:18;26403:6;26359:72;:::i;:::-;26478:9;26472:4;26468:20;26463:2;26452:9;26448:18;26441:48;26506:76;26577:4;26568:6;26506:76;:::i;:::-;26498:84;;25949:640;;;;;;;:::o;26595:332::-;26716:4;26754:2;26743:9;26739:18;26731:26;;26767:71;26835:1;26824:9;26820:17;26811:6;26767:71;:::i;:::-;26848:72;26916:2;26905:9;26901:18;26892:6;26848:72;:::i;:::-;26595:332;;;;;:::o;26933:210::-;27020:4;27058:2;27047:9;27043:18;27035:26;;27071:65;27133:1;27122:9;27118:17;27109:6;27071:65;:::i;:::-;26933:210;;;;:::o;27149:313::-;27262:4;27300:2;27289:9;27285:18;27277:26;;27349:9;27343:4;27339:20;27335:1;27324:9;27320:17;27313:47;27377:78;27450:4;27441:6;27377:78;:::i;:::-;27369:86;;27149:313;;;;:::o;27468:419::-;27634:4;27672:2;27661:9;27657:18;27649:26;;27721:9;27715:4;27711:20;27707:1;27696:9;27692:17;27685:47;27749:131;27875:4;27749:131;:::i;:::-;27741:139;;27468:419;;;:::o;27893:::-;28059:4;28097:2;28086:9;28082:18;28074:26;;28146:9;28140:4;28136:20;28132:1;28121:9;28117:17;28110:47;28174:131;28300:4;28174:131;:::i;:::-;28166:139;;27893:419;;;:::o;28318:::-;28484:4;28522:2;28511:9;28507:18;28499:26;;28571:9;28565:4;28561:20;28557:1;28546:9;28542:17;28535:47;28599:131;28725:4;28599:131;:::i;:::-;28591:139;;28318:419;;;:::o;28743:::-;28909:4;28947:2;28936:9;28932:18;28924:26;;28996:9;28990:4;28986:20;28982:1;28971:9;28967:17;28960:47;29024:131;29150:4;29024:131;:::i;:::-;29016:139;;28743:419;;;:::o;29168:::-;29334:4;29372:2;29361:9;29357:18;29349:26;;29421:9;29415:4;29411:20;29407:1;29396:9;29392:17;29385:47;29449:131;29575:4;29449:131;:::i;:::-;29441:139;;29168:419;;;:::o;29593:::-;29759:4;29797:2;29786:9;29782:18;29774:26;;29846:9;29840:4;29836:20;29832:1;29821:9;29817:17;29810:47;29874:131;30000:4;29874:131;:::i;:::-;29866:139;;29593:419;;;:::o;30018:::-;30184:4;30222:2;30211:9;30207:18;30199:26;;30271:9;30265:4;30261:20;30257:1;30246:9;30242:17;30235:47;30299:131;30425:4;30299:131;:::i;:::-;30291:139;;30018:419;;;:::o;30443:::-;30609:4;30647:2;30636:9;30632:18;30624:26;;30696:9;30690:4;30686:20;30682:1;30671:9;30667:17;30660:47;30724:131;30850:4;30724:131;:::i;:::-;30716:139;;30443:419;;;:::o;30868:::-;31034:4;31072:2;31061:9;31057:18;31049:26;;31121:9;31115:4;31111:20;31107:1;31096:9;31092:17;31085:47;31149:131;31275:4;31149:131;:::i;:::-;31141:139;;30868:419;;;:::o;31293:::-;31459:4;31497:2;31486:9;31482:18;31474:26;;31546:9;31540:4;31536:20;31532:1;31521:9;31517:17;31510:47;31574:131;31700:4;31574:131;:::i;:::-;31566:139;;31293:419;;;:::o;31718:::-;31884:4;31922:2;31911:9;31907:18;31899:26;;31971:9;31965:4;31961:20;31957:1;31946:9;31942:17;31935:47;31999:131;32125:4;31999:131;:::i;:::-;31991:139;;31718:419;;;:::o;32143:::-;32309:4;32347:2;32336:9;32332:18;32324:26;;32396:9;32390:4;32386:20;32382:1;32371:9;32367:17;32360:47;32424:131;32550:4;32424:131;:::i;:::-;32416:139;;32143:419;;;:::o;32568:::-;32734:4;32772:2;32761:9;32757:18;32749:26;;32821:9;32815:4;32811:20;32807:1;32796:9;32792:17;32785:47;32849:131;32975:4;32849:131;:::i;:::-;32841:139;;32568:419;;;:::o;32993:::-;33159:4;33197:2;33186:9;33182:18;33174:26;;33246:9;33240:4;33236:20;33232:1;33221:9;33217:17;33210:47;33274:131;33400:4;33274:131;:::i;:::-;33266:139;;32993:419;;;:::o;33418:::-;33584:4;33622:2;33611:9;33607:18;33599:26;;33671:9;33665:4;33661:20;33657:1;33646:9;33642:17;33635:47;33699:131;33825:4;33699:131;:::i;:::-;33691:139;;33418:419;;;:::o;33843:::-;34009:4;34047:2;34036:9;34032:18;34024:26;;34096:9;34090:4;34086:20;34082:1;34071:9;34067:17;34060:47;34124:131;34250:4;34124:131;:::i;:::-;34116:139;;33843:419;;;:::o;34268:::-;34434:4;34472:2;34461:9;34457:18;34449:26;;34521:9;34515:4;34511:20;34507:1;34496:9;34492:17;34485:47;34549:131;34675:4;34549:131;:::i;:::-;34541:139;;34268:419;;;:::o;34693:::-;34859:4;34897:2;34886:9;34882:18;34874:26;;34946:9;34940:4;34936:20;34932:1;34921:9;34917:17;34910:47;34974:131;35100:4;34974:131;:::i;:::-;34966:139;;34693:419;;;:::o;35118:::-;35284:4;35322:2;35311:9;35307:18;35299:26;;35371:9;35365:4;35361:20;35357:1;35346:9;35342:17;35335:47;35399:131;35525:4;35399:131;:::i;:::-;35391:139;;35118:419;;;:::o;35543:::-;35709:4;35747:2;35736:9;35732:18;35724:26;;35796:9;35790:4;35786:20;35782:1;35771:9;35767:17;35760:47;35824:131;35950:4;35824:131;:::i;:::-;35816:139;;35543:419;;;:::o;35968:::-;36134:4;36172:2;36161:9;36157:18;36149:26;;36221:9;36215:4;36211:20;36207:1;36196:9;36192:17;36185:47;36249:131;36375:4;36249:131;:::i;:::-;36241:139;;35968:419;;;:::o;36393:::-;36559:4;36597:2;36586:9;36582:18;36574:26;;36646:9;36640:4;36636:20;36632:1;36621:9;36617:17;36610:47;36674:131;36800:4;36674:131;:::i;:::-;36666:139;;36393:419;;;:::o;36818:::-;36984:4;37022:2;37011:9;37007:18;36999:26;;37071:9;37065:4;37061:20;37057:1;37046:9;37042:17;37035:47;37099:131;37225:4;37099:131;:::i;:::-;37091:139;;36818:419;;;:::o;37243:::-;37409:4;37447:2;37436:9;37432:18;37424:26;;37496:9;37490:4;37486:20;37482:1;37471:9;37467:17;37460:47;37524:131;37650:4;37524:131;:::i;:::-;37516:139;;37243:419;;;:::o;37668:::-;37834:4;37872:2;37861:9;37857:18;37849:26;;37921:9;37915:4;37911:20;37907:1;37896:9;37892:17;37885:47;37949:131;38075:4;37949:131;:::i;:::-;37941:139;;37668:419;;;:::o;38093:::-;38259:4;38297:2;38286:9;38282:18;38274:26;;38346:9;38340:4;38336:20;38332:1;38321:9;38317:17;38310:47;38374:131;38500:4;38374:131;:::i;:::-;38366:139;;38093:419;;;:::o;38518:::-;38684:4;38722:2;38711:9;38707:18;38699:26;;38771:9;38765:4;38761:20;38757:1;38746:9;38742:17;38735:47;38799:131;38925:4;38799:131;:::i;:::-;38791:139;;38518:419;;;:::o;38943:::-;39109:4;39147:2;39136:9;39132:18;39124:26;;39196:9;39190:4;39186:20;39182:1;39171:9;39167:17;39160:47;39224:131;39350:4;39224:131;:::i;:::-;39216:139;;38943:419;;;:::o;39368:::-;39534:4;39572:2;39561:9;39557:18;39549:26;;39621:9;39615:4;39611:20;39607:1;39596:9;39592:17;39585:47;39649:131;39775:4;39649:131;:::i;:::-;39641:139;;39368:419;;;:::o;39793:::-;39959:4;39997:2;39986:9;39982:18;39974:26;;40046:9;40040:4;40036:20;40032:1;40021:9;40017:17;40010:47;40074:131;40200:4;40074:131;:::i;:::-;40066:139;;39793:419;;;:::o;40218:::-;40384:4;40422:2;40411:9;40407:18;40399:26;;40471:9;40465:4;40461:20;40457:1;40446:9;40442:17;40435:47;40499:131;40625:4;40499:131;:::i;:::-;40491:139;;40218:419;;;:::o;40643:::-;40809:4;40847:2;40836:9;40832:18;40824:26;;40896:9;40890:4;40886:20;40882:1;40871:9;40867:17;40860:47;40924:131;41050:4;40924:131;:::i;:::-;40916:139;;40643:419;;;:::o;41068:::-;41234:4;41272:2;41261:9;41257:18;41249:26;;41321:9;41315:4;41311:20;41307:1;41296:9;41292:17;41285:47;41349:131;41475:4;41349:131;:::i;:::-;41341:139;;41068:419;;;:::o;41493:::-;41659:4;41697:2;41686:9;41682:18;41674:26;;41746:9;41740:4;41736:20;41732:1;41721:9;41717:17;41710:47;41774:131;41900:4;41774:131;:::i;:::-;41766:139;;41493:419;;;:::o;41918:222::-;42011:4;42049:2;42038:9;42034:18;42026:26;;42062:71;42130:1;42119:9;42115:17;42106:6;42062:71;:::i;:::-;41918:222;;;;:::o;42146:129::-;42180:6;42207:20;;:::i;:::-;42197:30;;42236:33;42264:4;42256:6;42236:33;:::i;:::-;42146:129;;;:::o;42281:75::-;42314:6;42347:2;42341:9;42331:19;;42281:75;:::o;42362:307::-;42423:4;42513:18;42505:6;42502:30;42499:56;;;42535:18;;:::i;:::-;42499:56;42573:29;42595:6;42573:29;:::i;:::-;42565:37;;42657:4;42651;42647:15;42639:23;;42362:307;;;:::o;42675:308::-;42737:4;42827:18;42819:6;42816:30;42813:56;;;42849:18;;:::i;:::-;42813:56;42887:29;42909:6;42887:29;:::i;:::-;42879:37;;42971:4;42965;42961:15;42953:23;;42675:308;;;:::o;42989:141::-;43038:4;43061:3;43053:11;;43084:3;43081:1;43074:14;43118:4;43115:1;43105:18;43097:26;;42989:141;;;:::o;43136:98::-;43187:6;43221:5;43215:12;43205:22;;43136:98;;;:::o;43240:99::-;43292:6;43326:5;43320:12;43310:22;;43240:99;;;:::o;43345:168::-;43428:11;43462:6;43457:3;43450:19;43502:4;43497:3;43493:14;43478:29;;43345:168;;;;:::o;43519:147::-;43620:11;43657:3;43642:18;;43519:147;;;;:::o;43672:169::-;43756:11;43790:6;43785:3;43778:19;43830:4;43825:3;43821:14;43806:29;;43672:169;;;;:::o;43847:148::-;43949:11;43986:3;43971:18;;43847:148;;;;:::o;44001:305::-;44041:3;44060:20;44078:1;44060:20;:::i;:::-;44055:25;;44094:20;44112:1;44094:20;:::i;:::-;44089:25;;44248:1;44180:66;44176:74;44173:1;44170:81;44167:107;;;44254:18;;:::i;:::-;44167:107;44298:1;44295;44291:9;44284:16;;44001:305;;;;:::o;44312:185::-;44352:1;44369:20;44387:1;44369:20;:::i;:::-;44364:25;;44403:20;44421:1;44403:20;:::i;:::-;44398:25;;44442:1;44432:35;;44447:18;;:::i;:::-;44432:35;44489:1;44486;44482:9;44477:14;;44312:185;;;;:::o;44503:348::-;44543:7;44566:20;44584:1;44566:20;:::i;:::-;44561:25;;44600:20;44618:1;44600:20;:::i;:::-;44595:25;;44788:1;44720:66;44716:74;44713:1;44710:81;44705:1;44698:9;44691:17;44687:105;44684:131;;;44795:18;;:::i;:::-;44684:131;44843:1;44840;44836:9;44825:20;;44503:348;;;;:::o;44857:191::-;44897:4;44917:20;44935:1;44917:20;:::i;:::-;44912:25;;44951:20;44969:1;44951:20;:::i;:::-;44946:25;;44990:1;44987;44984:8;44981:34;;;44995:18;;:::i;:::-;44981:34;45040:1;45037;45033:9;45025:17;;44857:191;;;;:::o;45054:96::-;45091:7;45120:24;45138:5;45120:24;:::i;:::-;45109:35;;45054:96;;;:::o;45156:90::-;45190:7;45233:5;45226:13;45219:21;45208:32;;45156:90;;;:::o;45252:149::-;45288:7;45328:66;45321:5;45317:78;45306:89;;45252:149;;;:::o;45407:126::-;45444:7;45484:42;45477:5;45473:54;45462:65;;45407:126;;;:::o;45539:77::-;45576:7;45605:5;45594:16;;45539:77;;;:::o;45622:154::-;45706:6;45701:3;45696;45683:30;45768:1;45759:6;45754:3;45750:16;45743:27;45622:154;;;:::o;45782:307::-;45850:1;45860:113;45874:6;45871:1;45868:13;45860:113;;;45959:1;45954:3;45950:11;45944:18;45940:1;45935:3;45931:11;45924:39;45896:2;45893:1;45889:10;45884:15;;45860:113;;;45991:6;45988:1;45985:13;45982:101;;;46071:1;46062:6;46057:3;46053:16;46046:27;45982:101;45831:258;45782:307;;;:::o;46095:320::-;46139:6;46176:1;46170:4;46166:12;46156:22;;46223:1;46217:4;46213:12;46244:18;46234:81;;46300:4;46292:6;46288:17;46278:27;;46234:81;46362:2;46354:6;46351:14;46331:18;46328:38;46325:84;;;46381:18;;:::i;:::-;46325:84;46146:269;46095:320;;;:::o;46421:281::-;46504:27;46526:4;46504:27;:::i;:::-;46496:6;46492:40;46634:6;46622:10;46619:22;46598:18;46586:10;46583:34;46580:62;46577:88;;;46645:18;;:::i;:::-;46577:88;46685:10;46681:2;46674:22;46464:238;46421:281;;:::o;46708:233::-;46747:3;46770:24;46788:5;46770:24;:::i;:::-;46761:33;;46816:66;46809:5;46806:77;46803:103;;;46886:18;;:::i;:::-;46803:103;46933:1;46926:5;46922:13;46915:20;;46708:233;;;:::o;46947:176::-;46979:1;46996:20;47014:1;46996:20;:::i;:::-;46991:25;;47030:20;47048:1;47030:20;:::i;:::-;47025:25;;47069:1;47059:35;;47074:18;;:::i;:::-;47059:35;47115:1;47112;47108:9;47103:14;;46947:176;;;;:::o;47129:180::-;47177:77;47174:1;47167:88;47274:4;47271:1;47264:15;47298:4;47295:1;47288:15;47315:180;47363:77;47360:1;47353:88;47460:4;47457:1;47450:15;47484:4;47481:1;47474:15;47501:180;47549:77;47546:1;47539:88;47646:4;47643:1;47636:15;47670:4;47667:1;47660:15;47687:180;47735:77;47732:1;47725:88;47832:4;47829:1;47822:15;47856:4;47853:1;47846:15;47873:180;47921:77;47918:1;47911:88;48018:4;48015:1;48008:15;48042:4;48039:1;48032:15;48059:180;48107:77;48104:1;48097:88;48204:4;48201:1;48194:15;48228:4;48225:1;48218:15;48245:117;48354:1;48351;48344:12;48368:117;48477:1;48474;48467:12;48491:117;48600:1;48597;48590:12;48614:117;48723:1;48720;48713:12;48737:117;48846:1;48843;48836:12;48860:117;48969:1;48966;48959:12;48983:102;49024:6;49075:2;49071:7;49066:2;49059:5;49055:14;49051:28;49041:38;;48983:102;;;:::o;49091:236::-;49231:34;49227:1;49219:6;49215:14;49208:58;49300:19;49295:2;49287:6;49283:15;49276:44;49091:236;:::o;49333:182::-;49473:34;49469:1;49461:6;49457:14;49450:58;49333:182;:::o;49521:228::-;49661:34;49657:1;49649:6;49645:14;49638:58;49730:11;49725:2;49717:6;49713:15;49706:36;49521:228;:::o;49755:230::-;49895:34;49891:1;49883:6;49879:14;49872:58;49964:13;49959:2;49951:6;49947:15;49940:38;49755:230;:::o;49991:237::-;50131:34;50127:1;50119:6;50115:14;50108:58;50200:20;50195:2;50187:6;50183:15;50176:45;49991:237;:::o;50234:223::-;50374:34;50370:1;50362:6;50358:14;50351:58;50443:6;50438:2;50430:6;50426:15;50419:31;50234:223;:::o;50463:225::-;50603:34;50599:1;50591:6;50587:14;50580:58;50672:8;50667:2;50659:6;50655:15;50648:33;50463:225;:::o;50694:178::-;50834:30;50830:1;50822:6;50818:14;50811:54;50694:178;:::o;50878:231::-;51018:34;51014:1;51006:6;51002:14;50995:58;51087:14;51082:2;51074:6;51070:15;51063:39;50878:231;:::o;51115:176::-;51255:28;51251:1;51243:6;51239:14;51232:52;51115:176;:::o;51297:178::-;51437:30;51433:1;51425:6;51421:14;51414:54;51297:178;:::o;51481:223::-;51621:34;51617:1;51609:6;51605:14;51598:58;51690:6;51685:2;51677:6;51673:15;51666:31;51481:223;:::o;51710:175::-;51850:27;51846:1;51838:6;51834:14;51827:51;51710:175;:::o;51891:231::-;52031:34;52027:1;52019:6;52015:14;52008:58;52100:14;52095:2;52087:6;52083:15;52076:39;51891:231;:::o;52128:182::-;52268:34;52264:1;52256:6;52252:14;52245:58;52128:182;:::o;52316:243::-;52456:34;52452:1;52444:6;52440:14;52433:58;52525:26;52520:2;52512:6;52508:15;52501:51;52316:243;:::o;52565:229::-;52705:34;52701:1;52693:6;52689:14;52682:58;52774:12;52769:2;52761:6;52757:15;52750:37;52565:229;:::o;52800:228::-;52940:34;52936:1;52928:6;52924:14;52917:58;53009:11;53004:2;52996:6;52992:15;52985:36;52800:228;:::o;53034:182::-;53174:34;53170:1;53162:6;53158:14;53151:58;53034:182;:::o;53222:231::-;53362:34;53358:1;53350:6;53346:14;53339:58;53431:14;53426:2;53418:6;53414:15;53407:39;53222:231;:::o;53459:155::-;53599:7;53595:1;53587:6;53583:14;53576:31;53459:155;:::o;53620:169::-;53760:21;53756:1;53748:6;53744:14;53737:45;53620:169;:::o;53795:182::-;53935:34;53931:1;53923:6;53919:14;53912:58;53795:182;:::o;53983:228::-;54123:34;54119:1;54111:6;54107:14;54100:58;54192:11;54187:2;54179:6;54175:15;54168:36;53983:228;:::o;54217:234::-;54357:34;54353:1;54345:6;54341:14;54334:58;54426:17;54421:2;54413:6;54409:15;54402:42;54217:234;:::o;54457:175::-;54597:27;54593:1;54585:6;54581:14;54574:51;54457:175;:::o;54638:220::-;54778:34;54774:1;54766:6;54762:14;54755:58;54847:3;54842:2;54834:6;54830:15;54823:28;54638:220;:::o;54864:114::-;;:::o;54984:173::-;55124:25;55120:1;55112:6;55108:14;55101:49;54984:173;:::o;55163:236::-;55303:34;55299:1;55291:6;55287:14;55280:58;55372:19;55367:2;55359:6;55355:15;55348:44;55163:236;:::o;55405:231::-;55545:34;55541:1;55533:6;55529:14;55522:58;55614:14;55609:2;55601:6;55597:15;55590:39;55405:231;:::o;55642:224::-;55782:34;55778:1;55770:6;55766:14;55759:58;55851:7;55846:2;55838:6;55834:15;55827:32;55642:224;:::o;55872:225::-;56012:34;56008:1;56000:6;55996:14;55989:58;56081:8;56076:2;56068:6;56064:15;56057:33;55872:225;:::o;56103:175::-;56243:27;56239:1;56231:6;56227:14;56220:51;56103:175;:::o;56284:173::-;56424:25;56420:1;56412:6;56408:14;56401:49;56284:173;:::o;56463:174::-;56603:26;56599:1;56591:6;56587:14;56580:50;56463:174;:::o;56643:122::-;56716:24;56734:5;56716:24;:::i;:::-;56709:5;56706:35;56696:63;;56755:1;56752;56745:12;56696:63;56643:122;:::o;56771:116::-;56841:21;56856:5;56841:21;:::i;:::-;56834:5;56831:32;56821:60;;56877:1;56874;56867:12;56821:60;56771:116;:::o;56893:120::-;56965:23;56982:5;56965:23;:::i;:::-;56958:5;56955:34;56945:62;;57003:1;57000;56993:12;56945:62;56893:120;:::o;57019:122::-;57092:24;57110:5;57092:24;:::i;:::-;57085:5;57082:35;57072:63;;57131:1;57128;57121:12;57072:63;57019:122;:::o

Swarm Source

ipfs://0f69aed9379b91fa697d2d915e6c5eac547307d7e996320aaecaea8acb0d54fb
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.