ERC-721
Overview
Max Total Supply
1,000 BCGR
Holders
297
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
2 BCGRLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
RektChimpGang
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-06-26 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol /* ____ _ ____ _ _ ____ | __ ) __ _| |__ _ _ / ___| |__ (_)_ __ ___ _ __ / ___| __ _ _ __ __ _ | _ \ / _` | '_ \| | | | | | '_ \| | '_ ` _ \| '_ \| | _ / _` | '_ \ / _` | | |_) | (_| | |_) | |_| | |___| | | | | | | | | | |_) | |_| | (_| | | | | (_| | |____/ \__,_|_.__/ \__, |\____|_| |_|_|_| |_| |_| .__/ \____|\__,_|_| |_|\__, | |___/ |_| |___/ */ // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (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); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (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 overridden 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Burnable.sol) pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (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(); } } // File: ftm.sol pragma solidity ^0.8.4; /* ____ _ ____ _ _ ____ | __ ) __ _| |__ _ _ / ___| |__ (_)_ __ ___ _ __ / ___| __ _ _ __ __ _ | _ \ / _` | '_ \| | | | | | '_ \| | '_ ` _ \| '_ \| | _ / _` | '_ \ / _` | | |_) | (_| | |_) | |_| | |___| | | | | | | | | | |_) | |_| | (_| | | | | (_| | |____/ \__,_|_.__/ \__, |\____|_| |_|_|_| |_| |_| .__/ \____|\__,_|_| |_|\__, | |___/ |_| |___/ */ contract RektChimpGang is ERC721, ERC721Enumerable, ERC721Burnable, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; bool private mintable = false; bool private whitelist_mintable = false; uint256 public constant MAX_CHIMPS = 1000; //set (exclusive) uint256 public constant MAX_MINT = 3; //only public mint uint256 private randomCallCount = 0; mapping(address => bool) private _whiteList; mapping(address => uint8) private _publicMint; //for tracking how many each adress minted constructor() ERC721("RektChimpGang", "BCGR") {} function _baseURI() internal pure override returns (string memory) { return "ipfs://QmXm45skbYTcUw2Wtr4nWo75bs4Suz9cMGwwGhb8FxrW1n/"; } function safeMint(address to) public onlyOwner { uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _safeMint(to, tokenId); } function tokensOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } function setWhiteList(address[] calldata addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { _whiteList[addresses[i]] = true; } } function AvailableWhiteListMint(address addr) external view returns (bool) { return _whiteList[addr]; } function mintWhiteList() public { require(whitelist_mintable, "White list is not active"); require(_whiteList[msg.sender], "White list is not active"); require(_tokenIdCounter.current() < MAX_CHIMPS, "All Chimps are minted."); _whiteList[msg.sender] = false; _safeMint(msg.sender, _tokenIdCounter.current()); _tokenIdCounter.increment(); } function MintAmountChimps(uint8 amount) public { require(mintable, "Chimps are not mintable yet."); require(_publicMint[msg.sender] + amount <= MAX_MINT, "Exceeded max available Free Chimps"); require(_tokenIdCounter.current() + amount - 1 < MAX_CHIMPS, "All Chimps are minted."); _publicMint[msg.sender] += amount; //set sender minted amount uint256 index; for (index = 0; index < amount; index++) { _safeMint(msg.sender, _tokenIdCounter.current()); _tokenIdCounter.increment(); } } function fundLottery() public payable { //fund contract for next lottery draw require(msg.value > 0, "sent nothing"); } function drawLottery() public onlyOwner { // send value on contract to pseudorandom holder require(_tokenIdCounter.current() > 0, "No mints yet"); uint256 random = uint256(keccak256(abi.encodePacked(block.difficulty, block.timestamp, randomCallCount))); randomCallCount++; random = random % totalSupply(); address to = ownerOf(tokenByIndex(random)); Address.sendValue(payable(to),address(this).balance); } ///Set the mintable states function enableMinting() public onlyOwner { mintable = true; } function disableMinting() public onlyOwner { mintable = false; } function enableWhiteListMinting() public onlyOwner { whitelist_mintable = true; } function disableWhiteListMinting() public onlyOwner { whitelist_mintable = false; } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"AvailableWhiteListMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_CHIMPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"}],"name":"MintAmountChimps","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":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableWhiteListMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"drawLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableWhiteListMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundLottery","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintWhiteList","outputs":[],"stateMutability":"nonpayable","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","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"}]
Contract Creation Code
60806040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600d553480156200004c57600080fd5b506040518060400160405280600d81526020017f52656b744368696d7047616e67000000000000000000000000000000000000008152506040518060400160405280600481526020017f42434752000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d1929190620001e1565b508060019080519060200190620000ea929190620001e1565b5050506200010d620001016200011360201b60201c565b6200011b60201b60201c565b620002f6565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ef9062000291565b90600052602060002090601f0160209004810192826200021357600085556200025f565b82601f106200022e57805160ff19168380011785556200025f565b828001600101855582156200025f579182015b828111156200025e57825182559160200191906001019062000241565b5b5090506200026e919062000272565b5090565b5b808211156200028d57600081600090555060010162000273565b5090565b60006002820490506001821680620002aa57607f821691505b60208210811415620002c157620002c0620002c7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614b4580620003066000396000f3fe6080604052600436106101f95760003560e01c8063775b9c131161010d578063c736fca1116100a0578063e27f0f621161006f578063e27f0f62146106d4578063e797ec1b146106ff578063e985e9c514610716578063f0292a0314610753578063f2fde38b1461077e576101f9565b8063c736fca114610640578063c87b56dd14610669578063e09814b5146106a6578063e27df051146106bd576101f9565b806395d89b41116100dc57806395d89b41146105b9578063a22cb465146105e4578063b5cc45391461060d578063b88d4fde14610617576101f9565b8063775b9c13146105115780637e5cd5c11461053a5780638462151c146105515780638da5cb5b1461058e576101f9565b80632f745c59116101905780634f6ccce71161015f5780634f6ccce71461042c5780636352211e146104695780636d4af71c146104a657806370a08231146104bd578063715018a6146104fa576101f9565b80632f745c591461037457806340d097c3146103b157806342842e0e146103da57806342966c6814610403576101f9565b8063095ea7b3116101cc578063095ea7b3146102e057806318160ddd1461030957806323b872dd1461033457806327e605ec1461035d576101f9565b806301ffc9a7146101fe57806302d44ba41461023b57806306fdde0314610278578063081812fc146102a3575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061341d565b6107a7565b6040516102329190613b10565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d919061320d565b6107b9565b60405161026f9190613b10565b60405180910390f35b34801561028457600080fd5b5061028d61080f565b60405161029a9190613b2b565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613477565b6108a1565b6040516102d79190613a87565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190613390565b610926565b005b34801561031557600080fd5b5061031e610a3e565b60405161032b9190613ead565b60405180910390f35b34801561034057600080fd5b5061035b6004803603810190610356919061327a565b610a4b565b005b34801561036957600080fd5b50610372610aab565b005b34801561038057600080fd5b5061039b60048036038101906103969190613390565b610bf7565b6040516103a89190613ead565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061320d565b610c9c565b005b3480156103e657600080fd5b5061040160048036038101906103fc919061327a565b610d3e565b005b34801561040f57600080fd5b5061042a60048036038101906104259190613477565b610d5e565b005b34801561043857600080fd5b50610453600480360381019061044e9190613477565b610dba565b6040516104609190613ead565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613477565b610e2b565b60405161049d9190613a87565b60405180910390f35b3480156104b257600080fd5b506104bb610edd565b005b3480156104c957600080fd5b506104e460048036038101906104df919061320d565b610f76565b6040516104f19190613ead565b60405180910390f35b34801561050657600080fd5b5061050f61102e565b005b34801561051d57600080fd5b50610538600480360381019061053391906133d0565b6110b6565b005b34801561054657600080fd5b5061054f6111d7565b005b34801561055d57600080fd5b506105786004803603810190610573919061320d565b611270565b6040516105859190613aee565b60405180910390f35b34801561059a57600080fd5b506105a361137a565b6040516105b09190613a87565b60405180910390f35b3480156105c557600080fd5b506105ce6113a4565b6040516105db9190613b2b565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613350565b611436565b005b61061561144c565b005b34801561062357600080fd5b5061063e600480360381019061063991906132cd565b611491565b005b34801561064c57600080fd5b50610667600480360381019061066291906134a4565b6114f3565b005b34801561067557600080fd5b50610690600480360381019061068b9190613477565b6116fc565b60405161069d9190613b2b565b60405180910390f35b3480156106b257600080fd5b506106bb6117a3565b005b3480156106c957600080fd5b506106d261183c565b005b3480156106e057600080fd5b506106e96119db565b6040516106f69190613ead565b60405180910390f35b34801561070b57600080fd5b506107146119e1565b005b34801561072257600080fd5b5061073d6004803603810190610738919061323a565b611a7a565b60405161074a9190613b10565b60405180910390f35b34801561075f57600080fd5b50610768611b0e565b6040516107759190613ead565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a0919061320d565b611b13565b005b60006107b282611c0b565b9050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606000805461081e9061415a565b80601f016020809104026020016040519081016040528092919081815260200182805461084a9061415a565b80156108975780601f1061086c57610100808354040283529160200191610897565b820191906000526020600020905b81548152906001019060200180831161087a57829003601f168201915b5050505050905090565b60006108ac82611c85565b6108eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e290613d6d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061093182610e2b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990613dcd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109c1611cf1565b73ffffffffffffffffffffffffffffffffffffffff1614806109f057506109ef816109ea611cf1565b611a7a565b5b610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2690613ced565b60405180910390fd5b610a398383611cf9565b505050565b6000600880549050905090565b610a5c610a56611cf1565b82611db2565b610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290613ded565b60405180910390fd5b610aa6838383611e90565b505050565b610ab3611cf1565b73ffffffffffffffffffffffffffffffffffffffff16610ad161137a565b73ffffffffffffffffffffffffffffffffffffffff1614610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90613d8d565b60405180910390fd5b6000610b33600b6120f7565b11610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90613e8d565b60405180910390fd5b60004442600d54604051602001610b8c93929190613a4a565b6040516020818303038152906040528051906020012060001c9050600d6000815480929190610bba906141bd565b9190505550610bc7610a3e565b81610bd29190614210565b90506000610be7610be283610dba565b610e2b565b9050610bf38147612105565b5050565b6000610c0283610f76565b8210610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90613b8d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ca4611cf1565b73ffffffffffffffffffffffffffffffffffffffff16610cc261137a565b73ffffffffffffffffffffffffffffffffffffffff1614610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f90613d8d565b60405180910390fd5b6000610d24600b6120f7565b9050610d30600b6121f9565b610d3a828261220f565b5050565b610d5983838360405180602001604052806000815250611491565b505050565b610d6f610d69611cf1565b82611db2565b610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590613e4d565b60405180910390fd5b610db78161222d565b50565b6000610dc4610a3e565b8210610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90613e0d565b60405180910390fd5b60088281548110610e1957610e186142fd565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb90613d2d565b60405180910390fd5b80915050919050565b610ee5611cf1565b73ffffffffffffffffffffffffffffffffffffffff16610f0361137a565b73ffffffffffffffffffffffffffffffffffffffff1614610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5090613d8d565b60405180910390fd5b6001600c60016101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90613d0d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611036611cf1565b73ffffffffffffffffffffffffffffffffffffffff1661105461137a565b73ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a190613d8d565b60405180910390fd5b6110b4600061234a565b565b6110be611cf1565b73ffffffffffffffffffffffffffffffffffffffff166110dc61137a565b73ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613d8d565b60405180910390fd5b60005b828290508110156111d2576001600e6000858585818110611159576111586142fd565b5b905060200201602081019061116e919061320d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111ca906141bd565b915050611135565b505050565b6111df611cf1565b73ffffffffffffffffffffffffffffffffffffffff166111fd61137a565b73ffffffffffffffffffffffffffffffffffffffff1614611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90613d8d565b60405180910390fd5b6000600c60006101000a81548160ff021916908315150217905550565b6060600061127d83610f76565b905060008114156112da57600067ffffffffffffffff8111156112a3576112a261432c565b5b6040519080825280602002602001820160405280156112d15781602001602082028036833780820191505090505b50915050611375565b60008167ffffffffffffffff8111156112f6576112f561432c565b5b6040519080825280602002602001820160405280156113245781602001602082028036833780820191505090505b50905060005b8281101561136e5761133c8582610bf7565b82828151811061134f5761134e6142fd565b5b6020026020010181815250508080611366906141bd565b91505061132a565b8193505050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113b39061415a565b80601f01602080910402602001604051908101604052809291908181526020018280546113df9061415a565b801561142c5780601f106114015761010080835404028352916020019161142c565b820191906000526020600020905b81548152906001019060200180831161140f57829003601f168201915b5050505050905090565b611448611441611cf1565b8383612410565b5050565b6000341161148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690613b6d565b60405180910390fd5b565b6114a261149c611cf1565b83611db2565b6114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890613ded565b60405180910390fd5b6114ed8484848461257d565b50505050565b600c60009054906101000a900460ff16611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990613ccd565b60405180910390fd5b600381600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661159c9190613ffb565b60ff1611156115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790613b4d565b60405180910390fd5b6103e860018260ff166115f3600b6120f7565b6115fd9190613fa5565b6116079190614063565b10611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613e6d565b60405180910390fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166116a29190613ffb565b92506101000a81548160ff021916908360ff16021790555060005b8160ff168110156116f8576116db336116d6600b6120f7565b61220f565b6116e5600b6121f9565b80806116f0906141bd565b9150506116bd565b5050565b606061170782611c85565b611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90613dad565b60405180910390fd5b60006117506125d9565b90506000815111611770576040518060200160405280600081525061179b565b8061177a846125f9565b60405160200161178b929190613a11565b6040516020818303038152906040525b915050919050565b6117ab611cf1565b73ffffffffffffffffffffffffffffffffffffffff166117c961137a565b73ffffffffffffffffffffffffffffffffffffffff161461181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181690613d8d565b60405180910390fd5b6000600c60016101000a81548160ff021916908315150217905550565b600c60019054906101000a900460ff1661188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613e2d565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90613e2d565b60405180910390fd5b6103e8611924600b6120f7565b10611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90613e6d565b60405180910390fd5b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506119cf336119ca600b6120f7565b61220f565b6119d9600b6121f9565b565b6103e881565b6119e9611cf1565b73ffffffffffffffffffffffffffffffffffffffff16611a0761137a565b73ffffffffffffffffffffffffffffffffffffffff1614611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490613d8d565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600381565b611b1b611cf1565b73ffffffffffffffffffffffffffffffffffffffff16611b3961137a565b73ffffffffffffffffffffffffffffffffffffffff1614611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690613d8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690613bcd565b60405180910390fd5b611c088161234a565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c7e5750611c7d8261275a565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d6c83610e2b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611dbd82611c85565b611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390613cad565b60405180910390fd5b6000611e0783610e2b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e495750611e488185611a7a565b5b80611e8757508373ffffffffffffffffffffffffffffffffffffffff16611e6f846108a1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611eb082610e2b565b73ffffffffffffffffffffffffffffffffffffffff1614611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd90613bed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90613c2d565b60405180910390fd5b611f8183838361283c565b611f8c600082611cf9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fdc9190614063565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120339190613fa5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120f283838361284c565b505050565b600081600001549050919050565b80471015612148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213f90613c8d565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161216e90613a35565b60006040518083038185875af1925050503d80600081146121ab576040519150601f19603f3d011682016040523d82523d6000602084013e6121b0565b606091505b50509050806121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90613c6d565b60405180910390fd5b505050565b6001816000016000828254019250508190555050565b612229828260405180602001604052806000815250612851565b5050565b600061223882610e2b565b90506122468160008461283c565b612251600083611cf9565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a19190614063565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123468160008461284c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561247f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247690613c4d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125709190613b10565b60405180910390a3505050565b612588848484611e90565b612594848484846128ac565b6125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca90613bad565b60405180910390fd5b50505050565b6060604051806060016040528060368152602001614ada60369139905090565b60606000821415612641576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612755565b600082905060005b6000821461267357808061265c906141bd565b915050600a8261266c9190614032565b9150612649565b60008167ffffffffffffffff81111561268f5761268e61432c565b5b6040519080825280601f01601f1916602001820160405280156126c15781602001600182028036833780820191505090505b5090505b6000851461274e576001826126da9190614063565b9150600a856126e99190614210565b60306126f59190613fa5565b60f81b81838151811061270b5761270a6142fd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127479190614032565b94506126c5565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061282557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612835575061283482612a43565b5b9050919050565b612847838383612aad565b505050565b505050565b61285b8383612bc1565b61286860008484846128ac565b6128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e90613bad565b60405180910390fd5b505050565b60006128cd8473ffffffffffffffffffffffffffffffffffffffff16612d9b565b15612a36578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128f6611cf1565b8786866040518563ffffffff1660e01b81526004016129189493929190613aa2565b602060405180830381600087803b15801561293257600080fd5b505af192505050801561296357506040513d601f19601f82011682018060405250810190612960919061344a565b60015b6129e6573d8060008114612993576040519150601f19603f3d011682016040523d82523d6000602084013e612998565b606091505b506000815114156129de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d590613bad565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a3b565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ab8838383612dbe565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612afb57612af681612dc3565b612b3a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b3957612b388382612e0c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b7d57612b7881612f79565b612bbc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bbb57612bba828261304a565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2890613d4d565b60405180910390fd5b612c3a81611c85565b15612c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7190613c0d565b60405180910390fd5b612c866000838361283c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cd69190613fa5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d976000838361284c565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e1984610f76565b612e239190614063565b9050600060076000848152602001908152602001600020549050818114612f08576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f8d9190614063565b9050600060096000848152602001908152602001600020549050600060088381548110612fbd57612fbc6142fd565b5b906000526020600020015490508060088381548110612fdf57612fde6142fd565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061302e5761302d6142ce565b5b6001900381819060005260206000200160009055905550505050565b600061305583610f76565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60006130dc6130d784613eed565b613ec8565b9050828152602081018484840111156130f8576130f761436a565b5b613103848285614118565b509392505050565b60008135905061311a81614a66565b92915050565b60008083601f84011261313657613135614360565b5b8235905067ffffffffffffffff8111156131535761315261435b565b5b60208301915083602082028301111561316f5761316e614365565b5b9250929050565b60008135905061318581614a7d565b92915050565b60008135905061319a81614a94565b92915050565b6000815190506131af81614a94565b92915050565b600082601f8301126131ca576131c9614360565b5b81356131da8482602086016130c9565b91505092915050565b6000813590506131f281614aab565b92915050565b60008135905061320781614ac2565b92915050565b60006020828403121561322357613222614374565b5b60006132318482850161310b565b91505092915050565b6000806040838503121561325157613250614374565b5b600061325f8582860161310b565b92505060206132708582860161310b565b9150509250929050565b60008060006060848603121561329357613292614374565b5b60006132a18682870161310b565b93505060206132b28682870161310b565b92505060406132c3868287016131e3565b9150509250925092565b600080600080608085870312156132e7576132e6614374565b5b60006132f58782880161310b565b94505060206133068782880161310b565b9350506040613317878288016131e3565b925050606085013567ffffffffffffffff8111156133385761333761436f565b5b613344878288016131b5565b91505092959194509250565b6000806040838503121561336757613366614374565b5b60006133758582860161310b565b925050602061338685828601613176565b9150509250929050565b600080604083850312156133a7576133a6614374565b5b60006133b58582860161310b565b92505060206133c6858286016131e3565b9150509250929050565b600080602083850312156133e7576133e6614374565b5b600083013567ffffffffffffffff8111156134055761340461436f565b5b61341185828601613120565b92509250509250929050565b60006020828403121561343357613432614374565b5b60006134418482850161318b565b91505092915050565b6000602082840312156134605761345f614374565b5b600061346e848285016131a0565b91505092915050565b60006020828403121561348d5761348c614374565b5b600061349b848285016131e3565b91505092915050565b6000602082840312156134ba576134b9614374565b5b60006134c8848285016131f8565b91505092915050565b60006134dd83836139dc565b60208301905092915050565b6134f281614097565b82525050565b600061350382613f2e565b61350d8185613f5c565b935061351883613f1e565b8060005b8381101561354957815161353088826134d1565b975061353b83613f4f565b92505060018101905061351c565b5085935050505092915050565b61355f816140a9565b82525050565b600061357082613f39565b61357a8185613f6d565b935061358a818560208601614127565b61359381614379565b840191505092915050565b60006135a982613f44565b6135b38185613f89565b93506135c3818560208601614127565b6135cc81614379565b840191505092915050565b60006135e282613f44565b6135ec8185613f9a565b93506135fc818560208601614127565b80840191505092915050565b6000613615602283613f89565b91506136208261438a565b604082019050919050565b6000613638600c83613f89565b9150613643826143d9565b602082019050919050565b600061365b602b83613f89565b915061366682614402565b604082019050919050565b600061367e603283613f89565b915061368982614451565b604082019050919050565b60006136a1602683613f89565b91506136ac826144a0565b604082019050919050565b60006136c4602583613f89565b91506136cf826144ef565b604082019050919050565b60006136e7601c83613f89565b91506136f28261453e565b602082019050919050565b600061370a602483613f89565b915061371582614567565b604082019050919050565b600061372d601983613f89565b9150613738826145b6565b602082019050919050565b6000613750603a83613f89565b915061375b826145df565b604082019050919050565b6000613773601d83613f89565b915061377e8261462e565b602082019050919050565b6000613796602c83613f89565b91506137a182614657565b604082019050919050565b60006137b9601c83613f89565b91506137c4826146a6565b602082019050919050565b60006137dc603883613f89565b91506137e7826146cf565b604082019050919050565b60006137ff602a83613f89565b915061380a8261471e565b604082019050919050565b6000613822602983613f89565b915061382d8261476d565b604082019050919050565b6000613845602083613f89565b9150613850826147bc565b602082019050919050565b6000613868602c83613f89565b9150613873826147e5565b604082019050919050565b600061388b602083613f89565b915061389682614834565b602082019050919050565b60006138ae602f83613f89565b91506138b98261485d565b604082019050919050565b60006138d1602183613f89565b91506138dc826148ac565b604082019050919050565b60006138f4600083613f7e565b91506138ff826148fb565b600082019050919050565b6000613917603183613f89565b9150613922826148fe565b604082019050919050565b600061393a602c83613f89565b91506139458261494d565b604082019050919050565b600061395d601883613f89565b91506139688261499c565b602082019050919050565b6000613980603083613f89565b915061398b826149c5565b604082019050919050565b60006139a3601683613f89565b91506139ae82614a14565b602082019050919050565b60006139c6600c83613f89565b91506139d182614a3d565b602082019050919050565b6139e581614101565b82525050565b6139f481614101565b82525050565b613a0b613a0682614101565b614206565b82525050565b6000613a1d82856135d7565b9150613a2982846135d7565b91508190509392505050565b6000613a40826138e7565b9150819050919050565b6000613a5682866139fa565b602082019150613a6682856139fa565b602082019150613a7682846139fa565b602082019150819050949350505050565b6000602082019050613a9c60008301846134e9565b92915050565b6000608082019050613ab760008301876134e9565b613ac460208301866134e9565b613ad160408301856139eb565b8181036060830152613ae38184613565565b905095945050505050565b60006020820190508181036000830152613b0881846134f8565b905092915050565b6000602082019050613b256000830184613556565b92915050565b60006020820190508181036000830152613b45818461359e565b905092915050565b60006020820190508181036000830152613b6681613608565b9050919050565b60006020820190508181036000830152613b868161362b565b9050919050565b60006020820190508181036000830152613ba68161364e565b9050919050565b60006020820190508181036000830152613bc681613671565b9050919050565b60006020820190508181036000830152613be681613694565b9050919050565b60006020820190508181036000830152613c06816136b7565b9050919050565b60006020820190508181036000830152613c26816136da565b9050919050565b60006020820190508181036000830152613c46816136fd565b9050919050565b60006020820190508181036000830152613c6681613720565b9050919050565b60006020820190508181036000830152613c8681613743565b9050919050565b60006020820190508181036000830152613ca681613766565b9050919050565b60006020820190508181036000830152613cc681613789565b9050919050565b60006020820190508181036000830152613ce6816137ac565b9050919050565b60006020820190508181036000830152613d06816137cf565b9050919050565b60006020820190508181036000830152613d26816137f2565b9050919050565b60006020820190508181036000830152613d4681613815565b9050919050565b60006020820190508181036000830152613d6681613838565b9050919050565b60006020820190508181036000830152613d868161385b565b9050919050565b60006020820190508181036000830152613da68161387e565b9050919050565b60006020820190508181036000830152613dc6816138a1565b9050919050565b60006020820190508181036000830152613de6816138c4565b9050919050565b60006020820190508181036000830152613e068161390a565b9050919050565b60006020820190508181036000830152613e268161392d565b9050919050565b60006020820190508181036000830152613e4681613950565b9050919050565b60006020820190508181036000830152613e6681613973565b9050919050565b60006020820190508181036000830152613e8681613996565b9050919050565b60006020820190508181036000830152613ea6816139b9565b9050919050565b6000602082019050613ec260008301846139eb565b92915050565b6000613ed2613ee3565b9050613ede828261418c565b919050565b6000604051905090565b600067ffffffffffffffff821115613f0857613f0761432c565b5b613f1182614379565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fb082614101565b9150613fbb83614101565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ff057613fef614241565b5b828201905092915050565b60006140068261410b565b91506140118361410b565b92508260ff0382111561402757614026614241565b5b828201905092915050565b600061403d82614101565b915061404883614101565b92508261405857614057614270565b5b828204905092915050565b600061406e82614101565b915061407983614101565b92508282101561408c5761408b614241565b5b828203905092915050565b60006140a2826140e1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561414557808201518184015260208101905061412a565b83811115614154576000848401525b50505050565b6000600282049050600182168061417257607f821691505b602082108114156141865761418561429f565b5b50919050565b61419582614379565b810181811067ffffffffffffffff821117156141b4576141b361432c565b5b80604052505050565b60006141c882614101565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141fb576141fa614241565b5b600182019050919050565b6000819050919050565b600061421b82614101565b915061422683614101565b92508261423657614235614270565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4578636565646564206d617820617661696c61626c652046726565204368696d60008201527f7073000000000000000000000000000000000000000000000000000000000000602082015250565b7f73656e74206e6f7468696e670000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4368696d707320617265206e6f74206d696e7461626c65207965742e00000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5768697465206c697374206973206e6f74206163746976650000000000000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f416c6c204368696d707320617265206d696e7465642e00000000000000000000600082015250565b7f4e6f206d696e7473207965740000000000000000000000000000000000000000600082015250565b614a6f81614097565b8114614a7a57600080fd5b50565b614a86816140a9565b8114614a9157600080fd5b50565b614a9d816140b5565b8114614aa857600080fd5b50565b614ab481614101565b8114614abf57600080fd5b50565b614acb8161410b565b8114614ad657600080fd5b5056fe697066733a2f2f516d586d3435736b62595463557732577472346e576f373562733453757a39634d4777774768623846787257316e2fa2646970667358221220236f72e382b82e5bdceb89259939fb40e84bb0ad272101e67538d5844eabfad064736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101f95760003560e01c8063775b9c131161010d578063c736fca1116100a0578063e27f0f621161006f578063e27f0f62146106d4578063e797ec1b146106ff578063e985e9c514610716578063f0292a0314610753578063f2fde38b1461077e576101f9565b8063c736fca114610640578063c87b56dd14610669578063e09814b5146106a6578063e27df051146106bd576101f9565b806395d89b41116100dc57806395d89b41146105b9578063a22cb465146105e4578063b5cc45391461060d578063b88d4fde14610617576101f9565b8063775b9c13146105115780637e5cd5c11461053a5780638462151c146105515780638da5cb5b1461058e576101f9565b80632f745c59116101905780634f6ccce71161015f5780634f6ccce71461042c5780636352211e146104695780636d4af71c146104a657806370a08231146104bd578063715018a6146104fa576101f9565b80632f745c591461037457806340d097c3146103b157806342842e0e146103da57806342966c6814610403576101f9565b8063095ea7b3116101cc578063095ea7b3146102e057806318160ddd1461030957806323b872dd1461033457806327e605ec1461035d576101f9565b806301ffc9a7146101fe57806302d44ba41461023b57806306fdde0314610278578063081812fc146102a3575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061341d565b6107a7565b6040516102329190613b10565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d919061320d565b6107b9565b60405161026f9190613b10565b60405180910390f35b34801561028457600080fd5b5061028d61080f565b60405161029a9190613b2b565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613477565b6108a1565b6040516102d79190613a87565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190613390565b610926565b005b34801561031557600080fd5b5061031e610a3e565b60405161032b9190613ead565b60405180910390f35b34801561034057600080fd5b5061035b6004803603810190610356919061327a565b610a4b565b005b34801561036957600080fd5b50610372610aab565b005b34801561038057600080fd5b5061039b60048036038101906103969190613390565b610bf7565b6040516103a89190613ead565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061320d565b610c9c565b005b3480156103e657600080fd5b5061040160048036038101906103fc919061327a565b610d3e565b005b34801561040f57600080fd5b5061042a60048036038101906104259190613477565b610d5e565b005b34801561043857600080fd5b50610453600480360381019061044e9190613477565b610dba565b6040516104609190613ead565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613477565b610e2b565b60405161049d9190613a87565b60405180910390f35b3480156104b257600080fd5b506104bb610edd565b005b3480156104c957600080fd5b506104e460048036038101906104df919061320d565b610f76565b6040516104f19190613ead565b60405180910390f35b34801561050657600080fd5b5061050f61102e565b005b34801561051d57600080fd5b50610538600480360381019061053391906133d0565b6110b6565b005b34801561054657600080fd5b5061054f6111d7565b005b34801561055d57600080fd5b506105786004803603810190610573919061320d565b611270565b6040516105859190613aee565b60405180910390f35b34801561059a57600080fd5b506105a361137a565b6040516105b09190613a87565b60405180910390f35b3480156105c557600080fd5b506105ce6113a4565b6040516105db9190613b2b565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613350565b611436565b005b61061561144c565b005b34801561062357600080fd5b5061063e600480360381019061063991906132cd565b611491565b005b34801561064c57600080fd5b50610667600480360381019061066291906134a4565b6114f3565b005b34801561067557600080fd5b50610690600480360381019061068b9190613477565b6116fc565b60405161069d9190613b2b565b60405180910390f35b3480156106b257600080fd5b506106bb6117a3565b005b3480156106c957600080fd5b506106d261183c565b005b3480156106e057600080fd5b506106e96119db565b6040516106f69190613ead565b60405180910390f35b34801561070b57600080fd5b506107146119e1565b005b34801561072257600080fd5b5061073d6004803603810190610738919061323a565b611a7a565b60405161074a9190613b10565b60405180910390f35b34801561075f57600080fd5b50610768611b0e565b6040516107759190613ead565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a0919061320d565b611b13565b005b60006107b282611c0b565b9050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606000805461081e9061415a565b80601f016020809104026020016040519081016040528092919081815260200182805461084a9061415a565b80156108975780601f1061086c57610100808354040283529160200191610897565b820191906000526020600020905b81548152906001019060200180831161087a57829003601f168201915b5050505050905090565b60006108ac82611c85565b6108eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e290613d6d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061093182610e2b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990613dcd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109c1611cf1565b73ffffffffffffffffffffffffffffffffffffffff1614806109f057506109ef816109ea611cf1565b611a7a565b5b610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2690613ced565b60405180910390fd5b610a398383611cf9565b505050565b6000600880549050905090565b610a5c610a56611cf1565b82611db2565b610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290613ded565b60405180910390fd5b610aa6838383611e90565b505050565b610ab3611cf1565b73ffffffffffffffffffffffffffffffffffffffff16610ad161137a565b73ffffffffffffffffffffffffffffffffffffffff1614610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90613d8d565b60405180910390fd5b6000610b33600b6120f7565b11610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90613e8d565b60405180910390fd5b60004442600d54604051602001610b8c93929190613a4a565b6040516020818303038152906040528051906020012060001c9050600d6000815480929190610bba906141bd565b9190505550610bc7610a3e565b81610bd29190614210565b90506000610be7610be283610dba565b610e2b565b9050610bf38147612105565b5050565b6000610c0283610f76565b8210610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90613b8d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ca4611cf1565b73ffffffffffffffffffffffffffffffffffffffff16610cc261137a565b73ffffffffffffffffffffffffffffffffffffffff1614610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f90613d8d565b60405180910390fd5b6000610d24600b6120f7565b9050610d30600b6121f9565b610d3a828261220f565b5050565b610d5983838360405180602001604052806000815250611491565b505050565b610d6f610d69611cf1565b82611db2565b610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590613e4d565b60405180910390fd5b610db78161222d565b50565b6000610dc4610a3e565b8210610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90613e0d565b60405180910390fd5b60088281548110610e1957610e186142fd565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb90613d2d565b60405180910390fd5b80915050919050565b610ee5611cf1565b73ffffffffffffffffffffffffffffffffffffffff16610f0361137a565b73ffffffffffffffffffffffffffffffffffffffff1614610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5090613d8d565b60405180910390fd5b6001600c60016101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90613d0d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611036611cf1565b73ffffffffffffffffffffffffffffffffffffffff1661105461137a565b73ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a190613d8d565b60405180910390fd5b6110b4600061234a565b565b6110be611cf1565b73ffffffffffffffffffffffffffffffffffffffff166110dc61137a565b73ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613d8d565b60405180910390fd5b60005b828290508110156111d2576001600e6000858585818110611159576111586142fd565b5b905060200201602081019061116e919061320d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111ca906141bd565b915050611135565b505050565b6111df611cf1565b73ffffffffffffffffffffffffffffffffffffffff166111fd61137a565b73ffffffffffffffffffffffffffffffffffffffff1614611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90613d8d565b60405180910390fd5b6000600c60006101000a81548160ff021916908315150217905550565b6060600061127d83610f76565b905060008114156112da57600067ffffffffffffffff8111156112a3576112a261432c565b5b6040519080825280602002602001820160405280156112d15781602001602082028036833780820191505090505b50915050611375565b60008167ffffffffffffffff8111156112f6576112f561432c565b5b6040519080825280602002602001820160405280156113245781602001602082028036833780820191505090505b50905060005b8281101561136e5761133c8582610bf7565b82828151811061134f5761134e6142fd565b5b6020026020010181815250508080611366906141bd565b91505061132a565b8193505050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113b39061415a565b80601f01602080910402602001604051908101604052809291908181526020018280546113df9061415a565b801561142c5780601f106114015761010080835404028352916020019161142c565b820191906000526020600020905b81548152906001019060200180831161140f57829003601f168201915b5050505050905090565b611448611441611cf1565b8383612410565b5050565b6000341161148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690613b6d565b60405180910390fd5b565b6114a261149c611cf1565b83611db2565b6114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890613ded565b60405180910390fd5b6114ed8484848461257d565b50505050565b600c60009054906101000a900460ff16611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990613ccd565b60405180910390fd5b600381600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661159c9190613ffb565b60ff1611156115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790613b4d565b60405180910390fd5b6103e860018260ff166115f3600b6120f7565b6115fd9190613fa5565b6116079190614063565b10611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613e6d565b60405180910390fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166116a29190613ffb565b92506101000a81548160ff021916908360ff16021790555060005b8160ff168110156116f8576116db336116d6600b6120f7565b61220f565b6116e5600b6121f9565b80806116f0906141bd565b9150506116bd565b5050565b606061170782611c85565b611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90613dad565b60405180910390fd5b60006117506125d9565b90506000815111611770576040518060200160405280600081525061179b565b8061177a846125f9565b60405160200161178b929190613a11565b6040516020818303038152906040525b915050919050565b6117ab611cf1565b73ffffffffffffffffffffffffffffffffffffffff166117c961137a565b73ffffffffffffffffffffffffffffffffffffffff161461181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181690613d8d565b60405180910390fd5b6000600c60016101000a81548160ff021916908315150217905550565b600c60019054906101000a900460ff1661188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613e2d565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90613e2d565b60405180910390fd5b6103e8611924600b6120f7565b10611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90613e6d565b60405180910390fd5b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506119cf336119ca600b6120f7565b61220f565b6119d9600b6121f9565b565b6103e881565b6119e9611cf1565b73ffffffffffffffffffffffffffffffffffffffff16611a0761137a565b73ffffffffffffffffffffffffffffffffffffffff1614611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490613d8d565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600381565b611b1b611cf1565b73ffffffffffffffffffffffffffffffffffffffff16611b3961137a565b73ffffffffffffffffffffffffffffffffffffffff1614611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690613d8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690613bcd565b60405180910390fd5b611c088161234a565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c7e5750611c7d8261275a565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d6c83610e2b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611dbd82611c85565b611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390613cad565b60405180910390fd5b6000611e0783610e2b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e495750611e488185611a7a565b5b80611e8757508373ffffffffffffffffffffffffffffffffffffffff16611e6f846108a1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611eb082610e2b565b73ffffffffffffffffffffffffffffffffffffffff1614611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd90613bed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90613c2d565b60405180910390fd5b611f8183838361283c565b611f8c600082611cf9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fdc9190614063565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120339190613fa5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120f283838361284c565b505050565b600081600001549050919050565b80471015612148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213f90613c8d565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161216e90613a35565b60006040518083038185875af1925050503d80600081146121ab576040519150601f19603f3d011682016040523d82523d6000602084013e6121b0565b606091505b50509050806121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90613c6d565b60405180910390fd5b505050565b6001816000016000828254019250508190555050565b612229828260405180602001604052806000815250612851565b5050565b600061223882610e2b565b90506122468160008461283c565b612251600083611cf9565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a19190614063565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123468160008461284c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561247f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247690613c4d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125709190613b10565b60405180910390a3505050565b612588848484611e90565b612594848484846128ac565b6125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca90613bad565b60405180910390fd5b50505050565b6060604051806060016040528060368152602001614ada60369139905090565b60606000821415612641576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612755565b600082905060005b6000821461267357808061265c906141bd565b915050600a8261266c9190614032565b9150612649565b60008167ffffffffffffffff81111561268f5761268e61432c565b5b6040519080825280601f01601f1916602001820160405280156126c15781602001600182028036833780820191505090505b5090505b6000851461274e576001826126da9190614063565b9150600a856126e99190614210565b60306126f59190613fa5565b60f81b81838151811061270b5761270a6142fd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127479190614032565b94506126c5565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061282557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612835575061283482612a43565b5b9050919050565b612847838383612aad565b505050565b505050565b61285b8383612bc1565b61286860008484846128ac565b6128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e90613bad565b60405180910390fd5b505050565b60006128cd8473ffffffffffffffffffffffffffffffffffffffff16612d9b565b15612a36578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128f6611cf1565b8786866040518563ffffffff1660e01b81526004016129189493929190613aa2565b602060405180830381600087803b15801561293257600080fd5b505af192505050801561296357506040513d601f19601f82011682018060405250810190612960919061344a565b60015b6129e6573d8060008114612993576040519150601f19603f3d011682016040523d82523d6000602084013e612998565b606091505b506000815114156129de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d590613bad565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a3b565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ab8838383612dbe565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612afb57612af681612dc3565b612b3a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b3957612b388382612e0c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b7d57612b7881612f79565b612bbc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bbb57612bba828261304a565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2890613d4d565b60405180910390fd5b612c3a81611c85565b15612c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7190613c0d565b60405180910390fd5b612c866000838361283c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cd69190613fa5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d976000838361284c565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e1984610f76565b612e239190614063565b9050600060076000848152602001908152602001600020549050818114612f08576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f8d9190614063565b9050600060096000848152602001908152602001600020549050600060088381548110612fbd57612fbc6142fd565b5b906000526020600020015490508060088381548110612fdf57612fde6142fd565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061302e5761302d6142ce565b5b6001900381819060005260206000200160009055905550505050565b600061305583610f76565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60006130dc6130d784613eed565b613ec8565b9050828152602081018484840111156130f8576130f761436a565b5b613103848285614118565b509392505050565b60008135905061311a81614a66565b92915050565b60008083601f84011261313657613135614360565b5b8235905067ffffffffffffffff8111156131535761315261435b565b5b60208301915083602082028301111561316f5761316e614365565b5b9250929050565b60008135905061318581614a7d565b92915050565b60008135905061319a81614a94565b92915050565b6000815190506131af81614a94565b92915050565b600082601f8301126131ca576131c9614360565b5b81356131da8482602086016130c9565b91505092915050565b6000813590506131f281614aab565b92915050565b60008135905061320781614ac2565b92915050565b60006020828403121561322357613222614374565b5b60006132318482850161310b565b91505092915050565b6000806040838503121561325157613250614374565b5b600061325f8582860161310b565b92505060206132708582860161310b565b9150509250929050565b60008060006060848603121561329357613292614374565b5b60006132a18682870161310b565b93505060206132b28682870161310b565b92505060406132c3868287016131e3565b9150509250925092565b600080600080608085870312156132e7576132e6614374565b5b60006132f58782880161310b565b94505060206133068782880161310b565b9350506040613317878288016131e3565b925050606085013567ffffffffffffffff8111156133385761333761436f565b5b613344878288016131b5565b91505092959194509250565b6000806040838503121561336757613366614374565b5b60006133758582860161310b565b925050602061338685828601613176565b9150509250929050565b600080604083850312156133a7576133a6614374565b5b60006133b58582860161310b565b92505060206133c6858286016131e3565b9150509250929050565b600080602083850312156133e7576133e6614374565b5b600083013567ffffffffffffffff8111156134055761340461436f565b5b61341185828601613120565b92509250509250929050565b60006020828403121561343357613432614374565b5b60006134418482850161318b565b91505092915050565b6000602082840312156134605761345f614374565b5b600061346e848285016131a0565b91505092915050565b60006020828403121561348d5761348c614374565b5b600061349b848285016131e3565b91505092915050565b6000602082840312156134ba576134b9614374565b5b60006134c8848285016131f8565b91505092915050565b60006134dd83836139dc565b60208301905092915050565b6134f281614097565b82525050565b600061350382613f2e565b61350d8185613f5c565b935061351883613f1e565b8060005b8381101561354957815161353088826134d1565b975061353b83613f4f565b92505060018101905061351c565b5085935050505092915050565b61355f816140a9565b82525050565b600061357082613f39565b61357a8185613f6d565b935061358a818560208601614127565b61359381614379565b840191505092915050565b60006135a982613f44565b6135b38185613f89565b93506135c3818560208601614127565b6135cc81614379565b840191505092915050565b60006135e282613f44565b6135ec8185613f9a565b93506135fc818560208601614127565b80840191505092915050565b6000613615602283613f89565b91506136208261438a565b604082019050919050565b6000613638600c83613f89565b9150613643826143d9565b602082019050919050565b600061365b602b83613f89565b915061366682614402565b604082019050919050565b600061367e603283613f89565b915061368982614451565b604082019050919050565b60006136a1602683613f89565b91506136ac826144a0565b604082019050919050565b60006136c4602583613f89565b91506136cf826144ef565b604082019050919050565b60006136e7601c83613f89565b91506136f28261453e565b602082019050919050565b600061370a602483613f89565b915061371582614567565b604082019050919050565b600061372d601983613f89565b9150613738826145b6565b602082019050919050565b6000613750603a83613f89565b915061375b826145df565b604082019050919050565b6000613773601d83613f89565b915061377e8261462e565b602082019050919050565b6000613796602c83613f89565b91506137a182614657565b604082019050919050565b60006137b9601c83613f89565b91506137c4826146a6565b602082019050919050565b60006137dc603883613f89565b91506137e7826146cf565b604082019050919050565b60006137ff602a83613f89565b915061380a8261471e565b604082019050919050565b6000613822602983613f89565b915061382d8261476d565b604082019050919050565b6000613845602083613f89565b9150613850826147bc565b602082019050919050565b6000613868602c83613f89565b9150613873826147e5565b604082019050919050565b600061388b602083613f89565b915061389682614834565b602082019050919050565b60006138ae602f83613f89565b91506138b98261485d565b604082019050919050565b60006138d1602183613f89565b91506138dc826148ac565b604082019050919050565b60006138f4600083613f7e565b91506138ff826148fb565b600082019050919050565b6000613917603183613f89565b9150613922826148fe565b604082019050919050565b600061393a602c83613f89565b91506139458261494d565b604082019050919050565b600061395d601883613f89565b91506139688261499c565b602082019050919050565b6000613980603083613f89565b915061398b826149c5565b604082019050919050565b60006139a3601683613f89565b91506139ae82614a14565b602082019050919050565b60006139c6600c83613f89565b91506139d182614a3d565b602082019050919050565b6139e581614101565b82525050565b6139f481614101565b82525050565b613a0b613a0682614101565b614206565b82525050565b6000613a1d82856135d7565b9150613a2982846135d7565b91508190509392505050565b6000613a40826138e7565b9150819050919050565b6000613a5682866139fa565b602082019150613a6682856139fa565b602082019150613a7682846139fa565b602082019150819050949350505050565b6000602082019050613a9c60008301846134e9565b92915050565b6000608082019050613ab760008301876134e9565b613ac460208301866134e9565b613ad160408301856139eb565b8181036060830152613ae38184613565565b905095945050505050565b60006020820190508181036000830152613b0881846134f8565b905092915050565b6000602082019050613b256000830184613556565b92915050565b60006020820190508181036000830152613b45818461359e565b905092915050565b60006020820190508181036000830152613b6681613608565b9050919050565b60006020820190508181036000830152613b868161362b565b9050919050565b60006020820190508181036000830152613ba68161364e565b9050919050565b60006020820190508181036000830152613bc681613671565b9050919050565b60006020820190508181036000830152613be681613694565b9050919050565b60006020820190508181036000830152613c06816136b7565b9050919050565b60006020820190508181036000830152613c26816136da565b9050919050565b60006020820190508181036000830152613c46816136fd565b9050919050565b60006020820190508181036000830152613c6681613720565b9050919050565b60006020820190508181036000830152613c8681613743565b9050919050565b60006020820190508181036000830152613ca681613766565b9050919050565b60006020820190508181036000830152613cc681613789565b9050919050565b60006020820190508181036000830152613ce6816137ac565b9050919050565b60006020820190508181036000830152613d06816137cf565b9050919050565b60006020820190508181036000830152613d26816137f2565b9050919050565b60006020820190508181036000830152613d4681613815565b9050919050565b60006020820190508181036000830152613d6681613838565b9050919050565b60006020820190508181036000830152613d868161385b565b9050919050565b60006020820190508181036000830152613da68161387e565b9050919050565b60006020820190508181036000830152613dc6816138a1565b9050919050565b60006020820190508181036000830152613de6816138c4565b9050919050565b60006020820190508181036000830152613e068161390a565b9050919050565b60006020820190508181036000830152613e268161392d565b9050919050565b60006020820190508181036000830152613e4681613950565b9050919050565b60006020820190508181036000830152613e6681613973565b9050919050565b60006020820190508181036000830152613e8681613996565b9050919050565b60006020820190508181036000830152613ea6816139b9565b9050919050565b6000602082019050613ec260008301846139eb565b92915050565b6000613ed2613ee3565b9050613ede828261418c565b919050565b6000604051905090565b600067ffffffffffffffff821115613f0857613f0761432c565b5b613f1182614379565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fb082614101565b9150613fbb83614101565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ff057613fef614241565b5b828201905092915050565b60006140068261410b565b91506140118361410b565b92508260ff0382111561402757614026614241565b5b828201905092915050565b600061403d82614101565b915061404883614101565b92508261405857614057614270565b5b828204905092915050565b600061406e82614101565b915061407983614101565b92508282101561408c5761408b614241565b5b828203905092915050565b60006140a2826140e1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561414557808201518184015260208101905061412a565b83811115614154576000848401525b50505050565b6000600282049050600182168061417257607f821691505b602082108114156141865761418561429f565b5b50919050565b61419582614379565b810181811067ffffffffffffffff821117156141b4576141b361432c565b5b80604052505050565b60006141c882614101565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141fb576141fa614241565b5b600182019050919050565b6000819050919050565b600061421b82614101565b915061422683614101565b92508261423657614235614270565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4578636565646564206d617820617661696c61626c652046726565204368696d60008201527f7073000000000000000000000000000000000000000000000000000000000000602082015250565b7f73656e74206e6f7468696e670000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4368696d707320617265206e6f74206d696e7461626c65207965742e00000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5768697465206c697374206973206e6f74206163746976650000000000000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f416c6c204368696d707320617265206d696e7465642e00000000000000000000600082015250565b7f4e6f206d696e7473207965740000000000000000000000000000000000000000600082015250565b614a6f81614097565b8114614a7a57600080fd5b50565b614a86816140a9565b8114614a9157600080fd5b50565b614a9d816140b5565b8114614aa857600080fd5b50565b614ab481614101565b8114614abf57600080fd5b50565b614acb8161410b565b8114614ad657600080fd5b5056fe697066733a2f2f516d586d3435736b62595463557732577472346e576f373562733453757a39634d4777774768623846787257316e2fa2646970667358221220236f72e382b82e5bdceb89259939fb40e84bb0ad272101e67538d5844eabfad064736f6c63430008070033
Deployed Bytecode Sourcemap
48796:4353:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52934:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50484:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28151:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29711:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29234:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42760:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30461:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51757:477;;;;;;;;;;;;;:::i;:::-;;42428:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49588:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30871:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40857:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42950:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27845:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52444:95;;;;;;;;;;;;;:::i;:::-;;27575:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6709:103;;;;;;;;;;;;;:::i;:::-;;50282:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52358:78;;;;;;;;;;;;;:::i;:::-;;49776:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6058:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28320:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30004:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51607:142;;;:::i;:::-;;31127:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51021:578;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28495:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52547:97;;;;;;;;;;;;;:::i;:::-;;50609:404;;;;;;;;;;;;;:::i;:::-;;49054:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52274:76;;;;;;;;;;;;;:::i;:::-;;30230:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49122:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6967:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52934:212;53073:4;53102:36;53126:11;53102:23;:36::i;:::-;53095:43;;52934:212;;;:::o;50484:117::-;50553:4;50577:10;:16;50588:4;50577:16;;;;;;;;;;;;;;;;;;;;;;;;;50570:23;;50484:117;;;:::o;28151:100::-;28205:13;28238:5;28231:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28151:100;:::o;29711:221::-;29787:7;29815:16;29823:7;29815;:16::i;:::-;29807:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29900:15;:24;29916:7;29900:24;;;;;;;;;;;;;;;;;;;;;29893:31;;29711:221;;;:::o;29234:411::-;29315:13;29331:23;29346:7;29331:14;:23::i;:::-;29315:39;;29379:5;29373:11;;:2;:11;;;;29365:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29473:5;29457:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29482:37;29499:5;29506:12;:10;:12::i;:::-;29482:16;:37::i;:::-;29457:62;29435:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29616:21;29625:2;29629:7;29616:8;:21::i;:::-;29304:341;29234:411;;:::o;42760:113::-;42821:7;42848:10;:17;;;;42841:24;;42760:113;:::o;30461:339::-;30656:41;30675:12;:10;:12::i;:::-;30689:7;30656:18;:41::i;:::-;30648:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30764:28;30774:4;30780:2;30784:7;30764:9;:28::i;:::-;30461:339;;;:::o;51757:477::-;6289:12;:10;:12::i;:::-;6278:23;;:7;:5;:7::i;:::-;:23;;;6270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51902:1:::1;51874:25;:15;:23;:25::i;:::-;:29;51866:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;51931:14;51983:16;52001:15;52018;;51966:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51956:79;;;;;;51948:88;;51931:105;;52047:15;;:17;;;;;;;;;:::i;:::-;;;;;;52093:13;:11;:13::i;:::-;52084:6;:22;;;;:::i;:::-;52075:31;;52117:10;52130:29;52138:20;52151:6;52138:12;:20::i;:::-;52130:7;:29::i;:::-;52117:42;;52172:52;52198:2;52202:21;52172:17;:52::i;:::-;51797:437;;51757:477::o:0;42428:256::-;42525:7;42561:23;42578:5;42561:16;:23::i;:::-;42553:5;:31;42545:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42650:12;:19;42663:5;42650:19;;;;;;;;;;;;;;;:26;42670:5;42650:26;;;;;;;;;;;;42643:33;;42428:256;;;;:::o;49588:180::-;6289:12;:10;:12::i;:::-;6278:23;;:7;:5;:7::i;:::-;:23;;;6270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49646:15:::1;49664:25;:15;:23;:25::i;:::-;49646:43;;49700:27;:15;:25;:27::i;:::-;49738:22;49748:2;49752:7;49738:9;:22::i;:::-;49635:133;49588:180:::0;:::o;30871:185::-;31009:39;31026:4;31032:2;31036:7;31009:39;;;;;;;;;;;;:16;:39::i;:::-;30871:185;;;:::o;40857:245::-;40975:41;40994:12;:10;:12::i;:::-;41008:7;40975:18;:41::i;:::-;40967:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;41080:14;41086:7;41080:5;:14::i;:::-;40857:245;:::o;42950:233::-;43025:7;43061:30;:28;:30::i;:::-;43053:5;:38;43045:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43158:10;43169:5;43158:17;;;;;;;;:::i;:::-;;;;;;;;;;43151:24;;42950:233;;;:::o;27845:239::-;27917:7;27937:13;27953:7;:16;27961:7;27953:16;;;;;;;;;;;;;;;;;;;;;27937:32;;28005:1;27988:19;;:5;:19;;;;27980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28071:5;28064:12;;;27845:239;;;:::o;52444:95::-;6289:12;:10;:12::i;:::-;6278:23;;:7;:5;:7::i;:::-;:23;;;6270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52527:4:::1;52506:18;;:25;;;;;;;;;;;;;;;;;;52444:95::o:0;27575:208::-;27647:7;27692:1;27675:19;;:5;:19;;;;27667:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27759:9;:16;27769:5;27759:16;;;;;;;;;;;;;;;;27752:23;;27575:208;;;:::o;6709:103::-;6289:12;:10;:12::i;:::-;6278:23;;:7;:5;:7::i;:::-;:23;;;6270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6774:30:::1;6801:1;6774:18;:30::i;:::-;6709:103::o:0;50282:194::-;6289:12;:10;:12::i;:::-;6278:23;;:7;:5;:7::i;:::-;:23;;;6270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50369:9:::1;50364:105;50388:9;;:16;;50384:1;:20;50364:105;;;50453:4;50426:10;:24;50437:9;;50447:1;50437:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;50426:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;50406:3;;;;;:::i;:::-;;;;50364:105;;;;50282:194:::0;;:::o;52358:78::-;6289:12;:10;:12::i;:::-;6278:23;;:7;:5;:7::i;:::-;:23;;;6270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52423:5:::1;52412:8;;:16;;;;;;;;;;;;;;;;;;52358:78::o:0;49776:498::-;49838:16;49867:18;49888:17;49898:6;49888:9;:17::i;:::-;49867:38;;49934:1;49920:10;:15;49916:109;;;50011:1;49997:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49990:23;;;;;49916:109;50035:23;50075:10;50061:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50035:51;;50097:13;50121:122;50145:10;50137:5;:18;50121:122;;;50197:34;50217:6;50225:5;50197:19;:34::i;:::-;50181:6;50188:5;50181:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;50157:7;;;;;:::i;:::-;;;;50121:122;;;50260:6;50253:13;;;;;49776:498;;;;:::o;6058:87::-;6104:7;6131:6;;;;;;;;;;;6124:13;;6058:87;:::o;28320:104::-;28376:13;28409:7;28402:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28320:104;:::o;30004:155::-;30099:52;30118:12;:10;:12::i;:::-;30132:8;30142;30099:18;:52::i;:::-;30004:155;;:::o;51607:142::-;51723:1;51711:9;:13;51703:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;51607:142::o;31127:328::-;31302:41;31321:12;:10;:12::i;:::-;31335:7;31302:18;:41::i;:::-;31294:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31408:39;31422:4;31428:2;31432:7;31441:5;31408:13;:39::i;:::-;31127:328;;;;:::o;51021:578::-;51087:8;;;;;;;;;;;51079:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;49157:1;51173:6;51147:11;:23;51159:10;51147:23;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;:44;;;;51139:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;49091:4;51286:1;51277:6;51249:34;;:25;:15;:23;:25::i;:::-;:34;;;;:::i;:::-;:38;;;;:::i;:::-;:51;51241:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;51367:6;51340:11;:23;51352:10;51340:23;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;51414:13;51438:154;51462:6;51454:14;;:5;:14;51438:154;;;51492:48;51502:10;51514:25;:15;:23;:25::i;:::-;51492:9;:48::i;:::-;51553:27;:15;:25;:27::i;:::-;51470:7;;;;;:::i;:::-;;;;51438:154;;;51068:531;51021:578;:::o;28495:334::-;28568:13;28602:16;28610:7;28602;:16::i;:::-;28594:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28683:21;28707:10;:8;:10::i;:::-;28683:34;;28759:1;28741:7;28735:21;:25;:86;;;;;;;;;;;;;;;;;28787:7;28796:18;:7;:16;:18::i;:::-;28770:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28735:86;28728:93;;;28495:334;;;:::o;52547:97::-;6289:12;:10;:12::i;:::-;6278:23;;:7;:5;:7::i;:::-;:23;;;6270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52631:5:::1;52610:18;;:26;;;;;;;;;;;;;;;;;;52547:97::o:0;50609:404::-;50660:18;;;;;;;;;;;50652:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50726:10;:22;50737:10;50726:22;;;;;;;;;;;;;;;;;;;;;;;;;50718:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;49091:4;50796:25;:15;:23;:25::i;:::-;:38;50788:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;50899:5;50874:10;:22;50885:10;50874:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;50917:48;50927:10;50939:25;:15;:23;:25::i;:::-;50917:9;:48::i;:::-;50976:27;:15;:25;:27::i;:::-;50609:404::o;49054:41::-;49091:4;49054:41;:::o;52274:76::-;6289:12;:10;:12::i;:::-;6278:23;;:7;:5;:7::i;:::-;:23;;;6270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52338:4:::1;52327:8;;:15;;;;;;;;;;;;;;;;;;52274:76::o:0;30230:164::-;30327:4;30351:18;:25;30370:5;30351:25;;;;;;;;;;;;;;;:35;30377:8;30351:35;;;;;;;;;;;;;;;;;;;;;;;;;30344:42;;30230:164;;;;:::o;49122:36::-;49157:1;49122:36;:::o;6967:201::-;6289:12;:10;:12::i;:::-;6278:23;;:7;:5;:7::i;:::-;:23;;;6270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7076:1:::1;7056:22;;:8;:22;;;;7048:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7132:28;7151:8;7132:18;:28::i;:::-;6967:201:::0;:::o;42120:224::-;42222:4;42261:35;42246:50;;;:11;:50;;;;:90;;;;42300:36;42324:11;42300:23;:36::i;:::-;42246:90;42239:97;;42120:224;;;:::o;32965:127::-;33030:4;33082:1;33054:30;;:7;:16;33062:7;33054:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33047:37;;32965:127;;;:::o;4782:98::-;4835:7;4862:10;4855:17;;4782:98;:::o;37111:174::-;37213:2;37186:15;:24;37202:7;37186:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37269:7;37265:2;37231:46;;37240:23;37255:7;37240:14;:23::i;:::-;37231:46;;;;;;;;;;;;37111:174;;:::o;33259:348::-;33352:4;33377:16;33385:7;33377;:16::i;:::-;33369:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33453:13;33469:23;33484:7;33469:14;:23::i;:::-;33453:39;;33522:5;33511:16;;:7;:16;;;:52;;;;33531:32;33548:5;33555:7;33531:16;:32::i;:::-;33511:52;:87;;;;33591:7;33567:31;;:20;33579:7;33567:11;:20::i;:::-;:31;;;33511:87;33503:96;;;33259:348;;;;:::o;36368:625::-;36527:4;36500:31;;:23;36515:7;36500:14;:23::i;:::-;:31;;;36492:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36606:1;36592:16;;:2;:16;;;;36584:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36662:39;36683:4;36689:2;36693:7;36662:20;:39::i;:::-;36766:29;36783:1;36787:7;36766:8;:29::i;:::-;36827:1;36808:9;:15;36818:4;36808:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36856:1;36839:9;:13;36849:2;36839:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36887:2;36868:7;:16;36876:7;36868:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36926:7;36922:2;36907:27;;36916:4;36907:27;;;;;;;;;;;;36947:38;36967:4;36973:2;36977:7;36947:19;:38::i;:::-;36368:625;;;:::o;1386:114::-;1451:7;1478;:14;;;1471:21;;1386:114;;;:::o;10020:317::-;10135:6;10110:21;:31;;10102:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10189:12;10207:9;:14;;10229:6;10207:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10188:52;;;10259:7;10251:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10091:246;10020:317;;:::o;1508:127::-;1615:1;1597:7;:14;;;:19;;;;;;;;;;;1508:127;:::o;33949:110::-;34025:26;34035:2;34039:7;34025:26;;;;;;;;;;;;:9;:26::i;:::-;33949:110;;:::o;35611:420::-;35671:13;35687:23;35702:7;35687:14;:23::i;:::-;35671:39;;35723:48;35744:5;35759:1;35763:7;35723:20;:48::i;:::-;35812:29;35829:1;35833:7;35812:8;:29::i;:::-;35874:1;35854:9;:16;35864:5;35854:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;35893:7;:16;35901:7;35893:16;;;;;;;;;;;;35886:23;;;;;;;;;;;35955:7;35951:1;35927:36;;35936:5;35927:36;;;;;;;;;;;;35976:47;35996:5;36011:1;36015:7;35976:19;:47::i;:::-;35660:371;35611:420;:::o;7328:191::-;7402:16;7421:6;;;;;;;;;;;7402:25;;7447:8;7438:6;;:17;;;;;;;;;;;;;;;;;;7502:8;7471:40;;7492:8;7471:40;;;;;;;;;;;;7391:128;7328:191;:::o;37427:315::-;37582:8;37573:17;;:5;:17;;;;37565:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37669:8;37631:18;:25;37650:5;37631:25;;;;;;;;;;;;;;;:35;37657:8;37631:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37715:8;37693:41;;37708:5;37693:41;;;37725:8;37693:41;;;;;;:::i;:::-;;;;;;;;37427:315;;;:::o;32337:::-;32494:28;32504:4;32510:2;32514:7;32494:9;:28::i;:::-;32541:48;32564:4;32570:2;32574:7;32583:5;32541:22;:48::i;:::-;32533:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32337:315;;;;:::o;49431:149::-;49483:13;49509:63;;;;;;;;;;;;;;;;;;;49431:149;:::o;2344:723::-;2400:13;2630:1;2621:5;:10;2617:53;;;2648:10;;;;;;;;;;;;;;;;;;;;;2617:53;2680:12;2695:5;2680:20;;2711:14;2736:78;2751:1;2743:4;:9;2736:78;;2769:8;;;;;:::i;:::-;;;;2800:2;2792:10;;;;;:::i;:::-;;;2736:78;;;2824:19;2856:6;2846:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2824:39;;2874:154;2890:1;2881:5;:10;2874:154;;2918:1;2908:11;;;;;:::i;:::-;;;2985:2;2977:5;:10;;;;:::i;:::-;2964:2;:24;;;;:::i;:::-;2951:39;;2934:6;2941;2934:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3014:2;3005:11;;;;;:::i;:::-;;;2874:154;;;3052:6;3038:21;;;;;2344:723;;;;:::o;27206:305::-;27308:4;27360:25;27345:40;;;:11;:40;;;;:105;;;;27417:33;27402:48;;;:11;:48;;;;27345:105;:158;;;;27467:36;27491:11;27467:23;:36::i;:::-;27345:158;27325:178;;27206:305;;;:::o;52722:204::-;52873:45;52900:4;52906:2;52910:7;52873:26;:45::i;:::-;52722:204;;;:::o;40189:125::-;;;;:::o;34286:321::-;34416:18;34422:2;34426:7;34416:5;:18::i;:::-;34467:54;34498:1;34502:2;34506:7;34515:5;34467:22;:54::i;:::-;34445:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34286:321;;;:::o;38307:799::-;38462:4;38483:15;:2;:13;;;:15::i;:::-;38479:620;;;38535:2;38519:36;;;38556:12;:10;:12::i;:::-;38570:4;38576:7;38585:5;38519:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38515:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38778:1;38761:6;:13;:18;38757:272;;;38804:60;;;;;;;;;;:::i;:::-;;;;;;;;38757:272;38979:6;38973:13;38964:6;38960:2;38956:15;38949:38;38515:529;38652:41;;;38642:51;;;:6;:51;;;;38635:58;;;;;38479:620;39083:4;39076:11;;38307:799;;;;;;;:::o;18865:157::-;18950:4;18989:25;18974:40;;;:11;:40;;;;18967:47;;18865:157;;;:::o;43796:589::-;43940:45;43967:4;43973:2;43977:7;43940:26;:45::i;:::-;44018:1;44002:18;;:4;:18;;;43998:187;;;44037:40;44069:7;44037:31;:40::i;:::-;43998:187;;;44107:2;44099:10;;:4;:10;;;44095:90;;44126:47;44159:4;44165:7;44126:32;:47::i;:::-;44095:90;43998:187;44213:1;44199:16;;:2;:16;;;44195:183;;;44232:45;44269:7;44232:36;:45::i;:::-;44195:183;;;44305:4;44299:10;;:2;:10;;;44295:83;;44326:40;44354:2;44358:7;44326:27;:40::i;:::-;44295:83;44195:183;43796:589;;;:::o;34943:439::-;35037:1;35023:16;;:2;:16;;;;35015:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35096:16;35104:7;35096;:16::i;:::-;35095:17;35087:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35158:45;35187:1;35191:2;35195:7;35158:20;:45::i;:::-;35233:1;35216:9;:13;35226:2;35216:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35264:2;35245:7;:16;35253:7;35245:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35309:7;35305:2;35284:33;;35301:1;35284:33;;;;;;;;;;;;35330:44;35358:1;35362:2;35366:7;35330:19;:44::i;:::-;34943:439;;:::o;8759:326::-;8819:4;9076:1;9054:7;:19;;;:23;9047:30;;8759:326;;;:::o;39678:126::-;;;;:::o;45108:164::-;45212:10;:17;;;;45185:15;:24;45201:7;45185:24;;;;;;;;;;;:44;;;;45240:10;45256:7;45240:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45108:164;:::o;45899:988::-;46165:22;46215:1;46190:22;46207:4;46190:16;:22::i;:::-;:26;;;;:::i;:::-;46165:51;;46227:18;46248:17;:26;46266:7;46248:26;;;;;;;;;;;;46227:47;;46395:14;46381:10;:28;46377:328;;46426:19;46448:12;:18;46461:4;46448:18;;;;;;;;;;;;;;;:34;46467:14;46448:34;;;;;;;;;;;;46426:56;;46532:11;46499:12;:18;46512:4;46499:18;;;;;;;;;;;;;;;:30;46518:10;46499:30;;;;;;;;;;;:44;;;;46649:10;46616:17;:30;46634:11;46616:30;;;;;;;;;;;:43;;;;46411:294;46377:328;46801:17;:26;46819:7;46801:26;;;;;;;;;;;46794:33;;;46845:12;:18;46858:4;46845:18;;;;;;;;;;;;;;;:34;46864:14;46845:34;;;;;;;;;;;46838:41;;;45980:907;;45899:988;;:::o;47182:1079::-;47435:22;47480:1;47460:10;:17;;;;:21;;;;:::i;:::-;47435:46;;47492:18;47513:15;:24;47529:7;47513:24;;;;;;;;;;;;47492:45;;47864:19;47886:10;47897:14;47886:26;;;;;;;;:::i;:::-;;;;;;;;;;47864:48;;47950:11;47925:10;47936;47925:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48061:10;48030:15;:28;48046:11;48030:28;;;;;;;;;;;:41;;;;48202:15;:24;48218:7;48202:24;;;;;;;;;;;48195:31;;;48237:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47253:1008;;;47182:1079;:::o;44686:221::-;44771:14;44788:20;44805:2;44788:16;:20::i;:::-;44771:37;;44846:7;44819:12;:16;44832:2;44819:16;;;;;;;;;;;;;;;:24;44836:6;44819:24;;;;;;;;;;;:34;;;;44893:6;44864:17;:26;44882:7;44864:26;;;;;;;;;;;:35;;;;44760:147;44686:221;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:137::-;1343:5;1381:6;1368:20;1359:29;;1397:32;1423:5;1397:32;:::i;:::-;1298:137;;;;:::o;1441:141::-;1497:5;1528:6;1522:13;1513:22;;1544:32;1570:5;1544:32;:::i;:::-;1441:141;;;;:::o;1601:338::-;1656:5;1705:3;1698:4;1690:6;1686:17;1682:27;1672:122;;1713:79;;:::i;:::-;1672:122;1830:6;1817:20;1855:78;1929:3;1921:6;1914:4;1906:6;1902:17;1855:78;:::i;:::-;1846:87;;1662:277;1601:338;;;;:::o;1945:139::-;1991:5;2029:6;2016:20;2007:29;;2045:33;2072:5;2045:33;:::i;:::-;1945:139;;;;:::o;2090:135::-;2134:5;2172:6;2159:20;2150:29;;2188:31;2213:5;2188:31;:::i;:::-;2090:135;;;;:::o;2231:329::-;2290:6;2339:2;2327:9;2318:7;2314:23;2310:32;2307:119;;;2345:79;;:::i;:::-;2307:119;2465:1;2490:53;2535:7;2526:6;2515:9;2511:22;2490:53;:::i;:::-;2480:63;;2436:117;2231:329;;;;:::o;2566:474::-;2634:6;2642;2691:2;2679:9;2670:7;2666:23;2662:32;2659:119;;;2697:79;;:::i;:::-;2659:119;2817:1;2842:53;2887:7;2878:6;2867:9;2863:22;2842:53;:::i;:::-;2832:63;;2788:117;2944:2;2970:53;3015:7;3006:6;2995:9;2991:22;2970:53;:::i;:::-;2960:63;;2915:118;2566:474;;;;;:::o;3046:619::-;3123:6;3131;3139;3188:2;3176:9;3167:7;3163:23;3159:32;3156:119;;;3194:79;;:::i;:::-;3156:119;3314:1;3339:53;3384:7;3375:6;3364:9;3360:22;3339:53;:::i;:::-;3329:63;;3285:117;3441:2;3467:53;3512:7;3503:6;3492:9;3488:22;3467:53;:::i;:::-;3457:63;;3412:118;3569:2;3595:53;3640:7;3631:6;3620:9;3616:22;3595:53;:::i;:::-;3585:63;;3540:118;3046:619;;;;;:::o;3671:943::-;3766:6;3774;3782;3790;3839:3;3827:9;3818:7;3814:23;3810:33;3807:120;;;3846:79;;:::i;:::-;3807:120;3966:1;3991:53;4036:7;4027:6;4016:9;4012:22;3991:53;:::i;:::-;3981:63;;3937:117;4093:2;4119:53;4164:7;4155:6;4144:9;4140:22;4119:53;:::i;:::-;4109:63;;4064:118;4221:2;4247:53;4292:7;4283:6;4272:9;4268:22;4247:53;:::i;:::-;4237:63;;4192:118;4377:2;4366:9;4362:18;4349:32;4408:18;4400:6;4397:30;4394:117;;;4430:79;;:::i;:::-;4394:117;4535:62;4589:7;4580:6;4569:9;4565:22;4535:62;:::i;:::-;4525:72;;4320:287;3671:943;;;;;;;:::o;4620:468::-;4685:6;4693;4742:2;4730:9;4721:7;4717:23;4713:32;4710:119;;;4748:79;;:::i;:::-;4710:119;4868:1;4893:53;4938:7;4929:6;4918:9;4914:22;4893:53;:::i;:::-;4883:63;;4839:117;4995:2;5021:50;5063:7;5054:6;5043:9;5039:22;5021:50;:::i;:::-;5011:60;;4966:115;4620:468;;;;;:::o;5094:474::-;5162:6;5170;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5472:2;5498:53;5543:7;5534:6;5523:9;5519:22;5498:53;:::i;:::-;5488:63;;5443:118;5094:474;;;;;:::o;5574:559::-;5660:6;5668;5717:2;5705:9;5696:7;5692:23;5688:32;5685:119;;;5723:79;;:::i;:::-;5685:119;5871:1;5860:9;5856:17;5843:31;5901:18;5893:6;5890:30;5887:117;;;5923:79;;:::i;:::-;5887:117;6036:80;6108:7;6099:6;6088:9;6084:22;6036:80;:::i;:::-;6018:98;;;;5814:312;5574:559;;;;;:::o;6139:327::-;6197:6;6246:2;6234:9;6225:7;6221:23;6217:32;6214:119;;;6252:79;;:::i;:::-;6214:119;6372:1;6397:52;6441:7;6432:6;6421:9;6417:22;6397:52;:::i;:::-;6387:62;;6343:116;6139:327;;;;:::o;6472:349::-;6541:6;6590:2;6578:9;6569:7;6565:23;6561:32;6558:119;;;6596:79;;:::i;:::-;6558:119;6716:1;6741:63;6796:7;6787:6;6776:9;6772:22;6741:63;:::i;:::-;6731:73;;6687:127;6472:349;;;;:::o;6827:329::-;6886:6;6935:2;6923:9;6914:7;6910:23;6906:32;6903:119;;;6941:79;;:::i;:::-;6903:119;7061:1;7086:53;7131:7;7122:6;7111:9;7107:22;7086:53;:::i;:::-;7076:63;;7032:117;6827:329;;;;:::o;7162:325::-;7219:6;7268:2;7256:9;7247:7;7243:23;7239:32;7236:119;;;7274:79;;:::i;:::-;7236:119;7394:1;7419:51;7462:7;7453:6;7442:9;7438:22;7419:51;:::i;:::-;7409:61;;7365:115;7162:325;;;;:::o;7493:179::-;7562:10;7583:46;7625:3;7617:6;7583:46;:::i;:::-;7661:4;7656:3;7652:14;7638:28;;7493:179;;;;:::o;7678:118::-;7765:24;7783:5;7765:24;:::i;:::-;7760:3;7753:37;7678:118;;:::o;7832:732::-;7951:3;7980:54;8028:5;7980:54;:::i;:::-;8050:86;8129:6;8124:3;8050:86;:::i;:::-;8043:93;;8160:56;8210:5;8160:56;:::i;:::-;8239:7;8270:1;8255:284;8280:6;8277:1;8274:13;8255:284;;;8356:6;8350:13;8383:63;8442:3;8427:13;8383:63;:::i;:::-;8376:70;;8469:60;8522:6;8469:60;:::i;:::-;8459:70;;8315:224;8302:1;8299;8295:9;8290:14;;8255:284;;;8259:14;8555:3;8548:10;;7956:608;;;7832:732;;;;:::o;8570:109::-;8651:21;8666:5;8651:21;:::i;:::-;8646:3;8639:34;8570:109;;:::o;8685:360::-;8771:3;8799:38;8831:5;8799:38;:::i;:::-;8853:70;8916:6;8911:3;8853:70;:::i;:::-;8846:77;;8932:52;8977:6;8972:3;8965:4;8958:5;8954:16;8932:52;:::i;:::-;9009:29;9031:6;9009:29;:::i;:::-;9004:3;9000:39;8993:46;;8775:270;8685:360;;;;:::o;9051:364::-;9139:3;9167:39;9200:5;9167:39;:::i;:::-;9222:71;9286:6;9281:3;9222:71;:::i;:::-;9215:78;;9302:52;9347:6;9342:3;9335:4;9328:5;9324:16;9302:52;:::i;:::-;9379:29;9401:6;9379:29;:::i;:::-;9374:3;9370:39;9363:46;;9143:272;9051:364;;;;:::o;9421:377::-;9527:3;9555:39;9588:5;9555:39;:::i;:::-;9610:89;9692:6;9687:3;9610:89;:::i;:::-;9603:96;;9708:52;9753:6;9748:3;9741:4;9734:5;9730:16;9708:52;:::i;:::-;9785:6;9780:3;9776:16;9769:23;;9531:267;9421:377;;;;:::o;9804:366::-;9946:3;9967:67;10031:2;10026:3;9967:67;:::i;:::-;9960:74;;10043:93;10132:3;10043:93;:::i;:::-;10161:2;10156:3;10152:12;10145:19;;9804:366;;;:::o;10176:::-;10318:3;10339:67;10403:2;10398:3;10339:67;:::i;:::-;10332:74;;10415:93;10504:3;10415:93;:::i;:::-;10533:2;10528:3;10524:12;10517:19;;10176:366;;;:::o;10548:::-;10690:3;10711:67;10775:2;10770:3;10711:67;:::i;:::-;10704:74;;10787:93;10876:3;10787:93;:::i;:::-;10905:2;10900:3;10896:12;10889:19;;10548:366;;;:::o;10920:::-;11062:3;11083:67;11147:2;11142:3;11083:67;:::i;:::-;11076:74;;11159:93;11248:3;11159:93;:::i;:::-;11277:2;11272:3;11268:12;11261:19;;10920:366;;;:::o;11292:::-;11434:3;11455:67;11519:2;11514:3;11455:67;:::i;:::-;11448:74;;11531:93;11620:3;11531:93;:::i;:::-;11649:2;11644:3;11640:12;11633:19;;11292:366;;;:::o;11664:::-;11806:3;11827:67;11891:2;11886:3;11827:67;:::i;:::-;11820:74;;11903:93;11992:3;11903:93;:::i;:::-;12021:2;12016:3;12012:12;12005:19;;11664:366;;;:::o;12036:::-;12178:3;12199:67;12263:2;12258:3;12199:67;:::i;:::-;12192:74;;12275:93;12364:3;12275:93;:::i;:::-;12393:2;12388:3;12384:12;12377:19;;12036:366;;;:::o;12408:::-;12550:3;12571:67;12635:2;12630:3;12571:67;:::i;:::-;12564:74;;12647:93;12736:3;12647:93;:::i;:::-;12765:2;12760:3;12756:12;12749:19;;12408:366;;;:::o;12780:::-;12922:3;12943:67;13007:2;13002:3;12943:67;:::i;:::-;12936:74;;13019:93;13108:3;13019:93;:::i;:::-;13137:2;13132:3;13128:12;13121:19;;12780:366;;;:::o;13152:::-;13294:3;13315:67;13379:2;13374:3;13315:67;:::i;:::-;13308:74;;13391:93;13480:3;13391:93;:::i;:::-;13509:2;13504:3;13500:12;13493:19;;13152:366;;;:::o;13524:::-;13666:3;13687:67;13751:2;13746:3;13687:67;:::i;:::-;13680:74;;13763:93;13852:3;13763:93;:::i;:::-;13881:2;13876:3;13872:12;13865:19;;13524:366;;;:::o;13896:::-;14038:3;14059:67;14123:2;14118:3;14059:67;:::i;:::-;14052:74;;14135:93;14224:3;14135:93;:::i;:::-;14253:2;14248:3;14244:12;14237:19;;13896:366;;;:::o;14268:::-;14410:3;14431:67;14495:2;14490:3;14431:67;:::i;:::-;14424:74;;14507:93;14596:3;14507:93;:::i;:::-;14625:2;14620:3;14616:12;14609:19;;14268:366;;;:::o;14640:::-;14782:3;14803:67;14867:2;14862:3;14803:67;:::i;:::-;14796:74;;14879:93;14968:3;14879:93;:::i;:::-;14997:2;14992:3;14988:12;14981:19;;14640:366;;;:::o;15012:::-;15154:3;15175:67;15239:2;15234:3;15175:67;:::i;:::-;15168:74;;15251:93;15340:3;15251:93;:::i;:::-;15369:2;15364:3;15360:12;15353:19;;15012:366;;;:::o;15384:::-;15526:3;15547:67;15611:2;15606:3;15547:67;:::i;:::-;15540:74;;15623:93;15712:3;15623:93;:::i;:::-;15741:2;15736:3;15732:12;15725:19;;15384:366;;;:::o;15756:::-;15898:3;15919:67;15983:2;15978:3;15919:67;:::i;:::-;15912:74;;15995:93;16084:3;15995:93;:::i;:::-;16113:2;16108:3;16104:12;16097:19;;15756:366;;;:::o;16128:::-;16270:3;16291:67;16355:2;16350:3;16291:67;:::i;:::-;16284:74;;16367:93;16456:3;16367:93;:::i;:::-;16485:2;16480:3;16476:12;16469:19;;16128:366;;;:::o;16500:::-;16642:3;16663:67;16727:2;16722:3;16663:67;:::i;:::-;16656:74;;16739:93;16828:3;16739:93;:::i;:::-;16857:2;16852:3;16848:12;16841:19;;16500:366;;;:::o;16872:::-;17014:3;17035:67;17099:2;17094:3;17035:67;:::i;:::-;17028:74;;17111:93;17200:3;17111:93;:::i;:::-;17229:2;17224:3;17220:12;17213:19;;16872:366;;;:::o;17244:::-;17386:3;17407:67;17471:2;17466:3;17407:67;:::i;:::-;17400:74;;17483:93;17572:3;17483:93;:::i;:::-;17601:2;17596:3;17592:12;17585:19;;17244:366;;;:::o;17616:398::-;17775:3;17796:83;17877:1;17872:3;17796:83;:::i;:::-;17789:90;;17888:93;17977:3;17888:93;:::i;:::-;18006:1;18001:3;17997:11;17990:18;;17616:398;;;:::o;18020:366::-;18162:3;18183:67;18247:2;18242:3;18183:67;:::i;:::-;18176:74;;18259:93;18348:3;18259:93;:::i;:::-;18377:2;18372:3;18368:12;18361:19;;18020:366;;;:::o;18392:::-;18534:3;18555:67;18619:2;18614:3;18555:67;:::i;:::-;18548:74;;18631:93;18720:3;18631:93;:::i;:::-;18749:2;18744:3;18740:12;18733:19;;18392:366;;;:::o;18764:::-;18906:3;18927:67;18991:2;18986:3;18927:67;:::i;:::-;18920:74;;19003:93;19092:3;19003:93;:::i;:::-;19121:2;19116:3;19112:12;19105:19;;18764:366;;;:::o;19136:::-;19278:3;19299:67;19363:2;19358:3;19299:67;:::i;:::-;19292:74;;19375:93;19464:3;19375:93;:::i;:::-;19493:2;19488:3;19484:12;19477:19;;19136:366;;;:::o;19508:::-;19650:3;19671:67;19735:2;19730:3;19671:67;:::i;:::-;19664:74;;19747:93;19836:3;19747:93;:::i;:::-;19865:2;19860:3;19856:12;19849:19;;19508:366;;;:::o;19880:::-;20022:3;20043:67;20107:2;20102:3;20043:67;:::i;:::-;20036:74;;20119:93;20208:3;20119:93;:::i;:::-;20237:2;20232:3;20228:12;20221:19;;19880:366;;;:::o;20252:108::-;20329:24;20347:5;20329:24;:::i;:::-;20324:3;20317:37;20252:108;;:::o;20366:118::-;20453:24;20471:5;20453:24;:::i;:::-;20448:3;20441:37;20366:118;;:::o;20490:157::-;20595:45;20615:24;20633:5;20615:24;:::i;:::-;20595:45;:::i;:::-;20590:3;20583:58;20490:157;;:::o;20653:435::-;20833:3;20855:95;20946:3;20937:6;20855:95;:::i;:::-;20848:102;;20967:95;21058:3;21049:6;20967:95;:::i;:::-;20960:102;;21079:3;21072:10;;20653:435;;;;;:::o;21094:379::-;21278:3;21300:147;21443:3;21300:147;:::i;:::-;21293:154;;21464:3;21457:10;;21094:379;;;:::o;21479:538::-;21647:3;21662:75;21733:3;21724:6;21662:75;:::i;:::-;21762:2;21757:3;21753:12;21746:19;;21775:75;21846:3;21837:6;21775:75;:::i;:::-;21875:2;21870:3;21866:12;21859:19;;21888:75;21959:3;21950:6;21888:75;:::i;:::-;21988:2;21983:3;21979:12;21972:19;;22008:3;22001:10;;21479:538;;;;;;:::o;22023:222::-;22116:4;22154:2;22143:9;22139:18;22131:26;;22167:71;22235:1;22224:9;22220:17;22211:6;22167:71;:::i;:::-;22023:222;;;;:::o;22251:640::-;22446:4;22484:3;22473:9;22469:19;22461:27;;22498:71;22566:1;22555:9;22551:17;22542:6;22498:71;:::i;:::-;22579:72;22647:2;22636:9;22632:18;22623:6;22579:72;:::i;:::-;22661;22729:2;22718:9;22714:18;22705:6;22661:72;:::i;:::-;22780:9;22774:4;22770:20;22765:2;22754:9;22750:18;22743:48;22808:76;22879:4;22870:6;22808:76;:::i;:::-;22800:84;;22251:640;;;;;;;:::o;22897:373::-;23040:4;23078:2;23067:9;23063:18;23055:26;;23127:9;23121:4;23117:20;23113:1;23102:9;23098:17;23091:47;23155:108;23258:4;23249:6;23155:108;:::i;:::-;23147:116;;22897:373;;;;:::o;23276:210::-;23363:4;23401:2;23390:9;23386:18;23378:26;;23414:65;23476:1;23465:9;23461:17;23452:6;23414:65;:::i;:::-;23276:210;;;;:::o;23492:313::-;23605:4;23643:2;23632:9;23628:18;23620:26;;23692:9;23686:4;23682:20;23678:1;23667:9;23663:17;23656:47;23720:78;23793:4;23784:6;23720:78;:::i;:::-;23712:86;;23492:313;;;;:::o;23811:419::-;23977:4;24015:2;24004:9;24000:18;23992:26;;24064:9;24058:4;24054:20;24050:1;24039:9;24035:17;24028:47;24092:131;24218:4;24092:131;:::i;:::-;24084:139;;23811:419;;;:::o;24236:::-;24402:4;24440:2;24429:9;24425:18;24417:26;;24489:9;24483:4;24479:20;24475:1;24464:9;24460:17;24453:47;24517:131;24643:4;24517:131;:::i;:::-;24509:139;;24236:419;;;:::o;24661:::-;24827:4;24865:2;24854:9;24850:18;24842:26;;24914:9;24908:4;24904:20;24900:1;24889:9;24885:17;24878:47;24942:131;25068:4;24942:131;:::i;:::-;24934:139;;24661:419;;;:::o;25086:::-;25252:4;25290:2;25279:9;25275:18;25267:26;;25339:9;25333:4;25329:20;25325:1;25314:9;25310:17;25303:47;25367:131;25493:4;25367:131;:::i;:::-;25359:139;;25086:419;;;:::o;25511:::-;25677:4;25715:2;25704:9;25700:18;25692:26;;25764:9;25758:4;25754:20;25750:1;25739:9;25735:17;25728:47;25792:131;25918:4;25792:131;:::i;:::-;25784:139;;25511:419;;;:::o;25936:::-;26102:4;26140:2;26129:9;26125:18;26117:26;;26189:9;26183:4;26179:20;26175:1;26164:9;26160:17;26153:47;26217:131;26343:4;26217:131;:::i;:::-;26209:139;;25936:419;;;:::o;26361:::-;26527:4;26565:2;26554:9;26550:18;26542:26;;26614:9;26608:4;26604:20;26600:1;26589:9;26585:17;26578:47;26642:131;26768:4;26642:131;:::i;:::-;26634:139;;26361:419;;;:::o;26786:::-;26952:4;26990:2;26979:9;26975:18;26967:26;;27039:9;27033:4;27029:20;27025:1;27014:9;27010:17;27003:47;27067:131;27193:4;27067:131;:::i;:::-;27059:139;;26786:419;;;:::o;27211:::-;27377:4;27415:2;27404:9;27400:18;27392:26;;27464:9;27458:4;27454:20;27450:1;27439:9;27435:17;27428:47;27492:131;27618:4;27492:131;:::i;:::-;27484:139;;27211:419;;;:::o;27636:::-;27802:4;27840:2;27829:9;27825:18;27817:26;;27889:9;27883:4;27879:20;27875:1;27864:9;27860:17;27853:47;27917:131;28043:4;27917:131;:::i;:::-;27909:139;;27636:419;;;:::o;28061:::-;28227:4;28265:2;28254:9;28250:18;28242:26;;28314:9;28308:4;28304:20;28300:1;28289:9;28285:17;28278:47;28342:131;28468:4;28342:131;:::i;:::-;28334:139;;28061:419;;;:::o;28486:::-;28652:4;28690:2;28679:9;28675:18;28667:26;;28739:9;28733:4;28729:20;28725:1;28714:9;28710:17;28703:47;28767:131;28893:4;28767:131;:::i;:::-;28759:139;;28486:419;;;:::o;28911:::-;29077:4;29115:2;29104:9;29100:18;29092:26;;29164:9;29158:4;29154:20;29150:1;29139:9;29135:17;29128:47;29192:131;29318:4;29192:131;:::i;:::-;29184:139;;28911:419;;;:::o;29336:::-;29502:4;29540:2;29529:9;29525:18;29517:26;;29589:9;29583:4;29579:20;29575:1;29564:9;29560:17;29553:47;29617:131;29743:4;29617:131;:::i;:::-;29609:139;;29336:419;;;:::o;29761:::-;29927:4;29965:2;29954:9;29950:18;29942:26;;30014:9;30008:4;30004:20;30000:1;29989:9;29985:17;29978:47;30042:131;30168:4;30042:131;:::i;:::-;30034:139;;29761:419;;;:::o;30186:::-;30352:4;30390:2;30379:9;30375:18;30367:26;;30439:9;30433:4;30429:20;30425:1;30414:9;30410:17;30403:47;30467:131;30593:4;30467:131;:::i;:::-;30459:139;;30186:419;;;:::o;30611:::-;30777:4;30815:2;30804:9;30800:18;30792:26;;30864:9;30858:4;30854:20;30850:1;30839:9;30835:17;30828:47;30892:131;31018:4;30892:131;:::i;:::-;30884:139;;30611:419;;;:::o;31036:::-;31202:4;31240:2;31229:9;31225:18;31217:26;;31289:9;31283:4;31279:20;31275:1;31264:9;31260:17;31253:47;31317:131;31443:4;31317:131;:::i;:::-;31309:139;;31036:419;;;:::o;31461:::-;31627:4;31665:2;31654:9;31650:18;31642:26;;31714:9;31708:4;31704:20;31700:1;31689:9;31685:17;31678:47;31742:131;31868:4;31742:131;:::i;:::-;31734:139;;31461:419;;;:::o;31886:::-;32052:4;32090:2;32079:9;32075:18;32067:26;;32139:9;32133:4;32129:20;32125:1;32114:9;32110:17;32103:47;32167:131;32293:4;32167:131;:::i;:::-;32159:139;;31886:419;;;:::o;32311:::-;32477:4;32515:2;32504:9;32500:18;32492:26;;32564:9;32558:4;32554:20;32550:1;32539:9;32535:17;32528:47;32592:131;32718:4;32592:131;:::i;:::-;32584:139;;32311:419;;;:::o;32736:::-;32902:4;32940:2;32929:9;32925:18;32917:26;;32989:9;32983:4;32979:20;32975:1;32964:9;32960:17;32953:47;33017:131;33143:4;33017:131;:::i;:::-;33009:139;;32736:419;;;:::o;33161:::-;33327:4;33365:2;33354:9;33350:18;33342:26;;33414:9;33408:4;33404:20;33400:1;33389:9;33385:17;33378:47;33442:131;33568:4;33442:131;:::i;:::-;33434:139;;33161:419;;;:::o;33586:::-;33752:4;33790:2;33779:9;33775:18;33767:26;;33839:9;33833:4;33829:20;33825:1;33814:9;33810:17;33803:47;33867:131;33993:4;33867:131;:::i;:::-;33859:139;;33586:419;;;:::o;34011:::-;34177:4;34215:2;34204:9;34200:18;34192:26;;34264:9;34258:4;34254:20;34250:1;34239:9;34235:17;34228:47;34292:131;34418:4;34292:131;:::i;:::-;34284:139;;34011:419;;;:::o;34436:::-;34602:4;34640:2;34629:9;34625:18;34617:26;;34689:9;34683:4;34679:20;34675:1;34664:9;34660:17;34653:47;34717:131;34843:4;34717:131;:::i;:::-;34709:139;;34436:419;;;:::o;34861:::-;35027:4;35065:2;35054:9;35050:18;35042:26;;35114:9;35108:4;35104:20;35100:1;35089:9;35085:17;35078:47;35142:131;35268:4;35142:131;:::i;:::-;35134:139;;34861:419;;;:::o;35286:222::-;35379:4;35417:2;35406:9;35402:18;35394:26;;35430:71;35498:1;35487:9;35483:17;35474:6;35430:71;:::i;:::-;35286:222;;;;:::o;35514:129::-;35548:6;35575:20;;:::i;:::-;35565:30;;35604:33;35632:4;35624:6;35604:33;:::i;:::-;35514:129;;;:::o;35649:75::-;35682:6;35715:2;35709:9;35699:19;;35649:75;:::o;35730:307::-;35791:4;35881:18;35873:6;35870:30;35867:56;;;35903:18;;:::i;:::-;35867:56;35941:29;35963:6;35941:29;:::i;:::-;35933:37;;36025:4;36019;36015:15;36007:23;;35730:307;;;:::o;36043:132::-;36110:4;36133:3;36125:11;;36163:4;36158:3;36154:14;36146:22;;36043:132;;;:::o;36181:114::-;36248:6;36282:5;36276:12;36266:22;;36181:114;;;:::o;36301:98::-;36352:6;36386:5;36380:12;36370:22;;36301:98;;;:::o;36405:99::-;36457:6;36491:5;36485:12;36475:22;;36405:99;;;:::o;36510:113::-;36580:4;36612;36607:3;36603:14;36595:22;;36510:113;;;:::o;36629:184::-;36728:11;36762:6;36757:3;36750:19;36802:4;36797:3;36793:14;36778:29;;36629:184;;;;:::o;36819:168::-;36902:11;36936:6;36931:3;36924:19;36976:4;36971:3;36967:14;36952:29;;36819:168;;;;:::o;36993:147::-;37094:11;37131:3;37116:18;;36993:147;;;;:::o;37146:169::-;37230:11;37264:6;37259:3;37252:19;37304:4;37299:3;37295:14;37280:29;;37146:169;;;;:::o;37321:148::-;37423:11;37460:3;37445:18;;37321:148;;;;:::o;37475:305::-;37515:3;37534:20;37552:1;37534:20;:::i;:::-;37529:25;;37568:20;37586:1;37568:20;:::i;:::-;37563:25;;37722:1;37654:66;37650:74;37647:1;37644:81;37641:107;;;37728:18;;:::i;:::-;37641:107;37772:1;37769;37765:9;37758:16;;37475:305;;;;:::o;37786:237::-;37824:3;37843:18;37859:1;37843:18;:::i;:::-;37838:23;;37875:18;37891:1;37875:18;:::i;:::-;37870:23;;37965:1;37959:4;37955:12;37952:1;37949:19;37946:45;;;37971:18;;:::i;:::-;37946:45;38015:1;38012;38008:9;38001:16;;37786:237;;;;:::o;38029:185::-;38069:1;38086:20;38104:1;38086:20;:::i;:::-;38081:25;;38120:20;38138:1;38120:20;:::i;:::-;38115:25;;38159:1;38149:35;;38164:18;;:::i;:::-;38149:35;38206:1;38203;38199:9;38194:14;;38029:185;;;;:::o;38220:191::-;38260:4;38280:20;38298:1;38280:20;:::i;:::-;38275:25;;38314:20;38332:1;38314:20;:::i;:::-;38309:25;;38353:1;38350;38347:8;38344:34;;;38358:18;;:::i;:::-;38344:34;38403:1;38400;38396:9;38388:17;;38220:191;;;;:::o;38417:96::-;38454:7;38483:24;38501:5;38483:24;:::i;:::-;38472:35;;38417:96;;;:::o;38519:90::-;38553:7;38596:5;38589:13;38582:21;38571:32;;38519:90;;;:::o;38615:149::-;38651:7;38691:66;38684:5;38680:78;38669:89;;38615:149;;;:::o;38770:126::-;38807:7;38847:42;38840:5;38836:54;38825:65;;38770:126;;;:::o;38902:77::-;38939:7;38968:5;38957:16;;38902:77;;;:::o;38985:86::-;39020:7;39060:4;39053:5;39049:16;39038:27;;38985:86;;;:::o;39077:154::-;39161:6;39156:3;39151;39138:30;39223:1;39214:6;39209:3;39205:16;39198:27;39077:154;;;:::o;39237:307::-;39305:1;39315:113;39329:6;39326:1;39323:13;39315:113;;;39414:1;39409:3;39405:11;39399:18;39395:1;39390:3;39386:11;39379:39;39351:2;39348:1;39344:10;39339:15;;39315:113;;;39446:6;39443:1;39440:13;39437:101;;;39526:1;39517:6;39512:3;39508:16;39501:27;39437:101;39286:258;39237:307;;;:::o;39550:320::-;39594:6;39631:1;39625:4;39621:12;39611:22;;39678:1;39672:4;39668:12;39699:18;39689:81;;39755:4;39747:6;39743:17;39733:27;;39689:81;39817:2;39809:6;39806:14;39786:18;39783:38;39780:84;;;39836:18;;:::i;:::-;39780:84;39601:269;39550:320;;;:::o;39876:281::-;39959:27;39981:4;39959:27;:::i;:::-;39951:6;39947:40;40089:6;40077:10;40074:22;40053:18;40041:10;40038:34;40035:62;40032:88;;;40100:18;;:::i;:::-;40032:88;40140:10;40136:2;40129:22;39919:238;39876:281;;:::o;40163:233::-;40202:3;40225:24;40243:5;40225:24;:::i;:::-;40216:33;;40271:66;40264:5;40261:77;40258:103;;;40341:18;;:::i;:::-;40258:103;40388:1;40381:5;40377:13;40370:20;;40163:233;;;:::o;40402:79::-;40441:7;40470:5;40459:16;;40402:79;;;:::o;40487:176::-;40519:1;40536:20;40554:1;40536:20;:::i;:::-;40531:25;;40570:20;40588:1;40570:20;:::i;:::-;40565:25;;40609:1;40599:35;;40614:18;;:::i;:::-;40599:35;40655:1;40652;40648:9;40643:14;;40487:176;;;;:::o;40669:180::-;40717:77;40714:1;40707:88;40814:4;40811:1;40804:15;40838:4;40835:1;40828:15;40855:180;40903:77;40900:1;40893:88;41000:4;40997:1;40990:15;41024:4;41021:1;41014:15;41041:180;41089:77;41086:1;41079:88;41186:4;41183:1;41176:15;41210:4;41207:1;41200:15;41227:180;41275:77;41272:1;41265:88;41372:4;41369:1;41362:15;41396:4;41393:1;41386:15;41413:180;41461:77;41458:1;41451:88;41558:4;41555:1;41548:15;41582:4;41579:1;41572:15;41599:180;41647:77;41644:1;41637:88;41744:4;41741:1;41734:15;41768:4;41765:1;41758:15;41785:117;41894:1;41891;41884:12;41908:117;42017:1;42014;42007:12;42031:117;42140:1;42137;42130:12;42154:117;42263:1;42260;42253:12;42277:117;42386:1;42383;42376:12;42400:117;42509:1;42506;42499:12;42523:102;42564:6;42615:2;42611:7;42606:2;42599:5;42595:14;42591:28;42581:38;;42523:102;;;:::o;42631:221::-;42771:34;42767:1;42759:6;42755:14;42748:58;42840:4;42835:2;42827:6;42823:15;42816:29;42631:221;:::o;42858:162::-;42998:14;42994:1;42986:6;42982:14;42975:38;42858:162;:::o;43026:230::-;43166:34;43162:1;43154:6;43150:14;43143:58;43235:13;43230:2;43222:6;43218:15;43211:38;43026:230;:::o;43262:237::-;43402:34;43398:1;43390:6;43386:14;43379:58;43471:20;43466:2;43458:6;43454:15;43447:45;43262:237;:::o;43505:225::-;43645:34;43641:1;43633:6;43629:14;43622:58;43714:8;43709:2;43701:6;43697:15;43690:33;43505:225;:::o;43736:224::-;43876:34;43872:1;43864:6;43860:14;43853:58;43945:7;43940:2;43932:6;43928:15;43921:32;43736:224;:::o;43966:178::-;44106:30;44102:1;44094:6;44090:14;44083:54;43966:178;:::o;44150:223::-;44290:34;44286:1;44278:6;44274:14;44267:58;44359:6;44354:2;44346:6;44342:15;44335:31;44150:223;:::o;44379:175::-;44519:27;44515:1;44507:6;44503:14;44496:51;44379:175;:::o;44560:245::-;44700:34;44696:1;44688:6;44684:14;44677:58;44769:28;44764:2;44756:6;44752:15;44745:53;44560:245;:::o;44811:179::-;44951:31;44947:1;44939:6;44935:14;44928:55;44811:179;:::o;44996:231::-;45136:34;45132:1;45124:6;45120:14;45113:58;45205:14;45200:2;45192:6;45188:15;45181:39;44996:231;:::o;45233:178::-;45373:30;45369:1;45361:6;45357:14;45350:54;45233:178;:::o;45417:243::-;45557:34;45553:1;45545:6;45541:14;45534:58;45626:26;45621:2;45613:6;45609:15;45602:51;45417:243;:::o;45666:229::-;45806:34;45802:1;45794:6;45790:14;45783:58;45875:12;45870:2;45862:6;45858:15;45851:37;45666:229;:::o;45901:228::-;46041:34;46037:1;46029:6;46025:14;46018:58;46110:11;46105:2;46097:6;46093:15;46086:36;45901:228;:::o;46135:182::-;46275:34;46271:1;46263:6;46259:14;46252:58;46135:182;:::o;46323:231::-;46463:34;46459:1;46451:6;46447:14;46440:58;46532:14;46527:2;46519:6;46515:15;46508:39;46323:231;:::o;46560:182::-;46700:34;46696:1;46688:6;46684:14;46677:58;46560:182;:::o;46748:234::-;46888:34;46884:1;46876:6;46872:14;46865:58;46957:17;46952:2;46944:6;46940:15;46933:42;46748:234;:::o;46988:220::-;47128:34;47124:1;47116:6;47112:14;47105:58;47197:3;47192:2;47184:6;47180:15;47173:28;46988:220;:::o;47214:114::-;;:::o;47334:236::-;47474:34;47470:1;47462:6;47458:14;47451:58;47543:19;47538:2;47530:6;47526:15;47519:44;47334:236;:::o;47576:231::-;47716:34;47712:1;47704:6;47700:14;47693:58;47785:14;47780:2;47772:6;47768:15;47761:39;47576:231;:::o;47813:174::-;47953:26;47949:1;47941:6;47937:14;47930:50;47813:174;:::o;47993:235::-;48133:34;48129:1;48121:6;48117:14;48110:58;48202:18;48197:2;48189:6;48185:15;48178:43;47993:235;:::o;48234:172::-;48374:24;48370:1;48362:6;48358:14;48351:48;48234:172;:::o;48412:162::-;48552:14;48548:1;48540:6;48536:14;48529:38;48412:162;:::o;48580:122::-;48653:24;48671:5;48653:24;:::i;:::-;48646:5;48643:35;48633:63;;48692:1;48689;48682:12;48633:63;48580:122;:::o;48708:116::-;48778:21;48793:5;48778:21;:::i;:::-;48771:5;48768:32;48758:60;;48814:1;48811;48804:12;48758:60;48708:116;:::o;48830:120::-;48902:23;48919:5;48902:23;:::i;:::-;48895:5;48892:34;48882:62;;48940:1;48937;48930:12;48882:62;48830:120;:::o;48956:122::-;49029:24;49047:5;49029:24;:::i;:::-;49022:5;49019:35;49009:63;;49068:1;49065;49058:12;49009:63;48956:122;:::o;49084:118::-;49155:22;49171:5;49155:22;:::i;:::-;49148:5;49145:33;49135:61;;49192:1;49189;49182:12;49135:61;49084:118;:::o
Swarm Source
ipfs://236f72e382b82e5bdceb89259939fb40e84bb0ad272101e67538d5844eabfad0
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.