ERC-721
NFT
Overview
Max Total Supply
10,000 GM42
Holders
3,593
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 GM42Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GM42
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-29 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/math/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @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`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File @openzeppelin/contracts/security/[email protected] // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function totalSupply() public view returns (uint256) { return currentIndex; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert('ERC721A: unable to determine the owner of token'); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: 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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = currentIndex; require(to != address(0), 'ERC721A: mint to the zero address'); require(quantity != 0, 'ERC721A: quantity must be greater than 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } updatedIndex++; } currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721A: transfer to non ERC721Receiver implementer'); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } pragma solidity ^0.8.0; contract GM42 is Ownable, ERC721A, ReentrancyGuard { using SafeMath for uint256; bool private _isActive = false; bool public revealed = false; uint256 public constant MAX_SUPPLY = 10000; uint256 public maxCountPerAccount = 2; uint256 public price = 0 ether; string public hiddenMetadataUri; string private _tokenBaseURI = ""; mapping(address => uint256) public minted; modifier onlyActive() { require(_isActive && totalSupply() < MAX_SUPPLY, 'not active'); _; } constructor() ERC721A("Surf The Kali Yuga", "GM42") { } function mint(uint256 numberOfTokens) external payable onlyActive nonReentrant() { require(numberOfTokens > 0, "zero count"); require(numberOfTokens <= MAX_SUPPLY.sub(totalSupply()), "not enough nfts"); require(numberOfTokens.add(minted[msg.sender]) <= maxCountPerAccount, "already minted"); minted[msg.sender] = minted[msg.sender].add(numberOfTokens); _safeMint(msg.sender, numberOfTokens); } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function _baseURI() internal view override returns (string memory) { return _tokenBaseURI; } function tokenURI(uint256 tokenId) public view override(ERC721A) returns (string memory) { if (revealed == false) { return hiddenMetadataUri; } return super.tokenURI(tokenId); } ///////////////////////////////////////////////////////////// ////////////////// Admin Functions //////////////////////// ///////////////////////////////////////////////////////////// function startSale() external onlyOwner { _isActive = true; } function endSale() external onlyOwner { _isActive = false; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setPrice(uint256 _price) external onlyOwner { price = _price; } function setMaxMintPerAddr(uint256 _count) external onlyOwner { maxCountPerAccount = _count; } function setTokenBaseURI(string memory URI) external onlyOwner { _tokenBaseURI = URI; } function withdraw() external onlyOwner nonReentrant { uint256 balance = address(this).balance; Address.sendValue(payable(owner()), balance); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","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":"endSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxCountPerAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"setMaxMintPerAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setTokenBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff0219169083151502179055506002600a556000600b5560405180602001604052806000815250600d90805190602001906200006b92919062000214565b503480156200007957600080fd5b506040518060400160405280601281526020017f5375726620546865204b616c69205975676100000000000000000000000000008152506040518060400160405280600481526020017f474d34320000000000000000000000000000000000000000000000000000000081525062000106620000fa6200014860201b60201c565b6200015060201b60201c565b81600290805190602001906200011e92919062000214565b5080600390805190602001906200013792919062000214565b505050600160088190555062000329565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022290620002c4565b90600052602060002090601f01602090048101928262000246576000855562000292565b82601f106200026157805160ff191683800117855562000292565b8280016001018555821562000292579182015b828111156200029157825182559160200191906001019062000274565b5b509050620002a19190620002a5565b5090565b5b80821115620002c0576000816000905550600101620002a6565b5090565b60006002820490506001821680620002dd57607f821691505b60208210811415620002f457620002f3620002fa565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6142e680620003396000396000f3fe6080604052600436106101e75760003560e01c8063715018a611610102578063a45ba8e711610095578063c87b56dd11610064578063c87b56dd14610690578063e0a80853146106cd578063e985e9c5146106f6578063f2fde38b14610733576101ee565b8063a45ba8e7146105fa578063b0d1643d14610625578063b66a0e5d14610650578063b88d4fde14610667576101ee565b806395d89b41116100d157806395d89b411461055f578063a035b1fe1461058a578063a0712d68146105b5578063a22cb465146105d1576101ee565b8063715018a6146104cb5780638da5cb5b146104e25780638ef79e911461050d57806391b7f5ed14610536576101ee565b806332cb6b0c1161017a5780634fdd43cb116101495780634fdd43cb146103fd57806351830227146104265780636352211e1461045157806370a082311461048e576101ee565b806332cb6b0c1461037b578063380d831b146103a65780633ccfd60b146103bd57806342842e0e146103d4576101ee565b80631300c014116101b65780631300c014146102c157806318160ddd146102ea5780631e7269c51461031557806323b872dd14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612f75565b61075c565b60405161022791906134fd565b60405180910390f35b34801561023c57600080fd5b5061024561083e565b6040516102529190613518565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613018565b6108d0565b60405161028f9190613496565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612f08565b610955565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190613018565b610a6e565b005b3480156102f657600080fd5b506102ff610af4565b60405161030c919061381a565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190612d85565b610afe565b604051610349919061381a565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190612df2565b610b16565b005b34801561038757600080fd5b50610390610b26565b60405161039d919061381a565b60405180910390f35b3480156103b257600080fd5b506103bb610b2c565b005b3480156103c957600080fd5b506103d2610bc5565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190612df2565b610cb0565b005b34801561040957600080fd5b50610424600480360381019061041f9190612fcf565b610cd0565b005b34801561043257600080fd5b5061043b610d66565b60405161044891906134fd565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613018565b610d79565b6040516104859190613496565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190612d85565b610d8f565b6040516104c2919061381a565b60405180910390f35b3480156104d757600080fd5b506104e0610e78565b005b3480156104ee57600080fd5b506104f7610f00565b6040516105049190613496565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190612fcf565b610f29565b005b34801561054257600080fd5b5061055d60048036038101906105589190613018565b610fbf565b005b34801561056b57600080fd5b50610574611045565b6040516105819190613518565b60405180910390f35b34801561059657600080fd5b5061059f6110d7565b6040516105ac919061381a565b60405180910390f35b6105cf60048036038101906105ca9190613018565b6110dd565b005b3480156105dd57600080fd5b506105f860048036038101906105f39190612ec8565b61136f565b005b34801561060657600080fd5b5061060f6114f0565b60405161061c9190613518565b60405180910390f35b34801561063157600080fd5b5061063a61157e565b604051610647919061381a565b60405180910390f35b34801561065c57600080fd5b50610665611584565b005b34801561067357600080fd5b5061068e60048036038101906106899190612e45565b61161d565b005b34801561069c57600080fd5b506106b760048036038101906106b29190613018565b611679565b6040516106c49190613518565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190612f48565b61173a565b005b34801561070257600080fd5b5061071d60048036038101906107189190612db2565b6117d3565b60405161072a91906134fd565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190612d85565b611867565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061083757506108368261195f565b5b9050919050565b60606002805461084d90613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461087990613a7b565b80156108c65780601f1061089b576101008083540402835291602001916108c6565b820191906000526020600020905b8154815290600101906020018083116108a957829003601f168201915b5050505050905090565b60006108db826119c9565b61091a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610911906137da565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096082610d79565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c8906136fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f06119d7565b73ffffffffffffffffffffffffffffffffffffffff161480610a1f5750610a1e81610a196119d7565b6117d3565b5b610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a559061361a565b60405180910390fd5b610a698383836119df565b505050565b610a766119d7565b73ffffffffffffffffffffffffffffffffffffffff16610a94610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae19061367a565b60405180910390fd5b80600a8190555050565b6000600154905090565b600e6020528060005260406000206000915090505481565b610b21838383611a91565b505050565b61271081565b610b346119d7565b73ffffffffffffffffffffffffffffffffffffffff16610b52610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f9061367a565b60405180910390fd5b6000600960006101000a81548160ff021916908315150217905550565b610bcd6119d7565b73ffffffffffffffffffffffffffffffffffffffff16610beb610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c389061367a565b60405180910390fd5b60026008541415610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e9061379a565b60405180910390fd5b60026008819055506000479050610ca5610c9f610f00565b82611fd1565b506001600881905550565b610ccb8383836040518060200160405280600081525061161d565b505050565b610cd86119d7565b73ffffffffffffffffffffffffffffffffffffffff16610cf6610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d439061367a565b60405180910390fd5b80600c9080519060200190610d62929190612b5f565b5050565b600960019054906101000a900460ff1681565b6000610d84826120c5565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df79061363a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610e806119d7565b73ffffffffffffffffffffffffffffffffffffffff16610e9e610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb9061367a565b60405180910390fd5b610efe600061225f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f316119d7565b73ffffffffffffffffffffffffffffffffffffffff16610f4f610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c9061367a565b60405180910390fd5b80600d9080519060200190610fbb929190612b5f565b5050565b610fc76119d7565b73ffffffffffffffffffffffffffffffffffffffff16610fe5610f00565b73ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110329061367a565b60405180910390fd5b80600b8190555050565b60606003805461105490613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461108090613a7b565b80156110cd5780601f106110a2576101008083540402835291602001916110cd565b820191906000526020600020905b8154815290600101906020018083116110b057829003601f168201915b5050505050905090565b600b5481565b600960009054906101000a900460ff16801561110157506127106110ff610af4565b105b611140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111379061357a565b60405180910390fd5b60026008541415611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d9061379a565b60405180910390fd5b6002600881905550600081116111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c89061373a565b60405180910390fd5b6111ed6111dc610af4565b61271061232390919063ffffffff16565b81111561122f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611226906135fa565b60405180910390fd5b600a54611284600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361233990919063ffffffff16565b11156112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc906137fa565b60405180910390fd5b61131781600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233990919063ffffffff16565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611364338261234f565b600160088190555050565b6113776119d7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dc906136ba565b60405180910390fd5b80600760006113f26119d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661149f6119d7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114e491906134fd565b60405180910390a35050565b600c80546114fd90613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461152990613a7b565b80156115765780601f1061154b57610100808354040283529160200191611576565b820191906000526020600020905b81548152906001019060200180831161155957829003601f168201915b505050505081565b600a5481565b61158c6119d7565b73ffffffffffffffffffffffffffffffffffffffff166115aa610f00565b73ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f79061367a565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b611628848484611a91565b6116348484848461236d565b611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a9061371a565b60405180910390fd5b50505050565b606060001515600960019054906101000a900460ff161515141561172957600c80546116a490613a7b565b80601f01602080910402602001604051908101604052809291908181526020018280546116d090613a7b565b801561171d5780601f106116f25761010080835404028352916020019161171d565b820191906000526020600020905b81548152906001019060200180831161170057829003601f168201915b50505050509050611735565b61173282612504565b90505b919050565b6117426119d7565b73ffffffffffffffffffffffffffffffffffffffff16611760610f00565b73ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad9061367a565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61186f6119d7565b73ffffffffffffffffffffffffffffffffffffffff1661188d610f00565b73ffffffffffffffffffffffffffffffffffffffff16146118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da9061367a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a9061353a565b60405180910390fd5b61195c8161225f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611a9c826120c5565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611ac36119d7565b73ffffffffffffffffffffffffffffffffffffffff161480611b1f5750611ae86119d7565b73ffffffffffffffffffffffffffffffffffffffff16611b07846108d0565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b3b5750611b3a8260000151611b356119d7565b6117d3565b5b905080611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b74906136da565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be69061365a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c569061359a565b60405180910390fd5b611c6c85858560016125ac565b611c7c60008484600001516119df565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f6157611ec0816119c9565b15611f605782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fca85858560016125b2565b5050505050565b80471015612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b906135da565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161203a90613481565b60006040518083038185875af1925050503d8060008114612077576040519150601f19603f3d011682016040523d82523d6000602084013e61207c565b606091505b50509050806120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b7906135ba565b60405180910390fd5b505050565b6120cd612be5565b6120d6826119c9565b612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c9061355a565b60405180910390fd5b60008290505b6000811061221e576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461220f57809250505061225a565b5080806001900391505061211b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906137ba565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836123319190613991565b905092915050565b60008183612347919061390a565b905092915050565b6123698282604051806020016040528060008152506125b8565b5050565b600061238e8473ffffffffffffffffffffffffffffffffffffffff166125ca565b156124f7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123b76119d7565b8786866040518563ffffffff1660e01b81526004016123d994939291906134b1565b602060405180830381600087803b1580156123f357600080fd5b505af192505050801561242457506040513d601f19601f820116820180604052508101906124219190612fa2565b60015b6124a7573d8060008114612454576040519150601f19603f3d011682016040523d82523d6000602084013e612459565b606091505b5060008151141561249f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124969061371a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124fc565b600190505b949350505050565b606061250f826119c9565b61254e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125459061369a565b60405180910390fd5b60006125586125ed565b905060008151141561257957604051806020016040528060008152506125a4565b806125838461267f565b60405160200161259492919061345d565b6040516020818303038152906040525b915050919050565b50505050565b50505050565b6125c583838360016127e0565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060600d80546125fc90613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461262890613a7b565b80156126755780601f1061264a57610100808354040283529160200191612675565b820191906000526020600020905b81548152906001019060200180831161265857829003601f168201915b5050505050905090565b606060008214156126c7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127db565b600082905060005b600082146126f95780806126e290613ade565b915050600a826126f29190613960565b91506126cf565b60008167ffffffffffffffff81111561271557612714613c14565b5b6040519080825280601f01601f1916602001820160405280156127475781602001600182028036833780820191505090505b5090505b600085146127d4576001826127609190613991565b9150600a8561276f9190613b27565b603061277b919061390a565b60f81b81838151811061279157612790613be5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127cd9190613960565b945061274b565b8093505050505b919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e9061375a565b60405180910390fd5b600084141561289b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128929061377a565b60405180910390fd5b6128a860008683876125ac565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612b4257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612b2d57612aed600088848861236d565b612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b239061371a565b60405180910390fd5b5b81806001019250508080600101915050612a76565b508060018190555050612b5860008683876125b2565b5050505050565b828054612b6b90613a7b565b90600052602060002090601f016020900481019282612b8d5760008555612bd4565b82601f10612ba657805160ff1916838001178555612bd4565b82800160010185558215612bd4579182015b82811115612bd3578251825591602001919060010190612bb8565b5b509050612be19190612c1f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612c38576000816000905550600101612c20565b5090565b6000612c4f612c4a8461385a565b613835565b905082815260208101848484011115612c6b57612c6a613c48565b5b612c76848285613a39565b509392505050565b6000612c91612c8c8461388b565b613835565b905082815260208101848484011115612cad57612cac613c48565b5b612cb8848285613a39565b509392505050565b600081359050612ccf81614254565b92915050565b600081359050612ce48161426b565b92915050565b600081359050612cf981614282565b92915050565b600081519050612d0e81614282565b92915050565b600082601f830112612d2957612d28613c43565b5b8135612d39848260208601612c3c565b91505092915050565b600082601f830112612d5757612d56613c43565b5b8135612d67848260208601612c7e565b91505092915050565b600081359050612d7f81614299565b92915050565b600060208284031215612d9b57612d9a613c52565b5b6000612da984828501612cc0565b91505092915050565b60008060408385031215612dc957612dc8613c52565b5b6000612dd785828601612cc0565b9250506020612de885828601612cc0565b9150509250929050565b600080600060608486031215612e0b57612e0a613c52565b5b6000612e1986828701612cc0565b9350506020612e2a86828701612cc0565b9250506040612e3b86828701612d70565b9150509250925092565b60008060008060808587031215612e5f57612e5e613c52565b5b6000612e6d87828801612cc0565b9450506020612e7e87828801612cc0565b9350506040612e8f87828801612d70565b925050606085013567ffffffffffffffff811115612eb057612eaf613c4d565b5b612ebc87828801612d14565b91505092959194509250565b60008060408385031215612edf57612ede613c52565b5b6000612eed85828601612cc0565b9250506020612efe85828601612cd5565b9150509250929050565b60008060408385031215612f1f57612f1e613c52565b5b6000612f2d85828601612cc0565b9250506020612f3e85828601612d70565b9150509250929050565b600060208284031215612f5e57612f5d613c52565b5b6000612f6c84828501612cd5565b91505092915050565b600060208284031215612f8b57612f8a613c52565b5b6000612f9984828501612cea565b91505092915050565b600060208284031215612fb857612fb7613c52565b5b6000612fc684828501612cff565b91505092915050565b600060208284031215612fe557612fe4613c52565b5b600082013567ffffffffffffffff81111561300357613002613c4d565b5b61300f84828501612d42565b91505092915050565b60006020828403121561302e5761302d613c52565b5b600061303c84828501612d70565b91505092915050565b61304e816139c5565b82525050565b61305d816139d7565b82525050565b600061306e826138bc565b61307881856138d2565b9350613088818560208601613a48565b61309181613c57565b840191505092915050565b60006130a7826138c7565b6130b181856138ee565b93506130c1818560208601613a48565b6130ca81613c57565b840191505092915050565b60006130e0826138c7565b6130ea81856138ff565b93506130fa818560208601613a48565b80840191505092915050565b60006131136026836138ee565b915061311e82613c68565b604082019050919050565b6000613136602a836138ee565b915061314182613cb7565b604082019050919050565b6000613159600a836138ee565b915061316482613d06565b602082019050919050565b600061317c6025836138ee565b915061318782613d2f565b604082019050919050565b600061319f603a836138ee565b91506131aa82613d7e565b604082019050919050565b60006131c2601d836138ee565b91506131cd82613dcd565b602082019050919050565b60006131e5600f836138ee565b91506131f082613df6565b602082019050919050565b60006132086039836138ee565b915061321382613e1f565b604082019050919050565b600061322b602b836138ee565b915061323682613e6e565b604082019050919050565b600061324e6026836138ee565b915061325982613ebd565b604082019050919050565b60006132716020836138ee565b915061327c82613f0c565b602082019050919050565b6000613294602f836138ee565b915061329f82613f35565b604082019050919050565b60006132b7601a836138ee565b91506132c282613f84565b602082019050919050565b60006132da6032836138ee565b91506132e582613fad565b604082019050919050565b60006132fd6022836138ee565b915061330882613ffc565b604082019050919050565b60006133206000836138e3565b915061332b8261404b565b600082019050919050565b60006133436033836138ee565b915061334e8261404e565b604082019050919050565b6000613366600a836138ee565b91506133718261409d565b602082019050919050565b60006133896021836138ee565b9150613394826140c6565b604082019050919050565b60006133ac6028836138ee565b91506133b782614115565b604082019050919050565b60006133cf601f836138ee565b91506133da82614164565b602082019050919050565b60006133f2602f836138ee565b91506133fd8261418d565b604082019050919050565b6000613415602d836138ee565b9150613420826141dc565b604082019050919050565b6000613438600e836138ee565b91506134438261422b565b602082019050919050565b61345781613a2f565b82525050565b600061346982856130d5565b915061347582846130d5565b91508190509392505050565b600061348c82613313565b9150819050919050565b60006020820190506134ab6000830184613045565b92915050565b60006080820190506134c66000830187613045565b6134d36020830186613045565b6134e0604083018561344e565b81810360608301526134f28184613063565b905095945050505050565b60006020820190506135126000830184613054565b92915050565b60006020820190508181036000830152613532818461309c565b905092915050565b6000602082019050818103600083015261355381613106565b9050919050565b6000602082019050818103600083015261357381613129565b9050919050565b600060208201905081810360008301526135938161314c565b9050919050565b600060208201905081810360008301526135b38161316f565b9050919050565b600060208201905081810360008301526135d381613192565b9050919050565b600060208201905081810360008301526135f3816131b5565b9050919050565b60006020820190508181036000830152613613816131d8565b9050919050565b60006020820190508181036000830152613633816131fb565b9050919050565b600060208201905081810360008301526136538161321e565b9050919050565b6000602082019050818103600083015261367381613241565b9050919050565b6000602082019050818103600083015261369381613264565b9050919050565b600060208201905081810360008301526136b381613287565b9050919050565b600060208201905081810360008301526136d3816132aa565b9050919050565b600060208201905081810360008301526136f3816132cd565b9050919050565b60006020820190508181036000830152613713816132f0565b9050919050565b6000602082019050818103600083015261373381613336565b9050919050565b6000602082019050818103600083015261375381613359565b9050919050565b600060208201905081810360008301526137738161337c565b9050919050565b600060208201905081810360008301526137938161339f565b9050919050565b600060208201905081810360008301526137b3816133c2565b9050919050565b600060208201905081810360008301526137d3816133e5565b9050919050565b600060208201905081810360008301526137f381613408565b9050919050565b600060208201905081810360008301526138138161342b565b9050919050565b600060208201905061382f600083018461344e565b92915050565b600061383f613850565b905061384b8282613aad565b919050565b6000604051905090565b600067ffffffffffffffff82111561387557613874613c14565b5b61387e82613c57565b9050602081019050919050565b600067ffffffffffffffff8211156138a6576138a5613c14565b5b6138af82613c57565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061391582613a2f565b915061392083613a2f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395557613954613b58565b5b828201905092915050565b600061396b82613a2f565b915061397683613a2f565b92508261398657613985613b87565b5b828204905092915050565b600061399c82613a2f565b91506139a783613a2f565b9250828210156139ba576139b9613b58565b5b828203905092915050565b60006139d082613a0f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a66578082015181840152602081019050613a4b565b83811115613a75576000848401525b50505050565b60006002820490506001821680613a9357607f821691505b60208210811415613aa757613aa6613bb6565b5b50919050565b613ab682613c57565b810181811067ffffffffffffffff82111715613ad557613ad4613c14565b5b80604052505050565b6000613ae982613a2f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b1c57613b1b613b58565b5b600182019050919050565b6000613b3282613a2f565b9150613b3d83613a2f565b925082613b4d57613b4c613b87565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6e6f742061637469766500000000000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f6e6f7420656e6f756768206e6674730000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f7a65726f20636f756e7400000000000000000000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f616c7265616479206d696e746564000000000000000000000000000000000000600082015250565b61425d816139c5565b811461426857600080fd5b50565b614274816139d7565b811461427f57600080fd5b50565b61428b816139e3565b811461429657600080fd5b50565b6142a281613a2f565b81146142ad57600080fd5b5056fea2646970667358221220883329861c8e0046a32d2d3a9b035d4ebd73c1e1d1428658133f003dd7542fc464736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101e75760003560e01c8063715018a611610102578063a45ba8e711610095578063c87b56dd11610064578063c87b56dd14610690578063e0a80853146106cd578063e985e9c5146106f6578063f2fde38b14610733576101ee565b8063a45ba8e7146105fa578063b0d1643d14610625578063b66a0e5d14610650578063b88d4fde14610667576101ee565b806395d89b41116100d157806395d89b411461055f578063a035b1fe1461058a578063a0712d68146105b5578063a22cb465146105d1576101ee565b8063715018a6146104cb5780638da5cb5b146104e25780638ef79e911461050d57806391b7f5ed14610536576101ee565b806332cb6b0c1161017a5780634fdd43cb116101495780634fdd43cb146103fd57806351830227146104265780636352211e1461045157806370a082311461048e576101ee565b806332cb6b0c1461037b578063380d831b146103a65780633ccfd60b146103bd57806342842e0e146103d4576101ee565b80631300c014116101b65780631300c014146102c157806318160ddd146102ea5780631e7269c51461031557806323b872dd14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612f75565b61075c565b60405161022791906134fd565b60405180910390f35b34801561023c57600080fd5b5061024561083e565b6040516102529190613518565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613018565b6108d0565b60405161028f9190613496565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612f08565b610955565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190613018565b610a6e565b005b3480156102f657600080fd5b506102ff610af4565b60405161030c919061381a565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190612d85565b610afe565b604051610349919061381a565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190612df2565b610b16565b005b34801561038757600080fd5b50610390610b26565b60405161039d919061381a565b60405180910390f35b3480156103b257600080fd5b506103bb610b2c565b005b3480156103c957600080fd5b506103d2610bc5565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190612df2565b610cb0565b005b34801561040957600080fd5b50610424600480360381019061041f9190612fcf565b610cd0565b005b34801561043257600080fd5b5061043b610d66565b60405161044891906134fd565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613018565b610d79565b6040516104859190613496565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190612d85565b610d8f565b6040516104c2919061381a565b60405180910390f35b3480156104d757600080fd5b506104e0610e78565b005b3480156104ee57600080fd5b506104f7610f00565b6040516105049190613496565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190612fcf565b610f29565b005b34801561054257600080fd5b5061055d60048036038101906105589190613018565b610fbf565b005b34801561056b57600080fd5b50610574611045565b6040516105819190613518565b60405180910390f35b34801561059657600080fd5b5061059f6110d7565b6040516105ac919061381a565b60405180910390f35b6105cf60048036038101906105ca9190613018565b6110dd565b005b3480156105dd57600080fd5b506105f860048036038101906105f39190612ec8565b61136f565b005b34801561060657600080fd5b5061060f6114f0565b60405161061c9190613518565b60405180910390f35b34801561063157600080fd5b5061063a61157e565b604051610647919061381a565b60405180910390f35b34801561065c57600080fd5b50610665611584565b005b34801561067357600080fd5b5061068e60048036038101906106899190612e45565b61161d565b005b34801561069c57600080fd5b506106b760048036038101906106b29190613018565b611679565b6040516106c49190613518565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190612f48565b61173a565b005b34801561070257600080fd5b5061071d60048036038101906107189190612db2565b6117d3565b60405161072a91906134fd565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190612d85565b611867565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061083757506108368261195f565b5b9050919050565b60606002805461084d90613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461087990613a7b565b80156108c65780601f1061089b576101008083540402835291602001916108c6565b820191906000526020600020905b8154815290600101906020018083116108a957829003601f168201915b5050505050905090565b60006108db826119c9565b61091a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610911906137da565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096082610d79565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c8906136fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f06119d7565b73ffffffffffffffffffffffffffffffffffffffff161480610a1f5750610a1e81610a196119d7565b6117d3565b5b610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a559061361a565b60405180910390fd5b610a698383836119df565b505050565b610a766119d7565b73ffffffffffffffffffffffffffffffffffffffff16610a94610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae19061367a565b60405180910390fd5b80600a8190555050565b6000600154905090565b600e6020528060005260406000206000915090505481565b610b21838383611a91565b505050565b61271081565b610b346119d7565b73ffffffffffffffffffffffffffffffffffffffff16610b52610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f9061367a565b60405180910390fd5b6000600960006101000a81548160ff021916908315150217905550565b610bcd6119d7565b73ffffffffffffffffffffffffffffffffffffffff16610beb610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c389061367a565b60405180910390fd5b60026008541415610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e9061379a565b60405180910390fd5b60026008819055506000479050610ca5610c9f610f00565b82611fd1565b506001600881905550565b610ccb8383836040518060200160405280600081525061161d565b505050565b610cd86119d7565b73ffffffffffffffffffffffffffffffffffffffff16610cf6610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d439061367a565b60405180910390fd5b80600c9080519060200190610d62929190612b5f565b5050565b600960019054906101000a900460ff1681565b6000610d84826120c5565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df79061363a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610e806119d7565b73ffffffffffffffffffffffffffffffffffffffff16610e9e610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb9061367a565b60405180910390fd5b610efe600061225f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f316119d7565b73ffffffffffffffffffffffffffffffffffffffff16610f4f610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c9061367a565b60405180910390fd5b80600d9080519060200190610fbb929190612b5f565b5050565b610fc76119d7565b73ffffffffffffffffffffffffffffffffffffffff16610fe5610f00565b73ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110329061367a565b60405180910390fd5b80600b8190555050565b60606003805461105490613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461108090613a7b565b80156110cd5780601f106110a2576101008083540402835291602001916110cd565b820191906000526020600020905b8154815290600101906020018083116110b057829003601f168201915b5050505050905090565b600b5481565b600960009054906101000a900460ff16801561110157506127106110ff610af4565b105b611140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111379061357a565b60405180910390fd5b60026008541415611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d9061379a565b60405180910390fd5b6002600881905550600081116111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c89061373a565b60405180910390fd5b6111ed6111dc610af4565b61271061232390919063ffffffff16565b81111561122f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611226906135fa565b60405180910390fd5b600a54611284600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361233990919063ffffffff16565b11156112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc906137fa565b60405180910390fd5b61131781600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233990919063ffffffff16565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611364338261234f565b600160088190555050565b6113776119d7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dc906136ba565b60405180910390fd5b80600760006113f26119d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661149f6119d7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114e491906134fd565b60405180910390a35050565b600c80546114fd90613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461152990613a7b565b80156115765780601f1061154b57610100808354040283529160200191611576565b820191906000526020600020905b81548152906001019060200180831161155957829003601f168201915b505050505081565b600a5481565b61158c6119d7565b73ffffffffffffffffffffffffffffffffffffffff166115aa610f00565b73ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f79061367a565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b611628848484611a91565b6116348484848461236d565b611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a9061371a565b60405180910390fd5b50505050565b606060001515600960019054906101000a900460ff161515141561172957600c80546116a490613a7b565b80601f01602080910402602001604051908101604052809291908181526020018280546116d090613a7b565b801561171d5780601f106116f25761010080835404028352916020019161171d565b820191906000526020600020905b81548152906001019060200180831161170057829003601f168201915b50505050509050611735565b61173282612504565b90505b919050565b6117426119d7565b73ffffffffffffffffffffffffffffffffffffffff16611760610f00565b73ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad9061367a565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61186f6119d7565b73ffffffffffffffffffffffffffffffffffffffff1661188d610f00565b73ffffffffffffffffffffffffffffffffffffffff16146118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da9061367a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a9061353a565b60405180910390fd5b61195c8161225f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611a9c826120c5565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611ac36119d7565b73ffffffffffffffffffffffffffffffffffffffff161480611b1f5750611ae86119d7565b73ffffffffffffffffffffffffffffffffffffffff16611b07846108d0565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b3b5750611b3a8260000151611b356119d7565b6117d3565b5b905080611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b74906136da565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be69061365a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c569061359a565b60405180910390fd5b611c6c85858560016125ac565b611c7c60008484600001516119df565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f6157611ec0816119c9565b15611f605782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fca85858560016125b2565b5050505050565b80471015612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b906135da565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161203a90613481565b60006040518083038185875af1925050503d8060008114612077576040519150601f19603f3d011682016040523d82523d6000602084013e61207c565b606091505b50509050806120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b7906135ba565b60405180910390fd5b505050565b6120cd612be5565b6120d6826119c9565b612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c9061355a565b60405180910390fd5b60008290505b6000811061221e576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461220f57809250505061225a565b5080806001900391505061211b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906137ba565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836123319190613991565b905092915050565b60008183612347919061390a565b905092915050565b6123698282604051806020016040528060008152506125b8565b5050565b600061238e8473ffffffffffffffffffffffffffffffffffffffff166125ca565b156124f7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123b76119d7565b8786866040518563ffffffff1660e01b81526004016123d994939291906134b1565b602060405180830381600087803b1580156123f357600080fd5b505af192505050801561242457506040513d601f19601f820116820180604052508101906124219190612fa2565b60015b6124a7573d8060008114612454576040519150601f19603f3d011682016040523d82523d6000602084013e612459565b606091505b5060008151141561249f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124969061371a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124fc565b600190505b949350505050565b606061250f826119c9565b61254e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125459061369a565b60405180910390fd5b60006125586125ed565b905060008151141561257957604051806020016040528060008152506125a4565b806125838461267f565b60405160200161259492919061345d565b6040516020818303038152906040525b915050919050565b50505050565b50505050565b6125c583838360016127e0565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060600d80546125fc90613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461262890613a7b565b80156126755780601f1061264a57610100808354040283529160200191612675565b820191906000526020600020905b81548152906001019060200180831161265857829003601f168201915b5050505050905090565b606060008214156126c7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127db565b600082905060005b600082146126f95780806126e290613ade565b915050600a826126f29190613960565b91506126cf565b60008167ffffffffffffffff81111561271557612714613c14565b5b6040519080825280601f01601f1916602001820160405280156127475781602001600182028036833780820191505090505b5090505b600085146127d4576001826127609190613991565b9150600a8561276f9190613b27565b603061277b919061390a565b60f81b81838151811061279157612790613be5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127cd9190613960565b945061274b565b8093505050505b919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e9061375a565b60405180910390fd5b600084141561289b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128929061377a565b60405180910390fd5b6128a860008683876125ac565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612b4257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612b2d57612aed600088848861236d565b612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b239061371a565b60405180910390fd5b5b81806001019250508080600101915050612a76565b508060018190555050612b5860008683876125b2565b5050505050565b828054612b6b90613a7b565b90600052602060002090601f016020900481019282612b8d5760008555612bd4565b82601f10612ba657805160ff1916838001178555612bd4565b82800160010185558215612bd4579182015b82811115612bd3578251825591602001919060010190612bb8565b5b509050612be19190612c1f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612c38576000816000905550600101612c20565b5090565b6000612c4f612c4a8461385a565b613835565b905082815260208101848484011115612c6b57612c6a613c48565b5b612c76848285613a39565b509392505050565b6000612c91612c8c8461388b565b613835565b905082815260208101848484011115612cad57612cac613c48565b5b612cb8848285613a39565b509392505050565b600081359050612ccf81614254565b92915050565b600081359050612ce48161426b565b92915050565b600081359050612cf981614282565b92915050565b600081519050612d0e81614282565b92915050565b600082601f830112612d2957612d28613c43565b5b8135612d39848260208601612c3c565b91505092915050565b600082601f830112612d5757612d56613c43565b5b8135612d67848260208601612c7e565b91505092915050565b600081359050612d7f81614299565b92915050565b600060208284031215612d9b57612d9a613c52565b5b6000612da984828501612cc0565b91505092915050565b60008060408385031215612dc957612dc8613c52565b5b6000612dd785828601612cc0565b9250506020612de885828601612cc0565b9150509250929050565b600080600060608486031215612e0b57612e0a613c52565b5b6000612e1986828701612cc0565b9350506020612e2a86828701612cc0565b9250506040612e3b86828701612d70565b9150509250925092565b60008060008060808587031215612e5f57612e5e613c52565b5b6000612e6d87828801612cc0565b9450506020612e7e87828801612cc0565b9350506040612e8f87828801612d70565b925050606085013567ffffffffffffffff811115612eb057612eaf613c4d565b5b612ebc87828801612d14565b91505092959194509250565b60008060408385031215612edf57612ede613c52565b5b6000612eed85828601612cc0565b9250506020612efe85828601612cd5565b9150509250929050565b60008060408385031215612f1f57612f1e613c52565b5b6000612f2d85828601612cc0565b9250506020612f3e85828601612d70565b9150509250929050565b600060208284031215612f5e57612f5d613c52565b5b6000612f6c84828501612cd5565b91505092915050565b600060208284031215612f8b57612f8a613c52565b5b6000612f9984828501612cea565b91505092915050565b600060208284031215612fb857612fb7613c52565b5b6000612fc684828501612cff565b91505092915050565b600060208284031215612fe557612fe4613c52565b5b600082013567ffffffffffffffff81111561300357613002613c4d565b5b61300f84828501612d42565b91505092915050565b60006020828403121561302e5761302d613c52565b5b600061303c84828501612d70565b91505092915050565b61304e816139c5565b82525050565b61305d816139d7565b82525050565b600061306e826138bc565b61307881856138d2565b9350613088818560208601613a48565b61309181613c57565b840191505092915050565b60006130a7826138c7565b6130b181856138ee565b93506130c1818560208601613a48565b6130ca81613c57565b840191505092915050565b60006130e0826138c7565b6130ea81856138ff565b93506130fa818560208601613a48565b80840191505092915050565b60006131136026836138ee565b915061311e82613c68565b604082019050919050565b6000613136602a836138ee565b915061314182613cb7565b604082019050919050565b6000613159600a836138ee565b915061316482613d06565b602082019050919050565b600061317c6025836138ee565b915061318782613d2f565b604082019050919050565b600061319f603a836138ee565b91506131aa82613d7e565b604082019050919050565b60006131c2601d836138ee565b91506131cd82613dcd565b602082019050919050565b60006131e5600f836138ee565b91506131f082613df6565b602082019050919050565b60006132086039836138ee565b915061321382613e1f565b604082019050919050565b600061322b602b836138ee565b915061323682613e6e565b604082019050919050565b600061324e6026836138ee565b915061325982613ebd565b604082019050919050565b60006132716020836138ee565b915061327c82613f0c565b602082019050919050565b6000613294602f836138ee565b915061329f82613f35565b604082019050919050565b60006132b7601a836138ee565b91506132c282613f84565b602082019050919050565b60006132da6032836138ee565b91506132e582613fad565b604082019050919050565b60006132fd6022836138ee565b915061330882613ffc565b604082019050919050565b60006133206000836138e3565b915061332b8261404b565b600082019050919050565b60006133436033836138ee565b915061334e8261404e565b604082019050919050565b6000613366600a836138ee565b91506133718261409d565b602082019050919050565b60006133896021836138ee565b9150613394826140c6565b604082019050919050565b60006133ac6028836138ee565b91506133b782614115565b604082019050919050565b60006133cf601f836138ee565b91506133da82614164565b602082019050919050565b60006133f2602f836138ee565b91506133fd8261418d565b604082019050919050565b6000613415602d836138ee565b9150613420826141dc565b604082019050919050565b6000613438600e836138ee565b91506134438261422b565b602082019050919050565b61345781613a2f565b82525050565b600061346982856130d5565b915061347582846130d5565b91508190509392505050565b600061348c82613313565b9150819050919050565b60006020820190506134ab6000830184613045565b92915050565b60006080820190506134c66000830187613045565b6134d36020830186613045565b6134e0604083018561344e565b81810360608301526134f28184613063565b905095945050505050565b60006020820190506135126000830184613054565b92915050565b60006020820190508181036000830152613532818461309c565b905092915050565b6000602082019050818103600083015261355381613106565b9050919050565b6000602082019050818103600083015261357381613129565b9050919050565b600060208201905081810360008301526135938161314c565b9050919050565b600060208201905081810360008301526135b38161316f565b9050919050565b600060208201905081810360008301526135d381613192565b9050919050565b600060208201905081810360008301526135f3816131b5565b9050919050565b60006020820190508181036000830152613613816131d8565b9050919050565b60006020820190508181036000830152613633816131fb565b9050919050565b600060208201905081810360008301526136538161321e565b9050919050565b6000602082019050818103600083015261367381613241565b9050919050565b6000602082019050818103600083015261369381613264565b9050919050565b600060208201905081810360008301526136b381613287565b9050919050565b600060208201905081810360008301526136d3816132aa565b9050919050565b600060208201905081810360008301526136f3816132cd565b9050919050565b60006020820190508181036000830152613713816132f0565b9050919050565b6000602082019050818103600083015261373381613336565b9050919050565b6000602082019050818103600083015261375381613359565b9050919050565b600060208201905081810360008301526137738161337c565b9050919050565b600060208201905081810360008301526137938161339f565b9050919050565b600060208201905081810360008301526137b3816133c2565b9050919050565b600060208201905081810360008301526137d3816133e5565b9050919050565b600060208201905081810360008301526137f381613408565b9050919050565b600060208201905081810360008301526138138161342b565b9050919050565b600060208201905061382f600083018461344e565b92915050565b600061383f613850565b905061384b8282613aad565b919050565b6000604051905090565b600067ffffffffffffffff82111561387557613874613c14565b5b61387e82613c57565b9050602081019050919050565b600067ffffffffffffffff8211156138a6576138a5613c14565b5b6138af82613c57565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061391582613a2f565b915061392083613a2f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395557613954613b58565b5b828201905092915050565b600061396b82613a2f565b915061397683613a2f565b92508261398657613985613b87565b5b828204905092915050565b600061399c82613a2f565b91506139a783613a2f565b9250828210156139ba576139b9613b58565b5b828203905092915050565b60006139d082613a0f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a66578082015181840152602081019050613a4b565b83811115613a75576000848401525b50505050565b60006002820490506001821680613a9357607f821691505b60208210811415613aa757613aa6613bb6565b5b50919050565b613ab682613c57565b810181811067ffffffffffffffff82111715613ad557613ad4613c14565b5b80604052505050565b6000613ae982613a2f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b1c57613b1b613b58565b5b600182019050919050565b6000613b3282613a2f565b9150613b3d83613a2f565b925082613b4d57613b4c613b87565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6e6f742061637469766500000000000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f6e6f7420656e6f756768206e6674730000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f7a65726f20636f756e7400000000000000000000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f616c7265616479206d696e746564000000000000000000000000000000000000600082015250565b61425d816139c5565b811461426857600080fd5b50565b614274816139d7565b811461427f57600080fd5b50565b61428b816139e3565b811461429657600080fd5b50565b6142a281613a2f565b81146142ad57600080fd5b5056fea2646970667358221220883329861c8e0046a32d2d3a9b035d4ebd73c1e1d1428658133f003dd7542fc464736f6c63430008070033
Deployed Bytecode Sourcemap
47344:2592:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34446:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36221:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37783:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37304:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49506:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34283:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47742:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38659:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47519:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49232:74;;;;;;;;;;;;;:::i;:::-;;49731:165;;;;;;;;;;;;;:::i;:::-;;38892:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48446:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47482:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36030:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34803:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2589:103;;;;;;;;;;;;;:::i;:::-;;1938:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49622:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49412:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36390:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47621:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47983:455;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38069:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47660:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47570:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49149:75;;;;;;;;;;;;;:::i;:::-;;39140:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48706:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49316:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38428:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2847:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34446:293;34548:4;34596:25;34581:40;;;:11;:40;;;;:101;;;;34649:33;34634:48;;;:11;:48;;;;34581:101;:150;;;;34695:36;34719:11;34695:23;:36::i;:::-;34581:150;34565:166;;34446:293;;;:::o;36221:100::-;36275:13;36308:5;36301:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36221:100;:::o;37783:214::-;37851:7;37879:16;37887:7;37879;:16::i;:::-;37871:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;37965:15;:24;37981:7;37965:24;;;;;;;;;;;;;;;;;;;;;37958:31;;37783:214;;;:::o;37304:413::-;37377:13;37393:24;37409:7;37393:15;:24::i;:::-;37377:40;;37442:5;37436:11;;:2;:11;;;;37428:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37537:5;37521:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;37546:37;37563:5;37570:12;:10;:12::i;:::-;37546:16;:37::i;:::-;37521:62;37499:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;37681:28;37690:2;37694:7;37703:5;37681:8;:28::i;:::-;37366:351;37304:413;;:::o;49506:108::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49600:6:::1;49579:18;:27;;;;49506:108:::0;:::o;34283:91::-;34327:7;34354:12;;34347:19;;34283:91;:::o;47742:41::-;;;;;;;;;;;;;;;;;:::o;38659:162::-;38785:28;38795:4;38801:2;38805:7;38785:9;:28::i;:::-;38659:162;;;:::o;47519:42::-;47556:5;47519:42;:::o;49232:74::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49293:5:::1;49281:9;;:17;;;;;;;;;;;;;;;;;;49232:74::o:0;49731:165::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18083:1:::1;18681:7;;:19;;18673:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;18083:1;18814:7;:18;;;;49794:15:::2;49812:21;49794:39;;49844:44;49870:7;:5;:7::i;:::-;49880;49844:17;:44::i;:::-;49783:113;18039:1:::1;18993:7;:22;;;;49731:165::o:0;38892:177::-;39022:39;39039:4;39045:2;39049:7;39022:39;;;;;;;;;;;;:16;:39::i;:::-;38892:177;;;:::o;48446:138::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48558:18:::1;48538:17;:38;;;;;;;;;;;;:::i;:::-;;48446:138:::0;:::o;47482:28::-;;;;;;;;;;;;;:::o;36030:124::-;36094:7;36121:20;36133:7;36121:11;:20::i;:::-;:25;;;36114:32;;36030:124;;;:::o;34803:221::-;34867:7;34912:1;34895:19;;:5;:19;;;;34887:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34988:12;:19;35001:5;34988:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;34980:36;;34973:43;;34803:221;;;:::o;2589:103::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2654:30:::1;2681:1;2654:18;:30::i;:::-;2589:103::o:0;1938:87::-;1984:7;2011:6;;;;;;;;;;;2004:13;;1938:87;:::o;49622:101::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49712:3:::1;49696:13;:19;;;;;;;;;;;;:::i;:::-;;49622:101:::0;:::o;49412:86::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49484:6:::1;49476:5;:14;;;;49412:86:::0;:::o;36390:104::-;36446:13;36479:7;36472:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36390:104;:::o;47621:30::-;;;;:::o;47983:455::-;47833:9;;;;;;;;;;;:39;;;;;47556:5;47846:13;:11;:13::i;:::-;:26;47833:39;47825:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18083:1:::1;18681:7;;:19;;18673:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;18083:1;18814:7;:18;;;;48100:1:::2;48083:14;:18;48075:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;48153:29;48168:13;:11;:13::i;:::-;47556:5;48153:14;;:29;;;;:::i;:::-;48135:14;:47;;48127:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;48263:18;;48221:38;48240:6;:18;48247:10;48240:18;;;;;;;;;;;;;;;;48221:14;:18;;:38;;;;:::i;:::-;:60;;48213:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;48342:38;48365:14;48342:6;:18;48349:10;48342:18;;;;;;;;;;;;;;;;:22;;:38;;;;:::i;:::-;48321:6;:18;48328:10;48321:18;;;;;;;;;;;;;;;:59;;;;48393:37;48403:10;48415:14;48393:9;:37::i;:::-;18039:1:::1;18993:7;:22;;;;47983:455:::0;:::o;38069:288::-;38176:12;:10;:12::i;:::-;38164:24;;:8;:24;;;;38156:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;38277:8;38232:18;:32;38251:12;:10;:12::i;:::-;38232:32;;;;;;;;;;;;;;;:42;38265:8;38232:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;38330:8;38301:48;;38316:12;:10;:12::i;:::-;38301:48;;;38340:8;38301:48;;;;;;:::i;:::-;;;;;;;;38069:288;;:::o;47660:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47570:37::-;;;;:::o;49149:75::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49212:4:::1;49200:9;;:16;;;;;;;;;;;;;;;;;;49149:75::o:0;39140:355::-;39299:28;39309:4;39315:2;39319:7;39299:9;:28::i;:::-;39360:48;39383:4;39389:2;39393:7;39402:5;39360:22;:48::i;:::-;39338:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;39140:355;;;;:::o;48706:228::-;48780:13;48827:5;48815:17;;:8;;;;;;;;;;;:17;;;48811:75;;;48857:17;48850:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48811:75;48903:23;48918:7;48903:14;:23::i;:::-;48896:30;;48706:228;;;;:::o;49316:88::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49390:6:::1;49379:8;;:17;;;;;;;;;;;;;;;;;;49316:88:::0;:::o;38428:164::-;38525:4;38549:18;:25;38568:5;38549:25;;;;;;;;;;;;;;;:35;38575:8;38549:35;;;;;;;;;;;;;;;;;;;;;;;;;38542:42;;38428:164;;;;:::o;2847:201::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2956:1:::1;2936:22;;:8;:22;;;;2928:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3012:28;3031:8;3012:18;:28::i;:::-;2847:201:::0;:::o;32425:157::-;32510:4;32549:25;32534:40;;;:11;:40;;;;32527:47;;32425:157;;;:::o;39750:111::-;39807:4;39841:12;;39831:7;:22;39824:29;;39750:111;;;:::o;656:98::-;709:7;736:10;729:17;;656:98;:::o;44530:196::-;44672:2;44645:15;:24;44661:7;44645:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44710:7;44706:2;44690:28;;44699:5;44690:28;;;;;;;;;;;;44530:196;;;:::o;42478:1934::-;42593:35;42631:20;42643:7;42631:11;:20::i;:::-;42593:58;;42664:22;42706:13;:18;;;42690:34;;:12;:10;:12::i;:::-;:34;;;:83;;;;42761:12;:10;:12::i;:::-;42737:36;;:20;42749:7;42737:11;:20::i;:::-;:36;;;42690:83;:146;;;;42786:50;42803:13;:18;;;42823:12;:10;:12::i;:::-;42786:16;:50::i;:::-;42690:146;42664:173;;42858:17;42850:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;42973:4;42951:26;;:13;:18;;;:26;;;42943:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;43053:1;43039:16;;:2;:16;;;;43031:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43110:43;43132:4;43138:2;43142:7;43151:1;43110:21;:43::i;:::-;43218:49;43235:1;43239:7;43248:13;:18;;;43218:8;:49::i;:::-;43585:1;43555:12;:18;43568:4;43555:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43625:1;43597:12;:16;43610:2;43597:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43667:2;43639:11;:20;43651:7;43639:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;43725:15;43680:11;:20;43692:7;43680:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;43981:19;44013:1;44003:7;:11;43981:33;;44070:1;44029:43;;:11;:24;44041:11;44029:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;44025:275;;;44093:20;44101:11;44093:7;:20::i;:::-;44089:200;;;44166:13;:18;;;44134:11;:24;44146:11;44134:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;44245:13;:28;;;44203:11;:24;44215:11;44203:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;44089:200;44025:275;43534:773;44343:7;44339:2;44324:27;;44333:4;44324:27;;;;;;;;;;;;44362:42;44383:4;44389:2;44393:7;44402:1;44362:20;:42::i;:::-;42582:1830;;42478:1934;;;:::o;23413:317::-;23528:6;23503:21;:31;;23495:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23582:12;23600:9;:14;;23622:6;23600:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23581:52;;;23652:7;23644:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;23484:246;23413:317;;:::o;35463:505::-;35524:21;;:::i;:::-;35566:16;35574:7;35566;:16::i;:::-;35558:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35664:12;35679:7;35664:22;;35659:225;35696:1;35688:4;:9;35659:225;;35722:31;35756:11;:17;35768:4;35756:17;;;;;;;;;;;35722:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35818:1;35792:28;;:9;:14;;;:28;;;35788:85;;35848:9;35841:16;;;;;;35788:85;35707:177;35699:6;;;;;;;;35659:225;;;;35903:57;;;;;;;;;;:::i;:::-;;;;;;;;35463:505;;;;:::o;3208:191::-;3282:16;3301:6;;;;;;;;;;;3282:25;;3327:8;3318:6;;:17;;;;;;;;;;;;;;;;;;3382:8;3351:40;;3372:8;3351:40;;;;;;;;;;;;3271:128;3208:191;:::o;6671:98::-;6729:7;6760:1;6756;:5;;;;:::i;:::-;6749:12;;6671:98;;;;:::o;6290:::-;6348:7;6379:1;6375;:5;;;;:::i;:::-;6368:12;;6290:98;;;;:::o;39869:104::-;39938:27;39948:2;39952:8;39938:27;;;;;;;;;;;;:9;:27::i;:::-;39869:104;;:::o;45291:804::-;45446:4;45467:15;:2;:13;;;:15::i;:::-;45463:625;;;45519:2;45503:36;;;45540:12;:10;:12::i;:::-;45554:4;45560:7;45569:5;45503:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45499:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45766:1;45749:6;:13;:18;45745:273;;;45792:61;;;;;;;;;;:::i;:::-;;;;;;;;45745:273;45968:6;45962:13;45953:6;45949:2;45945:15;45938:38;45499:534;45636:45;;;45626:55;;;:6;:55;;;;45619:62;;;;;45463:625;46072:4;46065:11;;45291:804;;;;;;;:::o;36565:335::-;36638:13;36672:16;36680:7;36672;:16::i;:::-;36664:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;36753:21;36777:10;:8;:10::i;:::-;36753:34;;36830:1;36811:7;36805:21;:26;;:87;;;;;;;;;;;;;;;;;36858:7;36867:18;:7;:16;:18::i;:::-;36841:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36805:87;36798:94;;;36565:335;;;:::o;46583:159::-;;;;;:::o;47154:158::-;;;;;:::o;40336:163::-;40459:32;40465:2;40469:8;40479:5;40486:4;40459:5;:32::i;:::-;40336:163;;;:::o;22152:326::-;22212:4;22469:1;22447:7;:19;;;:23;22440:30;;22152:326;;;:::o;48592:106::-;48644:13;48677;48670:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48592:106;:::o;29795:723::-;29851:13;30081:1;30072:5;:10;30068:53;;;30099:10;;;;;;;;;;;;;;;;;;;;;30068:53;30131:12;30146:5;30131:20;;30162:14;30187:78;30202:1;30194:4;:9;30187:78;;30220:8;;;;;:::i;:::-;;;;30251:2;30243:10;;;;;:::i;:::-;;;30187:78;;;30275:19;30307:6;30297:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30275:39;;30325:154;30341:1;30332:5;:10;30325:154;;30369:1;30359:11;;;;;:::i;:::-;;;30436:2;30428:5;:10;;;;:::i;:::-;30415:2;:24;;;;:::i;:::-;30402:39;;30385:6;30392;30385:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;30465:2;30456:11;;;;;:::i;:::-;;;30325:154;;;30503:6;30489:21;;;;;29795:723;;;;:::o;40758:1466::-;40897:20;40920:12;;40897:35;;40965:1;40951:16;;:2;:16;;;;40943:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41036:1;41024:8;:13;;41016:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41095:61;41125:1;41129:2;41133:12;41147:8;41095:21;:61::i;:::-;41462:8;41426:12;:16;41439:2;41426:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41523:8;41482:12;:16;41495:2;41482:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41578:2;41545:11;:25;41557:12;41545:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;41641:15;41591:11;:25;41603:12;41591:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;41670:20;41693:12;41670:35;;41723:9;41718:379;41738:8;41734:1;:12;41718:379;;;41798:12;41794:2;41773:38;;41790:1;41773:38;;;;;;;;;;;;41830:4;41826:229;;;41885:59;41916:1;41920:2;41924:12;41938:5;41885:22;:59::i;:::-;41855:184;;;;;;;;;;;;:::i;:::-;;;;;;;;;41826:229;42071:14;;;;;;;41748:3;;;;;;;41718:379;;;;42124:12;42109;:27;;;;41405:739;42156:60;42185:1;42189:2;42193:12;42207:8;42156:20;:60::i;:::-;40886:1338;40758:1466;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8845:366::-;8987:3;9008:67;9072:2;9067:3;9008:67;:::i;:::-;9001:74;;9084:93;9173:3;9084:93;:::i;:::-;9202:2;9197:3;9193:12;9186:19;;8845:366;;;:::o;9217:::-;9359:3;9380:67;9444:2;9439:3;9380:67;:::i;:::-;9373:74;;9456:93;9545:3;9456:93;:::i;:::-;9574:2;9569:3;9565:12;9558:19;;9217:366;;;:::o;9589:::-;9731:3;9752:67;9816:2;9811:3;9752:67;:::i;:::-;9745:74;;9828:93;9917:3;9828:93;:::i;:::-;9946:2;9941:3;9937:12;9930:19;;9589:366;;;:::o;9961:::-;10103:3;10124:67;10188:2;10183:3;10124:67;:::i;:::-;10117:74;;10200:93;10289:3;10200:93;:::i;:::-;10318:2;10313:3;10309:12;10302:19;;9961:366;;;:::o;10333:::-;10475:3;10496:67;10560:2;10555:3;10496:67;:::i;:::-;10489:74;;10572:93;10661:3;10572:93;:::i;:::-;10690:2;10685:3;10681:12;10674:19;;10333:366;;;:::o;10705:::-;10847:3;10868:67;10932:2;10927:3;10868:67;:::i;:::-;10861:74;;10944:93;11033:3;10944:93;:::i;:::-;11062:2;11057:3;11053:12;11046:19;;10705:366;;;:::o;11077:::-;11219:3;11240:67;11304:2;11299:3;11240:67;:::i;:::-;11233:74;;11316:93;11405:3;11316:93;:::i;:::-;11434:2;11429:3;11425:12;11418:19;;11077:366;;;:::o;11449:::-;11591:3;11612:67;11676:2;11671:3;11612:67;:::i;:::-;11605:74;;11688:93;11777:3;11688:93;:::i;:::-;11806:2;11801:3;11797:12;11790:19;;11449:366;;;:::o;11821:::-;11963:3;11984:67;12048:2;12043:3;11984:67;:::i;:::-;11977:74;;12060:93;12149:3;12060:93;:::i;:::-;12178:2;12173:3;12169:12;12162:19;;11821:366;;;:::o;12193:::-;12335:3;12356:67;12420:2;12415:3;12356:67;:::i;:::-;12349:74;;12432:93;12521:3;12432:93;:::i;:::-;12550:2;12545:3;12541:12;12534:19;;12193:366;;;:::o;12565:::-;12707:3;12728:67;12792:2;12787:3;12728:67;:::i;:::-;12721:74;;12804:93;12893:3;12804:93;:::i;:::-;12922:2;12917:3;12913:12;12906:19;;12565:366;;;:::o;12937:::-;13079:3;13100:67;13164:2;13159:3;13100:67;:::i;:::-;13093:74;;13176:93;13265:3;13176:93;:::i;:::-;13294:2;13289:3;13285:12;13278:19;;12937:366;;;:::o;13309:::-;13451:3;13472:67;13536:2;13531:3;13472:67;:::i;:::-;13465:74;;13548:93;13637:3;13548:93;:::i;:::-;13666:2;13661:3;13657:12;13650:19;;13309:366;;;:::o;13681:::-;13823:3;13844:67;13908:2;13903:3;13844:67;:::i;:::-;13837:74;;13920:93;14009:3;13920:93;:::i;:::-;14038:2;14033:3;14029:12;14022:19;;13681:366;;;:::o;14053:::-;14195:3;14216:67;14280:2;14275:3;14216:67;:::i;:::-;14209:74;;14292:93;14381:3;14292:93;:::i;:::-;14410:2;14405:3;14401:12;14394:19;;14053:366;;;:::o;14425:398::-;14584:3;14605:83;14686:1;14681:3;14605:83;:::i;:::-;14598:90;;14697:93;14786:3;14697:93;:::i;:::-;14815:1;14810:3;14806:11;14799:18;;14425:398;;;:::o;14829:366::-;14971:3;14992:67;15056:2;15051:3;14992:67;:::i;:::-;14985:74;;15068:93;15157:3;15068:93;:::i;:::-;15186:2;15181:3;15177:12;15170:19;;14829:366;;;:::o;15201:::-;15343:3;15364:67;15428:2;15423:3;15364:67;:::i;:::-;15357:74;;15440:93;15529:3;15440:93;:::i;:::-;15558:2;15553:3;15549:12;15542:19;;15201:366;;;:::o;15573:::-;15715:3;15736:67;15800:2;15795:3;15736:67;:::i;:::-;15729:74;;15812:93;15901:3;15812:93;:::i;:::-;15930:2;15925:3;15921:12;15914:19;;15573:366;;;:::o;15945:::-;16087:3;16108:67;16172:2;16167:3;16108:67;:::i;:::-;16101:74;;16184:93;16273:3;16184:93;:::i;:::-;16302:2;16297:3;16293:12;16286:19;;15945:366;;;:::o;16317:::-;16459:3;16480:67;16544:2;16539:3;16480:67;:::i;:::-;16473:74;;16556:93;16645:3;16556:93;:::i;:::-;16674:2;16669:3;16665:12;16658:19;;16317:366;;;:::o;16689:::-;16831:3;16852:67;16916:2;16911:3;16852:67;:::i;:::-;16845:74;;16928:93;17017:3;16928:93;:::i;:::-;17046:2;17041:3;17037:12;17030:19;;16689:366;;;:::o;17061:::-;17203:3;17224:67;17288:2;17283:3;17224:67;:::i;:::-;17217:74;;17300:93;17389:3;17300:93;:::i;:::-;17418:2;17413:3;17409:12;17402:19;;17061:366;;;:::o;17433:::-;17575:3;17596:67;17660:2;17655:3;17596:67;:::i;:::-;17589:74;;17672:93;17761:3;17672:93;:::i;:::-;17790:2;17785:3;17781:12;17774:19;;17433:366;;;:::o;17805:118::-;17892:24;17910:5;17892:24;:::i;:::-;17887:3;17880:37;17805:118;;:::o;17929:435::-;18109:3;18131:95;18222:3;18213:6;18131:95;:::i;:::-;18124:102;;18243:95;18334:3;18325:6;18243:95;:::i;:::-;18236:102;;18355:3;18348:10;;17929:435;;;;;:::o;18370:379::-;18554:3;18576:147;18719:3;18576:147;:::i;:::-;18569:154;;18740:3;18733:10;;18370:379;;;:::o;18755:222::-;18848:4;18886:2;18875:9;18871:18;18863:26;;18899:71;18967:1;18956:9;18952:17;18943:6;18899:71;:::i;:::-;18755:222;;;;:::o;18983:640::-;19178:4;19216:3;19205:9;19201:19;19193:27;;19230:71;19298:1;19287:9;19283:17;19274:6;19230:71;:::i;:::-;19311:72;19379:2;19368:9;19364:18;19355:6;19311:72;:::i;:::-;19393;19461:2;19450:9;19446:18;19437:6;19393:72;:::i;:::-;19512:9;19506:4;19502:20;19497:2;19486:9;19482:18;19475:48;19540:76;19611:4;19602:6;19540:76;:::i;:::-;19532:84;;18983:640;;;;;;;:::o;19629:210::-;19716:4;19754:2;19743:9;19739:18;19731:26;;19767:65;19829:1;19818:9;19814:17;19805:6;19767:65;:::i;:::-;19629:210;;;;:::o;19845:313::-;19958:4;19996:2;19985:9;19981:18;19973:26;;20045:9;20039:4;20035:20;20031:1;20020:9;20016:17;20009:47;20073:78;20146:4;20137:6;20073:78;:::i;:::-;20065:86;;19845:313;;;;:::o;20164:419::-;20330:4;20368:2;20357:9;20353:18;20345:26;;20417:9;20411:4;20407:20;20403:1;20392:9;20388:17;20381:47;20445:131;20571:4;20445:131;:::i;:::-;20437:139;;20164:419;;;:::o;20589:::-;20755:4;20793:2;20782:9;20778:18;20770:26;;20842:9;20836:4;20832:20;20828:1;20817:9;20813:17;20806:47;20870:131;20996:4;20870:131;:::i;:::-;20862:139;;20589:419;;;:::o;21014:::-;21180:4;21218:2;21207:9;21203:18;21195:26;;21267:9;21261:4;21257:20;21253:1;21242:9;21238:17;21231:47;21295:131;21421:4;21295:131;:::i;:::-;21287:139;;21014:419;;;:::o;21439:::-;21605:4;21643:2;21632:9;21628:18;21620:26;;21692:9;21686:4;21682:20;21678:1;21667:9;21663:17;21656:47;21720:131;21846:4;21720:131;:::i;:::-;21712:139;;21439:419;;;:::o;21864:::-;22030:4;22068:2;22057:9;22053:18;22045:26;;22117:9;22111:4;22107:20;22103:1;22092:9;22088:17;22081:47;22145:131;22271:4;22145:131;:::i;:::-;22137:139;;21864:419;;;:::o;22289:::-;22455:4;22493:2;22482:9;22478:18;22470:26;;22542:9;22536:4;22532:20;22528:1;22517:9;22513:17;22506:47;22570:131;22696:4;22570:131;:::i;:::-;22562:139;;22289:419;;;:::o;22714:::-;22880:4;22918:2;22907:9;22903:18;22895:26;;22967:9;22961:4;22957:20;22953:1;22942:9;22938:17;22931:47;22995:131;23121:4;22995:131;:::i;:::-;22987:139;;22714:419;;;:::o;23139:::-;23305:4;23343:2;23332:9;23328:18;23320:26;;23392:9;23386:4;23382:20;23378:1;23367:9;23363:17;23356:47;23420:131;23546:4;23420:131;:::i;:::-;23412:139;;23139:419;;;:::o;23564:::-;23730:4;23768:2;23757:9;23753:18;23745:26;;23817:9;23811:4;23807:20;23803:1;23792:9;23788:17;23781:47;23845:131;23971:4;23845:131;:::i;:::-;23837:139;;23564:419;;;:::o;23989:::-;24155:4;24193:2;24182:9;24178:18;24170:26;;24242:9;24236:4;24232:20;24228:1;24217:9;24213:17;24206:47;24270:131;24396:4;24270:131;:::i;:::-;24262:139;;23989:419;;;:::o;24414:::-;24580:4;24618:2;24607:9;24603:18;24595:26;;24667:9;24661:4;24657:20;24653:1;24642:9;24638:17;24631:47;24695:131;24821:4;24695:131;:::i;:::-;24687:139;;24414:419;;;:::o;24839:::-;25005:4;25043:2;25032:9;25028:18;25020:26;;25092:9;25086:4;25082:20;25078:1;25067:9;25063:17;25056:47;25120:131;25246:4;25120:131;:::i;:::-;25112:139;;24839:419;;;:::o;25264:::-;25430:4;25468:2;25457:9;25453:18;25445:26;;25517:9;25511:4;25507:20;25503:1;25492:9;25488:17;25481:47;25545:131;25671:4;25545:131;:::i;:::-;25537:139;;25264:419;;;:::o;25689:::-;25855:4;25893:2;25882:9;25878:18;25870:26;;25942:9;25936:4;25932:20;25928:1;25917:9;25913:17;25906:47;25970:131;26096:4;25970:131;:::i;:::-;25962:139;;25689:419;;;:::o;26114:::-;26280:4;26318:2;26307:9;26303:18;26295:26;;26367:9;26361:4;26357:20;26353:1;26342:9;26338:17;26331:47;26395:131;26521:4;26395:131;:::i;:::-;26387:139;;26114:419;;;:::o;26539:::-;26705:4;26743:2;26732:9;26728:18;26720:26;;26792:9;26786:4;26782:20;26778:1;26767:9;26763:17;26756:47;26820:131;26946:4;26820:131;:::i;:::-;26812:139;;26539:419;;;:::o;26964:::-;27130:4;27168:2;27157:9;27153:18;27145:26;;27217:9;27211:4;27207:20;27203:1;27192:9;27188:17;27181:47;27245:131;27371:4;27245:131;:::i;:::-;27237:139;;26964:419;;;:::o;27389:::-;27555:4;27593:2;27582:9;27578:18;27570:26;;27642:9;27636:4;27632:20;27628:1;27617:9;27613:17;27606:47;27670:131;27796:4;27670:131;:::i;:::-;27662:139;;27389:419;;;:::o;27814:::-;27980:4;28018:2;28007:9;28003:18;27995:26;;28067:9;28061:4;28057:20;28053:1;28042:9;28038:17;28031:47;28095:131;28221:4;28095:131;:::i;:::-;28087:139;;27814:419;;;:::o;28239:::-;28405:4;28443:2;28432:9;28428:18;28420:26;;28492:9;28486:4;28482:20;28478:1;28467:9;28463:17;28456:47;28520:131;28646:4;28520:131;:::i;:::-;28512:139;;28239:419;;;:::o;28664:::-;28830:4;28868:2;28857:9;28853:18;28845:26;;28917:9;28911:4;28907:20;28903:1;28892:9;28888:17;28881:47;28945:131;29071:4;28945:131;:::i;:::-;28937:139;;28664:419;;;:::o;29089:::-;29255:4;29293:2;29282:9;29278:18;29270:26;;29342:9;29336:4;29332:20;29328:1;29317:9;29313:17;29306:47;29370:131;29496:4;29370:131;:::i;:::-;29362:139;;29089:419;;;:::o;29514:::-;29680:4;29718:2;29707:9;29703:18;29695:26;;29767:9;29761:4;29757:20;29753:1;29742:9;29738:17;29731:47;29795:131;29921:4;29795:131;:::i;:::-;29787:139;;29514:419;;;:::o;29939:222::-;30032:4;30070:2;30059:9;30055:18;30047:26;;30083:71;30151:1;30140:9;30136:17;30127:6;30083:71;:::i;:::-;29939:222;;;;:::o;30167:129::-;30201:6;30228:20;;:::i;:::-;30218:30;;30257:33;30285:4;30277:6;30257:33;:::i;:::-;30167:129;;;:::o;30302:75::-;30335:6;30368:2;30362:9;30352:19;;30302:75;:::o;30383:307::-;30444:4;30534:18;30526:6;30523:30;30520:56;;;30556:18;;:::i;:::-;30520:56;30594:29;30616:6;30594:29;:::i;:::-;30586:37;;30678:4;30672;30668:15;30660:23;;30383:307;;;:::o;30696:308::-;30758:4;30848:18;30840:6;30837:30;30834:56;;;30870:18;;:::i;:::-;30834:56;30908:29;30930:6;30908:29;:::i;:::-;30900:37;;30992:4;30986;30982:15;30974:23;;30696:308;;;:::o;31010:98::-;31061:6;31095:5;31089:12;31079:22;;31010:98;;;:::o;31114:99::-;31166:6;31200:5;31194:12;31184:22;;31114:99;;;:::o;31219:168::-;31302:11;31336:6;31331:3;31324:19;31376:4;31371:3;31367:14;31352:29;;31219:168;;;;:::o;31393:147::-;31494:11;31531:3;31516:18;;31393:147;;;;:::o;31546:169::-;31630:11;31664:6;31659:3;31652:19;31704:4;31699:3;31695:14;31680:29;;31546:169;;;;:::o;31721:148::-;31823:11;31860:3;31845:18;;31721:148;;;;:::o;31875:305::-;31915:3;31934:20;31952:1;31934:20;:::i;:::-;31929:25;;31968:20;31986:1;31968:20;:::i;:::-;31963:25;;32122:1;32054:66;32050:74;32047:1;32044:81;32041:107;;;32128:18;;:::i;:::-;32041:107;32172:1;32169;32165:9;32158:16;;31875:305;;;;:::o;32186:185::-;32226:1;32243:20;32261:1;32243:20;:::i;:::-;32238:25;;32277:20;32295:1;32277:20;:::i;:::-;32272:25;;32316:1;32306:35;;32321:18;;:::i;:::-;32306:35;32363:1;32360;32356:9;32351:14;;32186:185;;;;:::o;32377:191::-;32417:4;32437:20;32455:1;32437:20;:::i;:::-;32432:25;;32471:20;32489:1;32471:20;:::i;:::-;32466:25;;32510:1;32507;32504:8;32501:34;;;32515:18;;:::i;:::-;32501:34;32560:1;32557;32553:9;32545:17;;32377:191;;;;:::o;32574:96::-;32611:7;32640:24;32658:5;32640:24;:::i;:::-;32629:35;;32574:96;;;:::o;32676:90::-;32710:7;32753:5;32746:13;32739:21;32728:32;;32676:90;;;:::o;32772:149::-;32808:7;32848:66;32841:5;32837:78;32826:89;;32772:149;;;:::o;32927:126::-;32964:7;33004:42;32997:5;32993:54;32982:65;;32927:126;;;:::o;33059:77::-;33096:7;33125:5;33114:16;;33059:77;;;:::o;33142:154::-;33226:6;33221:3;33216;33203:30;33288:1;33279:6;33274:3;33270:16;33263:27;33142:154;;;:::o;33302:307::-;33370:1;33380:113;33394:6;33391:1;33388:13;33380:113;;;33479:1;33474:3;33470:11;33464:18;33460:1;33455:3;33451:11;33444:39;33416:2;33413:1;33409:10;33404:15;;33380:113;;;33511:6;33508:1;33505:13;33502:101;;;33591:1;33582:6;33577:3;33573:16;33566:27;33502:101;33351:258;33302:307;;;:::o;33615:320::-;33659:6;33696:1;33690:4;33686:12;33676:22;;33743:1;33737:4;33733:12;33764:18;33754:81;;33820:4;33812:6;33808:17;33798:27;;33754:81;33882:2;33874:6;33871:14;33851:18;33848:38;33845:84;;;33901:18;;:::i;:::-;33845:84;33666:269;33615:320;;;:::o;33941:281::-;34024:27;34046:4;34024:27;:::i;:::-;34016:6;34012:40;34154:6;34142:10;34139:22;34118:18;34106:10;34103:34;34100:62;34097:88;;;34165:18;;:::i;:::-;34097:88;34205:10;34201:2;34194:22;33984:238;33941:281;;:::o;34228:233::-;34267:3;34290:24;34308:5;34290:24;:::i;:::-;34281:33;;34336:66;34329:5;34326:77;34323:103;;;34406:18;;:::i;:::-;34323:103;34453:1;34446:5;34442:13;34435:20;;34228:233;;;:::o;34467:176::-;34499:1;34516:20;34534:1;34516:20;:::i;:::-;34511:25;;34550:20;34568:1;34550:20;:::i;:::-;34545:25;;34589:1;34579:35;;34594:18;;:::i;:::-;34579:35;34635:1;34632;34628:9;34623:14;;34467:176;;;;:::o;34649:180::-;34697:77;34694:1;34687:88;34794:4;34791:1;34784:15;34818:4;34815:1;34808:15;34835:180;34883:77;34880:1;34873:88;34980:4;34977:1;34970:15;35004:4;35001:1;34994:15;35021:180;35069:77;35066:1;35059:88;35166:4;35163:1;35156:15;35190:4;35187:1;35180:15;35207:180;35255:77;35252:1;35245:88;35352:4;35349:1;35342:15;35376:4;35373:1;35366:15;35393:180;35441:77;35438:1;35431:88;35538:4;35535:1;35528:15;35562:4;35559:1;35552:15;35579:117;35688:1;35685;35678:12;35702:117;35811:1;35808;35801:12;35825:117;35934:1;35931;35924:12;35948:117;36057:1;36054;36047:12;36071:102;36112:6;36163:2;36159:7;36154:2;36147:5;36143:14;36139:28;36129:38;;36071:102;;;:::o;36179:225::-;36319:34;36315:1;36307:6;36303:14;36296:58;36388:8;36383:2;36375:6;36371:15;36364:33;36179:225;:::o;36410:229::-;36550:34;36546:1;36538:6;36534:14;36527:58;36619:12;36614:2;36606:6;36602:15;36595:37;36410:229;:::o;36645:160::-;36785:12;36781:1;36773:6;36769:14;36762:36;36645:160;:::o;36811:224::-;36951:34;36947:1;36939:6;36935:14;36928:58;37020:7;37015:2;37007:6;37003:15;36996:32;36811:224;:::o;37041:245::-;37181:34;37177:1;37169:6;37165:14;37158:58;37250:28;37245:2;37237:6;37233:15;37226:53;37041:245;:::o;37292:179::-;37432:31;37428:1;37420:6;37416:14;37409:55;37292:179;:::o;37477:165::-;37617:17;37613:1;37605:6;37601:14;37594:41;37477:165;:::o;37648:244::-;37788:34;37784:1;37776:6;37772:14;37765:58;37857:27;37852:2;37844:6;37840:15;37833:52;37648:244;:::o;37898:230::-;38038:34;38034:1;38026:6;38022:14;38015:58;38107:13;38102:2;38094:6;38090:15;38083:38;37898:230;:::o;38134:225::-;38274:34;38270:1;38262:6;38258:14;38251:58;38343:8;38338:2;38330:6;38326:15;38319:33;38134:225;:::o;38365:182::-;38505:34;38501:1;38493:6;38489:14;38482:58;38365:182;:::o;38553:234::-;38693:34;38689:1;38681:6;38677:14;38670:58;38762:17;38757:2;38749:6;38745:15;38738:42;38553:234;:::o;38793:176::-;38933:28;38929:1;38921:6;38917:14;38910:52;38793:176;:::o;38975:237::-;39115:34;39111:1;39103:6;39099:14;39092:58;39184:20;39179:2;39171:6;39167:15;39160:45;38975:237;:::o;39218:221::-;39358:34;39354:1;39346:6;39342:14;39335:58;39427:4;39422:2;39414:6;39410:15;39403:29;39218:221;:::o;39445:114::-;;:::o;39565:238::-;39705:34;39701:1;39693:6;39689:14;39682:58;39774:21;39769:2;39761:6;39757:15;39750:46;39565:238;:::o;39809:160::-;39949:12;39945:1;39937:6;39933:14;39926:36;39809:160;:::o;39975:220::-;40115:34;40111:1;40103:6;40099:14;40092:58;40184:3;40179:2;40171:6;40167:15;40160:28;39975:220;:::o;40201:227::-;40341:34;40337:1;40329:6;40325:14;40318:58;40410:10;40405:2;40397:6;40393:15;40386:35;40201:227;:::o;40434:181::-;40574:33;40570:1;40562:6;40558:14;40551:57;40434:181;:::o;40621:234::-;40761:34;40757:1;40749:6;40745:14;40738:58;40830:17;40825:2;40817:6;40813:15;40806:42;40621:234;:::o;40861:232::-;41001:34;40997:1;40989:6;40985:14;40978:58;41070:15;41065:2;41057:6;41053:15;41046:40;40861:232;:::o;41099:164::-;41239:16;41235:1;41227:6;41223:14;41216:40;41099:164;:::o;41269:122::-;41342:24;41360:5;41342:24;:::i;:::-;41335:5;41332:35;41322:63;;41381:1;41378;41371:12;41322:63;41269:122;:::o;41397:116::-;41467:21;41482:5;41467:21;:::i;:::-;41460:5;41457:32;41447:60;;41503:1;41500;41493:12;41447:60;41397:116;:::o;41519:120::-;41591:23;41608:5;41591:23;:::i;:::-;41584:5;41581:34;41571:62;;41629:1;41626;41619:12;41571:62;41519:120;:::o;41645:122::-;41718:24;41736:5;41718:24;:::i;:::-;41711:5;41708:35;41698:63;;41757:1;41754;41747:12;41698:63;41645:122;:::o
Swarm Source
ipfs://883329861c8e0046a32d2d3a9b035d4ebd73c1e1d1428658133f003dd7542fc4
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.