Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
2,178 PRIME
Holders
748
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 PRIMELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PrimeApes
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-01 */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol // OpenZeppelin Contracts v4.3.2 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.3.2 (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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.3.2 (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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.3.2 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.3.2 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.3.2 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // SPDX-License-Identifier: MIT // File: contracts/NewPrimeApes.sol pragma solidity ^0.8.0; contract PrimeApes is ERC721Enumerable, Ownable { using Strings for uint256; uint8 public earlyBirdMaxBuy = 5; uint8 public privateMaxBuy = 5; uint8 public publicMaxPerMint = 5; uint8 public gifts = 111; uint32 public earlyBirds = 1100; uint32 public privatePrimeApes = 3500; uint32 public publicPrimeApes = 6400; uint256 public price = 0.05 ether; uint256 public earlyBirdsMinted; uint256 public privateApesMinted; uint256 public publicApesMinted; uint256 public totalGifts; uint256 public totalPrimeApes = earlyBirds + privatePrimeApes + publicPrimeApes + gifts; bool public earlyBirdSaleActive; bool public privateSaleActive; bool public publicSaleActive; bool public reveal = false; string private baseURI; string private baseExtension = ".json"; string private unrevealedURI; mapping(address => bool) public privateSaleAddress; mapping(address => uint256) public privateSalePurchased; address payable private teamAccounts; constructor(address _payments) ERC721("Prime Apes", "PRIME") {} function earlyBirdSale(uint256 _primeApesCount) external payable { require(_primeApesCount <= publicMaxPerMint, "Mint 5 Prime Apes per transaction"); require(price * _primeApesCount <= msg.value, "Not enough ETH in wallet"); require(earlyBirdSaleActive, "Early Bird is not live"); require(totalSupply() < totalPrimeApes, "All sold out"); require(publicApesMinted + _primeApesCount <= privatePrimeApes, "This transaction exceeds the total supply of early bird Prime Apes"); for(uint256 a = 0; a < _primeApesCount; a++) { earlyBirdsMinted++; _safeMint(msg.sender, totalSupply() + 1); } } function privateSale(uint256 _primeApesCount) external payable { require(privateSaleAddress[msg.sender], "You're not Whitelisted"); require(privateSalePurchased[msg.sender] + _primeApesCount <= privateMaxBuy, "Mint 5 Prime Apes Max"); require(price * _primeApesCount <= msg.value, "Not enough ETH in wallet"); require(privateSaleActive && !publicSaleActive, "Private sale is not live..."); require(totalSupply() < totalPrimeApes, "Sold out"); require(privateApesMinted + _primeApesCount <= privatePrimeApes, "This transaction exceeds the private sale supply of Prime Apes!"); for(uint256 a = 0; a < _primeApesCount; a++) { privateSalePurchased[msg.sender]++; privateApesMinted++; _safeMint(msg.sender, totalSupply() + 1); } } function publicSale(uint256 _primeApesCount) external payable { require(!privateSaleActive, "Private sale needs to end!"); require(_primeApesCount <= publicMaxPerMint, "Mint 5 Prime Apes per transaction"); require(price * _primeApesCount <= msg.value, "Not enough ETH in wallet!"); require(publicSaleActive, "Public Sale not live..."); require(totalSupply() < totalPrimeApes, "Sold out"); require(publicApesMinted + _primeApesCount <= privatePrimeApes, "This transaction exceeds the total supply of Prime Apes!"); for(uint256 a = 0; a < _primeApesCount; a++) { publicApesMinted++; _safeMint(msg.sender, totalSupply() + 1); } } function switchEarlyBirdStatus() external onlyOwner { earlyBirdSaleActive = !earlyBirdSaleActive; } function switchPrivateStatus() external onlyOwner { privateSaleActive = !privateSaleActive; } function switchPublicStatus() external onlyOwner { publicSaleActive = !publicSaleActive; } function addToPrivateSale(address[] calldata _users) external onlyOwner { for(uint256 a = 0; a < _users.length; a++) { address user = _users[a]; require(!privateSaleAddress[user], "Duplicate Address"); require (user != address(0), "Invalid Address"); privateSaleAddress[user] = true; } } function removeFromPrivateSale(address[] calldata _users) external onlyOwner { for(uint256 a = 0; a < _users.length; a++) { address user = _users[a]; require (user != address(0), "Invalid Address"); privateSaleAddress[user] = false; } } function gift(address[] calldata _user) external onlyOwner { require(totalGifts + _user.length <= gifts, "No more gifts available"); require(totalSupply() + _user.length <= totalPrimeApes, "Sold out"); for (uint256 i = 0; i < _user.length; i++) { totalGifts++; _safeMint(_user[i], totalSupply() + 1); } } function isPrivateAddress(address _user) external view returns (bool) { return privateSaleAddress[_user]; } function checkPrivateSalePurchases(address _user) external view returns (uint256) { return privateSalePurchased[_user]; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } function setPrice(uint256 _newPrice) public onlyOwner { price = _newPrice; } function setReveal() public onlyOwner() { reveal = true; } function setBaseURI(string memory _URI) external onlyOwner { baseURI = _URI; } function setUnrevealedURI(string memory _unrevealedURI) external onlyOwner { unrevealedURI = _unrevealedURI; } function setBaseExtension(string calldata _ext) external onlyOwner { baseExtension = _ext; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); if(reveal == false) { return unrevealedURI; } return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), baseExtension)) : ""; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_payments","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"addToPrivateSale","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"_user","type":"address"}],"name":"checkPrivateSalePurchases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyBirdMaxBuy","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_primeApesCount","type":"uint256"}],"name":"earlyBirdSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"earlyBirdSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyBirds","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyBirdsMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gifts","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isPrivateAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"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":"privateApesMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateMaxBuy","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privatePrimeApes","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_primeApesCount","type":"uint256"}],"name":"privateSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"privateSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privateSaleAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privateSalePurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicApesMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMaxPerMint","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicPrimeApes","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_primeApesCount","type":"uint256"}],"name":"publicSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"removeFromPrivateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","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":"_ext","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_unrevealedURI","type":"string"}],"name":"setUnrevealedURI","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":"switchEarlyBirdStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchPrivateStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchPublicStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGifts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPrimeApes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526005600a60146101000a81548160ff021916908360ff1602179055506005600a60156101000a81548160ff021916908360ff1602179055506005600a60166101000a81548160ff021916908360ff160217905550606f600a60176101000a81548160ff021916908360ff16021790555061044c600a60186101000a81548163ffffffff021916908363ffffffff160217905550610dac600a601c6101000a81548163ffffffff021916908363ffffffff160217905550611900600b60006101000a81548163ffffffff021916908363ffffffff16021790555066b1a2bc2ec50000600c55600a60179054906101000a900460ff1660ff16600b60009054906101000a900463ffffffff16600a601c9054906101000a900463ffffffff16600a60189054906101000a900463ffffffff1662000140919062000485565b6200014c919062000485565b62000158919062000485565b63ffffffff166011556000601260036101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060149080519060200190620001c992919062000392565b50348015620001d757600080fd5b50604051620061ea380380620061ea8339818101604052810190620001fd919062000459565b6040518060400160405280600a81526020017f5072696d652041706573000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5052494d4500000000000000000000000000000000000000000000000000000081525081600090805190602001906200028192919062000392565b5080600190805190602001906200029a92919062000392565b505050620002bd620002b1620002c460201b60201c565b620002cc60201b60201c565b50620005b8565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003a0906200050a565b90600052602060002090601f016020900481019282620003c4576000855562000410565b82601f10620003df57805160ff191683800117855562000410565b8280016001018555821562000410579182015b828111156200040f578251825591602001919060010190620003f2565b5b5090506200041f919062000423565b5090565b5b808211156200043e57600081600090555060010162000424565b5090565b60008151905062000453816200059e565b92915050565b6000602082840312156200046c57600080fd5b60006200047c8482850162000442565b91505092915050565b60006200049282620004fa565b91506200049f83620004fa565b92508263ffffffff03821115620004bb57620004ba62000540565b5b828201905092915050565b6000620004d382620004da565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600063ffffffff82169050919050565b600060028204905060018216806200052357607f821691505b602082108114156200053a57620005396200056f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620005a981620004c6565b8114620005b557600080fd5b50565b615c2280620005c86000396000f3fe6080604052600436106103505760003560e01c806385c6f12d116101c6578063b88d4fde116100f7578063def971b811610095578063ecc7f27d1161006f578063ecc7f27d14610c0c578063f2fde38b14610c35578063f854684c14610c5e578063fe2c7fee14610c7557610350565b8063def971b814610b79578063e4fb515514610ba4578063e985e9c514610bcf57610350565b8063c3b901ea116100d1578063c3b901ea14610ad1578063c87b56dd14610ae8578063cef443d514610b25578063da3ef23f14610b5057610350565b8063b88d4fde14610a61578063b8d59a6514610a8a578063bc8893b414610aa657610350565b8063a035b1fe11610164578063a717a4821161013e578063a717a482146109d3578063afb5965c146109fe578063b287c8ed14610a1a578063b5cf125714610a3657610350565b8063a035b1fe14610954578063a22cb4651461097f578063a475b5dd146109a857610350565b806391b7f5ed116101a057806391b7f5ed146108aa57806395d89b41146108d357806398cef4bd146108fe5780639e8cb3c51461092957610350565b806385c6f12d1461082b5780638ab1d22c146108425780638da5cb5b1461087f57610350565b806342842e0e116102a0578063645d8d2f1161023e578063715018a611610218578063715018a6146107955780637295920c146107ac578063738070c7146107d7578063766453151461081457610350565b8063645d8d2f14610702578063663eef041461072d57806370a082311461075857610350565b80634f6ccce71161027a5780634f6ccce71461062257806355f804b31461065f5780636352211e14610688578063637cae04146106c557610350565b806342842e0e146105935780634878868c146105bc5780634dc818e3146105e557610350565b806318160ddd1161030d5780632a86ceec116102e75780632a86ceec146104f65780632f745c59146105215780633ccfd60b1461055e5780633d3d874a1461056857610350565b806318160ddd1461047757806323b872dd146104a25780632a237bb6146104cb57610350565b806301ffc9a71461035557806306fdde0314610392578063081812fc146103bd57806308428437146103fa578063095ea7b314610425578063163e1e611461044e575b600080fd5b34801561036157600080fd5b5061037c60048036038101906103779190614386565b610c9e565b604051610389919061524d565b60405180910390f35b34801561039e57600080fd5b506103a7610d18565b6040516103b49190615268565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df919061445e565b610daa565b6040516103f191906151e6565b60405180910390f35b34801561040657600080fd5b5061040f610e2f565b60405161041c91906156ea565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190614305565b610e35565b005b34801561045a57600080fd5b5061047560048036038101906104709190614341565b610f4d565b005b34801561048357600080fd5b5061048c611130565b60405161049991906156ea565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906141ff565b61113d565b005b3480156104d757600080fd5b506104e061119d565b6040516104ed919061524d565b60405180910390f35b34801561050257600080fd5b5061050b6111b0565b60405161051891906156ea565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190614305565b6111b6565b60405161055591906156ea565b60405180910390f35b61056661125b565b005b34801561057457600080fd5b5061057d611350565b60405161058a9190615720565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b591906141ff565b611363565b005b3480156105c857600080fd5b506105e360048036038101906105de9190614341565b611383565b005b3480156105f157600080fd5b5061060c6004803603810190610607919061419a565b611540565b60405161061991906156ea565b60405180910390f35b34801561062e57600080fd5b506106496004803603810190610644919061445e565b611589565b60405161065691906156ea565b60405180910390f35b34801561066b57600080fd5b506106866004803603810190610681919061441d565b611620565b005b34801561069457600080fd5b506106af60048036038101906106aa919061445e565b6116b6565b6040516106bc91906151e6565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e7919061419a565b611768565b6040516106f991906156ea565b60405180910390f35b34801561070e57600080fd5b50610717611780565b60405161072491906156ea565b60405180910390f35b34801561073957600080fd5b50610742611786565b60405161074f919061524d565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a919061419a565b611799565b60405161078c91906156ea565b60405180910390f35b3480156107a157600080fd5b506107aa611851565b005b3480156107b857600080fd5b506107c16118d9565b6040516107ce9190615705565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f9919061419a565b6118ef565b60405161080b919061524d565b60405180910390f35b34801561082057600080fd5b5061082961190f565b005b34801561083757600080fd5b506108406119a8565b005b34801561084e57600080fd5b506108696004803603810190610864919061419a565b611a50565b604051610876919061524d565b60405180910390f35b34801561088b57600080fd5b50610894611aa6565b6040516108a191906151e6565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc919061445e565b611ad0565b005b3480156108df57600080fd5b506108e8611b56565b6040516108f59190615268565b60405180910390f35b34801561090a57600080fd5b50610913611be8565b6040516109209190615705565b60405180910390f35b34801561093557600080fd5b5061093e611bfe565b60405161094b9190615720565b60405180910390f35b34801561096057600080fd5b50610969611c11565b60405161097691906156ea565b60405180910390f35b34801561098b57600080fd5b506109a660048036038101906109a191906142c9565b611c17565b005b3480156109b457600080fd5b506109bd611c2d565b6040516109ca919061524d565b60405180910390f35b3480156109df57600080fd5b506109e8611c40565b6040516109f591906156ea565b60405180910390f35b610a186004803603810190610a13919061445e565b611c46565b005b610a346004803603810190610a2f919061445e565b611e44565b005b348015610a4257600080fd5b50610a4b612092565b604051610a589190615720565b60405180910390f35b348015610a6d57600080fd5b50610a886004803603810190610a83919061424e565b6120a5565b005b610aa46004803603810190610a9f919061445e565b612107565b005b348015610ab257600080fd5b50610abb612449565b604051610ac8919061524d565b60405180910390f35b348015610add57600080fd5b50610ae661245c565b005b348015610af457600080fd5b50610b0f6004803603810190610b0a919061445e565b612504565b604051610b1c9190615268565b60405180910390f35b348015610b3157600080fd5b50610b3a61265e565b604051610b479190615705565b60405180910390f35b348015610b5c57600080fd5b50610b776004803603810190610b7291906143d8565b612674565b005b348015610b8557600080fd5b50610b8e612706565b604051610b9b9190615720565b60405180910390f35b348015610bb057600080fd5b50610bb9612719565b604051610bc691906156ea565b60405180910390f35b348015610bdb57600080fd5b50610bf66004803603810190610bf191906141c3565b61271f565b604051610c03919061524d565b60405180910390f35b348015610c1857600080fd5b50610c336004803603810190610c2e9190614341565b6127b3565b005b348015610c4157600080fd5b50610c5c6004803603810190610c57919061419a565b6129fd565b005b348015610c6a57600080fd5b50610c73612af5565b005b348015610c8157600080fd5b50610c9c6004803603810190610c97919061441d565b612b9d565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d115750610d1082612c33565b5b9050919050565b606060008054610d2790615a17565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5390615a17565b8015610da05780601f10610d7557610100808354040283529160200191610da0565b820191906000526020600020905b815481529060010190602001808311610d8357829003601f168201915b5050505050905090565b6000610db582612d15565b610df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610deb9061552a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e5481565b6000610e40826116b6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea8906155ca565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ed0612d81565b73ffffffffffffffffffffffffffffffffffffffff161480610eff5750610efe81610ef9612d81565b61271f565b5b610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f359061544a565b60405180910390fd5b610f488383612d89565b505050565b610f55612d81565b73ffffffffffffffffffffffffffffffffffffffff16610f73611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc09061554a565b60405180910390fd5b600a60179054906101000a900460ff1660ff1682829050601054610fed919061582f565b111561102e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611025906153aa565b60405180910390fd5b6011548282905061103d611130565b611047919061582f565b1115611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f9061564a565b60405180910390fd5b60005b8282905081101561112b57601060008154809291906110a990615a49565b91905055506111188383838181106110ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906110ff919061419a565b6001611109611130565b611113919061582f565b612e42565b808061112390615a49565b91505061108b565b505050565b6000600880549050905090565b61114e611148612d81565b82612e60565b61118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111849061562a565b60405180910390fd5b611198838383612f3e565b505050565b601260019054906101000a900460ff1681565b600d5481565b60006111c183611799565b8210611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f9906152ea565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b611263612d81565b73ffffffffffffffffffffffffffffffffffffffff16611281611aa6565b73ffffffffffffffffffffffffffffffffffffffff16146112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce9061554a565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516112fd906151d1565b60006040518083038185875af1925050503d806000811461133a576040519150601f19603f3d011682016040523d82523d6000602084013e61133f565b606091505b505090508061134d57600080fd5b50565b600a60159054906101000a900460ff1681565b61137e838383604051806020016040528060008152506120a5565b505050565b61138b612d81565b73ffffffffffffffffffffffffffffffffffffffff166113a9611aa6565b73ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f69061554a565b60405180910390fd5b60005b8282905081101561153b576000838383818110611448577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061145d919061419a565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c69061560a565b60405180910390fd5b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061153390615a49565b915050611402565b505050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611593611130565b82106115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb9061568a565b60405180910390fd5b6008828154811061160e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611628612d81565b73ffffffffffffffffffffffffffffffffffffffff16611646611aa6565b73ffffffffffffffffffffffffffffffffffffffff161461169c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116939061554a565b60405180910390fd5b80601390805190602001906116b2929190613ea4565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561175f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611756906154ea565b60405180910390fd5b80915050919050565b60176020528060005260406000206000915090505481565b60115481565b601260009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561180a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611801906154ca565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611859612d81565b73ffffffffffffffffffffffffffffffffffffffff16611877611aa6565b73ffffffffffffffffffffffffffffffffffffffff16146118cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c49061554a565b60405180910390fd5b6118d7600061319a565b565b600a601c9054906101000a900463ffffffff1681565b60166020528060005260406000206000915054906101000a900460ff1681565b611917612d81565b73ffffffffffffffffffffffffffffffffffffffff16611935611aa6565b73ffffffffffffffffffffffffffffffffffffffff161461198b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119829061554a565b60405180910390fd5b6001601260036101000a81548160ff021916908315150217905550565b6119b0612d81565b73ffffffffffffffffffffffffffffffffffffffff166119ce611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b9061554a565b60405180910390fd5b601260029054906101000a900460ff1615601260026101000a81548160ff021916908315150217905550565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ad8612d81565b73ffffffffffffffffffffffffffffffffffffffff16611af6611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b439061554a565b60405180910390fd5b80600c8190555050565b606060018054611b6590615a17565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9190615a17565b8015611bde5780601f10611bb357610100808354040283529160200191611bde565b820191906000526020600020905b815481529060010190602001808311611bc157829003601f168201915b5050505050905090565b600a60189054906101000a900463ffffffff1681565b600a60179054906101000a900460ff1681565b600c5481565b611c29611c22612d81565b8383613260565b5050565b601260039054906101000a900460ff1681565b600f5481565b600a60169054906101000a900460ff1660ff16811115611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c92906155aa565b60405180910390fd5b3481600c54611caa91906158b6565b1115611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce29061566a565b60405180910390fd5b601260009054906101000a900460ff16611d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d31906156ca565b60405180910390fd5b601154611d45611130565b10611d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7c906155ea565b60405180910390fd5b600a601c9054906101000a900463ffffffff1663ffffffff1681600f54611dac919061582f565b1115611ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de49061546a565b60405180910390fd5b60005b81811015611e4057600d6000815480929190611e0b90615a49565b9190505550611e2d336001611e1e611130565b611e28919061582f565b612e42565b8080611e3890615a49565b915050611df0565b5050565b601260019054906101000a900460ff1615611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b906154aa565b60405180910390fd5b600a60169054906101000a900460ff1660ff16811115611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee0906155aa565b60405180910390fd5b3481600c54611ef891906158b6565b1115611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f309061528a565b60405180910390fd5b601260029054906101000a900460ff16611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f9061540a565b60405180910390fd5b601154611f93611130565b10611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca9061564a565b60405180910390fd5b600a601c9054906101000a900463ffffffff1663ffffffff1681600f54611ffa919061582f565b111561203b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612032906152ca565b60405180910390fd5b60005b8181101561208e57600f600081548092919061205990615a49565b919050555061207b33600161206c611130565b612076919061582f565b612e42565b808061208690615a49565b91505061203e565b5050565b600a60169054906101000a900460ff1681565b6120b66120b0612d81565b83612e60565b6120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec9061562a565b60405180910390fd5b612101848484846133cd565b50505050565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a9061548a565b60405180910390fd5b600a60159054906101000a900460ff1660ff1681601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121f1919061582f565b1115612232576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122299061532a565b60405180910390fd5b3481600c5461224191906158b6565b1115612282576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122799061566a565b60405180910390fd5b601260019054906101000a900460ff1680156122ab5750601260029054906101000a900460ff16155b6122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e19061536a565b60405180910390fd5b6011546122f5611130565b10612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c9061564a565b60405180910390fd5b600a601c9054906101000a900463ffffffff1663ffffffff1681600e5461235c919061582f565b111561239d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612394906156aa565b60405180910390fd5b60005b8181101561244557601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906123f890615a49565b9190505550600e600081548092919061241090615a49565b9190505550612432336001612423611130565b61242d919061582f565b612e42565b808061243d90615a49565b9150506123a0565b5050565b601260029054906101000a900460ff1681565b612464612d81565b73ffffffffffffffffffffffffffffffffffffffff16612482611aa6565b73ffffffffffffffffffffffffffffffffffffffff16146124d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cf9061554a565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b606061250f82612d15565b61254e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125459061558a565b60405180910390fd5b60001515601260039054906101000a900460ff16151514156125fc576015805461257790615a17565b80601f01602080910402602001604051908101604052809291908181526020018280546125a390615a17565b80156125f05780601f106125c5576101008083540402835291602001916125f0565b820191906000526020600020905b8154815290600101906020018083116125d357829003601f168201915b50505050509050612659565b60006013805461260b90615a17565b9050116126275760405180602001604052806000815250612656565b601361263283613429565b6014604051602001612646939291906151a0565b6040516020818303038152906040525b90505b919050565b600b60009054906101000a900463ffffffff1681565b61267c612d81565b73ffffffffffffffffffffffffffffffffffffffff1661269a611aa6565b73ffffffffffffffffffffffffffffffffffffffff16146126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e79061554a565b60405180910390fd5b818160149190612701929190613f2a565b505050565b600a60149054906101000a900460ff1681565b60105481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6127bb612d81565b73ffffffffffffffffffffffffffffffffffffffff166127d9611aa6565b73ffffffffffffffffffffffffffffffffffffffff161461282f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128269061554a565b60405180910390fd5b60005b828290508110156129f8576000838383818110612878577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061288d919061419a565b9050601660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561291c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612913906152aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561298c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129839061560a565b60405180910390fd5b6001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806129f090615a49565b915050612832565b505050565b612a05612d81565b73ffffffffffffffffffffffffffffffffffffffff16612a23611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614612a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a709061554a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae09061534a565b60405180910390fd5b612af28161319a565b50565b612afd612d81565b73ffffffffffffffffffffffffffffffffffffffff16612b1b611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614612b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b689061554a565b60405180910390fd5b601260019054906101000a900460ff1615601260016101000a81548160ff021916908315150217905550565b612ba5612d81565b73ffffffffffffffffffffffffffffffffffffffff16612bc3611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614612c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c109061554a565b60405180910390fd5b8060159080519060200190612c2f929190613ea4565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612cfe57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d0e5750612d0d826135d6565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612dfc836116b6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612e5c828260405180602001604052806000815250613640565b5050565b6000612e6b82612d15565b612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea19061542a565b60405180910390fd5b6000612eb5836116b6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f2457508373ffffffffffffffffffffffffffffffffffffffff16612f0c84610daa565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f355750612f34818561271f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f5e826116b6565b73ffffffffffffffffffffffffffffffffffffffff1614612fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fab9061556a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301b906153ca565b60405180910390fd5b61302f83838361369b565b61303a600082612d89565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461308a9190615910565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130e1919061582f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c6906153ea565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133c0919061524d565b60405180910390a3505050565b6133d8848484612f3e565b6133e4848484846137af565b613423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341a9061530a565b60405180910390fd5b50505050565b60606000821415613471576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135d1565b600082905060005b600082146134a357808061348c90615a49565b915050600a8261349c9190615885565b9150613479565b60008167ffffffffffffffff8111156134e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156135175781602001600182028036833780820191505090505b5090505b600085146135ca576001826135309190615910565b9150600a8561353f9190615a92565b603061354b919061582f565b60f81b818381518110613587577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135c39190615885565b945061351b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61364a8383613946565b61365760008484846137af565b613696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368d9061530a565b60405180910390fd5b505050565b6136a6838383613b14565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136e9576136e481613b19565b613728565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613727576137268382613b62565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561376b5761376681613ccf565b6137aa565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146137a9576137a88282613e12565b5b5b505050565b60006137d08473ffffffffffffffffffffffffffffffffffffffff16613e91565b15613939578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026137f9612d81565b8786866040518563ffffffff1660e01b815260040161381b9493929190615201565b602060405180830381600087803b15801561383557600080fd5b505af192505050801561386657506040513d601f19601f8201168201806040525081019061386391906143af565b60015b6138e9573d8060008114613896576040519150601f19603f3d011682016040523d82523d6000602084013e61389b565b606091505b506000815114156138e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d89061530a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061393e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ad9061550a565b60405180910390fd5b6139bf81612d15565b156139ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f69061538a565b60405180910390fd5b613a0b6000838361369b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a5b919061582f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613b6f84611799565b613b799190615910565b9050600060076000848152602001908152602001600020549050818114613c5e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613ce39190615910565b9050600060096000848152602001908152602001600020549050600060088381548110613d39577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613d81577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613df6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613e1d83611799565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613eb090615a17565b90600052602060002090601f016020900481019282613ed25760008555613f19565b82601f10613eeb57805160ff1916838001178555613f19565b82800160010185558215613f19579182015b82811115613f18578251825591602001919060010190613efd565b5b509050613f269190613fb0565b5090565b828054613f3690615a17565b90600052602060002090601f016020900481019282613f585760008555613f9f565b82601f10613f7157803560ff1916838001178555613f9f565b82800160010185558215613f9f579182015b82811115613f9e578235825591602001919060010190613f83565b5b509050613fac9190613fb0565b5090565b5b80821115613fc9576000816000905550600101613fb1565b5090565b6000613fe0613fdb8461576c565b61573b565b905082815260208101848484011115613ff857600080fd5b6140038482856159d5565b509392505050565b600061401e6140198461579c565b61573b565b90508281526020810184848401111561403657600080fd5b6140418482856159d5565b509392505050565b60008135905061405881615b90565b92915050565b60008083601f84011261407057600080fd5b8235905067ffffffffffffffff81111561408957600080fd5b6020830191508360208202830111156140a157600080fd5b9250929050565b6000813590506140b781615ba7565b92915050565b6000813590506140cc81615bbe565b92915050565b6000815190506140e181615bbe565b92915050565b600082601f8301126140f857600080fd5b8135614108848260208601613fcd565b91505092915050565b60008083601f84011261412357600080fd5b8235905067ffffffffffffffff81111561413c57600080fd5b60208301915083600182028301111561415457600080fd5b9250929050565b600082601f83011261416c57600080fd5b813561417c84826020860161400b565b91505092915050565b60008135905061419481615bd5565b92915050565b6000602082840312156141ac57600080fd5b60006141ba84828501614049565b91505092915050565b600080604083850312156141d657600080fd5b60006141e485828601614049565b92505060206141f585828601614049565b9150509250929050565b60008060006060848603121561421457600080fd5b600061422286828701614049565b935050602061423386828701614049565b925050604061424486828701614185565b9150509250925092565b6000806000806080858703121561426457600080fd5b600061427287828801614049565b945050602061428387828801614049565b935050604061429487828801614185565b925050606085013567ffffffffffffffff8111156142b157600080fd5b6142bd878288016140e7565b91505092959194509250565b600080604083850312156142dc57600080fd5b60006142ea85828601614049565b92505060206142fb858286016140a8565b9150509250929050565b6000806040838503121561431857600080fd5b600061432685828601614049565b925050602061433785828601614185565b9150509250929050565b6000806020838503121561435457600080fd5b600083013567ffffffffffffffff81111561436e57600080fd5b61437a8582860161405e565b92509250509250929050565b60006020828403121561439857600080fd5b60006143a6848285016140bd565b91505092915050565b6000602082840312156143c157600080fd5b60006143cf848285016140d2565b91505092915050565b600080602083850312156143eb57600080fd5b600083013567ffffffffffffffff81111561440557600080fd5b61441185828601614111565b92509250509250929050565b60006020828403121561442f57600080fd5b600082013567ffffffffffffffff81111561444957600080fd5b6144558482850161415b565b91505092915050565b60006020828403121561447057600080fd5b600061447e84828501614185565b91505092915050565b61449081615944565b82525050565b61449f81615956565b82525050565b60006144b0826157e1565b6144ba81856157f7565b93506144ca8185602086016159e4565b6144d381615b7f565b840191505092915050565b60006144e9826157ec565b6144f38185615813565b93506145038185602086016159e4565b61450c81615b7f565b840191505092915050565b6000614522826157ec565b61452c8185615824565b935061453c8185602086016159e4565b80840191505092915050565b6000815461455581615a17565b61455f8186615824565b9450600182166000811461457a576001811461458b576145be565b60ff198316865281860193506145be565b614594856157cc565b60005b838110156145b657815481890152600182019150602081019050614597565b838801955050505b50505092915050565b60006145d4601983615813565b91507f4e6f7420656e6f7567682045544820696e2077616c6c657421000000000000006000830152602082019050919050565b6000614614601183615813565b91507f4475706c696361746520416464726573730000000000000000000000000000006000830152602082019050919050565b6000614654603883615813565b91507f54686973207472616e73616374696f6e20657863656564732074686520746f7460008301527f616c20737570706c79206f66205072696d6520417065732100000000000000006020830152604082019050919050565b60006146ba602b83615813565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000614720603283615813565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614786601583615813565b91507f4d696e742035205072696d652041706573204d617800000000000000000000006000830152602082019050919050565b60006147c6602683615813565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061482c601b83615813565b91507f507269766174652073616c65206973206e6f74206c6976652e2e2e00000000006000830152602082019050919050565b600061486c601c83615813565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006148ac601783615813565b91507f4e6f206d6f726520676966747320617661696c61626c650000000000000000006000830152602082019050919050565b60006148ec602483615813565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614952601983615813565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614992601783615813565b91507f5075626c69632053616c65206e6f74206c6976652e2e2e0000000000000000006000830152602082019050919050565b60006149d2602c83615813565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614a38603883615813565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614a9e604283615813565b91507f54686973207472616e73616374696f6e20657863656564732074686520746f7460008301527f616c20737570706c79206f66206561726c792062697264205072696d6520417060208301527f65730000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000614b2a601683615813565b91507f596f75277265206e6f742057686974656c6973746564000000000000000000006000830152602082019050919050565b6000614b6a601a83615813565b91507f507269766174652073616c65206e6565647320746f20656e64210000000000006000830152602082019050919050565b6000614baa602a83615813565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614c10602983615813565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614c76602083615813565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614cb6602c83615813565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614d1c602083615813565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614d5c602983615813565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614dc2602f83615813565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614e28602183615813565b91507f4d696e742035205072696d65204170657320706572207472616e73616374696f60008301527f6e000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e8e602183615813565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ef4600c83615813565b91507f416c6c20736f6c64206f757400000000000000000000000000000000000000006000830152602082019050919050565b6000614f34600f83615813565b91507f496e76616c6964204164647265737300000000000000000000000000000000006000830152602082019050919050565b6000614f74600083615808565b9150600082019050919050565b6000614f8e603183615813565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614ff4600883615813565b91507f536f6c64206f75740000000000000000000000000000000000000000000000006000830152602082019050919050565b6000615034601883615813565b91507f4e6f7420656e6f7567682045544820696e2077616c6c657400000000000000006000830152602082019050919050565b6000615074602c83615813565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b60006150da603f83615813565b91507f54686973207472616e73616374696f6e2065786365656473207468652070726960008301527f766174652073616c6520737570706c79206f66205072696d65204170657321006020830152604082019050919050565b6000615140601683615813565b91507f4561726c792042697264206973206e6f74206c697665000000000000000000006000830152602082019050919050565b61517c816159ae565b82525050565b61518b816159b8565b82525050565b61519a816159c8565b82525050565b60006151ac8286614548565b91506151b88285614517565b91506151c48284614548565b9150819050949350505050565b60006151dc82614f67565b9150819050919050565b60006020820190506151fb6000830184614487565b92915050565b60006080820190506152166000830187614487565b6152236020830186614487565b6152306040830185615173565b818103606083015261524281846144a5565b905095945050505050565b60006020820190506152626000830184614496565b92915050565b6000602082019050818103600083015261528281846144de565b905092915050565b600060208201905081810360008301526152a3816145c7565b9050919050565b600060208201905081810360008301526152c381614607565b9050919050565b600060208201905081810360008301526152e381614647565b9050919050565b60006020820190508181036000830152615303816146ad565b9050919050565b6000602082019050818103600083015261532381614713565b9050919050565b6000602082019050818103600083015261534381614779565b9050919050565b60006020820190508181036000830152615363816147b9565b9050919050565b600060208201905081810360008301526153838161481f565b9050919050565b600060208201905081810360008301526153a38161485f565b9050919050565b600060208201905081810360008301526153c38161489f565b9050919050565b600060208201905081810360008301526153e3816148df565b9050919050565b6000602082019050818103600083015261540381614945565b9050919050565b6000602082019050818103600083015261542381614985565b9050919050565b60006020820190508181036000830152615443816149c5565b9050919050565b6000602082019050818103600083015261546381614a2b565b9050919050565b6000602082019050818103600083015261548381614a91565b9050919050565b600060208201905081810360008301526154a381614b1d565b9050919050565b600060208201905081810360008301526154c381614b5d565b9050919050565b600060208201905081810360008301526154e381614b9d565b9050919050565b6000602082019050818103600083015261550381614c03565b9050919050565b6000602082019050818103600083015261552381614c69565b9050919050565b6000602082019050818103600083015261554381614ca9565b9050919050565b6000602082019050818103600083015261556381614d0f565b9050919050565b6000602082019050818103600083015261558381614d4f565b9050919050565b600060208201905081810360008301526155a381614db5565b9050919050565b600060208201905081810360008301526155c381614e1b565b9050919050565b600060208201905081810360008301526155e381614e81565b9050919050565b6000602082019050818103600083015261560381614ee7565b9050919050565b6000602082019050818103600083015261562381614f27565b9050919050565b6000602082019050818103600083015261564381614f81565b9050919050565b6000602082019050818103600083015261566381614fe7565b9050919050565b6000602082019050818103600083015261568381615027565b9050919050565b600060208201905081810360008301526156a381615067565b9050919050565b600060208201905081810360008301526156c3816150cd565b9050919050565b600060208201905081810360008301526156e381615133565b9050919050565b60006020820190506156ff6000830184615173565b92915050565b600060208201905061571a6000830184615182565b92915050565b60006020820190506157356000830184615191565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561576257615761615b50565b5b8060405250919050565b600067ffffffffffffffff82111561578757615786615b50565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156157b7576157b6615b50565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061583a826159ae565b9150615845836159ae565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561587a57615879615ac3565b5b828201905092915050565b6000615890826159ae565b915061589b836159ae565b9250826158ab576158aa615af2565b5b828204905092915050565b60006158c1826159ae565b91506158cc836159ae565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561590557615904615ac3565b5b828202905092915050565b600061591b826159ae565b9150615926836159ae565b92508282101561593957615938615ac3565b5b828203905092915050565b600061594f8261598e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615a025780820151818401526020810190506159e7565b83811115615a11576000848401525b50505050565b60006002820490506001821680615a2f57607f821691505b60208210811415615a4357615a42615b21565b5b50919050565b6000615a54826159ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615a8757615a86615ac3565b5b600182019050919050565b6000615a9d826159ae565b9150615aa8836159ae565b925082615ab857615ab7615af2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615b9981615944565b8114615ba457600080fd5b50565b615bb081615956565b8114615bbb57600080fd5b50565b615bc781615962565b8114615bd257600080fd5b50565b615bde816159ae565b8114615be957600080fd5b5056fea26469706673582212204a6bcc8dc9530c1806ac3c79ca0c14ff986ae17c4ec3621b13b957874fbeebda64736f6c63430008000033000000000000000000000000bedf9af10359353aa8cec2d9c62d254802169e40
Deployed Bytecode
0x6080604052600436106103505760003560e01c806385c6f12d116101c6578063b88d4fde116100f7578063def971b811610095578063ecc7f27d1161006f578063ecc7f27d14610c0c578063f2fde38b14610c35578063f854684c14610c5e578063fe2c7fee14610c7557610350565b8063def971b814610b79578063e4fb515514610ba4578063e985e9c514610bcf57610350565b8063c3b901ea116100d1578063c3b901ea14610ad1578063c87b56dd14610ae8578063cef443d514610b25578063da3ef23f14610b5057610350565b8063b88d4fde14610a61578063b8d59a6514610a8a578063bc8893b414610aa657610350565b8063a035b1fe11610164578063a717a4821161013e578063a717a482146109d3578063afb5965c146109fe578063b287c8ed14610a1a578063b5cf125714610a3657610350565b8063a035b1fe14610954578063a22cb4651461097f578063a475b5dd146109a857610350565b806391b7f5ed116101a057806391b7f5ed146108aa57806395d89b41146108d357806398cef4bd146108fe5780639e8cb3c51461092957610350565b806385c6f12d1461082b5780638ab1d22c146108425780638da5cb5b1461087f57610350565b806342842e0e116102a0578063645d8d2f1161023e578063715018a611610218578063715018a6146107955780637295920c146107ac578063738070c7146107d7578063766453151461081457610350565b8063645d8d2f14610702578063663eef041461072d57806370a082311461075857610350565b80634f6ccce71161027a5780634f6ccce71461062257806355f804b31461065f5780636352211e14610688578063637cae04146106c557610350565b806342842e0e146105935780634878868c146105bc5780634dc818e3146105e557610350565b806318160ddd1161030d5780632a86ceec116102e75780632a86ceec146104f65780632f745c59146105215780633ccfd60b1461055e5780633d3d874a1461056857610350565b806318160ddd1461047757806323b872dd146104a25780632a237bb6146104cb57610350565b806301ffc9a71461035557806306fdde0314610392578063081812fc146103bd57806308428437146103fa578063095ea7b314610425578063163e1e611461044e575b600080fd5b34801561036157600080fd5b5061037c60048036038101906103779190614386565b610c9e565b604051610389919061524d565b60405180910390f35b34801561039e57600080fd5b506103a7610d18565b6040516103b49190615268565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df919061445e565b610daa565b6040516103f191906151e6565b60405180910390f35b34801561040657600080fd5b5061040f610e2f565b60405161041c91906156ea565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190614305565b610e35565b005b34801561045a57600080fd5b5061047560048036038101906104709190614341565b610f4d565b005b34801561048357600080fd5b5061048c611130565b60405161049991906156ea565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906141ff565b61113d565b005b3480156104d757600080fd5b506104e061119d565b6040516104ed919061524d565b60405180910390f35b34801561050257600080fd5b5061050b6111b0565b60405161051891906156ea565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190614305565b6111b6565b60405161055591906156ea565b60405180910390f35b61056661125b565b005b34801561057457600080fd5b5061057d611350565b60405161058a9190615720565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b591906141ff565b611363565b005b3480156105c857600080fd5b506105e360048036038101906105de9190614341565b611383565b005b3480156105f157600080fd5b5061060c6004803603810190610607919061419a565b611540565b60405161061991906156ea565b60405180910390f35b34801561062e57600080fd5b506106496004803603810190610644919061445e565b611589565b60405161065691906156ea565b60405180910390f35b34801561066b57600080fd5b506106866004803603810190610681919061441d565b611620565b005b34801561069457600080fd5b506106af60048036038101906106aa919061445e565b6116b6565b6040516106bc91906151e6565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e7919061419a565b611768565b6040516106f991906156ea565b60405180910390f35b34801561070e57600080fd5b50610717611780565b60405161072491906156ea565b60405180910390f35b34801561073957600080fd5b50610742611786565b60405161074f919061524d565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a919061419a565b611799565b60405161078c91906156ea565b60405180910390f35b3480156107a157600080fd5b506107aa611851565b005b3480156107b857600080fd5b506107c16118d9565b6040516107ce9190615705565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f9919061419a565b6118ef565b60405161080b919061524d565b60405180910390f35b34801561082057600080fd5b5061082961190f565b005b34801561083757600080fd5b506108406119a8565b005b34801561084e57600080fd5b506108696004803603810190610864919061419a565b611a50565b604051610876919061524d565b60405180910390f35b34801561088b57600080fd5b50610894611aa6565b6040516108a191906151e6565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc919061445e565b611ad0565b005b3480156108df57600080fd5b506108e8611b56565b6040516108f59190615268565b60405180910390f35b34801561090a57600080fd5b50610913611be8565b6040516109209190615705565b60405180910390f35b34801561093557600080fd5b5061093e611bfe565b60405161094b9190615720565b60405180910390f35b34801561096057600080fd5b50610969611c11565b60405161097691906156ea565b60405180910390f35b34801561098b57600080fd5b506109a660048036038101906109a191906142c9565b611c17565b005b3480156109b457600080fd5b506109bd611c2d565b6040516109ca919061524d565b60405180910390f35b3480156109df57600080fd5b506109e8611c40565b6040516109f591906156ea565b60405180910390f35b610a186004803603810190610a13919061445e565b611c46565b005b610a346004803603810190610a2f919061445e565b611e44565b005b348015610a4257600080fd5b50610a4b612092565b604051610a589190615720565b60405180910390f35b348015610a6d57600080fd5b50610a886004803603810190610a83919061424e565b6120a5565b005b610aa46004803603810190610a9f919061445e565b612107565b005b348015610ab257600080fd5b50610abb612449565b604051610ac8919061524d565b60405180910390f35b348015610add57600080fd5b50610ae661245c565b005b348015610af457600080fd5b50610b0f6004803603810190610b0a919061445e565b612504565b604051610b1c9190615268565b60405180910390f35b348015610b3157600080fd5b50610b3a61265e565b604051610b479190615705565b60405180910390f35b348015610b5c57600080fd5b50610b776004803603810190610b7291906143d8565b612674565b005b348015610b8557600080fd5b50610b8e612706565b604051610b9b9190615720565b60405180910390f35b348015610bb057600080fd5b50610bb9612719565b604051610bc691906156ea565b60405180910390f35b348015610bdb57600080fd5b50610bf66004803603810190610bf191906141c3565b61271f565b604051610c03919061524d565b60405180910390f35b348015610c1857600080fd5b50610c336004803603810190610c2e9190614341565b6127b3565b005b348015610c4157600080fd5b50610c5c6004803603810190610c57919061419a565b6129fd565b005b348015610c6a57600080fd5b50610c73612af5565b005b348015610c8157600080fd5b50610c9c6004803603810190610c97919061441d565b612b9d565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d115750610d1082612c33565b5b9050919050565b606060008054610d2790615a17565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5390615a17565b8015610da05780601f10610d7557610100808354040283529160200191610da0565b820191906000526020600020905b815481529060010190602001808311610d8357829003601f168201915b5050505050905090565b6000610db582612d15565b610df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610deb9061552a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e5481565b6000610e40826116b6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea8906155ca565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ed0612d81565b73ffffffffffffffffffffffffffffffffffffffff161480610eff5750610efe81610ef9612d81565b61271f565b5b610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f359061544a565b60405180910390fd5b610f488383612d89565b505050565b610f55612d81565b73ffffffffffffffffffffffffffffffffffffffff16610f73611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc09061554a565b60405180910390fd5b600a60179054906101000a900460ff1660ff1682829050601054610fed919061582f565b111561102e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611025906153aa565b60405180910390fd5b6011548282905061103d611130565b611047919061582f565b1115611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f9061564a565b60405180910390fd5b60005b8282905081101561112b57601060008154809291906110a990615a49565b91905055506111188383838181106110ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906110ff919061419a565b6001611109611130565b611113919061582f565b612e42565b808061112390615a49565b91505061108b565b505050565b6000600880549050905090565b61114e611148612d81565b82612e60565b61118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111849061562a565b60405180910390fd5b611198838383612f3e565b505050565b601260019054906101000a900460ff1681565b600d5481565b60006111c183611799565b8210611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f9906152ea565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b611263612d81565b73ffffffffffffffffffffffffffffffffffffffff16611281611aa6565b73ffffffffffffffffffffffffffffffffffffffff16146112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce9061554a565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516112fd906151d1565b60006040518083038185875af1925050503d806000811461133a576040519150601f19603f3d011682016040523d82523d6000602084013e61133f565b606091505b505090508061134d57600080fd5b50565b600a60159054906101000a900460ff1681565b61137e838383604051806020016040528060008152506120a5565b505050565b61138b612d81565b73ffffffffffffffffffffffffffffffffffffffff166113a9611aa6565b73ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f69061554a565b60405180910390fd5b60005b8282905081101561153b576000838383818110611448577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061145d919061419a565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c69061560a565b60405180910390fd5b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061153390615a49565b915050611402565b505050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611593611130565b82106115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb9061568a565b60405180910390fd5b6008828154811061160e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611628612d81565b73ffffffffffffffffffffffffffffffffffffffff16611646611aa6565b73ffffffffffffffffffffffffffffffffffffffff161461169c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116939061554a565b60405180910390fd5b80601390805190602001906116b2929190613ea4565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561175f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611756906154ea565b60405180910390fd5b80915050919050565b60176020528060005260406000206000915090505481565b60115481565b601260009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561180a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611801906154ca565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611859612d81565b73ffffffffffffffffffffffffffffffffffffffff16611877611aa6565b73ffffffffffffffffffffffffffffffffffffffff16146118cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c49061554a565b60405180910390fd5b6118d7600061319a565b565b600a601c9054906101000a900463ffffffff1681565b60166020528060005260406000206000915054906101000a900460ff1681565b611917612d81565b73ffffffffffffffffffffffffffffffffffffffff16611935611aa6565b73ffffffffffffffffffffffffffffffffffffffff161461198b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119829061554a565b60405180910390fd5b6001601260036101000a81548160ff021916908315150217905550565b6119b0612d81565b73ffffffffffffffffffffffffffffffffffffffff166119ce611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b9061554a565b60405180910390fd5b601260029054906101000a900460ff1615601260026101000a81548160ff021916908315150217905550565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ad8612d81565b73ffffffffffffffffffffffffffffffffffffffff16611af6611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b439061554a565b60405180910390fd5b80600c8190555050565b606060018054611b6590615a17565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9190615a17565b8015611bde5780601f10611bb357610100808354040283529160200191611bde565b820191906000526020600020905b815481529060010190602001808311611bc157829003601f168201915b5050505050905090565b600a60189054906101000a900463ffffffff1681565b600a60179054906101000a900460ff1681565b600c5481565b611c29611c22612d81565b8383613260565b5050565b601260039054906101000a900460ff1681565b600f5481565b600a60169054906101000a900460ff1660ff16811115611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c92906155aa565b60405180910390fd5b3481600c54611caa91906158b6565b1115611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce29061566a565b60405180910390fd5b601260009054906101000a900460ff16611d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d31906156ca565b60405180910390fd5b601154611d45611130565b10611d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7c906155ea565b60405180910390fd5b600a601c9054906101000a900463ffffffff1663ffffffff1681600f54611dac919061582f565b1115611ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de49061546a565b60405180910390fd5b60005b81811015611e4057600d6000815480929190611e0b90615a49565b9190505550611e2d336001611e1e611130565b611e28919061582f565b612e42565b8080611e3890615a49565b915050611df0565b5050565b601260019054906101000a900460ff1615611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b906154aa565b60405180910390fd5b600a60169054906101000a900460ff1660ff16811115611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee0906155aa565b60405180910390fd5b3481600c54611ef891906158b6565b1115611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f309061528a565b60405180910390fd5b601260029054906101000a900460ff16611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f9061540a565b60405180910390fd5b601154611f93611130565b10611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca9061564a565b60405180910390fd5b600a601c9054906101000a900463ffffffff1663ffffffff1681600f54611ffa919061582f565b111561203b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612032906152ca565b60405180910390fd5b60005b8181101561208e57600f600081548092919061205990615a49565b919050555061207b33600161206c611130565b612076919061582f565b612e42565b808061208690615a49565b91505061203e565b5050565b600a60169054906101000a900460ff1681565b6120b66120b0612d81565b83612e60565b6120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec9061562a565b60405180910390fd5b612101848484846133cd565b50505050565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a9061548a565b60405180910390fd5b600a60159054906101000a900460ff1660ff1681601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121f1919061582f565b1115612232576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122299061532a565b60405180910390fd5b3481600c5461224191906158b6565b1115612282576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122799061566a565b60405180910390fd5b601260019054906101000a900460ff1680156122ab5750601260029054906101000a900460ff16155b6122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e19061536a565b60405180910390fd5b6011546122f5611130565b10612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c9061564a565b60405180910390fd5b600a601c9054906101000a900463ffffffff1663ffffffff1681600e5461235c919061582f565b111561239d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612394906156aa565b60405180910390fd5b60005b8181101561244557601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906123f890615a49565b9190505550600e600081548092919061241090615a49565b9190505550612432336001612423611130565b61242d919061582f565b612e42565b808061243d90615a49565b9150506123a0565b5050565b601260029054906101000a900460ff1681565b612464612d81565b73ffffffffffffffffffffffffffffffffffffffff16612482611aa6565b73ffffffffffffffffffffffffffffffffffffffff16146124d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cf9061554a565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b606061250f82612d15565b61254e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125459061558a565b60405180910390fd5b60001515601260039054906101000a900460ff16151514156125fc576015805461257790615a17565b80601f01602080910402602001604051908101604052809291908181526020018280546125a390615a17565b80156125f05780601f106125c5576101008083540402835291602001916125f0565b820191906000526020600020905b8154815290600101906020018083116125d357829003601f168201915b50505050509050612659565b60006013805461260b90615a17565b9050116126275760405180602001604052806000815250612656565b601361263283613429565b6014604051602001612646939291906151a0565b6040516020818303038152906040525b90505b919050565b600b60009054906101000a900463ffffffff1681565b61267c612d81565b73ffffffffffffffffffffffffffffffffffffffff1661269a611aa6565b73ffffffffffffffffffffffffffffffffffffffff16146126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e79061554a565b60405180910390fd5b818160149190612701929190613f2a565b505050565b600a60149054906101000a900460ff1681565b60105481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6127bb612d81565b73ffffffffffffffffffffffffffffffffffffffff166127d9611aa6565b73ffffffffffffffffffffffffffffffffffffffff161461282f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128269061554a565b60405180910390fd5b60005b828290508110156129f8576000838383818110612878577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061288d919061419a565b9050601660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561291c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612913906152aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561298c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129839061560a565b60405180910390fd5b6001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806129f090615a49565b915050612832565b505050565b612a05612d81565b73ffffffffffffffffffffffffffffffffffffffff16612a23611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614612a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a709061554a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae09061534a565b60405180910390fd5b612af28161319a565b50565b612afd612d81565b73ffffffffffffffffffffffffffffffffffffffff16612b1b611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614612b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b689061554a565b60405180910390fd5b601260019054906101000a900460ff1615601260016101000a81548160ff021916908315150217905550565b612ba5612d81565b73ffffffffffffffffffffffffffffffffffffffff16612bc3611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614612c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c109061554a565b60405180910390fd5b8060159080519060200190612c2f929190613ea4565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612cfe57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d0e5750612d0d826135d6565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612dfc836116b6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612e5c828260405180602001604052806000815250613640565b5050565b6000612e6b82612d15565b612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea19061542a565b60405180910390fd5b6000612eb5836116b6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f2457508373ffffffffffffffffffffffffffffffffffffffff16612f0c84610daa565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f355750612f34818561271f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f5e826116b6565b73ffffffffffffffffffffffffffffffffffffffff1614612fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fab9061556a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301b906153ca565b60405180910390fd5b61302f83838361369b565b61303a600082612d89565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461308a9190615910565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130e1919061582f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c6906153ea565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133c0919061524d565b60405180910390a3505050565b6133d8848484612f3e565b6133e4848484846137af565b613423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341a9061530a565b60405180910390fd5b50505050565b60606000821415613471576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135d1565b600082905060005b600082146134a357808061348c90615a49565b915050600a8261349c9190615885565b9150613479565b60008167ffffffffffffffff8111156134e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156135175781602001600182028036833780820191505090505b5090505b600085146135ca576001826135309190615910565b9150600a8561353f9190615a92565b603061354b919061582f565b60f81b818381518110613587577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135c39190615885565b945061351b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61364a8383613946565b61365760008484846137af565b613696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368d9061530a565b60405180910390fd5b505050565b6136a6838383613b14565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136e9576136e481613b19565b613728565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613727576137268382613b62565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561376b5761376681613ccf565b6137aa565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146137a9576137a88282613e12565b5b5b505050565b60006137d08473ffffffffffffffffffffffffffffffffffffffff16613e91565b15613939578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026137f9612d81565b8786866040518563ffffffff1660e01b815260040161381b9493929190615201565b602060405180830381600087803b15801561383557600080fd5b505af192505050801561386657506040513d601f19601f8201168201806040525081019061386391906143af565b60015b6138e9573d8060008114613896576040519150601f19603f3d011682016040523d82523d6000602084013e61389b565b606091505b506000815114156138e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d89061530a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061393e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ad9061550a565b60405180910390fd5b6139bf81612d15565b156139ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f69061538a565b60405180910390fd5b613a0b6000838361369b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a5b919061582f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613b6f84611799565b613b799190615910565b9050600060076000848152602001908152602001600020549050818114613c5e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613ce39190615910565b9050600060096000848152602001908152602001600020549050600060088381548110613d39577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613d81577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613df6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613e1d83611799565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613eb090615a17565b90600052602060002090601f016020900481019282613ed25760008555613f19565b82601f10613eeb57805160ff1916838001178555613f19565b82800160010185558215613f19579182015b82811115613f18578251825591602001919060010190613efd565b5b509050613f269190613fb0565b5090565b828054613f3690615a17565b90600052602060002090601f016020900481019282613f585760008555613f9f565b82601f10613f7157803560ff1916838001178555613f9f565b82800160010185558215613f9f579182015b82811115613f9e578235825591602001919060010190613f83565b5b509050613fac9190613fb0565b5090565b5b80821115613fc9576000816000905550600101613fb1565b5090565b6000613fe0613fdb8461576c565b61573b565b905082815260208101848484011115613ff857600080fd5b6140038482856159d5565b509392505050565b600061401e6140198461579c565b61573b565b90508281526020810184848401111561403657600080fd5b6140418482856159d5565b509392505050565b60008135905061405881615b90565b92915050565b60008083601f84011261407057600080fd5b8235905067ffffffffffffffff81111561408957600080fd5b6020830191508360208202830111156140a157600080fd5b9250929050565b6000813590506140b781615ba7565b92915050565b6000813590506140cc81615bbe565b92915050565b6000815190506140e181615bbe565b92915050565b600082601f8301126140f857600080fd5b8135614108848260208601613fcd565b91505092915050565b60008083601f84011261412357600080fd5b8235905067ffffffffffffffff81111561413c57600080fd5b60208301915083600182028301111561415457600080fd5b9250929050565b600082601f83011261416c57600080fd5b813561417c84826020860161400b565b91505092915050565b60008135905061419481615bd5565b92915050565b6000602082840312156141ac57600080fd5b60006141ba84828501614049565b91505092915050565b600080604083850312156141d657600080fd5b60006141e485828601614049565b92505060206141f585828601614049565b9150509250929050565b60008060006060848603121561421457600080fd5b600061422286828701614049565b935050602061423386828701614049565b925050604061424486828701614185565b9150509250925092565b6000806000806080858703121561426457600080fd5b600061427287828801614049565b945050602061428387828801614049565b935050604061429487828801614185565b925050606085013567ffffffffffffffff8111156142b157600080fd5b6142bd878288016140e7565b91505092959194509250565b600080604083850312156142dc57600080fd5b60006142ea85828601614049565b92505060206142fb858286016140a8565b9150509250929050565b6000806040838503121561431857600080fd5b600061432685828601614049565b925050602061433785828601614185565b9150509250929050565b6000806020838503121561435457600080fd5b600083013567ffffffffffffffff81111561436e57600080fd5b61437a8582860161405e565b92509250509250929050565b60006020828403121561439857600080fd5b60006143a6848285016140bd565b91505092915050565b6000602082840312156143c157600080fd5b60006143cf848285016140d2565b91505092915050565b600080602083850312156143eb57600080fd5b600083013567ffffffffffffffff81111561440557600080fd5b61441185828601614111565b92509250509250929050565b60006020828403121561442f57600080fd5b600082013567ffffffffffffffff81111561444957600080fd5b6144558482850161415b565b91505092915050565b60006020828403121561447057600080fd5b600061447e84828501614185565b91505092915050565b61449081615944565b82525050565b61449f81615956565b82525050565b60006144b0826157e1565b6144ba81856157f7565b93506144ca8185602086016159e4565b6144d381615b7f565b840191505092915050565b60006144e9826157ec565b6144f38185615813565b93506145038185602086016159e4565b61450c81615b7f565b840191505092915050565b6000614522826157ec565b61452c8185615824565b935061453c8185602086016159e4565b80840191505092915050565b6000815461455581615a17565b61455f8186615824565b9450600182166000811461457a576001811461458b576145be565b60ff198316865281860193506145be565b614594856157cc565b60005b838110156145b657815481890152600182019150602081019050614597565b838801955050505b50505092915050565b60006145d4601983615813565b91507f4e6f7420656e6f7567682045544820696e2077616c6c657421000000000000006000830152602082019050919050565b6000614614601183615813565b91507f4475706c696361746520416464726573730000000000000000000000000000006000830152602082019050919050565b6000614654603883615813565b91507f54686973207472616e73616374696f6e20657863656564732074686520746f7460008301527f616c20737570706c79206f66205072696d6520417065732100000000000000006020830152604082019050919050565b60006146ba602b83615813565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000614720603283615813565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614786601583615813565b91507f4d696e742035205072696d652041706573204d617800000000000000000000006000830152602082019050919050565b60006147c6602683615813565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061482c601b83615813565b91507f507269766174652073616c65206973206e6f74206c6976652e2e2e00000000006000830152602082019050919050565b600061486c601c83615813565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006148ac601783615813565b91507f4e6f206d6f726520676966747320617661696c61626c650000000000000000006000830152602082019050919050565b60006148ec602483615813565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614952601983615813565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614992601783615813565b91507f5075626c69632053616c65206e6f74206c6976652e2e2e0000000000000000006000830152602082019050919050565b60006149d2602c83615813565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614a38603883615813565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614a9e604283615813565b91507f54686973207472616e73616374696f6e20657863656564732074686520746f7460008301527f616c20737570706c79206f66206561726c792062697264205072696d6520417060208301527f65730000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000614b2a601683615813565b91507f596f75277265206e6f742057686974656c6973746564000000000000000000006000830152602082019050919050565b6000614b6a601a83615813565b91507f507269766174652073616c65206e6565647320746f20656e64210000000000006000830152602082019050919050565b6000614baa602a83615813565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614c10602983615813565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614c76602083615813565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614cb6602c83615813565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614d1c602083615813565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614d5c602983615813565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614dc2602f83615813565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614e28602183615813565b91507f4d696e742035205072696d65204170657320706572207472616e73616374696f60008301527f6e000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e8e602183615813565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ef4600c83615813565b91507f416c6c20736f6c64206f757400000000000000000000000000000000000000006000830152602082019050919050565b6000614f34600f83615813565b91507f496e76616c6964204164647265737300000000000000000000000000000000006000830152602082019050919050565b6000614f74600083615808565b9150600082019050919050565b6000614f8e603183615813565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614ff4600883615813565b91507f536f6c64206f75740000000000000000000000000000000000000000000000006000830152602082019050919050565b6000615034601883615813565b91507f4e6f7420656e6f7567682045544820696e2077616c6c657400000000000000006000830152602082019050919050565b6000615074602c83615813565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b60006150da603f83615813565b91507f54686973207472616e73616374696f6e2065786365656473207468652070726960008301527f766174652073616c6520737570706c79206f66205072696d65204170657321006020830152604082019050919050565b6000615140601683615813565b91507f4561726c792042697264206973206e6f74206c697665000000000000000000006000830152602082019050919050565b61517c816159ae565b82525050565b61518b816159b8565b82525050565b61519a816159c8565b82525050565b60006151ac8286614548565b91506151b88285614517565b91506151c48284614548565b9150819050949350505050565b60006151dc82614f67565b9150819050919050565b60006020820190506151fb6000830184614487565b92915050565b60006080820190506152166000830187614487565b6152236020830186614487565b6152306040830185615173565b818103606083015261524281846144a5565b905095945050505050565b60006020820190506152626000830184614496565b92915050565b6000602082019050818103600083015261528281846144de565b905092915050565b600060208201905081810360008301526152a3816145c7565b9050919050565b600060208201905081810360008301526152c381614607565b9050919050565b600060208201905081810360008301526152e381614647565b9050919050565b60006020820190508181036000830152615303816146ad565b9050919050565b6000602082019050818103600083015261532381614713565b9050919050565b6000602082019050818103600083015261534381614779565b9050919050565b60006020820190508181036000830152615363816147b9565b9050919050565b600060208201905081810360008301526153838161481f565b9050919050565b600060208201905081810360008301526153a38161485f565b9050919050565b600060208201905081810360008301526153c38161489f565b9050919050565b600060208201905081810360008301526153e3816148df565b9050919050565b6000602082019050818103600083015261540381614945565b9050919050565b6000602082019050818103600083015261542381614985565b9050919050565b60006020820190508181036000830152615443816149c5565b9050919050565b6000602082019050818103600083015261546381614a2b565b9050919050565b6000602082019050818103600083015261548381614a91565b9050919050565b600060208201905081810360008301526154a381614b1d565b9050919050565b600060208201905081810360008301526154c381614b5d565b9050919050565b600060208201905081810360008301526154e381614b9d565b9050919050565b6000602082019050818103600083015261550381614c03565b9050919050565b6000602082019050818103600083015261552381614c69565b9050919050565b6000602082019050818103600083015261554381614ca9565b9050919050565b6000602082019050818103600083015261556381614d0f565b9050919050565b6000602082019050818103600083015261558381614d4f565b9050919050565b600060208201905081810360008301526155a381614db5565b9050919050565b600060208201905081810360008301526155c381614e1b565b9050919050565b600060208201905081810360008301526155e381614e81565b9050919050565b6000602082019050818103600083015261560381614ee7565b9050919050565b6000602082019050818103600083015261562381614f27565b9050919050565b6000602082019050818103600083015261564381614f81565b9050919050565b6000602082019050818103600083015261566381614fe7565b9050919050565b6000602082019050818103600083015261568381615027565b9050919050565b600060208201905081810360008301526156a381615067565b9050919050565b600060208201905081810360008301526156c3816150cd565b9050919050565b600060208201905081810360008301526156e381615133565b9050919050565b60006020820190506156ff6000830184615173565b92915050565b600060208201905061571a6000830184615182565b92915050565b60006020820190506157356000830184615191565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561576257615761615b50565b5b8060405250919050565b600067ffffffffffffffff82111561578757615786615b50565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156157b7576157b6615b50565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061583a826159ae565b9150615845836159ae565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561587a57615879615ac3565b5b828201905092915050565b6000615890826159ae565b915061589b836159ae565b9250826158ab576158aa615af2565b5b828204905092915050565b60006158c1826159ae565b91506158cc836159ae565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561590557615904615ac3565b5b828202905092915050565b600061591b826159ae565b9150615926836159ae565b92508282101561593957615938615ac3565b5b828203905092915050565b600061594f8261598e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615a025780820151818401526020810190506159e7565b83811115615a11576000848401525b50505050565b60006002820490506001821680615a2f57607f821691505b60208210811415615a4357615a42615b21565b5b50919050565b6000615a54826159ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615a8757615a86615ac3565b5b600182019050919050565b6000615a9d826159ae565b9150615aa8836159ae565b925082615ab857615ab7615af2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615b9981615944565b8114615ba457600080fd5b50565b615bb081615956565b8114615bbb57600080fd5b50565b615bc781615962565b8114615bd257600080fd5b50565b615bde816159ae565b8114615be957600080fd5b5056fea26469706673582212204a6bcc8dc9530c1806ac3c79ca0c14ff986ae17c4ec3621b13b957874fbeebda64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bedf9af10359353aa8cec2d9c62d254802169e40
-----Decoded View---------------
Arg [0] : _payments (address): 0xBeDf9aF10359353Aa8cEC2D9c62D254802169E40
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000bedf9af10359353aa8cec2d9c62d254802169e40
Deployed Bytecode Sourcemap
45157:6280:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38902:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26343:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27902:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45600:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27425:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49654:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39542:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28652:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45847:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45562:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39210:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50317:168;;;:::i;:::-;;45289:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29062:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49344:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50170:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39732:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50675:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26037:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46122:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45709:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45809:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25767:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4889:103;;;;;;;;;;;;;:::i;:::-;;45435:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46065:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50595:72;;;;;;;;;;;;;:::i;:::-;;48854:104;;;;;;;;;;;;;:::i;:::-;;50037:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4238:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50497:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26512:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45397:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45366:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45522:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28195:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45918:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45639:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46326:679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47868:729;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45326:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29318:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47014:841;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45883:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48610:113;;;;;;;;;;;;;:::i;:::-;;51031:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45479:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50913:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45250:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45677:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28421:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48970:362;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5147:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48735:107;;;;;;;;;;;;;:::i;:::-;;50777:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38902:224;39004:4;39043:35;39028:50;;;:11;:50;;;;:90;;;;39082:36;39106:11;39082:23;:36::i;:::-;39028:90;39021:97;;38902:224;;;:::o;26343:100::-;26397:13;26430:5;26423:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26343:100;:::o;27902:221::-;27978:7;28006:16;28014:7;28006;:16::i;:::-;27998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28091:15;:24;28107:7;28091:24;;;;;;;;;;;;;;;;;;;;;28084:31;;27902:221;;;:::o;45600:32::-;;;;:::o;27425:411::-;27506:13;27522:23;27537:7;27522:14;:23::i;:::-;27506:39;;27570:5;27564:11;;:2;:11;;;;27556:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27664:5;27648:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27673:37;27690:5;27697:12;:10;:12::i;:::-;27673:16;:37::i;:::-;27648:62;27626:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27807:21;27816:2;27820:7;27807:8;:21::i;:::-;27425:411;;;:::o;49654:371::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49761:5:::1;;;;;;;;;;;49732:34;;49745:5;;:12;;49732:10;;:25;;;;:::i;:::-;:34;;49724:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;49845:14;;49829:5;;:12;;49813:13;:11;:13::i;:::-;:28;;;;:::i;:::-;:46;;49805:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49888:9;49883:135;49907:5;;:12;;49903:1;:16;49883:135;;;49941:10;;:12;;;;;;;;;:::i;:::-;;;;;;49968:38;49978:5;;49984:1;49978:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50004:1;49988:13;:11;:13::i;:::-;:17;;;;:::i;:::-;49968:9;:38::i;:::-;49921:3;;;;;:::i;:::-;;;;49883:135;;;;49654:371:::0;;:::o;39542:113::-;39603:7;39630:10;:17;;;;39623:24;;39542:113;:::o;28652:339::-;28847:41;28866:12;:10;:12::i;:::-;28880:7;28847:18;:41::i;:::-;28839:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28955:28;28965:4;28971:2;28975:7;28955:9;:28::i;:::-;28652:339;;;:::o;45847:29::-;;;;;;;;;;;;;:::o;45562:31::-;;;;:::o;39210:256::-;39307:7;39343:23;39360:5;39343:16;:23::i;:::-;39335:5;:31;39327:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39432:12;:19;39445:5;39432:19;;;;;;;;;;;;;;;:26;39452:5;39432:26;;;;;;;;;;;;39425:33;;39210:256;;;;:::o;50317:168::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50374:12:::1;50400:10;50392:24;;50424:21;50392:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50373:77;;;50469:7;50461:16;;;::::0;::::1;;4529:1;50317:168::o:0;45289:30::-;;;;;;;;;;;;;:::o;29062:185::-;29200:39;29217:4;29223:2;29227:7;29200:39;;;;;;;;;;;;:16;:39::i;:::-;29062:185;;;:::o;49344:298::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49436:9:::1;49432:203;49455:6;;:13;;49451:1;:17;49432:203;;;49490:12;49505:6;;49512:1;49505:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49490:24;;49554:1;49538:18;;:4;:18;;;;49529:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;49618:5;49591:18;:24;49610:4;49591:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;49432:203;49470:3;;;;;:::i;:::-;;;;49432:203;;;;49344:298:::0;;:::o;50170:135::-;50243:7;50270:20;:27;50291:5;50270:27;;;;;;;;;;;;;;;;50263:34;;50170:135;;;:::o;39732:233::-;39807:7;39843:30;:28;:30::i;:::-;39835:5;:38;39827:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39940:10;39951:5;39940:17;;;;;;;;;;;;;;;;;;;;;;;;39933:24;;39732:233;;;:::o;50675:92::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50755:4:::1;50745:7;:14;;;;;;;;;;;;:::i;:::-;;50675:92:::0;:::o;26037:239::-;26109:7;26129:13;26145:7;:16;26153:7;26145:16;;;;;;;;;;;;;;;;;;;;;26129:32;;26197:1;26180:19;;:5;:19;;;;26172:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26263:5;26256:12;;;26037:239;;;:::o;46122:55::-;;;;;;;;;;;;;;;;;:::o;45709:87::-;;;;:::o;45809:31::-;;;;;;;;;;;;;:::o;25767:208::-;25839:7;25884:1;25867:19;;:5;:19;;;;25859:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25951:9;:16;25961:5;25951:16;;;;;;;;;;;;;;;;25944:23;;25767:208;;;:::o;4889:103::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4954:30:::1;4981:1;4954:18;:30::i;:::-;4889:103::o:0;45435:37::-;;;;;;;;;;;;;:::o;46065:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;50595:72::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50655:4:::1;50646:6;;:13;;;;;;;;;;;;;;;;;;50595:72::o:0;48854:104::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48934:16:::1;;;;;;;;;;;48933:17;48914:16;;:36;;;;;;;;;;;;;;;;;;48854:104::o:0;50037:121::-;50101:4;50125:18;:25;50144:5;50125:25;;;;;;;;;;;;;;;;;;;;;;;;;50118:32;;50037:121;;;:::o;4238:87::-;4284:7;4311:6;;;;;;;;;;;4304:13;;4238:87;:::o;50497:90::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50570:9:::1;50562:5;:17;;;;50497:90:::0;:::o;26512:104::-;26568:13;26601:7;26594:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26512:104;:::o;45397:31::-;;;;;;;;;;;;;:::o;45366:24::-;;;;;;;;;;;;;:::o;45522:33::-;;;;:::o;28195:155::-;28290:52;28309:12;:10;:12::i;:::-;28323:8;28333;28290:18;:52::i;:::-;28195:155;;:::o;45918:26::-;;;;;;;;;;;;;:::o;45639:31::-;;;;:::o;46326:679::-;46429:16;;;;;;;;;;;46410:35;;:15;:35;;46402:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;46529:9;46510:15;46502:5;;:23;;;;:::i;:::-;:36;;46494:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;46586:19;;;;;;;;;;;46578:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;46667:14;;46651:13;:11;:13::i;:::-;:30;46643:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46755:16;;;;;;;;;;;46717:54;;46736:15;46717:16;;:34;;;;:::i;:::-;:54;;46709:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;46857:9;46853:145;46876:15;46872:1;:19;46853:145;;;46913:16;;:18;;;;;;;;;:::i;:::-;;;;;;46946:40;46956:10;46984:1;46968:13;:11;:13::i;:::-;:17;;;;:::i;:::-;46946:9;:40::i;:::-;46893:3;;;;;:::i;:::-;;;;46853:145;;;;46326:679;:::o;47868:729::-;47950:17;;;;;;;;;;;47949:18;47941:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;48036:16;;;;;;;;;;;48017:35;;:15;:35;;48009:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;48136:9;48117:15;48109:5;;:23;;;;:::i;:::-;:36;;48101:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;48194:16;;;;;;;;;;;48186:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;48273:14;;48257:13;:11;:13::i;:::-;:30;48249:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;48357:16;;;;;;;;;;;48319:54;;48338:15;48319:16;;:34;;;;:::i;:::-;:54;;48311:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;48449:9;48445:145;48468:15;48464:1;:19;48445:145;;;48505:16;;:18;;;;;;;;;:::i;:::-;;;;;;48538:40;48548:10;48576:1;48560:13;:11;:13::i;:::-;:17;;;;:::i;:::-;48538:9;:40::i;:::-;48485:3;;;;;:::i;:::-;;;;48445:145;;;;47868:729;:::o;45326:33::-;;;;;;;;;;;;;:::o;29318:328::-;29493:41;29512:12;:10;:12::i;:::-;29526:7;29493:18;:41::i;:::-;29485:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29599:39;29613:4;29619:2;29623:7;29632:5;29599:13;:39::i;:::-;29318:328;;;;:::o;47014:841::-;47096:18;:30;47115:10;47096:30;;;;;;;;;;;;;;;;;;;;;;;;;47088:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;47226:13;;;;;;;;;;;47172:67;;47207:15;47172:20;:32;47193:10;47172:32;;;;;;;;;;;;;;;;:50;;;;:::i;:::-;:67;;47164:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;47311:9;47292:15;47284:5;;:23;;;;:::i;:::-;:36;;47276:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47368:17;;;;;;;;;;;:38;;;;;47390:16;;;;;;;;;;;47389:17;47368:38;47360:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;47473:14;;47457:13;:11;:13::i;:::-;:30;47449:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;47558:16;;;;;;;;;;;47519:55;;47539:15;47519:17;;:35;;;;:::i;:::-;:55;;47511:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;47657:9;47653:195;47676:15;47672:1;:19;47653:195;;;47713:20;:32;47734:10;47713:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;47762:17;;:19;;;;;;;;;:::i;:::-;;;;;;47796:40;47806:10;47834:1;47818:13;:11;:13::i;:::-;:17;;;;:::i;:::-;47796:9;:40::i;:::-;47693:3;;;;;:::i;:::-;;;;47653:195;;;;47014:841;:::o;45883:28::-;;;;;;;;;;;;;:::o;48610:113::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48696:19:::1;;;;;;;;;;;48695:20;48673:19;;:42;;;;;;;;;;;;;;;;;;48610:113::o:0;51031:403::-;51104:13;51138:16;51146:7;51138;:16::i;:::-;51130:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;51232:5;51222:15;;:6;;;;;;;;;;;:15;;;51219:79;;;51261:13;51254:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51219:79;51349:1;51331:7;51325:21;;;;;:::i;:::-;;;:25;:101;;;;;;;;;;;;;;;;;51377:7;51386:18;:7;:16;:18::i;:::-;51406:13;51360:60;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51325:101;51318:108;;51031:403;;;;:::o;45479:36::-;;;;;;;;;;;;;:::o;50913:106::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51007:4:::1;;50991:13;:20;;;;;;;:::i;:::-;;50913:106:::0;;:::o;45250:32::-;;;;;;;;;;;;;:::o;45677:25::-;;;;:::o;28421:164::-;28518:4;28542:18;:25;28561:5;28542:25;;;;;;;;;;;;;;;:35;28568:8;28542:35;;;;;;;;;;;;;;;;;;;;;;;;;28535:42;;28421:164;;;;:::o;48970:362::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49057:9:::1;49053:272;49076:6;;:13;;49072:1;:17;49053:272;;;49111:12;49126:6;;49133:1;49126:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49111:24;;49159:18;:24;49178:4;49159:24;;;;;;;;;;;;;;;;;;;;;;;;;49158:25;49150:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;49245:1;49229:18;;:4;:18;;;;49220:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;49309:4;49282:18;:24;49301:4;49282:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;49053:272;49091:3;;;;;:::i;:::-;;;;49053:272;;;;48970:362:::0;;:::o;5147:201::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5256:1:::1;5236:22;;:8;:22;;;;5228:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5312:28;5331:8;5312:18;:28::i;:::-;5147:201:::0;:::o;48735:107::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48817:17:::1;;;;;;;;;;;48816:18;48796:17;;:38;;;;;;;;;;;;;;;;;;48735:107::o:0;50777:124::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50879:14:::1;50863:13;:30;;;;;;;;;;;;:::i;:::-;;50777:124:::0;:::o;25398:305::-;25500:4;25552:25;25537:40;;;:11;:40;;;;:105;;;;25609:33;25594:48;;;:11;:48;;;;25537:105;:158;;;;25659:36;25683:11;25659:23;:36::i;:::-;25537:158;25517:178;;25398:305;;;:::o;31156:127::-;31221:4;31273:1;31245:30;;:7;:16;31253:7;31245:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31238:37;;31156:127;;;:::o;2909:98::-;2962:7;2989:10;2982:17;;2909:98;:::o;35138:174::-;35240:2;35213:15;:24;35229:7;35213:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35296:7;35292:2;35258:46;;35267:23;35282:7;35267:14;:23::i;:::-;35258:46;;;;;;;;;;;;35138:174;;:::o;32140:110::-;32216:26;32226:2;32230:7;32216:26;;;;;;;;;;;;:9;:26::i;:::-;32140:110;;:::o;31450:348::-;31543:4;31568:16;31576:7;31568;:16::i;:::-;31560:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31644:13;31660:23;31675:7;31660:14;:23::i;:::-;31644:39;;31713:5;31702:16;;:7;:16;;;:51;;;;31746:7;31722:31;;:20;31734:7;31722:11;:20::i;:::-;:31;;;31702:51;:87;;;;31757:32;31774:5;31781:7;31757:16;:32::i;:::-;31702:87;31694:96;;;31450:348;;;;:::o;34442:578::-;34601:4;34574:31;;:23;34589:7;34574:14;:23::i;:::-;:31;;;34566:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34684:1;34670:16;;:2;:16;;;;34662:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34740:39;34761:4;34767:2;34771:7;34740:20;:39::i;:::-;34844:29;34861:1;34865:7;34844:8;:29::i;:::-;34905:1;34886:9;:15;34896:4;34886:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34934:1;34917:9;:13;34927:2;34917:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34965:2;34946:7;:16;34954:7;34946:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35004:7;35000:2;34985:27;;34994:4;34985:27;;;;;;;;;;;;34442:578;;;:::o;5508:191::-;5582:16;5601:6;;;;;;;;;;;5582:25;;5627:8;5618:6;;:17;;;;;;;;;;;;;;;;;;5682:8;5651:40;;5672:8;5651:40;;;;;;;;;;;;5508:191;;:::o;35454:315::-;35609:8;35600:17;;:5;:17;;;;35592:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:8;35658:18;:25;35677:5;35658:25;;;;;;;;;;;;;;;:35;35684:8;35658:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35742:8;35720:41;;35735:5;35720:41;;;35752:8;35720:41;;;;;;:::i;:::-;;;;;;;;35454:315;;;:::o;30528:::-;30685:28;30695:4;30701:2;30705:7;30685:9;:28::i;:::-;30732:48;30755:4;30761:2;30765:7;30774:5;30732:22;:48::i;:::-;30724:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30528:315;;;;:::o;418:723::-;474:13;704:1;695:5;:10;691:53;;;722:10;;;;;;;;;;;;;;;;;;;;;691:53;754:12;769:5;754:20;;785:14;810:78;825:1;817:4;:9;810:78;;843:8;;;;;:::i;:::-;;;;874:2;866:10;;;;;:::i;:::-;;;810:78;;;898:19;930:6;920:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;898:39;;948:154;964:1;955:5;:10;948:154;;992:1;982:11;;;;;:::i;:::-;;;1059:2;1051:5;:10;;;;:::i;:::-;1038:2;:24;;;;:::i;:::-;1025:39;;1008:6;1015;1008:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1088:2;1079:11;;;;;:::i;:::-;;;948:154;;;1126:6;1112:21;;;;;418:723;;;;:::o;16882:157::-;16967:4;17006:25;16991:40;;;:11;:40;;;;16984:47;;16882:157;;;:::o;32477:321::-;32607:18;32613:2;32617:7;32607:5;:18::i;:::-;32658:54;32689:1;32693:2;32697:7;32706:5;32658:22;:54::i;:::-;32636:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32477:321;;;:::o;40578:589::-;40722:45;40749:4;40755:2;40759:7;40722:26;:45::i;:::-;40800:1;40784:18;;:4;:18;;;40780:187;;;40819:40;40851:7;40819:31;:40::i;:::-;40780:187;;;40889:2;40881:10;;:4;:10;;;40877:90;;40908:47;40941:4;40947:7;40908:32;:47::i;:::-;40877:90;40780:187;40995:1;40981:16;;:2;:16;;;40977:183;;;41014:45;41051:7;41014:36;:45::i;:::-;40977:183;;;41087:4;41081:10;;:2;:10;;;41077:83;;41108:40;41136:2;41140:7;41108:27;:40::i;:::-;41077:83;40977:183;40578:589;;;:::o;36334:799::-;36489:4;36510:15;:2;:13;;;:15::i;:::-;36506:620;;;36562:2;36546:36;;;36583:12;:10;:12::i;:::-;36597:4;36603:7;36612:5;36546:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36542:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36805:1;36788:6;:13;:18;36784:272;;;36831:60;;;;;;;;;;:::i;:::-;;;;;;;;36784:272;37006:6;37000:13;36991:6;36987:2;36983:15;36976:38;36542:529;36679:41;;;36669:51;;;:6;:51;;;;36662:58;;;;;36506:620;37110:4;37103:11;;36334:799;;;;;;;:::o;33134:382::-;33228:1;33214:16;;:2;:16;;;;33206:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33287:16;33295:7;33287;:16::i;:::-;33286:17;33278:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33349:45;33378:1;33382:2;33386:7;33349:20;:45::i;:::-;33424:1;33407:9;:13;33417:2;33407:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33455:2;33436:7;:16;33444:7;33436:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33500:7;33496:2;33475:33;;33492:1;33475:33;;;;;;;;;;;;33134:382;;:::o;37705:126::-;;;;:::o;41890:164::-;41994:10;:17;;;;41967:15;:24;41983:7;41967:24;;;;;;;;;;;:44;;;;42022:10;42038:7;42022:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41890:164;:::o;42681:988::-;42947:22;42997:1;42972:22;42989:4;42972:16;:22::i;:::-;:26;;;;:::i;:::-;42947:51;;43009:18;43030:17;:26;43048:7;43030:26;;;;;;;;;;;;43009:47;;43177:14;43163:10;:28;43159:328;;43208:19;43230:12;:18;43243:4;43230:18;;;;;;;;;;;;;;;:34;43249:14;43230:34;;;;;;;;;;;;43208:56;;43314:11;43281:12;:18;43294:4;43281:18;;;;;;;;;;;;;;;:30;43300:10;43281:30;;;;;;;;;;;:44;;;;43431:10;43398:17;:30;43416:11;43398:30;;;;;;;;;;;:43;;;;43159:328;;43583:17;:26;43601:7;43583:26;;;;;;;;;;;43576:33;;;43627:12;:18;43640:4;43627:18;;;;;;;;;;;;;;;:34;43646:14;43627:34;;;;;;;;;;;43620:41;;;42681:988;;;;:::o;43964:1079::-;44217:22;44262:1;44242:10;:17;;;;:21;;;;:::i;:::-;44217:46;;44274:18;44295:15;:24;44311:7;44295:24;;;;;;;;;;;;44274:45;;44646:19;44668:10;44679:14;44668:26;;;;;;;;;;;;;;;;;;;;;;;;44646:48;;44732:11;44707:10;44718;44707:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;44843:10;44812:15;:28;44828:11;44812:28;;;;;;;;;;;:41;;;;44984:15;:24;45000:7;44984:24;;;;;;;;;;;44977:31;;;45019:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43964:1079;;;;:::o;41468:221::-;41553:14;41570:20;41587:2;41570:16;:20::i;:::-;41553:37;;41628:7;41601:12;:16;41614:2;41601:16;;;;;;;;;;;;;;;:24;41618:6;41601:24;;;;;;;;;;;:34;;;;41675:6;41646:17;:26;41664:7;41646:26;;;;;;;;;;;:35;;;;41468:221;;;:::o;6579:387::-;6639:4;6847:12;6914:7;6902:20;6894:28;;6957:1;6950:4;:8;6943:15;;;6579:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;867:367::-;;;1000:3;993:4;985:6;981:17;977:27;967:2;;1018:1;1015;1008:12;967:2;1054:6;1041:20;1031:30;;1084:18;1076:6;1073:30;1070:2;;;1116:1;1113;1106:12;1070:2;1153:4;1145:6;1141:17;1129:29;;1207:3;1199:4;1191:6;1187:17;1177:8;1173:32;1170:41;1167:2;;;1224:1;1221;1214:12;1167:2;957:277;;;;;:::o;1240:133::-;;1321:6;1308:20;1299:29;;1337:30;1361:5;1337:30;:::i;:::-;1289:84;;;;:::o;1379:137::-;;1462:6;1449:20;1440:29;;1478:32;1504:5;1478:32;:::i;:::-;1430:86;;;;:::o;1522:141::-;;1609:6;1603:13;1594:22;;1625:32;1651:5;1625:32;:::i;:::-;1584:79;;;;:::o;1682:271::-;;1786:3;1779:4;1771:6;1767:17;1763:27;1753:2;;1804:1;1801;1794:12;1753:2;1844:6;1831:20;1869:78;1943:3;1935:6;1928:4;1920:6;1916:17;1869:78;:::i;:::-;1860:87;;1743:210;;;;;:::o;1973:352::-;;;2091:3;2084:4;2076:6;2072:17;2068:27;2058:2;;2109:1;2106;2099:12;2058:2;2145:6;2132:20;2122:30;;2175:18;2167:6;2164:30;2161:2;;;2207:1;2204;2197:12;2161:2;2244:4;2236:6;2232:17;2220:29;;2298:3;2290:4;2282:6;2278:17;2268:8;2264:32;2261:41;2258:2;;;2315:1;2312;2305:12;2258:2;2048:277;;;;;:::o;2345:273::-;;2450:3;2443:4;2435:6;2431:17;2427:27;2417:2;;2468:1;2465;2458:12;2417:2;2508:6;2495:20;2533:79;2608:3;2600:6;2593:4;2585:6;2581:17;2533:79;:::i;:::-;2524:88;;2407:211;;;;;:::o;2624:139::-;;2708:6;2695:20;2686:29;;2724:33;2751:5;2724:33;:::i;:::-;2676:87;;;;:::o;2769:262::-;;2877:2;2865:9;2856:7;2852:23;2848:32;2845:2;;;2893:1;2890;2883:12;2845:2;2936:1;2961:53;3006:7;2997:6;2986:9;2982:22;2961:53;:::i;:::-;2951:63;;2907:117;2835:196;;;;:::o;3037:407::-;;;3162:2;3150:9;3141:7;3137:23;3133:32;3130:2;;;3178:1;3175;3168:12;3130:2;3221:1;3246:53;3291:7;3282:6;3271:9;3267:22;3246:53;:::i;:::-;3236:63;;3192:117;3348:2;3374:53;3419:7;3410:6;3399:9;3395:22;3374:53;:::i;:::-;3364:63;;3319:118;3120:324;;;;;:::o;3450:552::-;;;;3592:2;3580:9;3571:7;3567:23;3563:32;3560:2;;;3608:1;3605;3598:12;3560:2;3651:1;3676:53;3721:7;3712:6;3701:9;3697:22;3676:53;:::i;:::-;3666:63;;3622:117;3778:2;3804:53;3849:7;3840:6;3829:9;3825:22;3804:53;:::i;:::-;3794:63;;3749:118;3906:2;3932:53;3977:7;3968:6;3957:9;3953:22;3932:53;:::i;:::-;3922:63;;3877:118;3550:452;;;;;:::o;4008:809::-;;;;;4176:3;4164:9;4155:7;4151:23;4147:33;4144:2;;;4193:1;4190;4183:12;4144:2;4236:1;4261:53;4306:7;4297:6;4286:9;4282:22;4261:53;:::i;:::-;4251:63;;4207:117;4363:2;4389:53;4434:7;4425:6;4414:9;4410:22;4389:53;:::i;:::-;4379:63;;4334:118;4491:2;4517:53;4562:7;4553:6;4542:9;4538:22;4517:53;:::i;:::-;4507:63;;4462:118;4647:2;4636:9;4632:18;4619:32;4678:18;4670:6;4667:30;4664:2;;;4710:1;4707;4700:12;4664:2;4738:62;4792:7;4783:6;4772:9;4768:22;4738:62;:::i;:::-;4728:72;;4590:220;4134:683;;;;;;;:::o;4823:401::-;;;4945:2;4933:9;4924:7;4920:23;4916:32;4913:2;;;4961:1;4958;4951:12;4913:2;5004:1;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4975:117;5131:2;5157:50;5199:7;5190:6;5179:9;5175:22;5157:50;:::i;:::-;5147:60;;5102:115;4903:321;;;;;:::o;5230:407::-;;;5355:2;5343:9;5334:7;5330:23;5326:32;5323:2;;;5371:1;5368;5361:12;5323:2;5414:1;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5385:117;5541:2;5567:53;5612:7;5603:6;5592:9;5588:22;5567:53;:::i;:::-;5557:63;;5512:118;5313:324;;;;;:::o;5643:425::-;;;5786:2;5774:9;5765:7;5761:23;5757:32;5754:2;;;5802:1;5799;5792:12;5754:2;5873:1;5862:9;5858:17;5845:31;5903:18;5895:6;5892:30;5889:2;;;5935:1;5932;5925:12;5889:2;5971:80;6043:7;6034:6;6023:9;6019:22;5971:80;:::i;:::-;5953:98;;;;5816:245;5744:324;;;;;:::o;6074:260::-;;6181:2;6169:9;6160:7;6156:23;6152:32;6149:2;;;6197:1;6194;6187:12;6149:2;6240:1;6265:52;6309:7;6300:6;6289:9;6285:22;6265:52;:::i;:::-;6255:62;;6211:116;6139:195;;;;:::o;6340:282::-;;6458:2;6446:9;6437:7;6433:23;6429:32;6426:2;;;6474:1;6471;6464:12;6426:2;6517:1;6542:63;6597:7;6588:6;6577:9;6573:22;6542:63;:::i;:::-;6532:73;;6488:127;6416:206;;;;:::o;6628:395::-;;;6756:2;6744:9;6735:7;6731:23;6727:32;6724:2;;;6772:1;6769;6762:12;6724:2;6843:1;6832:9;6828:17;6815:31;6873:18;6865:6;6862:30;6859:2;;;6905:1;6902;6895:12;6859:2;6941:65;6998:7;6989:6;6978:9;6974:22;6941:65;:::i;:::-;6923:83;;;;6786:230;6714:309;;;;;:::o;7029:375::-;;7147:2;7135:9;7126:7;7122:23;7118:32;7115:2;;;7163:1;7160;7153:12;7115:2;7234:1;7223:9;7219:17;7206:31;7264:18;7256:6;7253:30;7250:2;;;7296:1;7293;7286:12;7250:2;7324:63;7379:7;7370:6;7359:9;7355:22;7324:63;:::i;:::-;7314:73;;7177:220;7105:299;;;;:::o;7410:262::-;;7518:2;7506:9;7497:7;7493:23;7489:32;7486:2;;;7534:1;7531;7524:12;7486:2;7577:1;7602:53;7647:7;7638:6;7627:9;7623:22;7602:53;:::i;:::-;7592:63;;7548:117;7476:196;;;;:::o;7678:118::-;7765:24;7783:5;7765:24;:::i;:::-;7760:3;7753:37;7743:53;;:::o;7802:109::-;7883:21;7898:5;7883:21;:::i;:::-;7878:3;7871:34;7861:50;;:::o;7917:360::-;;8031:38;8063:5;8031:38;:::i;:::-;8085:70;8148:6;8143:3;8085:70;:::i;:::-;8078:77;;8164:52;8209:6;8204:3;8197:4;8190:5;8186:16;8164:52;:::i;:::-;8241:29;8263:6;8241:29;:::i;:::-;8236:3;8232:39;8225:46;;8007:270;;;;;:::o;8283:364::-;;8399:39;8432:5;8399:39;:::i;:::-;8454:71;8518:6;8513:3;8454:71;:::i;:::-;8447:78;;8534:52;8579:6;8574:3;8567:4;8560:5;8556:16;8534:52;:::i;:::-;8611:29;8633:6;8611:29;:::i;:::-;8606:3;8602:39;8595:46;;8375:272;;;;;:::o;8653:377::-;;8787:39;8820:5;8787:39;:::i;:::-;8842:89;8924:6;8919:3;8842:89;:::i;:::-;8835:96;;8940:52;8985:6;8980:3;8973:4;8966:5;8962:16;8940:52;:::i;:::-;9017:6;9012:3;9008:16;9001:23;;8763:267;;;;;:::o;9060:845::-;;9200:5;9194:12;9229:36;9255:9;9229:36;:::i;:::-;9281:89;9363:6;9358:3;9281:89;:::i;:::-;9274:96;;9401:1;9390:9;9386:17;9417:1;9412:137;;;;9563:1;9558:341;;;;9379:520;;9412:137;9496:4;9492:9;9481;9477:25;9472:3;9465:38;9532:6;9527:3;9523:16;9516:23;;9412:137;;9558:341;9625:38;9657:5;9625:38;:::i;:::-;9685:1;9699:154;9713:6;9710:1;9707:13;9699:154;;;9787:7;9781:14;9777:1;9772:3;9768:11;9761:35;9837:1;9828:7;9824:15;9813:26;;9735:4;9732:1;9728:12;9723:17;;9699:154;;;9882:6;9877:3;9873:16;9866:23;;9565:334;;9379:520;;9167:738;;;;;;:::o;9911:323::-;;10074:67;10138:2;10133:3;10074:67;:::i;:::-;10067:74;;10171:27;10167:1;10162:3;10158:11;10151:48;10225:2;10220:3;10216:12;10209:19;;10057:177;;;:::o;10240:315::-;;10403:67;10467:2;10462:3;10403:67;:::i;:::-;10396:74;;10500:19;10496:1;10491:3;10487:11;10480:40;10546:2;10541:3;10537:12;10530:19;;10386:169;;;:::o;10561:388::-;;10724:67;10788:2;10783:3;10724:67;:::i;:::-;10717:74;;10821:34;10817:1;10812:3;10808:11;10801:55;10887:26;10882:2;10877:3;10873:12;10866:48;10940:2;10935:3;10931:12;10924:19;;10707:242;;;:::o;10955:375::-;;11118:67;11182:2;11177:3;11118:67;:::i;:::-;11111:74;;11215:34;11211:1;11206:3;11202:11;11195:55;11281:13;11276:2;11271:3;11267:12;11260:35;11321:2;11316:3;11312:12;11305:19;;11101:229;;;:::o;11336:382::-;;11499:67;11563:2;11558:3;11499:67;:::i;:::-;11492:74;;11596:34;11592:1;11587:3;11583:11;11576:55;11662:20;11657:2;11652:3;11648:12;11641:42;11709:2;11704:3;11700:12;11693:19;;11482:236;;;:::o;11724:319::-;;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11984:23;11980:1;11975:3;11971:11;11964:44;12034:2;12029:3;12025:12;12018:19;;11870:173;;;:::o;12049:370::-;;12212:67;12276:2;12271:3;12212:67;:::i;:::-;12205:74;;12309:34;12305:1;12300:3;12296:11;12289:55;12375:8;12370:2;12365:3;12361:12;12354:30;12410:2;12405:3;12401:12;12394:19;;12195:224;;;:::o;12425:325::-;;12588:67;12652:2;12647:3;12588:67;:::i;:::-;12581:74;;12685:29;12681:1;12676:3;12672:11;12665:50;12741:2;12736:3;12732:12;12725:19;;12571:179;;;:::o;12756:326::-;;12919:67;12983:2;12978:3;12919:67;:::i;:::-;12912:74;;13016:30;13012:1;13007:3;13003:11;12996:51;13073:2;13068:3;13064:12;13057:19;;12902:180;;;:::o;13088:321::-;;13251:67;13315:2;13310:3;13251:67;:::i;:::-;13244:74;;13348:25;13344:1;13339:3;13335:11;13328:46;13400:2;13395:3;13391:12;13384:19;;13234:175;;;:::o;13415:368::-;;13578:67;13642:2;13637:3;13578:67;:::i;:::-;13571:74;;13675:34;13671:1;13666:3;13662:11;13655:55;13741:6;13736:2;13731:3;13727:12;13720:28;13774:2;13769:3;13765:12;13758:19;;13561:222;;;:::o;13789:323::-;;13952:67;14016:2;14011:3;13952:67;:::i;:::-;13945:74;;14049:27;14045:1;14040:3;14036:11;14029:48;14103:2;14098:3;14094:12;14087:19;;13935:177;;;:::o;14118:321::-;;14281:67;14345:2;14340:3;14281:67;:::i;:::-;14274:74;;14378:25;14374:1;14369:3;14365:11;14358:46;14430:2;14425:3;14421:12;14414:19;;14264:175;;;:::o;14445:376::-;;14608:67;14672:2;14667:3;14608:67;:::i;:::-;14601:74;;14705:34;14701:1;14696:3;14692:11;14685:55;14771:14;14766:2;14761:3;14757:12;14750:36;14812:2;14807:3;14803:12;14796:19;;14591:230;;;:::o;14827:388::-;;14990:67;15054:2;15049:3;14990:67;:::i;:::-;14983:74;;15087:34;15083:1;15078:3;15074:11;15067:55;15153:26;15148:2;15143:3;15139:12;15132:48;15206:2;15201:3;15197:12;15190:19;;14973:242;;;:::o;15221:432::-;;15384:67;15448:2;15443:3;15384:67;:::i;:::-;15377:74;;15481:34;15477:1;15472:3;15468:11;15461:55;15547:34;15542:2;15537:3;15533:12;15526:56;15613:4;15608:2;15603:3;15599:12;15592:26;15644:2;15639:3;15635:12;15628:19;;15367:286;;;:::o;15659:320::-;;15822:67;15886:2;15881:3;15822:67;:::i;:::-;15815:74;;15919:24;15915:1;15910:3;15906:11;15899:45;15970:2;15965:3;15961:12;15954:19;;15805:174;;;:::o;15985:324::-;;16148:67;16212:2;16207:3;16148:67;:::i;:::-;16141:74;;16245:28;16241:1;16236:3;16232:11;16225:49;16300:2;16295:3;16291:12;16284:19;;16131:178;;;:::o;16315:374::-;;16478:67;16542:2;16537:3;16478:67;:::i;:::-;16471:74;;16575:34;16571:1;16566:3;16562:11;16555:55;16641:12;16636:2;16631:3;16627:12;16620:34;16680:2;16675:3;16671:12;16664:19;;16461:228;;;:::o;16695:373::-;;16858:67;16922:2;16917:3;16858:67;:::i;:::-;16851:74;;16955:34;16951:1;16946:3;16942:11;16935:55;17021:11;17016:2;17011:3;17007:12;17000:33;17059:2;17054:3;17050:12;17043:19;;16841:227;;;:::o;17074:330::-;;17237:67;17301:2;17296:3;17237:67;:::i;:::-;17230:74;;17334:34;17330:1;17325:3;17321:11;17314:55;17395:2;17390:3;17386:12;17379:19;;17220:184;;;:::o;17410:376::-;;17573:67;17637:2;17632:3;17573:67;:::i;:::-;17566:74;;17670:34;17666:1;17661:3;17657:11;17650:55;17736:14;17731:2;17726:3;17722:12;17715:36;17777:2;17772:3;17768:12;17761:19;;17556:230;;;:::o;17792:330::-;;17955:67;18019:2;18014:3;17955:67;:::i;:::-;17948:74;;18052:34;18048:1;18043:3;18039:11;18032:55;18113:2;18108:3;18104:12;18097:19;;17938:184;;;:::o;18128:373::-;;18291:67;18355:2;18350:3;18291:67;:::i;:::-;18284:74;;18388:34;18384:1;18379:3;18375:11;18368:55;18454:11;18449:2;18444:3;18440:12;18433:33;18492:2;18487:3;18483:12;18476:19;;18274:227;;;:::o;18507:379::-;;18670:67;18734:2;18729:3;18670:67;:::i;:::-;18663:74;;18767:34;18763:1;18758:3;18754:11;18747:55;18833:17;18828:2;18823:3;18819:12;18812:39;18877:2;18872:3;18868:12;18861:19;;18653:233;;;:::o;18892:365::-;;19055:67;19119:2;19114:3;19055:67;:::i;:::-;19048:74;;19152:34;19148:1;19143:3;19139:11;19132:55;19218:3;19213:2;19208:3;19204:12;19197:25;19248:2;19243:3;19239:12;19232:19;;19038:219;;;:::o;19263:365::-;;19426:67;19490:2;19485:3;19426:67;:::i;:::-;19419:74;;19523:34;19519:1;19514:3;19510:11;19503:55;19589:3;19584:2;19579:3;19575:12;19568:25;19619:2;19614:3;19610:12;19603:19;;19409:219;;;:::o;19634:310::-;;19797:67;19861:2;19856:3;19797:67;:::i;:::-;19790:74;;19894:14;19890:1;19885:3;19881:11;19874:35;19935:2;19930:3;19926:12;19919:19;;19780:164;;;:::o;19950:313::-;;20113:67;20177:2;20172:3;20113:67;:::i;:::-;20106:74;;20210:17;20206:1;20201:3;20197:11;20190:38;20254:2;20249:3;20245:12;20238:19;;20096:167;;;:::o;20269:297::-;;20449:83;20530:1;20525:3;20449:83;:::i;:::-;20442:90;;20558:1;20553:3;20549:11;20542:18;;20432:134;;;:::o;20572:381::-;;20735:67;20799:2;20794:3;20735:67;:::i;:::-;20728:74;;20832:34;20828:1;20823:3;20819:11;20812:55;20898:19;20893:2;20888:3;20884:12;20877:41;20944:2;20939:3;20935:12;20928:19;;20718:235;;;:::o;20959:305::-;;21122:66;21186:1;21181:3;21122:66;:::i;:::-;21115:73;;21218:10;21214:1;21209:3;21205:11;21198:31;21255:2;21250:3;21246:12;21239:19;;21105:159;;;:::o;21270:322::-;;21433:67;21497:2;21492:3;21433:67;:::i;:::-;21426:74;;21530:26;21526:1;21521:3;21517:11;21510:47;21583:2;21578:3;21574:12;21567:19;;21416:176;;;:::o;21598:376::-;;21761:67;21825:2;21820:3;21761:67;:::i;:::-;21754:74;;21858:34;21854:1;21849:3;21845:11;21838:55;21924:14;21919:2;21914:3;21910:12;21903:36;21965:2;21960:3;21956:12;21949:19;;21744:230;;;:::o;21980:395::-;;22143:67;22207:2;22202:3;22143:67;:::i;:::-;22136:74;;22240:34;22236:1;22231:3;22227:11;22220:55;22306:33;22301:2;22296:3;22292:12;22285:55;22366:2;22361:3;22357:12;22350:19;;22126:249;;;:::o;22381:320::-;;22544:67;22608:2;22603:3;22544:67;:::i;:::-;22537:74;;22641:24;22637:1;22632:3;22628:11;22621:45;22692:2;22687:3;22683:12;22676:19;;22527:174;;;:::o;22707:118::-;22794:24;22812:5;22794:24;:::i;:::-;22789:3;22782:37;22772:53;;:::o;22831:115::-;22916:23;22933:5;22916:23;:::i;:::-;22911:3;22904:36;22894:52;;:::o;22952:112::-;23035:22;23051:5;23035:22;:::i;:::-;23030:3;23023:35;23013:51;;:::o;23070:583::-;;23314:92;23402:3;23393:6;23314:92;:::i;:::-;23307:99;;23423:95;23514:3;23505:6;23423:95;:::i;:::-;23416:102;;23535:92;23623:3;23614:6;23535:92;:::i;:::-;23528:99;;23644:3;23637:10;;23296:357;;;;;;:::o;23659:379::-;;23865:147;24008:3;23865:147;:::i;:::-;23858:154;;24029:3;24022:10;;23847:191;;;:::o;24044:222::-;;24175:2;24164:9;24160:18;24152:26;;24188:71;24256:1;24245:9;24241:17;24232:6;24188:71;:::i;:::-;24142:124;;;;:::o;24272:640::-;;24505:3;24494:9;24490:19;24482:27;;24519:71;24587:1;24576:9;24572:17;24563:6;24519:71;:::i;:::-;24600:72;24668:2;24657:9;24653:18;24644:6;24600:72;:::i;:::-;24682;24750:2;24739:9;24735:18;24726:6;24682:72;:::i;:::-;24801:9;24795:4;24791:20;24786:2;24775:9;24771:18;24764:48;24829:76;24900:4;24891:6;24829:76;:::i;:::-;24821:84;;24472:440;;;;;;;:::o;24918:210::-;;25043:2;25032:9;25028:18;25020:26;;25056:65;25118:1;25107:9;25103:17;25094:6;25056:65;:::i;:::-;25010:118;;;;:::o;25134:313::-;;25285:2;25274:9;25270:18;25262:26;;25334:9;25328:4;25324:20;25320:1;25309:9;25305:17;25298:47;25362:78;25435:4;25426:6;25362:78;:::i;:::-;25354:86;;25252:195;;;;:::o;25453:419::-;;25657:2;25646:9;25642:18;25634:26;;25706:9;25700:4;25696:20;25692:1;25681:9;25677:17;25670:47;25734:131;25860:4;25734:131;:::i;:::-;25726:139;;25624:248;;;:::o;25878:419::-;;26082:2;26071:9;26067:18;26059:26;;26131:9;26125:4;26121:20;26117:1;26106:9;26102:17;26095:47;26159:131;26285:4;26159:131;:::i;:::-;26151:139;;26049:248;;;:::o;26303:419::-;;26507:2;26496:9;26492:18;26484:26;;26556:9;26550:4;26546:20;26542:1;26531:9;26527:17;26520:47;26584:131;26710:4;26584:131;:::i;:::-;26576:139;;26474:248;;;:::o;26728:419::-;;26932:2;26921:9;26917:18;26909:26;;26981:9;26975:4;26971:20;26967:1;26956:9;26952:17;26945:47;27009:131;27135:4;27009:131;:::i;:::-;27001:139;;26899:248;;;:::o;27153:419::-;;27357:2;27346:9;27342:18;27334:26;;27406:9;27400:4;27396:20;27392:1;27381:9;27377:17;27370:47;27434:131;27560:4;27434:131;:::i;:::-;27426:139;;27324:248;;;:::o;27578:419::-;;27782:2;27771:9;27767:18;27759:26;;27831:9;27825:4;27821:20;27817:1;27806:9;27802:17;27795:47;27859:131;27985:4;27859:131;:::i;:::-;27851:139;;27749:248;;;:::o;28003:419::-;;28207:2;28196:9;28192:18;28184:26;;28256:9;28250:4;28246:20;28242:1;28231:9;28227:17;28220:47;28284:131;28410:4;28284:131;:::i;:::-;28276:139;;28174:248;;;:::o;28428:419::-;;28632:2;28621:9;28617:18;28609:26;;28681:9;28675:4;28671:20;28667:1;28656:9;28652:17;28645:47;28709:131;28835:4;28709:131;:::i;:::-;28701:139;;28599:248;;;:::o;28853:419::-;;29057:2;29046:9;29042:18;29034:26;;29106:9;29100:4;29096:20;29092:1;29081:9;29077:17;29070:47;29134:131;29260:4;29134:131;:::i;:::-;29126:139;;29024:248;;;:::o;29278:419::-;;29482:2;29471:9;29467:18;29459:26;;29531:9;29525:4;29521:20;29517:1;29506:9;29502:17;29495:47;29559:131;29685:4;29559:131;:::i;:::-;29551:139;;29449:248;;;:::o;29703:419::-;;29907:2;29896:9;29892:18;29884:26;;29956:9;29950:4;29946:20;29942:1;29931:9;29927:17;29920:47;29984:131;30110:4;29984:131;:::i;:::-;29976:139;;29874:248;;;:::o;30128:419::-;;30332:2;30321:9;30317:18;30309:26;;30381:9;30375:4;30371:20;30367:1;30356:9;30352:17;30345:47;30409:131;30535:4;30409:131;:::i;:::-;30401:139;;30299:248;;;:::o;30553:419::-;;30757:2;30746:9;30742:18;30734:26;;30806:9;30800:4;30796:20;30792:1;30781:9;30777:17;30770:47;30834:131;30960:4;30834:131;:::i;:::-;30826:139;;30724:248;;;:::o;30978:419::-;;31182:2;31171:9;31167:18;31159:26;;31231:9;31225:4;31221:20;31217:1;31206:9;31202:17;31195:47;31259:131;31385:4;31259:131;:::i;:::-;31251:139;;31149:248;;;:::o;31403:419::-;;31607:2;31596:9;31592:18;31584:26;;31656:9;31650:4;31646:20;31642:1;31631:9;31627:17;31620:47;31684:131;31810:4;31684:131;:::i;:::-;31676:139;;31574:248;;;:::o;31828:419::-;;32032:2;32021:9;32017:18;32009:26;;32081:9;32075:4;32071:20;32067:1;32056:9;32052:17;32045:47;32109:131;32235:4;32109:131;:::i;:::-;32101:139;;31999:248;;;:::o;32253:419::-;;32457:2;32446:9;32442:18;32434:26;;32506:9;32500:4;32496:20;32492:1;32481:9;32477:17;32470:47;32534:131;32660:4;32534:131;:::i;:::-;32526:139;;32424:248;;;:::o;32678:419::-;;32882:2;32871:9;32867:18;32859:26;;32931:9;32925:4;32921:20;32917:1;32906:9;32902:17;32895:47;32959:131;33085:4;32959:131;:::i;:::-;32951:139;;32849:248;;;:::o;33103:419::-;;33307:2;33296:9;33292:18;33284:26;;33356:9;33350:4;33346:20;33342:1;33331:9;33327:17;33320:47;33384:131;33510:4;33384:131;:::i;:::-;33376:139;;33274:248;;;:::o;33528:419::-;;33732:2;33721:9;33717:18;33709:26;;33781:9;33775:4;33771:20;33767:1;33756:9;33752:17;33745:47;33809:131;33935:4;33809:131;:::i;:::-;33801:139;;33699:248;;;:::o;33953:419::-;;34157:2;34146:9;34142:18;34134:26;;34206:9;34200:4;34196:20;34192:1;34181:9;34177:17;34170:47;34234:131;34360:4;34234:131;:::i;:::-;34226:139;;34124:248;;;:::o;34378:419::-;;34582:2;34571:9;34567:18;34559:26;;34631:9;34625:4;34621:20;34617:1;34606:9;34602:17;34595:47;34659:131;34785:4;34659:131;:::i;:::-;34651:139;;34549:248;;;:::o;34803:419::-;;35007:2;34996:9;34992:18;34984:26;;35056:9;35050:4;35046:20;35042:1;35031:9;35027:17;35020:47;35084:131;35210:4;35084:131;:::i;:::-;35076:139;;34974:248;;;:::o;35228:419::-;;35432:2;35421:9;35417:18;35409:26;;35481:9;35475:4;35471:20;35467:1;35456:9;35452:17;35445:47;35509:131;35635:4;35509:131;:::i;:::-;35501:139;;35399:248;;;:::o;35653:419::-;;35857:2;35846:9;35842:18;35834:26;;35906:9;35900:4;35896:20;35892:1;35881:9;35877:17;35870:47;35934:131;36060:4;35934:131;:::i;:::-;35926:139;;35824:248;;;:::o;36078:419::-;;36282:2;36271:9;36267:18;36259:26;;36331:9;36325:4;36321:20;36317:1;36306:9;36302:17;36295:47;36359:131;36485:4;36359:131;:::i;:::-;36351:139;;36249:248;;;:::o;36503:419::-;;36707:2;36696:9;36692:18;36684:26;;36756:9;36750:4;36746:20;36742:1;36731:9;36727:17;36720:47;36784:131;36910:4;36784:131;:::i;:::-;36776:139;;36674:248;;;:::o;36928:419::-;;37132:2;37121:9;37117:18;37109:26;;37181:9;37175:4;37171:20;37167:1;37156:9;37152:17;37145:47;37209:131;37335:4;37209:131;:::i;:::-;37201:139;;37099:248;;;:::o;37353:419::-;;37557:2;37546:9;37542:18;37534:26;;37606:9;37600:4;37596:20;37592:1;37581:9;37577:17;37570:47;37634:131;37760:4;37634:131;:::i;:::-;37626:139;;37524:248;;;:::o;37778:419::-;;37982:2;37971:9;37967:18;37959:26;;38031:9;38025:4;38021:20;38017:1;38006:9;38002:17;37995:47;38059:131;38185:4;38059:131;:::i;:::-;38051:139;;37949:248;;;:::o;38203:419::-;;38407:2;38396:9;38392:18;38384:26;;38456:9;38450:4;38446:20;38442:1;38431:9;38427:17;38420:47;38484:131;38610:4;38484:131;:::i;:::-;38476:139;;38374:248;;;:::o;38628:419::-;;38832:2;38821:9;38817:18;38809:26;;38881:9;38875:4;38871:20;38867:1;38856:9;38852:17;38845:47;38909:131;39035:4;38909:131;:::i;:::-;38901:139;;38799:248;;;:::o;39053:419::-;;39257:2;39246:9;39242:18;39234:26;;39306:9;39300:4;39296:20;39292:1;39281:9;39277:17;39270:47;39334:131;39460:4;39334:131;:::i;:::-;39326:139;;39224:248;;;:::o;39478:419::-;;39682:2;39671:9;39667:18;39659:26;;39731:9;39725:4;39721:20;39717:1;39706:9;39702:17;39695:47;39759:131;39885:4;39759:131;:::i;:::-;39751:139;;39649:248;;;:::o;39903:419::-;;40107:2;40096:9;40092:18;40084:26;;40156:9;40150:4;40146:20;40142:1;40131:9;40127:17;40120:47;40184:131;40310:4;40184:131;:::i;:::-;40176:139;;40074:248;;;:::o;40328:222::-;;40459:2;40448:9;40444:18;40436:26;;40472:71;40540:1;40529:9;40525:17;40516:6;40472:71;:::i;:::-;40426:124;;;;:::o;40556:218::-;;40685:2;40674:9;40670:18;40662:26;;40698:69;40764:1;40753:9;40749:17;40740:6;40698:69;:::i;:::-;40652:122;;;;:::o;40780:214::-;;40907:2;40896:9;40892:18;40884:26;;40920:67;40984:1;40973:9;40969:17;40960:6;40920:67;:::i;:::-;40874:120;;;;:::o;41000:283::-;;41066:2;41060:9;41050:19;;41108:4;41100:6;41096:17;41215:6;41203:10;41200:22;41179:18;41167:10;41164:34;41161:62;41158:2;;;41226:18;;:::i;:::-;41158:2;41266:10;41262:2;41255:22;41040:243;;;;:::o;41289:331::-;;41440:18;41432:6;41429:30;41426:2;;;41462:18;;:::i;:::-;41426:2;41547:4;41543:9;41536:4;41528:6;41524:17;41520:33;41512:41;;41608:4;41602;41598:15;41590:23;;41355:265;;;:::o;41626:332::-;;41778:18;41770:6;41767:30;41764:2;;;41800:18;;:::i;:::-;41764:2;41885:4;41881:9;41874:4;41866:6;41862:17;41858:33;41850:41;;41946:4;41940;41936:15;41928:23;;41693:265;;;:::o;41964:141::-;;42036:3;42028:11;;42059:3;42056:1;42049:14;42093:4;42090:1;42080:18;42072:26;;42018:87;;;:::o;42111:98::-;;42196:5;42190:12;42180:22;;42169:40;;;:::o;42215:99::-;;42301:5;42295:12;42285:22;;42274:40;;;:::o;42320:168::-;;42437:6;42432:3;42425:19;42477:4;42472:3;42468:14;42453:29;;42415:73;;;;:::o;42494:147::-;;42632:3;42617:18;;42607:34;;;;:::o;42647:169::-;;42765:6;42760:3;42753:19;42805:4;42800:3;42796:14;42781:29;;42743:73;;;;:::o;42822:148::-;;42961:3;42946:18;;42936:34;;;;:::o;42976:305::-;;43035:20;43053:1;43035:20;:::i;:::-;43030:25;;43069:20;43087:1;43069:20;:::i;:::-;43064:25;;43223:1;43155:66;43151:74;43148:1;43145:81;43142:2;;;43229:18;;:::i;:::-;43142:2;43273:1;43270;43266:9;43259:16;;43020:261;;;;:::o;43287:185::-;;43344:20;43362:1;43344:20;:::i;:::-;43339:25;;43378:20;43396:1;43378:20;:::i;:::-;43373:25;;43417:1;43407:2;;43422:18;;:::i;:::-;43407:2;43464:1;43461;43457:9;43452:14;;43329:143;;;;:::o;43478:348::-;;43541:20;43559:1;43541:20;:::i;:::-;43536:25;;43575:20;43593:1;43575:20;:::i;:::-;43570:25;;43763:1;43695:66;43691:74;43688:1;43685:81;43680:1;43673:9;43666:17;43662:105;43659:2;;;43770:18;;:::i;:::-;43659:2;43818:1;43815;43811:9;43800:20;;43526:300;;;;:::o;43832:191::-;;43892:20;43910:1;43892:20;:::i;:::-;43887:25;;43926:20;43944:1;43926:20;:::i;:::-;43921:25;;43965:1;43962;43959:8;43956:2;;;43970:18;;:::i;:::-;43956:2;44015:1;44012;44008:9;44000:17;;43877:146;;;;:::o;44029:96::-;;44095:24;44113:5;44095:24;:::i;:::-;44084:35;;44074:51;;;:::o;44131:90::-;;44208:5;44201:13;44194:21;44183:32;;44173:48;;;:::o;44227:149::-;;44303:66;44296:5;44292:78;44281:89;;44271:105;;;:::o;44382:126::-;;44459:42;44452:5;44448:54;44437:65;;44427:81;;;:::o;44514:77::-;;44580:5;44569:16;;44559:32;;;:::o;44597:93::-;;44673:10;44666:5;44662:22;44651:33;;44641:49;;;:::o;44696:86::-;;44771:4;44764:5;44760:16;44749:27;;44739:43;;;:::o;44788:154::-;44872:6;44867:3;44862;44849:30;44934:1;44925:6;44920:3;44916:16;44909:27;44839:103;;;:::o;44948:307::-;45016:1;45026:113;45040:6;45037:1;45034:13;45026:113;;;45125:1;45120:3;45116:11;45110:18;45106:1;45101:3;45097:11;45090:39;45062:2;45059:1;45055:10;45050:15;;45026:113;;;45157:6;45154:1;45151:13;45148:2;;;45237:1;45228:6;45223:3;45219:16;45212:27;45148:2;44997:258;;;;:::o;45261:320::-;;45342:1;45336:4;45332:12;45322:22;;45389:1;45383:4;45379:12;45410:18;45400:2;;45466:4;45458:6;45454:17;45444:27;;45400:2;45528;45520:6;45517:14;45497:18;45494:38;45491:2;;;45547:18;;:::i;:::-;45491:2;45312:269;;;;:::o;45587:233::-;;45649:24;45667:5;45649:24;:::i;:::-;45640:33;;45695:66;45688:5;45685:77;45682:2;;;45765:18;;:::i;:::-;45682:2;45812:1;45805:5;45801:13;45794:20;;45630:190;;;:::o;45826:176::-;;45875:20;45893:1;45875:20;:::i;:::-;45870:25;;45909:20;45927:1;45909:20;:::i;:::-;45904:25;;45948:1;45938:2;;45953:18;;:::i;:::-;45938:2;45994:1;45991;45987:9;45982:14;;45860:142;;;;:::o;46008:180::-;46056:77;46053:1;46046:88;46153:4;46150:1;46143:15;46177:4;46174:1;46167:15;46194:180;46242:77;46239:1;46232:88;46339:4;46336:1;46329:15;46363:4;46360:1;46353:15;46380:180;46428:77;46425:1;46418:88;46525:4;46522:1;46515:15;46549:4;46546:1;46539:15;46566:180;46614:77;46611:1;46604:88;46711:4;46708:1;46701:15;46735:4;46732:1;46725:15;46752:102;;46844:2;46840:7;46835:2;46828:5;46824:14;46820:28;46810:38;;46800:54;;;:::o;46860:122::-;46933:24;46951:5;46933:24;:::i;:::-;46926:5;46923:35;46913:2;;46972:1;46969;46962:12;46913:2;46903:79;:::o;46988:116::-;47058:21;47073:5;47058:21;:::i;:::-;47051:5;47048:32;47038:2;;47094:1;47091;47084:12;47038:2;47028:76;:::o;47110:120::-;47182:23;47199:5;47182:23;:::i;:::-;47175:5;47172:34;47162:2;;47220:1;47217;47210:12;47162:2;47152:78;:::o;47236:122::-;47309:24;47327:5;47309:24;:::i;:::-;47302:5;47299:35;47289:2;;47348:1;47345;47338:12;47289:2;47279:79;:::o
Swarm Source
ipfs://4a6bcc8dc9530c1806ac3c79ca0c14ff986ae17c4ec3621b13b957874fbeebda
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.