CRC-721
Overview
Max Total Supply
200 LBDC
Holders
90
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
3 LBDCLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
SteakDAO
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-07-18 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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.7.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 /// @solidity memory-safe-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.7.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 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.7.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: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); 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 token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); 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: caller is not token 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: caller is not token 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) { 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 an {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 an {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 Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly 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/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: contracts/3_Ballot.sol pragma solidity 0.8.15; contract SteakDAO is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 499 ether; uint256 public Wlcost = 399 ether; uint256 constant public maxSupply = 200; uint256 public maxMintAmount = 10; mapping(address => uint256) public mintPerWallet; bool public paused = false; mapping(address => bool) public whitelisted; address public daoWallet = 0x09C31F2aF32566d805c4090C4DB1AdA0bbF6F2ad; address public marketingWallet = 0xcBd3E8B401F659C4037074cF2946f359de1c12e4; constructor(string memory _initBaseURI) ERC721("La Brigade De Cuisine", "LBDC") { setBaseURI(_initBaseURI); _mintForTeam(); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 amount) public payable { require(!paused, "paused"); require(amount > 0, "amount can't be zero"); require(mintPerWallet[msg.sender] + amount <= maxMintAmount, "Can't mint more than 10"); uint256 supply = totalSupply(); require(supply + amount <= maxSupply, "Max supply exceeded"); uint256 price = cost; if ( whitelisted[msg.sender] ) { price = Wlcost; } require(msg.value >= price * amount, "insufficient funds"); for (uint256 i = 1; i <= amount; i++) { _safeMint(msg.sender, supply+i); } mintPerWallet[msg.sender] += amount; uint256 mFee = address(this).balance * 10 / 100; payable(marketingWallet).transfer(mFee); payable(daoWallet).transfer(address(this).balance); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setWlcost(uint256 _newWlcost) public onlyOwner { Wlcost = _newWlcost; } function setWhitelisted(address _address, bool _whitelisted) public onlyOwner { whitelisted[_address] = _whitelisted; } function setWhitelistAddresses(address[] memory addresses) public onlyOwner { for (uint i = 0; i < addresses.length; i++) { whitelisted[addresses[i]] = true; } } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } // function mintCost(address _minter) external view returns (uint256) { if (whitelisted[_minter]) return Wlcost; return cost; } function _mintForTeam() private { for (uint i = 1; i <= 20; i++) { _safeMint(daoWallet, i); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Wlcost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daoWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"setWhitelistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWlcost","type":"uint256"}],"name":"setWlcost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a9190620010bd565b50681b0d04202f47ec0000600d556815a13cc201e4dc0000600e55600a600f556000601160006101000a81548160ff0219169083151502179055507309c31f2af32566d805c4090c4db1ada0bbf6f2ad601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cbd3e8b401f659c4037074cf2946f359de1c12e4601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200013c57600080fd5b506040516200600538038062006005833981810160405281019062000162919062001312565b6040518060400160405280601581526020017f4c6120427269676164652044652043756973696e6500000000000000000000008152506040518060400160405280600481526020017f4c424443000000000000000000000000000000000000000000000000000000008152508160009081620001df9190620010bd565b508060019081620001f19190620010bd565b50505062000214620002086200023c60201b60201c565b6200024460201b60201c565b62000225816200030a60201b60201c565b620002356200032f60201b60201c565b5062001902565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200031a6200038c60201b60201c565b80600b90816200032b9190620010bd565b5050565b6000600190505b60148111620003895762000373601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826200041d60201b60201c565b8080620003809062001392565b91505062000336565b50565b6200039c6200023c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003c26200044360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200041b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004129062001440565b60405180910390fd5b565b6200043f8282604051806020016040528060008152506200046d60201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200047f8383620004db60201b60201c565b620004946000848484620006d460201b60201c565b620004d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004cd90620014d8565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000544906200154a565b60405180910390fd5b6200055e816200087d60201b60201c565b15620005a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200059890620015bc565b60405180910390fd5b620005b560008383620008e960201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620006079190620015de565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620006d06000838362000a2e60201b60201c565b5050565b6000620007028473ffffffffffffffffffffffffffffffffffffffff1662000a3360201b6200199e1760201c565b1562000870578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620007346200023c60201b60201c565b8786866040518563ffffffff1660e01b8152600401620007589493929190620016ee565b6020604051808303816000875af19250505080156200079757506040513d601f19601f820116820180604052508101906200079491906200179f565b60015b6200081f573d8060008114620007ca576040519150601f19603f3d011682016040523d82523d6000602084013e620007cf565b606091505b50600081510362000817576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200080e90620014d8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000875565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200090183838362000a5660201b620019c11760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200094d57620009478162000a5b60201b60201c565b62000995565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009945762000993838262000aa460201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009e157620009db8162000c2160201b60201c565b62000a29565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000a285762000a27828262000cfd60201b60201c565b5b5b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000abe8462000d8960201b6200102c1760201c565b62000aca9190620017d1565b905060006007600084815260200190815260200160002054905081811462000bb0576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000c379190620017d1565b905060006009600084815260200190815260200160002054905060006008838154811062000c6a5762000c696200180c565b5b90600052602060002001549050806008838154811062000c8f5762000c8e6200180c565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000ce15762000ce06200183b565b5b6001900381819060005260206000200160009055905550505050565b600062000d158362000d8960201b6200102c1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000dfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000df390620018e0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ec557607f821691505b60208210810362000edb5762000eda62000e7d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000f457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f06565b62000f51868362000f06565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000f9e62000f9862000f928462000f69565b62000f73565b62000f69565b9050919050565b6000819050919050565b62000fba8362000f7d565b62000fd262000fc98262000fa5565b84845462000f13565b825550505050565b600090565b62000fe962000fda565b62000ff681848462000faf565b505050565b5b818110156200101e576200101260008262000fdf565b60018101905062000ffc565b5050565b601f8211156200106d57620010378162000ee1565b620010428462000ef6565b8101602085101562001052578190505b6200106a620010618562000ef6565b83018262000ffb565b50505b505050565b600082821c905092915050565b6000620010926000198460080262001072565b1980831691505092915050565b6000620010ad83836200107f565b9150826002028217905092915050565b620010c88262000e43565b67ffffffffffffffff811115620010e457620010e362000e4e565b5b620010f0825462000eac565b620010fd82828562001022565b600060209050601f83116001811462001135576000841562001120578287015190505b6200112c85826200109f565b8655506200119c565b601f198416620011458662000ee1565b60005b828110156200116f5784890151825560018201915060208501945060208101905062001148565b868310156200118f57848901516200118b601f8916826200107f565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620011de82620011c2565b810181811067ffffffffffffffff821117156200120057620011ff62000e4e565b5b80604052505050565b600062001215620011a4565b9050620012238282620011d3565b919050565b600067ffffffffffffffff82111562001246576200124562000e4e565b5b6200125182620011c2565b9050602081019050919050565b60005b838110156200127e57808201518184015260208101905062001261565b838111156200128e576000848401525b50505050565b6000620012ab620012a58462001228565b62001209565b905082815260208101848484011115620012ca57620012c9620011bd565b5b620012d78482856200125e565b509392505050565b600082601f830112620012f757620012f6620011b8565b5b81516200130984826020860162001294565b91505092915050565b6000602082840312156200132b576200132a620011ae565b5b600082015167ffffffffffffffff8111156200134c576200134b620011b3565b5b6200135a84828501620012df565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200139f8262000f69565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620013d457620013d362001363565b5b600182019050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001428602083620013df565b91506200143582620013f0565b602082019050919050565b600060208201905081810360008301526200145b8162001419565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000620014c0603283620013df565b9150620014cd8262001462565b604082019050919050565b60006020820190508181036000830152620014f381620014b1565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600062001532602083620013df565b91506200153f82620014fa565b602082019050919050565b60006020820190508181036000830152620015658162001523565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000620015a4601c83620013df565b9150620015b1826200156c565b602082019050919050565b60006020820190508181036000830152620015d78162001595565b9050919050565b6000620015eb8262000f69565b9150620015f88362000f69565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001630576200162f62001363565b5b828201905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001668826200163b565b9050919050565b6200167a816200165b565b82525050565b6200168b8162000f69565b82525050565b600081519050919050565b600082825260208201905092915050565b6000620016ba8262001691565b620016c681856200169c565b9350620016d88185602086016200125e565b620016e381620011c2565b840191505092915050565b60006080820190506200170560008301876200166f565b6200171460208301866200166f565b62001723604083018562001680565b8181036060830152620017378184620016ad565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620017798162001742565b81146200178557600080fd5b50565b60008151905062001799816200176e565b92915050565b600060208284031215620017b857620017b7620011ae565b5b6000620017c88482850162001788565b91505092915050565b6000620017de8262000f69565b9150620017eb8362000f69565b92508282101562001801576200180062001363565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000620018c8602983620013df565b9150620018d5826200186a565b604082019050919050565b60006020820190508181036000830152620018fb81620018b9565b9050919050565b6146f380620019126000396000f3fe60806040526004361061023b5760003560e01c80636352211e1161012e578063a22cb465116100ab578063d936547e1161006f578063d936547e1461089c578063da3ef23f146108d9578063e985e9c514610902578063f2fde38b1461093f578063f52ccc2d146109685761023b565b8063a22cb465146107b7578063b88d4fde146107e0578063c668286214610809578063c87b56dd14610834578063d5abeb01146108715761023b565b80637f00c7a6116100f25780637f00c7a6146106f35780638da5cb5b1461071c5780639281aa0b1461074757806395d89b4114610770578063a0712d681461079b5761023b565b80636352211e1461060c578063698a58971461064957806370a0823114610674578063715018a6146106b157806375f0a874146106c85761023b565b8063239c70ae116101bc578063438b630011610180578063438b63001461051557806344a0d68a146105525780634f6ccce71461057b57806355f804b3146105b85780635c975abb146105e15761023b565b8063239c70ae1461041e57806323b872dd146104495780632acc659e146104725780632f745c59146104af57806342842e0e146104ec5761023b565b8063081812fc11610203578063081812fc14610325578063095ea7b31461036257806313413cd21461038b57806313faede6146103c857806318160ddd146103f35761023b565b806301ffc9a71461024057806302329a291461027d57806302b21272146102a65780630457d16b146102cf57806306fdde03146102fa575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190612ce5565b610991565b6040516102749190612d2d565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190612d74565b610a0b565b005b3480156102b257600080fd5b506102cd60048036038101906102c89190612dd7565b610a30565b005b3480156102db57600080fd5b506102e4610a42565b6040516102f19190612e13565b60405180910390f35b34801561030657600080fd5b5061030f610a48565b60405161031c9190612ec7565b60405180910390f35b34801561033157600080fd5b5061034c60048036038101906103479190612dd7565b610ada565b6040516103599190612f2a565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190612f71565b610b20565b005b34801561039757600080fd5b506103b260048036038101906103ad9190612fb1565b610c37565b6040516103bf9190612e13565b60405180910390f35b3480156103d457600080fd5b506103dd610c4f565b6040516103ea9190612e13565b60405180910390f35b3480156103ff57600080fd5b50610408610c55565b6040516104159190612e13565b60405180910390f35b34801561042a57600080fd5b50610433610c62565b6040516104409190612e13565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190612fde565b610c68565b005b34801561047e57600080fd5b5061049960048036038101906104949190612fb1565b610cc8565b6040516104a69190612e13565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190612f71565b610d31565b6040516104e39190612e13565b60405180910390f35b3480156104f857600080fd5b50610513600480360381019061050e9190612fde565b610dd6565b005b34801561052157600080fd5b5061053c60048036038101906105379190612fb1565b610df6565b60405161054991906130ef565b60405180910390f35b34801561055e57600080fd5b5061057960048036038101906105749190612dd7565b610ea4565b005b34801561058757600080fd5b506105a2600480360381019061059d9190612dd7565b610eb6565b6040516105af9190612e13565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613246565b610f27565b005b3480156105ed57600080fd5b506105f6610f42565b6040516106039190612d2d565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190612dd7565b610f55565b6040516106409190612f2a565b60405180910390f35b34801561065557600080fd5b5061065e611006565b60405161066b9190612f2a565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190612fb1565b61102c565b6040516106a89190612e13565b60405180910390f35b3480156106bd57600080fd5b506106c66110e3565b005b3480156106d457600080fd5b506106dd6110f7565b6040516106ea9190612f2a565b60405180910390f35b3480156106ff57600080fd5b5061071a60048036038101906107159190612dd7565b61111d565b005b34801561072857600080fd5b5061073161112f565b60405161073e9190612f2a565b60405180910390f35b34801561075357600080fd5b5061076e6004803603810190610769919061328f565b611159565b005b34801561077c57600080fd5b506107856111bc565b6040516107929190612ec7565b60405180910390f35b6107b560048036038101906107b09190612dd7565b61124e565b005b3480156107c357600080fd5b506107de60048036038101906107d9919061328f565b6115fa565b005b3480156107ec57600080fd5b5061080760048036038101906108029190613370565b611610565b005b34801561081557600080fd5b5061081e611672565b60405161082b9190612ec7565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190612dd7565b611700565b6040516108689190612ec7565b60405180910390f35b34801561087d57600080fd5b506108866117aa565b6040516108939190612e13565b60405180910390f35b3480156108a857600080fd5b506108c360048036038101906108be9190612fb1565b6117af565b6040516108d09190612d2d565b60405180910390f35b3480156108e557600080fd5b5061090060048036038101906108fb9190613246565b6117cf565b005b34801561090e57600080fd5b50610929600480360381019061092491906133f3565b6117ea565b6040516109369190612d2d565b60405180910390f35b34801561094b57600080fd5b5061096660048036038101906109619190612fb1565b61187e565b005b34801561097457600080fd5b5061098f600480360381019061098a91906134fb565b611901565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a045750610a03826119c6565b5b9050919050565b610a13611aa8565b80601160006101000a81548160ff02191690831515021790555050565b610a38611aa8565b80600e8190555050565b600e5481565b606060008054610a5790613573565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390613573565b8015610ad05780601f10610aa557610100808354040283529160200191610ad0565b820191906000526020600020905b815481529060010190602001808311610ab357829003601f168201915b5050505050905090565b6000610ae582611b26565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b2b82610f55565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9290613616565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bba611b71565b73ffffffffffffffffffffffffffffffffffffffff161480610be95750610be881610be3611b71565b6117ea565b5b610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f906136a8565b60405180910390fd5b610c328383611b79565b505050565b60106020528060005260406000206000915090505481565b600d5481565b6000600880549050905090565b600f5481565b610c79610c73611b71565b82611c32565b610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf9061373a565b60405180910390fd5b610cc3838383611cc7565b505050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d2657600e549050610d2c565b600d5490505b919050565b6000610d3c8361102c565b8210610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d74906137cc565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610df183838360405180602001604052806000815250611610565b505050565b60606000610e038361102c565b905060008167ffffffffffffffff811115610e2157610e2061311b565b5b604051908082528060200260200182016040528015610e4f5781602001602082028036833780820191505090505b50905060005b82811015610e9957610e678582610d31565b828281518110610e7a57610e796137ec565b5b6020026020010181815250508080610e919061384a565b915050610e55565b508092505050919050565b610eac611aa8565b80600d8190555050565b6000610ec0610c55565b8210610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890613904565b60405180910390fd5b60088281548110610f1557610f146137ec565b5b90600052602060002001549050919050565b610f2f611aa8565b80600b9081610f3e9190613ad0565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490613bee565b60405180910390fd5b80915050919050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109390613c80565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110eb611aa8565b6110f56000611f2d565b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611125611aa8565b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611161611aa8565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6060600180546111cb90613573565b80601f01602080910402602001604051908101604052809291908181526020018280546111f790613573565b80156112445780601f1061121957610100808354040283529160200191611244565b820191906000526020600020905b81548152906001019060200180831161122757829003601f168201915b5050505050905090565b601160009054906101000a900460ff161561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590613cec565b60405180910390fd5b600081116112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890613d58565b60405180910390fd5b600f5481601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461132f9190613d78565b1115611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790613e1a565b60405180910390fd5b600061137a610c55565b905060c8828261138a9190613d78565b11156113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c290613e86565b60405180910390fd5b6000600d549050601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561142a57600e5490505b82816114369190613ea6565b341015611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f90613f4c565b60405180910390fd5b6000600190505b8381116114ae5761149b3382856114969190613d78565b611ff3565b80806114a69061384a565b91505061147f565b5082601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114fe9190613d78565b9250508190555060006064600a476115169190613ea6565b6115209190613f9b565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561158a573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156115f3573d6000803e3d6000fd5b5050505050565b61160c611605611b71565b8383612011565b5050565b61162161161b611b71565b83611c32565b611660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116579061373a565b60405180910390fd5b61166c8484848461217d565b50505050565b600c805461167f90613573565b80601f01602080910402602001604051908101604052809291908181526020018280546116ab90613573565b80156116f85780601f106116cd576101008083540402835291602001916116f8565b820191906000526020600020905b8154815290600101906020018083116116db57829003601f168201915b505050505081565b606061170b826121d9565b61174a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117419061403e565b60405180910390fd5b6000611754612245565b9050600081511161177457604051806020016040528060008152506117a2565b8061177e846122d7565b600c6040516020016117929392919061411d565b6040516020818303038152906040525b915050919050565b60c881565b60126020528060005260406000206000915054906101000a900460ff1681565b6117d7611aa8565b80600c90816117e69190613ad0565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611886611aa8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec906141c0565b60405180910390fd5b6118fe81611f2d565b50565b611909611aa8565b60005b815181101561199a5760016012600084848151811061192e5761192d6137ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806119929061384a565b91505061190c565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a9157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611aa15750611aa082612437565b5b9050919050565b611ab0611b71565b73ffffffffffffffffffffffffffffffffffffffff16611ace61112f565b73ffffffffffffffffffffffffffffffffffffffff1614611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b9061422c565b60405180910390fd5b565b611b2f816121d9565b611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590613bee565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bec83610f55565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611c3e83610f55565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c805750611c7f81856117ea565b5b80611cbe57508373ffffffffffffffffffffffffffffffffffffffff16611ca684610ada565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ce782610f55565b73ffffffffffffffffffffffffffffffffffffffff1614611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d34906142be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390614350565b60405180910390fd5b611db78383836124a1565b611dc2600082611b79565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e129190614370565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e699190613d78565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f288383836125b3565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61200d8282604051806020016040528060008152506125b8565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361207f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612076906143f0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121709190612d2d565b60405180910390a3505050565b612188848484611cc7565b61219484848484612613565b6121d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ca90614482565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b805461225490613573565b80601f016020809104026020016040519081016040528092919081815260200182805461228090613573565b80156122cd5780601f106122a2576101008083540402835291602001916122cd565b820191906000526020600020905b8154815290600101906020018083116122b057829003601f168201915b5050505050905090565b60606000820361231e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612432565b600082905060005b600082146123505780806123399061384a565b915050600a826123499190613f9b565b9150612326565b60008167ffffffffffffffff81111561236c5761236b61311b565b5b6040519080825280601f01601f19166020018201604052801561239e5781602001600182028036833780820191505090505b5090505b6000851461242b576001826123b79190614370565b9150600a856123c691906144a2565b60306123d29190613d78565b60f81b8183815181106123e8576123e76137ec565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124249190613f9b565b94506123a2565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6124ac8383836119c1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124ee576124e98161279a565b61252d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461252c5761252b83826127e3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361256f5761256a81612950565b6125ae565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125ad576125ac8282612a21565b5b5b505050565b505050565b6125c28383612aa0565b6125cf6000848484612613565b61260e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260590614482565b60405180910390fd5b505050565b60006126348473ffffffffffffffffffffffffffffffffffffffff1661199e565b1561278d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261265d611b71565b8786866040518563ffffffff1660e01b815260040161267f9493929190614528565b6020604051808303816000875af19250505080156126bb57506040513d601f19601f820116820180604052508101906126b89190614589565b60015b61273d573d80600081146126eb576040519150601f19603f3d011682016040523d82523d6000602084013e6126f0565b606091505b506000815103612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c90614482565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612792565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016127f08461102c565b6127fa9190614370565b90506000600760008481526020019081526020016000205490508181146128df576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129649190614370565b9050600060096000848152602001908152602001600020549050600060088381548110612994576129936137ec565b5b9060005260206000200154905080600883815481106129b6576129b56137ec565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a0557612a046145b6565b5b6001900381819060005260206000200160009055905550505050565b6000612a2c8361102c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0690614631565b60405180910390fd5b612b18816121d9565b15612b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4f9061469d565b60405180910390fd5b612b64600083836124a1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bb49190613d78565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c75600083836125b3565b5050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cc281612c8d565b8114612ccd57600080fd5b50565b600081359050612cdf81612cb9565b92915050565b600060208284031215612cfb57612cfa612c83565b5b6000612d0984828501612cd0565b91505092915050565b60008115159050919050565b612d2781612d12565b82525050565b6000602082019050612d426000830184612d1e565b92915050565b612d5181612d12565b8114612d5c57600080fd5b50565b600081359050612d6e81612d48565b92915050565b600060208284031215612d8a57612d89612c83565b5b6000612d9884828501612d5f565b91505092915050565b6000819050919050565b612db481612da1565b8114612dbf57600080fd5b50565b600081359050612dd181612dab565b92915050565b600060208284031215612ded57612dec612c83565b5b6000612dfb84828501612dc2565b91505092915050565b612e0d81612da1565b82525050565b6000602082019050612e286000830184612e04565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e68578082015181840152602081019050612e4d565b83811115612e77576000848401525b50505050565b6000601f19601f8301169050919050565b6000612e9982612e2e565b612ea38185612e39565b9350612eb3818560208601612e4a565b612ebc81612e7d565b840191505092915050565b60006020820190508181036000830152612ee18184612e8e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f1482612ee9565b9050919050565b612f2481612f09565b82525050565b6000602082019050612f3f6000830184612f1b565b92915050565b612f4e81612f09565b8114612f5957600080fd5b50565b600081359050612f6b81612f45565b92915050565b60008060408385031215612f8857612f87612c83565b5b6000612f9685828601612f5c565b9250506020612fa785828601612dc2565b9150509250929050565b600060208284031215612fc757612fc6612c83565b5b6000612fd584828501612f5c565b91505092915050565b600080600060608486031215612ff757612ff6612c83565b5b600061300586828701612f5c565b935050602061301686828701612f5c565b925050604061302786828701612dc2565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61306681612da1565b82525050565b6000613078838361305d565b60208301905092915050565b6000602082019050919050565b600061309c82613031565b6130a6818561303c565b93506130b18361304d565b8060005b838110156130e25781516130c9888261306c565b97506130d483613084565b9250506001810190506130b5565b5085935050505092915050565b600060208201905081810360008301526131098184613091565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61315382612e7d565b810181811067ffffffffffffffff821117156131725761317161311b565b5b80604052505050565b6000613185612c79565b9050613191828261314a565b919050565b600067ffffffffffffffff8211156131b1576131b061311b565b5b6131ba82612e7d565b9050602081019050919050565b82818337600083830152505050565b60006131e96131e484613196565b61317b565b90508281526020810184848401111561320557613204613116565b5b6132108482856131c7565b509392505050565b600082601f83011261322d5761322c613111565b5b813561323d8482602086016131d6565b91505092915050565b60006020828403121561325c5761325b612c83565b5b600082013567ffffffffffffffff81111561327a57613279612c88565b5b61328684828501613218565b91505092915050565b600080604083850312156132a6576132a5612c83565b5b60006132b485828601612f5c565b92505060206132c585828601612d5f565b9150509250929050565b600067ffffffffffffffff8211156132ea576132e961311b565b5b6132f382612e7d565b9050602081019050919050565b600061331361330e846132cf565b61317b565b90508281526020810184848401111561332f5761332e613116565b5b61333a8482856131c7565b509392505050565b600082601f83011261335757613356613111565b5b8135613367848260208601613300565b91505092915050565b6000806000806080858703121561338a57613389612c83565b5b600061339887828801612f5c565b94505060206133a987828801612f5c565b93505060406133ba87828801612dc2565b925050606085013567ffffffffffffffff8111156133db576133da612c88565b5b6133e787828801613342565b91505092959194509250565b6000806040838503121561340a57613409612c83565b5b600061341885828601612f5c565b925050602061342985828601612f5c565b9150509250929050565b600067ffffffffffffffff82111561344e5761344d61311b565b5b602082029050602081019050919050565b600080fd5b600061347761347284613433565b61317b565b9050808382526020820190506020840283018581111561349a5761349961345f565b5b835b818110156134c357806134af8882612f5c565b84526020840193505060208101905061349c565b5050509392505050565b600082601f8301126134e2576134e1613111565b5b81356134f2848260208601613464565b91505092915050565b60006020828403121561351157613510612c83565b5b600082013567ffffffffffffffff81111561352f5761352e612c88565b5b61353b848285016134cd565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061358b57607f821691505b60208210810361359e5761359d613544565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613600602183612e39565b915061360b826135a4565b604082019050919050565b6000602082019050818103600083015261362f816135f3565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613692603e83612e39565b915061369d82613636565b604082019050919050565b600060208201905081810360008301526136c181613685565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613724602e83612e39565b915061372f826136c8565b604082019050919050565b6000602082019050818103600083015261375381613717565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006137b6602b83612e39565b91506137c18261375a565b604082019050919050565b600060208201905081810360008301526137e5816137a9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061385582612da1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138875761388661381b565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006138ee602c83612e39565b91506138f982613892565b604082019050919050565b6000602082019050818103600083015261391d816138e1565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613949565b6139908683613949565b95508019841693508086168417925050509392505050565b6000819050919050565b60006139cd6139c86139c384612da1565b6139a8565b612da1565b9050919050565b6000819050919050565b6139e7836139b2565b6139fb6139f3826139d4565b848454613956565b825550505050565b600090565b613a10613a03565b613a1b8184846139de565b505050565b5b81811015613a3f57613a34600082613a08565b600181019050613a21565b5050565b601f821115613a8457613a5581613924565b613a5e84613939565b81016020851015613a6d578190505b613a81613a7985613939565b830182613a20565b50505b505050565b600082821c905092915050565b6000613aa760001984600802613a89565b1980831691505092915050565b6000613ac08383613a96565b9150826002028217905092915050565b613ad982612e2e565b67ffffffffffffffff811115613af257613af161311b565b5b613afc8254613573565b613b07828285613a43565b600060209050601f831160018114613b3a5760008415613b28578287015190505b613b328582613ab4565b865550613b9a565b601f198416613b4886613924565b60005b82811015613b7057848901518255600182019150602085019450602081019050613b4b565b86831015613b8d5784890151613b89601f891682613a96565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613bd8601883612e39565b9150613be382613ba2565b602082019050919050565b60006020820190508181036000830152613c0781613bcb565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613c6a602983612e39565b9150613c7582613c0e565b604082019050919050565b60006020820190508181036000830152613c9981613c5d565b9050919050565b7f7061757365640000000000000000000000000000000000000000000000000000600082015250565b6000613cd6600683612e39565b9150613ce182613ca0565b602082019050919050565b60006020820190508181036000830152613d0581613cc9565b9050919050565b7f616d6f756e742063616e2774206265207a65726f000000000000000000000000600082015250565b6000613d42601483612e39565b9150613d4d82613d0c565b602082019050919050565b60006020820190508181036000830152613d7181613d35565b9050919050565b6000613d8382612da1565b9150613d8e83612da1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dc357613dc261381b565b5b828201905092915050565b7f43616e2774206d696e74206d6f7265207468616e203130000000000000000000600082015250565b6000613e04601783612e39565b9150613e0f82613dce565b602082019050919050565b60006020820190508181036000830152613e3381613df7565b9050919050565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b6000613e70601383612e39565b9150613e7b82613e3a565b602082019050919050565b60006020820190508181036000830152613e9f81613e63565b9050919050565b6000613eb182612da1565b9150613ebc83612da1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ef557613ef461381b565b5b828202905092915050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b6000613f36601283612e39565b9150613f4182613f00565b602082019050919050565b60006020820190508181036000830152613f6581613f29565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fa682612da1565b9150613fb183612da1565b925082613fc157613fc0613f6c565b5b828204905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614028602f83612e39565b915061403382613fcc565b604082019050919050565b600060208201905081810360008301526140578161401b565b9050919050565b600081905092915050565b600061407482612e2e565b61407e818561405e565b935061408e818560208601612e4a565b80840191505092915050565b600081546140a781613573565b6140b1818661405e565b945060018216600081146140cc57600181146140e157614114565b60ff1983168652811515820286019350614114565b6140ea85613924565b60005b8381101561410c578154818901526001820191506020810190506140ed565b838801955050505b50505092915050565b60006141298286614069565b91506141358285614069565b9150614141828461409a565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141aa602683612e39565b91506141b58261414e565b604082019050919050565b600060208201905081810360008301526141d98161419d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614216602083612e39565b9150614221826141e0565b602082019050919050565b6000602082019050818103600083015261424581614209565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006142a8602583612e39565b91506142b38261424c565b604082019050919050565b600060208201905081810360008301526142d78161429b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061433a602483612e39565b9150614345826142de565b604082019050919050565b600060208201905081810360008301526143698161432d565b9050919050565b600061437b82612da1565b915061438683612da1565b9250828210156143995761439861381b565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006143da601983612e39565b91506143e5826143a4565b602082019050919050565b60006020820190508181036000830152614409816143cd565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061446c603283612e39565b915061447782614410565b604082019050919050565b6000602082019050818103600083015261449b8161445f565b9050919050565b60006144ad82612da1565b91506144b883612da1565b9250826144c8576144c7613f6c565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006144fa826144d3565b61450481856144de565b9350614514818560208601612e4a565b61451d81612e7d565b840191505092915050565b600060808201905061453d6000830187612f1b565b61454a6020830186612f1b565b6145576040830185612e04565b818103606083015261456981846144ef565b905095945050505050565b60008151905061458381612cb9565b92915050565b60006020828403121561459f5761459e612c83565b5b60006145ad84828501614574565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061461b602083612e39565b9150614626826145e5565b602082019050919050565b6000602082019050818103600083015261464a8161460e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614687601c83612e39565b915061469282614651565b602082019050919050565b600060208201905081810360008301526146b68161467a565b905091905056fea2646970667358221220f6e459c8e8cb24bde62d183c06ecd3cd67cbf9c5b44ad6fba30f0b683358903b64736f6c634300080f00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d64336a4170724d4a436e7a4d4437366552515262555348697964346134344566784655686b31486473756d4c2f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061023b5760003560e01c80636352211e1161012e578063a22cb465116100ab578063d936547e1161006f578063d936547e1461089c578063da3ef23f146108d9578063e985e9c514610902578063f2fde38b1461093f578063f52ccc2d146109685761023b565b8063a22cb465146107b7578063b88d4fde146107e0578063c668286214610809578063c87b56dd14610834578063d5abeb01146108715761023b565b80637f00c7a6116100f25780637f00c7a6146106f35780638da5cb5b1461071c5780639281aa0b1461074757806395d89b4114610770578063a0712d681461079b5761023b565b80636352211e1461060c578063698a58971461064957806370a0823114610674578063715018a6146106b157806375f0a874146106c85761023b565b8063239c70ae116101bc578063438b630011610180578063438b63001461051557806344a0d68a146105525780634f6ccce71461057b57806355f804b3146105b85780635c975abb146105e15761023b565b8063239c70ae1461041e57806323b872dd146104495780632acc659e146104725780632f745c59146104af57806342842e0e146104ec5761023b565b8063081812fc11610203578063081812fc14610325578063095ea7b31461036257806313413cd21461038b57806313faede6146103c857806318160ddd146103f35761023b565b806301ffc9a71461024057806302329a291461027d57806302b21272146102a65780630457d16b146102cf57806306fdde03146102fa575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190612ce5565b610991565b6040516102749190612d2d565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190612d74565b610a0b565b005b3480156102b257600080fd5b506102cd60048036038101906102c89190612dd7565b610a30565b005b3480156102db57600080fd5b506102e4610a42565b6040516102f19190612e13565b60405180910390f35b34801561030657600080fd5b5061030f610a48565b60405161031c9190612ec7565b60405180910390f35b34801561033157600080fd5b5061034c60048036038101906103479190612dd7565b610ada565b6040516103599190612f2a565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190612f71565b610b20565b005b34801561039757600080fd5b506103b260048036038101906103ad9190612fb1565b610c37565b6040516103bf9190612e13565b60405180910390f35b3480156103d457600080fd5b506103dd610c4f565b6040516103ea9190612e13565b60405180910390f35b3480156103ff57600080fd5b50610408610c55565b6040516104159190612e13565b60405180910390f35b34801561042a57600080fd5b50610433610c62565b6040516104409190612e13565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190612fde565b610c68565b005b34801561047e57600080fd5b5061049960048036038101906104949190612fb1565b610cc8565b6040516104a69190612e13565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190612f71565b610d31565b6040516104e39190612e13565b60405180910390f35b3480156104f857600080fd5b50610513600480360381019061050e9190612fde565b610dd6565b005b34801561052157600080fd5b5061053c60048036038101906105379190612fb1565b610df6565b60405161054991906130ef565b60405180910390f35b34801561055e57600080fd5b5061057960048036038101906105749190612dd7565b610ea4565b005b34801561058757600080fd5b506105a2600480360381019061059d9190612dd7565b610eb6565b6040516105af9190612e13565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613246565b610f27565b005b3480156105ed57600080fd5b506105f6610f42565b6040516106039190612d2d565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190612dd7565b610f55565b6040516106409190612f2a565b60405180910390f35b34801561065557600080fd5b5061065e611006565b60405161066b9190612f2a565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190612fb1565b61102c565b6040516106a89190612e13565b60405180910390f35b3480156106bd57600080fd5b506106c66110e3565b005b3480156106d457600080fd5b506106dd6110f7565b6040516106ea9190612f2a565b60405180910390f35b3480156106ff57600080fd5b5061071a60048036038101906107159190612dd7565b61111d565b005b34801561072857600080fd5b5061073161112f565b60405161073e9190612f2a565b60405180910390f35b34801561075357600080fd5b5061076e6004803603810190610769919061328f565b611159565b005b34801561077c57600080fd5b506107856111bc565b6040516107929190612ec7565b60405180910390f35b6107b560048036038101906107b09190612dd7565b61124e565b005b3480156107c357600080fd5b506107de60048036038101906107d9919061328f565b6115fa565b005b3480156107ec57600080fd5b5061080760048036038101906108029190613370565b611610565b005b34801561081557600080fd5b5061081e611672565b60405161082b9190612ec7565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190612dd7565b611700565b6040516108689190612ec7565b60405180910390f35b34801561087d57600080fd5b506108866117aa565b6040516108939190612e13565b60405180910390f35b3480156108a857600080fd5b506108c360048036038101906108be9190612fb1565b6117af565b6040516108d09190612d2d565b60405180910390f35b3480156108e557600080fd5b5061090060048036038101906108fb9190613246565b6117cf565b005b34801561090e57600080fd5b50610929600480360381019061092491906133f3565b6117ea565b6040516109369190612d2d565b60405180910390f35b34801561094b57600080fd5b5061096660048036038101906109619190612fb1565b61187e565b005b34801561097457600080fd5b5061098f600480360381019061098a91906134fb565b611901565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a045750610a03826119c6565b5b9050919050565b610a13611aa8565b80601160006101000a81548160ff02191690831515021790555050565b610a38611aa8565b80600e8190555050565b600e5481565b606060008054610a5790613573565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390613573565b8015610ad05780601f10610aa557610100808354040283529160200191610ad0565b820191906000526020600020905b815481529060010190602001808311610ab357829003601f168201915b5050505050905090565b6000610ae582611b26565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b2b82610f55565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9290613616565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bba611b71565b73ffffffffffffffffffffffffffffffffffffffff161480610be95750610be881610be3611b71565b6117ea565b5b610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f906136a8565b60405180910390fd5b610c328383611b79565b505050565b60106020528060005260406000206000915090505481565b600d5481565b6000600880549050905090565b600f5481565b610c79610c73611b71565b82611c32565b610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf9061373a565b60405180910390fd5b610cc3838383611cc7565b505050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d2657600e549050610d2c565b600d5490505b919050565b6000610d3c8361102c565b8210610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d74906137cc565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610df183838360405180602001604052806000815250611610565b505050565b60606000610e038361102c565b905060008167ffffffffffffffff811115610e2157610e2061311b565b5b604051908082528060200260200182016040528015610e4f5781602001602082028036833780820191505090505b50905060005b82811015610e9957610e678582610d31565b828281518110610e7a57610e796137ec565b5b6020026020010181815250508080610e919061384a565b915050610e55565b508092505050919050565b610eac611aa8565b80600d8190555050565b6000610ec0610c55565b8210610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890613904565b60405180910390fd5b60088281548110610f1557610f146137ec565b5b90600052602060002001549050919050565b610f2f611aa8565b80600b9081610f3e9190613ad0565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490613bee565b60405180910390fd5b80915050919050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109390613c80565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110eb611aa8565b6110f56000611f2d565b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611125611aa8565b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611161611aa8565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6060600180546111cb90613573565b80601f01602080910402602001604051908101604052809291908181526020018280546111f790613573565b80156112445780601f1061121957610100808354040283529160200191611244565b820191906000526020600020905b81548152906001019060200180831161122757829003601f168201915b5050505050905090565b601160009054906101000a900460ff161561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590613cec565b60405180910390fd5b600081116112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890613d58565b60405180910390fd5b600f5481601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461132f9190613d78565b1115611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790613e1a565b60405180910390fd5b600061137a610c55565b905060c8828261138a9190613d78565b11156113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c290613e86565b60405180910390fd5b6000600d549050601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561142a57600e5490505b82816114369190613ea6565b341015611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f90613f4c565b60405180910390fd5b6000600190505b8381116114ae5761149b3382856114969190613d78565b611ff3565b80806114a69061384a565b91505061147f565b5082601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114fe9190613d78565b9250508190555060006064600a476115169190613ea6565b6115209190613f9b565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561158a573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156115f3573d6000803e3d6000fd5b5050505050565b61160c611605611b71565b8383612011565b5050565b61162161161b611b71565b83611c32565b611660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116579061373a565b60405180910390fd5b61166c8484848461217d565b50505050565b600c805461167f90613573565b80601f01602080910402602001604051908101604052809291908181526020018280546116ab90613573565b80156116f85780601f106116cd576101008083540402835291602001916116f8565b820191906000526020600020905b8154815290600101906020018083116116db57829003601f168201915b505050505081565b606061170b826121d9565b61174a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117419061403e565b60405180910390fd5b6000611754612245565b9050600081511161177457604051806020016040528060008152506117a2565b8061177e846122d7565b600c6040516020016117929392919061411d565b6040516020818303038152906040525b915050919050565b60c881565b60126020528060005260406000206000915054906101000a900460ff1681565b6117d7611aa8565b80600c90816117e69190613ad0565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611886611aa8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec906141c0565b60405180910390fd5b6118fe81611f2d565b50565b611909611aa8565b60005b815181101561199a5760016012600084848151811061192e5761192d6137ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806119929061384a565b91505061190c565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a9157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611aa15750611aa082612437565b5b9050919050565b611ab0611b71565b73ffffffffffffffffffffffffffffffffffffffff16611ace61112f565b73ffffffffffffffffffffffffffffffffffffffff1614611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b9061422c565b60405180910390fd5b565b611b2f816121d9565b611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590613bee565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bec83610f55565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611c3e83610f55565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c805750611c7f81856117ea565b5b80611cbe57508373ffffffffffffffffffffffffffffffffffffffff16611ca684610ada565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ce782610f55565b73ffffffffffffffffffffffffffffffffffffffff1614611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d34906142be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390614350565b60405180910390fd5b611db78383836124a1565b611dc2600082611b79565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e129190614370565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e699190613d78565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f288383836125b3565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61200d8282604051806020016040528060008152506125b8565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361207f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612076906143f0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121709190612d2d565b60405180910390a3505050565b612188848484611cc7565b61219484848484612613565b6121d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ca90614482565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b805461225490613573565b80601f016020809104026020016040519081016040528092919081815260200182805461228090613573565b80156122cd5780601f106122a2576101008083540402835291602001916122cd565b820191906000526020600020905b8154815290600101906020018083116122b057829003601f168201915b5050505050905090565b60606000820361231e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612432565b600082905060005b600082146123505780806123399061384a565b915050600a826123499190613f9b565b9150612326565b60008167ffffffffffffffff81111561236c5761236b61311b565b5b6040519080825280601f01601f19166020018201604052801561239e5781602001600182028036833780820191505090505b5090505b6000851461242b576001826123b79190614370565b9150600a856123c691906144a2565b60306123d29190613d78565b60f81b8183815181106123e8576123e76137ec565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124249190613f9b565b94506123a2565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6124ac8383836119c1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124ee576124e98161279a565b61252d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461252c5761252b83826127e3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361256f5761256a81612950565b6125ae565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125ad576125ac8282612a21565b5b5b505050565b505050565b6125c28383612aa0565b6125cf6000848484612613565b61260e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260590614482565b60405180910390fd5b505050565b60006126348473ffffffffffffffffffffffffffffffffffffffff1661199e565b1561278d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261265d611b71565b8786866040518563ffffffff1660e01b815260040161267f9493929190614528565b6020604051808303816000875af19250505080156126bb57506040513d601f19601f820116820180604052508101906126b89190614589565b60015b61273d573d80600081146126eb576040519150601f19603f3d011682016040523d82523d6000602084013e6126f0565b606091505b506000815103612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c90614482565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612792565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016127f08461102c565b6127fa9190614370565b90506000600760008481526020019081526020016000205490508181146128df576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129649190614370565b9050600060096000848152602001908152602001600020549050600060088381548110612994576129936137ec565b5b9060005260206000200154905080600883815481106129b6576129b56137ec565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a0557612a046145b6565b5b6001900381819060005260206000200160009055905550505050565b6000612a2c8361102c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0690614631565b60405180910390fd5b612b18816121d9565b15612b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4f9061469d565b60405180910390fd5b612b64600083836124a1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bb49190613d78565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c75600083836125b3565b5050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cc281612c8d565b8114612ccd57600080fd5b50565b600081359050612cdf81612cb9565b92915050565b600060208284031215612cfb57612cfa612c83565b5b6000612d0984828501612cd0565b91505092915050565b60008115159050919050565b612d2781612d12565b82525050565b6000602082019050612d426000830184612d1e565b92915050565b612d5181612d12565b8114612d5c57600080fd5b50565b600081359050612d6e81612d48565b92915050565b600060208284031215612d8a57612d89612c83565b5b6000612d9884828501612d5f565b91505092915050565b6000819050919050565b612db481612da1565b8114612dbf57600080fd5b50565b600081359050612dd181612dab565b92915050565b600060208284031215612ded57612dec612c83565b5b6000612dfb84828501612dc2565b91505092915050565b612e0d81612da1565b82525050565b6000602082019050612e286000830184612e04565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e68578082015181840152602081019050612e4d565b83811115612e77576000848401525b50505050565b6000601f19601f8301169050919050565b6000612e9982612e2e565b612ea38185612e39565b9350612eb3818560208601612e4a565b612ebc81612e7d565b840191505092915050565b60006020820190508181036000830152612ee18184612e8e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f1482612ee9565b9050919050565b612f2481612f09565b82525050565b6000602082019050612f3f6000830184612f1b565b92915050565b612f4e81612f09565b8114612f5957600080fd5b50565b600081359050612f6b81612f45565b92915050565b60008060408385031215612f8857612f87612c83565b5b6000612f9685828601612f5c565b9250506020612fa785828601612dc2565b9150509250929050565b600060208284031215612fc757612fc6612c83565b5b6000612fd584828501612f5c565b91505092915050565b600080600060608486031215612ff757612ff6612c83565b5b600061300586828701612f5c565b935050602061301686828701612f5c565b925050604061302786828701612dc2565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61306681612da1565b82525050565b6000613078838361305d565b60208301905092915050565b6000602082019050919050565b600061309c82613031565b6130a6818561303c565b93506130b18361304d565b8060005b838110156130e25781516130c9888261306c565b97506130d483613084565b9250506001810190506130b5565b5085935050505092915050565b600060208201905081810360008301526131098184613091565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61315382612e7d565b810181811067ffffffffffffffff821117156131725761317161311b565b5b80604052505050565b6000613185612c79565b9050613191828261314a565b919050565b600067ffffffffffffffff8211156131b1576131b061311b565b5b6131ba82612e7d565b9050602081019050919050565b82818337600083830152505050565b60006131e96131e484613196565b61317b565b90508281526020810184848401111561320557613204613116565b5b6132108482856131c7565b509392505050565b600082601f83011261322d5761322c613111565b5b813561323d8482602086016131d6565b91505092915050565b60006020828403121561325c5761325b612c83565b5b600082013567ffffffffffffffff81111561327a57613279612c88565b5b61328684828501613218565b91505092915050565b600080604083850312156132a6576132a5612c83565b5b60006132b485828601612f5c565b92505060206132c585828601612d5f565b9150509250929050565b600067ffffffffffffffff8211156132ea576132e961311b565b5b6132f382612e7d565b9050602081019050919050565b600061331361330e846132cf565b61317b565b90508281526020810184848401111561332f5761332e613116565b5b61333a8482856131c7565b509392505050565b600082601f83011261335757613356613111565b5b8135613367848260208601613300565b91505092915050565b6000806000806080858703121561338a57613389612c83565b5b600061339887828801612f5c565b94505060206133a987828801612f5c565b93505060406133ba87828801612dc2565b925050606085013567ffffffffffffffff8111156133db576133da612c88565b5b6133e787828801613342565b91505092959194509250565b6000806040838503121561340a57613409612c83565b5b600061341885828601612f5c565b925050602061342985828601612f5c565b9150509250929050565b600067ffffffffffffffff82111561344e5761344d61311b565b5b602082029050602081019050919050565b600080fd5b600061347761347284613433565b61317b565b9050808382526020820190506020840283018581111561349a5761349961345f565b5b835b818110156134c357806134af8882612f5c565b84526020840193505060208101905061349c565b5050509392505050565b600082601f8301126134e2576134e1613111565b5b81356134f2848260208601613464565b91505092915050565b60006020828403121561351157613510612c83565b5b600082013567ffffffffffffffff81111561352f5761352e612c88565b5b61353b848285016134cd565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061358b57607f821691505b60208210810361359e5761359d613544565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613600602183612e39565b915061360b826135a4565b604082019050919050565b6000602082019050818103600083015261362f816135f3565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613692603e83612e39565b915061369d82613636565b604082019050919050565b600060208201905081810360008301526136c181613685565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613724602e83612e39565b915061372f826136c8565b604082019050919050565b6000602082019050818103600083015261375381613717565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006137b6602b83612e39565b91506137c18261375a565b604082019050919050565b600060208201905081810360008301526137e5816137a9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061385582612da1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138875761388661381b565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006138ee602c83612e39565b91506138f982613892565b604082019050919050565b6000602082019050818103600083015261391d816138e1565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613949565b6139908683613949565b95508019841693508086168417925050509392505050565b6000819050919050565b60006139cd6139c86139c384612da1565b6139a8565b612da1565b9050919050565b6000819050919050565b6139e7836139b2565b6139fb6139f3826139d4565b848454613956565b825550505050565b600090565b613a10613a03565b613a1b8184846139de565b505050565b5b81811015613a3f57613a34600082613a08565b600181019050613a21565b5050565b601f821115613a8457613a5581613924565b613a5e84613939565b81016020851015613a6d578190505b613a81613a7985613939565b830182613a20565b50505b505050565b600082821c905092915050565b6000613aa760001984600802613a89565b1980831691505092915050565b6000613ac08383613a96565b9150826002028217905092915050565b613ad982612e2e565b67ffffffffffffffff811115613af257613af161311b565b5b613afc8254613573565b613b07828285613a43565b600060209050601f831160018114613b3a5760008415613b28578287015190505b613b328582613ab4565b865550613b9a565b601f198416613b4886613924565b60005b82811015613b7057848901518255600182019150602085019450602081019050613b4b565b86831015613b8d5784890151613b89601f891682613a96565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613bd8601883612e39565b9150613be382613ba2565b602082019050919050565b60006020820190508181036000830152613c0781613bcb565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613c6a602983612e39565b9150613c7582613c0e565b604082019050919050565b60006020820190508181036000830152613c9981613c5d565b9050919050565b7f7061757365640000000000000000000000000000000000000000000000000000600082015250565b6000613cd6600683612e39565b9150613ce182613ca0565b602082019050919050565b60006020820190508181036000830152613d0581613cc9565b9050919050565b7f616d6f756e742063616e2774206265207a65726f000000000000000000000000600082015250565b6000613d42601483612e39565b9150613d4d82613d0c565b602082019050919050565b60006020820190508181036000830152613d7181613d35565b9050919050565b6000613d8382612da1565b9150613d8e83612da1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dc357613dc261381b565b5b828201905092915050565b7f43616e2774206d696e74206d6f7265207468616e203130000000000000000000600082015250565b6000613e04601783612e39565b9150613e0f82613dce565b602082019050919050565b60006020820190508181036000830152613e3381613df7565b9050919050565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b6000613e70601383612e39565b9150613e7b82613e3a565b602082019050919050565b60006020820190508181036000830152613e9f81613e63565b9050919050565b6000613eb182612da1565b9150613ebc83612da1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ef557613ef461381b565b5b828202905092915050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b6000613f36601283612e39565b9150613f4182613f00565b602082019050919050565b60006020820190508181036000830152613f6581613f29565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fa682612da1565b9150613fb183612da1565b925082613fc157613fc0613f6c565b5b828204905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614028602f83612e39565b915061403382613fcc565b604082019050919050565b600060208201905081810360008301526140578161401b565b9050919050565b600081905092915050565b600061407482612e2e565b61407e818561405e565b935061408e818560208601612e4a565b80840191505092915050565b600081546140a781613573565b6140b1818661405e565b945060018216600081146140cc57600181146140e157614114565b60ff1983168652811515820286019350614114565b6140ea85613924565b60005b8381101561410c578154818901526001820191506020810190506140ed565b838801955050505b50505092915050565b60006141298286614069565b91506141358285614069565b9150614141828461409a565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141aa602683612e39565b91506141b58261414e565b604082019050919050565b600060208201905081810360008301526141d98161419d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614216602083612e39565b9150614221826141e0565b602082019050919050565b6000602082019050818103600083015261424581614209565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006142a8602583612e39565b91506142b38261424c565b604082019050919050565b600060208201905081810360008301526142d78161429b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061433a602483612e39565b9150614345826142de565b604082019050919050565b600060208201905081810360008301526143698161432d565b9050919050565b600061437b82612da1565b915061438683612da1565b9250828210156143995761439861381b565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006143da601983612e39565b91506143e5826143a4565b602082019050919050565b60006020820190508181036000830152614409816143cd565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061446c603283612e39565b915061447782614410565b604082019050919050565b6000602082019050818103600083015261449b8161445f565b9050919050565b60006144ad82612da1565b91506144b883612da1565b9250826144c8576144c7613f6c565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006144fa826144d3565b61450481856144de565b9350614514818560208601612e4a565b61451d81612e7d565b840191505092915050565b600060808201905061453d6000830187612f1b565b61454a6020830186612f1b565b6145576040830185612e04565b818103606083015261456981846144ef565b905095945050505050565b60008151905061458381612cb9565b92915050565b60006020828403121561459f5761459e612c83565b5b60006145ad84828501614574565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061461b602083612e39565b9150614626826145e5565b602082019050919050565b6000602082019050818103600083015261464a8161460e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614687601c83612e39565b915061469282614651565b602082019050919050565b600060208201905081810360008301526146b68161467a565b905091905056fea2646970667358221220f6e459c8e8cb24bde62d183c06ecd3cd67cbf9c5b44ad6fba30f0b683358903b64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d64336a4170724d4a436e7a4d4437366552515262555348697964346134344566784655686b31486473756d4c2f00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): https://ipfs.io/ipfs/Qmd3jAprMJCnzMD76eRQRbUSHiyd4a44EfxFUhk1HdsumL/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [2] : 68747470733a2f2f697066732e696f2f697066732f516d64336a4170724d4a43
Arg [3] : 6e7a4d4437366552515262555348697964346134344566784655686b31486473
Arg [4] : 756d4c2f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46228:4239:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40010:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50051:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49179:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46419:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26744:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28257:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27774:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46545:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46381:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40650:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46505:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28957:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50146:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40318:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29364:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48037:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49085:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40840:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49780:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46600:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26455:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46689:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26186:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5273:103;;;;;;;;;;;;;:::i;:::-;;46765:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49650:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4625:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49281:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26913:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47153:876;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28500:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29620:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46337:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48435:642;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46459:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46633:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49892:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28726:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5531:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49445:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40010:224;40112:4;40151:35;40136:50;;;:11;:50;;;;:90;;;;40190:36;40214:11;40190:23;:36::i;:::-;40136:90;40129:97;;40010:224;;;:::o;50051:79::-;4511:13;:11;:13::i;:::-;50116:6:::1;50107;;:15;;;;;;;;;;;;;;;;;;50051:79:::0;:::o;49179:94::-;4511:13;:11;:13::i;:::-;49255:10:::1;49246:6;:19;;;;49179:94:::0;:::o;46419:33::-;;;;:::o;26744:100::-;26798:13;26831:5;26824:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26744:100;:::o;28257:171::-;28333:7;28353:23;28368:7;28353:14;:23::i;:::-;28396:15;:24;28412:7;28396:24;;;;;;;;;;;;;;;;;;;;;28389:31;;28257:171;;;:::o;27774:417::-;27855:13;27871:23;27886:7;27871:14;:23::i;:::-;27855:39;;27919:5;27913:11;;:2;:11;;;27905:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28013:5;27997:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28022:37;28039:5;28046:12;:10;:12::i;:::-;28022:16;:37::i;:::-;27997:62;27975:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28162:21;28171:2;28175:7;28162:8;:21::i;:::-;27844:347;27774:417;;:::o;46545:48::-;;;;;;;;;;;;;;;;;:::o;46381:31::-;;;;:::o;40650:113::-;40711:7;40738:10;:17;;;;40731:24;;40650:113;:::o;46505:33::-;;;;:::o;28957:336::-;29152:41;29171:12;:10;:12::i;:::-;29185:7;29152:18;:41::i;:::-;29144:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29257:28;29267:4;29273:2;29277:7;29257:9;:28::i;:::-;28957:336;;;:::o;50146:179::-;50231:7;50260:11;:20;50272:7;50260:20;;;;;;;;;;;;;;;;;;;;;;;;;50256:39;;;50289:6;;50282:13;;;;50256:39;50313:4;;50306:11;;50146:179;;;;:::o;40318:256::-;40415:7;40451:23;40468:5;40451:16;:23::i;:::-;40443:5;:31;40435:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40540:12;:19;40553:5;40540:19;;;;;;;;;;;;;;;:26;40560:5;40540:26;;;;;;;;;;;;40533:33;;40318:256;;;;:::o;29364:185::-;29502:39;29519:4;29525:2;29529:7;29502:39;;;;;;;;;;;;:16;:39::i;:::-;29364:185;;;:::o;48037:390::-;48124:16;48158:23;48184:17;48194:6;48184:9;:17::i;:::-;48158:43;;48212:25;48254:15;48240:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48212:58;;48286:9;48281:113;48301:15;48297:1;:19;48281:113;;;48352:30;48372:6;48380:1;48352:19;:30::i;:::-;48338:8;48347:1;48338:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;48318:3;;;;;:::i;:::-;;;;48281:113;;;;48411:8;48404:15;;;;48037:390;;;:::o;49085:86::-;4511:13;:11;:13::i;:::-;49155:8:::1;49148:4;:15;;;;49085:86:::0;:::o;40840:233::-;40915:7;40951:30;:28;:30::i;:::-;40943:5;:38;40935:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41048:10;41059:5;41048:17;;;;;;;;:::i;:::-;;;;;;;;;;41041:24;;40840:233;;;:::o;49780:104::-;4511:13;:11;:13::i;:::-;49865:11:::1;49855:7;:21;;;;;;:::i;:::-;;49780:104:::0;:::o;46600:26::-;;;;;;;;;;;;;:::o;26455:222::-;26527:7;26547:13;26563:7;:16;26571:7;26563:16;;;;;;;;;;;;;;;;;;;;;26547:32;;26615:1;26598:19;;:5;:19;;;26590:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26664:5;26657:12;;;26455:222;;;:::o;46689:69::-;;;;;;;;;;;;;:::o;26186:207::-;26258:7;26303:1;26286:19;;:5;:19;;;26278:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26369:9;:16;26379:5;26369:16;;;;;;;;;;;;;;;;26362:23;;26186:207;;;:::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;:::-;5273:103::o:0;46765:75::-;;;;;;;;;;;;;:::o;49650:122::-;4511:13;:11;:13::i;:::-;49747:17:::1;49731:13;:33;;;;49650:122:::0;:::o;4625:87::-;4671:7;4698:6;;;;;;;;;;;4691:13;;4625:87;:::o;49281:156::-;4511:13;:11;:13::i;:::-;49417:12:::1;49393:11;:21;49405:8;49393:21;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;49281:156:::0;;:::o;26913:104::-;26969:13;27002:7;26995:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26913:104;:::o;47153:876::-;47218:6;;;;;;;;;;;47217:7;47209:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;47272:1;47263:6;:10;47255:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;47355:13;;47345:6;47317:13;:25;47331:10;47317:25;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;:51;;47309:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47407:14;47424:13;:11;:13::i;:::-;47407:30;;46495:3;47465:6;47456;:15;;;;:::i;:::-;:28;;47448:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47519:13;47535:4;;47519:20;;47555:11;:23;47567:10;47555:23;;;;;;;;;;;;;;;;;;;;;;;;;47550:72;;;47604:6;;47596:14;;47550:72;47661:6;47653:5;:14;;;;:::i;:::-;47640:9;:27;;47632:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47706:9;47718:1;47706:13;;47701:96;47726:6;47721:1;:11;47701:96;;47754:31;47764:10;47783:1;47776:6;:8;;;;:::i;:::-;47754:9;:31::i;:::-;47734:3;;;;;:::i;:::-;;;;47701:96;;;;47836:6;47807:13;:25;47821:10;47807:25;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;47863:12;47907:3;47902:2;47878:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;47863:47;;47929:15;;;;;;;;;;;47921:33;;:39;47955:4;47921:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47979:9;;;;;;;;;;;47971:27;;:50;47999:21;47971:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47198:831;;;47153:876;:::o;28500:155::-;28595:52;28614:12;:10;:12::i;:::-;28628:8;28638;28595:18;:52::i;:::-;28500:155;;:::o;29620:323::-;29794:41;29813:12;:10;:12::i;:::-;29827:7;29794:18;:41::i;:::-;29786:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29897:38;29911:4;29917:2;29921:7;29930:4;29897:13;:38::i;:::-;29620:323;;;;:::o;46337:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48435:642::-;48553:13;48606:16;48614:7;48606;:16::i;:::-;48584:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;48710:28;48741:10;:8;:10::i;:::-;48710:41;;48813:1;48788:14;48782:28;:32;:287;;;;;;;;;;;;;;;;;48906:14;48947:18;:7;:16;:18::i;:::-;48992:13;48863:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48782:287;48762:307;;;48435:642;;;:::o;46459:39::-;46495:3;46459:39;:::o;46633:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;49892:151::-;4511:13;:11;:13::i;:::-;50018:17:::1;50002:13;:33;;;;;;:::i;:::-;;49892:151:::0;:::o;28726:164::-;28823:4;28847:18;:25;28866:5;28847:25;;;;;;;;;;;;;;;:35;28873:8;28847:35;;;;;;;;;;;;;;;;;;;;;;;;;28840:42;;28726:164;;;;:::o;5531:201::-;4511:13;:11;:13::i;:::-;5640:1:::1;5620:22;;:8;:22;;::::0;5612:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:28;5715:8;5696:18;:28::i;:::-;5531:201:::0;:::o;49445:197::-;4511:13;:11;:13::i;:::-;49537:6:::1;49532:103;49553:9;:16;49549:1;:20;49532:103;;;49619:4;49591:11;:25;49603:9;49613:1;49603:12;;;;;;;;:::i;:::-;;;;;;;;49591:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;49571:3;;;;;:::i;:::-;;;;49532:103;;;;49445:197:::0;:::o;7323:326::-;7383:4;7640:1;7618:7;:19;;;:23;7611:30;;7323:326;;;:::o;38356:126::-;;;;:::o;25817:305::-;25919:4;25971:25;25956:40;;;:11;:40;;;;:105;;;;26028:33;26013:48;;;:11;:48;;;;25956:105;:158;;;;26078:36;26102:11;26078:23;:36::i;:::-;25956:158;25936:178;;25817:305;;;:::o;4790:132::-;4865:12;:10;:12::i;:::-;4854:23;;:7;:5;:7::i;:::-;:23;;;4846:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4790:132::o;36232:135::-;36314:16;36322:7;36314;:16::i;:::-;36306:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36232:135;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;35511:174::-;35613:2;35586:15;:24;35602:7;35586:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35669:7;35665:2;35631:46;;35640:23;35655:7;35640:14;:23::i;:::-;35631:46;;;;;;;;;;;;35511:174;;:::o;31744:264::-;31837:4;31854:13;31870:23;31885:7;31870:14;:23::i;:::-;31854:39;;31923:5;31912:16;;:7;:16;;;:52;;;;31932:32;31949:5;31956:7;31932:16;:32::i;:::-;31912:52;:87;;;;31992:7;31968:31;;:20;31980:7;31968:11;:20::i;:::-;:31;;;31912:87;31904:96;;;31744:264;;;;:::o;34767:625::-;34926:4;34899:31;;:23;34914:7;34899:14;:23::i;:::-;:31;;;34891:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35005:1;34991:16;;:2;:16;;;34983:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35061:39;35082:4;35088:2;35092:7;35061:20;:39::i;:::-;35165:29;35182:1;35186:7;35165:8;:29::i;:::-;35226:1;35207:9;:15;35217:4;35207:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35255:1;35238:9;:13;35248:2;35238:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35286:2;35267:7;:16;35275:7;35267:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35325:7;35321:2;35306:27;;35315:4;35306:27;;;;;;;;;;;;35346:38;35366:4;35372:2;35376:7;35346:19;:38::i;:::-;34767:625;;;:::o;5892:191::-;5966:16;5985:6;;;;;;;;;;;5966:25;;6011:8;6002:6;;:17;;;;;;;;;;;;;;;;;;6066:8;6035:40;;6056:8;6035:40;;;;;;;;;;;;5955:128;5892:191;:::o;32350:110::-;32426:26;32436:2;32440:7;32426:26;;;;;;;;;;;;:9;:26::i;:::-;32350:110;;:::o;35828:315::-;35983:8;35974:17;;:5;:17;;;35966:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36070:8;36032:18;:25;36051:5;36032:25;;;;;;;;;;;;;;;:35;36058:8;36032:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36116:8;36094:41;;36109:5;36094:41;;;36126:8;36094:41;;;;;;:::i;:::-;;;;;;;;35828:315;;;:::o;30824:313::-;30980:28;30990:4;30996:2;31000:7;30980:9;:28::i;:::-;31027:47;31050:4;31056:2;31060:7;31069:4;31027:22;:47::i;:::-;31019:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30824:313;;;;:::o;31450:127::-;31515:4;31567:1;31539:30;;:7;:16;31547:7;31539:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31532:37;;31450:127;;;:::o;47022:108::-;47082:13;47115:7;47108:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47022:108;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;17479:157::-;17564:4;17603:25;17588:40;;;:11;:40;;;;17581:47;;17479:157;;;:::o;41686:589::-;41830:45;41857:4;41863:2;41867:7;41830:26;:45::i;:::-;41908:1;41892:18;;:4;:18;;;41888:187;;41927:40;41959:7;41927:31;:40::i;:::-;41888:187;;;41997:2;41989:10;;:4;:10;;;41985:90;;42016:47;42049:4;42055:7;42016:32;:47::i;:::-;41985:90;41888:187;42103:1;42089:16;;:2;:16;;;42085:183;;42122:45;42159:7;42122:36;:45::i;:::-;42085:183;;;42195:4;42189:10;;:2;:10;;;42185:83;;42216:40;42244:2;42248:7;42216:27;:40::i;:::-;42185:83;42085:183;41686:589;;;:::o;38867:125::-;;;;:::o;32687:319::-;32816:18;32822:2;32826:7;32816:5;:18::i;:::-;32867:53;32898:1;32902:2;32906:7;32915:4;32867:22;:53::i;:::-;32845:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;32687:319;;;:::o;36931:853::-;37085:4;37106:15;:2;:13;;;:15::i;:::-;37102:675;;;37158:2;37142:36;;;37179:12;:10;:12::i;:::-;37193:4;37199:7;37208:4;37142:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37138:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37400:1;37383:6;:13;:18;37379:328;;37426:60;;;;;;;;;;:::i;:::-;;;;;;;;37379:328;37657:6;37651:13;37642:6;37638:2;37634:15;37627:38;37138:584;37274:41;;;37264:51;;;:6;:51;;;;37257:58;;;;;37102:675;37761:4;37754:11;;36931:853;;;;;;;:::o;42998:164::-;43102:10;:17;;;;43075:15;:24;43091:7;43075:24;;;;;;;;;;;:44;;;;43130:10;43146:7;43130:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42998:164;:::o;43789:988::-;44055:22;44105:1;44080:22;44097:4;44080:16;:22::i;:::-;:26;;;;:::i;:::-;44055:51;;44117:18;44138:17;:26;44156:7;44138:26;;;;;;;;;;;;44117:47;;44285:14;44271:10;:28;44267:328;;44316:19;44338:12;:18;44351:4;44338:18;;;;;;;;;;;;;;;:34;44357:14;44338:34;;;;;;;;;;;;44316:56;;44422:11;44389:12;:18;44402:4;44389:18;;;;;;;;;;;;;;;:30;44408:10;44389:30;;;;;;;;;;;:44;;;;44539:10;44506:17;:30;44524:11;44506:30;;;;;;;;;;;:43;;;;44301:294;44267:328;44691:17;:26;44709:7;44691:26;;;;;;;;;;;44684:33;;;44735:12;:18;44748:4;44735:18;;;;;;;;;;;;;;;:34;44754:14;44735:34;;;;;;;;;;;44728:41;;;43870:907;;43789:988;;:::o;45072:1079::-;45325:22;45370:1;45350:10;:17;;;;:21;;;;:::i;:::-;45325:46;;45382:18;45403:15;:24;45419:7;45403:24;;;;;;;;;;;;45382:45;;45754:19;45776:10;45787:14;45776:26;;;;;;;;:::i;:::-;;;;;;;;;;45754:48;;45840:11;45815:10;45826;45815:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45951:10;45920:15;:28;45936:11;45920:28;;;;;;;;;;;:41;;;;46092:15;:24;46108:7;46092:24;;;;;;;;;;;46085:31;;;46127:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45143:1008;;;45072:1079;:::o;42576:221::-;42661:14;42678:20;42695:2;42678:16;:20::i;:::-;42661:37;;42736:7;42709:12;:16;42722:2;42709:16;;;;;;;;;;;;;;;:24;42726:6;42709:24;;;;;;;;;;;:34;;;;42783:6;42754:17;:26;42772:7;42754:26;;;;;;;;;;;:35;;;;42650:147;42576:221;;:::o;33342:439::-;33436:1;33422:16;;:2;:16;;;33414:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33495:16;33503:7;33495;:16::i;:::-;33494:17;33486:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33557:45;33586:1;33590:2;33594:7;33557:20;:45::i;:::-;33632:1;33615:9;:13;33625:2;33615:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33663:2;33644:7;:16;33652:7;33644:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33708:7;33704:2;33683:33;;33700:1;33683:33;;;;;;;;;;;;33729:44;33757:1;33761:2;33765:7;33729:19;:44::i;:::-;33342:439;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:77::-;2145:7;2174:5;2163:16;;2108:77;;;:::o;2191:122::-;2264:24;2282:5;2264:24;:::i;:::-;2257:5;2254:35;2244:63;;2303:1;2300;2293:12;2244:63;2191:122;:::o;2319:139::-;2365:5;2403:6;2390:20;2381:29;;2419:33;2446:5;2419:33;:::i;:::-;2319:139;;;;:::o;2464:329::-;2523:6;2572:2;2560:9;2551:7;2547:23;2543:32;2540:119;;;2578:79;;:::i;:::-;2540:119;2698:1;2723:53;2768:7;2759:6;2748:9;2744:22;2723:53;:::i;:::-;2713:63;;2669:117;2464:329;;;;:::o;2799:118::-;2886:24;2904:5;2886:24;:::i;:::-;2881:3;2874:37;2799:118;;:::o;2923:222::-;3016:4;3054:2;3043:9;3039:18;3031:26;;3067:71;3135:1;3124:9;3120:17;3111:6;3067:71;:::i;:::-;2923:222;;;;:::o;3151:99::-;3203:6;3237:5;3231:12;3221:22;;3151:99;;;:::o;3256:169::-;3340:11;3374:6;3369:3;3362:19;3414:4;3409:3;3405:14;3390:29;;3256:169;;;;:::o;3431:307::-;3499:1;3509:113;3523:6;3520:1;3517:13;3509:113;;;3608:1;3603:3;3599:11;3593:18;3589:1;3584:3;3580:11;3573:39;3545:2;3542:1;3538:10;3533:15;;3509:113;;;3640:6;3637:1;3634:13;3631:101;;;3720:1;3711:6;3706:3;3702:16;3695:27;3631:101;3480:258;3431:307;;;:::o;3744:102::-;3785:6;3836:2;3832:7;3827:2;3820:5;3816:14;3812:28;3802:38;;3744:102;;;:::o;3852:364::-;3940:3;3968:39;4001:5;3968:39;:::i;:::-;4023:71;4087:6;4082:3;4023:71;:::i;:::-;4016:78;;4103:52;4148:6;4143:3;4136:4;4129:5;4125:16;4103:52;:::i;:::-;4180:29;4202:6;4180:29;:::i;:::-;4175:3;4171:39;4164:46;;3944:272;3852:364;;;;:::o;4222:313::-;4335:4;4373:2;4362:9;4358:18;4350:26;;4422:9;4416:4;4412:20;4408:1;4397:9;4393:17;4386:47;4450:78;4523:4;4514:6;4450:78;:::i;:::-;4442:86;;4222:313;;;;:::o;4541:126::-;4578:7;4618:42;4611:5;4607:54;4596:65;;4541:126;;;:::o;4673:96::-;4710:7;4739:24;4757:5;4739:24;:::i;:::-;4728:35;;4673:96;;;:::o;4775:118::-;4862:24;4880:5;4862:24;:::i;:::-;4857:3;4850:37;4775:118;;:::o;4899:222::-;4992:4;5030:2;5019:9;5015:18;5007:26;;5043:71;5111:1;5100:9;5096:17;5087:6;5043:71;:::i;:::-;4899:222;;;;:::o;5127:122::-;5200:24;5218:5;5200:24;:::i;:::-;5193:5;5190:35;5180:63;;5239:1;5236;5229:12;5180:63;5127:122;:::o;5255:139::-;5301:5;5339:6;5326:20;5317:29;;5355:33;5382:5;5355:33;:::i;:::-;5255:139;;;;:::o;5400:474::-;5468:6;5476;5525:2;5513:9;5504:7;5500:23;5496:32;5493:119;;;5531:79;;:::i;:::-;5493:119;5651:1;5676:53;5721:7;5712:6;5701:9;5697:22;5676:53;:::i;:::-;5666:63;;5622:117;5778:2;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5749:118;5400:474;;;;;:::o;5880:329::-;5939:6;5988:2;5976:9;5967:7;5963:23;5959:32;5956:119;;;5994:79;;:::i;:::-;5956:119;6114:1;6139:53;6184:7;6175:6;6164:9;6160:22;6139:53;:::i;:::-;6129:63;;6085:117;5880:329;;;;:::o;6215:619::-;6292:6;6300;6308;6357:2;6345:9;6336:7;6332:23;6328:32;6325:119;;;6363:79;;:::i;:::-;6325:119;6483:1;6508:53;6553:7;6544:6;6533:9;6529:22;6508:53;:::i;:::-;6498:63;;6454:117;6610:2;6636:53;6681:7;6672:6;6661:9;6657:22;6636:53;:::i;:::-;6626:63;;6581:118;6738:2;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6709:118;6215:619;;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:311::-;14540:4;14630:18;14622:6;14619:30;14616:56;;;14652:18;;:::i;:::-;14616:56;14702:4;14694:6;14690:17;14682:25;;14762:4;14756;14752:15;14744:23;;14463:311;;;:::o;14780:117::-;14889:1;14886;14879:12;14920:710;15016:5;15041:81;15057:64;15114:6;15057:64;:::i;:::-;15041:81;:::i;:::-;15032:90;;15142:5;15171:6;15164:5;15157:21;15205:4;15198:5;15194:16;15187:23;;15258:4;15250:6;15246:17;15238:6;15234:30;15287:3;15279:6;15276:15;15273:122;;;15306:79;;:::i;:::-;15273:122;15421:6;15404:220;15438:6;15433:3;15430:15;15404:220;;;15513:3;15542:37;15575:3;15563:10;15542:37;:::i;:::-;15537:3;15530:50;15609:4;15604:3;15600:14;15593:21;;15480:144;15464:4;15459:3;15455:14;15448:21;;15404:220;;;15408:21;15022:608;;14920:710;;;;;:::o;15653:370::-;15724:5;15773:3;15766:4;15758:6;15754:17;15750:27;15740:122;;15781:79;;:::i;:::-;15740:122;15898:6;15885:20;15923:94;16013:3;16005:6;15998:4;15990:6;15986:17;15923:94;:::i;:::-;15914:103;;15730:293;15653:370;;;;:::o;16029:539::-;16113:6;16162:2;16150:9;16141:7;16137:23;16133:32;16130:119;;;16168:79;;:::i;:::-;16130:119;16316:1;16305:9;16301:17;16288:31;16346:18;16338:6;16335:30;16332:117;;;16368:79;;:::i;:::-;16332:117;16473:78;16543:7;16534:6;16523:9;16519:22;16473:78;:::i;:::-;16463:88;;16259:302;16029:539;;;;:::o;16574:180::-;16622:77;16619:1;16612:88;16719:4;16716:1;16709:15;16743:4;16740:1;16733:15;16760:320;16804:6;16841:1;16835:4;16831:12;16821:22;;16888:1;16882:4;16878:12;16909:18;16899:81;;16965:4;16957:6;16953:17;16943:27;;16899:81;17027:2;17019:6;17016:14;16996:18;16993:38;16990:84;;17046:18;;:::i;:::-;16990:84;16811:269;16760:320;;;:::o;17086:220::-;17226:34;17222:1;17214:6;17210:14;17203:58;17295:3;17290:2;17282:6;17278:15;17271:28;17086:220;:::o;17312:366::-;17454:3;17475:67;17539:2;17534:3;17475:67;:::i;:::-;17468:74;;17551:93;17640:3;17551:93;:::i;:::-;17669:2;17664:3;17660:12;17653:19;;17312:366;;;:::o;17684:419::-;17850:4;17888:2;17877:9;17873:18;17865:26;;17937:9;17931:4;17927:20;17923:1;17912:9;17908:17;17901:47;17965:131;18091:4;17965:131;:::i;:::-;17957:139;;17684:419;;;:::o;18109:249::-;18249:34;18245:1;18237:6;18233:14;18226:58;18318:32;18313:2;18305:6;18301:15;18294:57;18109:249;:::o;18364:366::-;18506:3;18527:67;18591:2;18586:3;18527:67;:::i;:::-;18520:74;;18603:93;18692:3;18603:93;:::i;:::-;18721:2;18716:3;18712:12;18705:19;;18364:366;;;:::o;18736:419::-;18902:4;18940:2;18929:9;18925:18;18917:26;;18989:9;18983:4;18979:20;18975:1;18964:9;18960:17;18953:47;19017:131;19143:4;19017:131;:::i;:::-;19009:139;;18736:419;;;:::o;19161:233::-;19301:34;19297:1;19289:6;19285:14;19278:58;19370:16;19365:2;19357:6;19353:15;19346:41;19161:233;:::o;19400:366::-;19542:3;19563:67;19627:2;19622:3;19563:67;:::i;:::-;19556:74;;19639:93;19728:3;19639:93;:::i;:::-;19757:2;19752:3;19748:12;19741:19;;19400:366;;;:::o;19772:419::-;19938:4;19976:2;19965:9;19961:18;19953:26;;20025:9;20019:4;20015:20;20011:1;20000:9;19996:17;19989:47;20053:131;20179:4;20053:131;:::i;:::-;20045:139;;19772:419;;;:::o;20197:230::-;20337:34;20333:1;20325:6;20321:14;20314:58;20406:13;20401:2;20393:6;20389:15;20382:38;20197:230;:::o;20433:366::-;20575:3;20596:67;20660:2;20655:3;20596:67;:::i;:::-;20589:74;;20672:93;20761:3;20672:93;:::i;:::-;20790:2;20785:3;20781:12;20774:19;;20433:366;;;:::o;20805:419::-;20971:4;21009:2;20998:9;20994:18;20986:26;;21058:9;21052:4;21048:20;21044:1;21033:9;21029:17;21022:47;21086:131;21212:4;21086:131;:::i;:::-;21078:139;;20805:419;;;:::o;21230:180::-;21278:77;21275:1;21268:88;21375:4;21372:1;21365:15;21399:4;21396:1;21389:15;21416:180;21464:77;21461:1;21454:88;21561:4;21558:1;21551:15;21585:4;21582:1;21575:15;21602:233;21641:3;21664:24;21682:5;21664:24;:::i;:::-;21655:33;;21710:66;21703:5;21700:77;21697:103;;21780:18;;:::i;:::-;21697:103;21827:1;21820:5;21816:13;21809:20;;21602:233;;;:::o;21841:231::-;21981:34;21977:1;21969:6;21965:14;21958:58;22050:14;22045:2;22037:6;22033:15;22026:39;21841:231;:::o;22078:366::-;22220:3;22241:67;22305:2;22300:3;22241:67;:::i;:::-;22234:74;;22317:93;22406:3;22317:93;:::i;:::-;22435:2;22430:3;22426:12;22419:19;;22078:366;;;:::o;22450:419::-;22616:4;22654:2;22643:9;22639:18;22631:26;;22703:9;22697:4;22693:20;22689:1;22678:9;22674:17;22667:47;22731:131;22857:4;22731:131;:::i;:::-;22723:139;;22450:419;;;:::o;22875:141::-;22924:4;22947:3;22939:11;;22970:3;22967:1;22960:14;23004:4;23001:1;22991:18;22983:26;;22875:141;;;:::o;23022:93::-;23059:6;23106:2;23101;23094:5;23090:14;23086:23;23076:33;;23022:93;;;:::o;23121:107::-;23165:8;23215:5;23209:4;23205:16;23184:37;;23121:107;;;;:::o;23234:393::-;23303:6;23353:1;23341:10;23337:18;23376:97;23406:66;23395:9;23376:97;:::i;:::-;23494:39;23524:8;23513:9;23494:39;:::i;:::-;23482:51;;23566:4;23562:9;23555:5;23551:21;23542:30;;23615:4;23605:8;23601:19;23594:5;23591:30;23581:40;;23310:317;;23234:393;;;;;:::o;23633:60::-;23661:3;23682:5;23675:12;;23633:60;;;:::o;23699:142::-;23749:9;23782:53;23800:34;23809:24;23827:5;23809:24;:::i;:::-;23800:34;:::i;:::-;23782:53;:::i;:::-;23769:66;;23699:142;;;:::o;23847:75::-;23890:3;23911:5;23904:12;;23847:75;;;:::o;23928:269::-;24038:39;24069:7;24038:39;:::i;:::-;24099:91;24148:41;24172:16;24148:41;:::i;:::-;24140:6;24133:4;24127:11;24099:91;:::i;:::-;24093:4;24086:105;24004:193;23928:269;;;:::o;24203:73::-;24248:3;24203:73;:::o;24282:189::-;24359:32;;:::i;:::-;24400:65;24458:6;24450;24444:4;24400:65;:::i;:::-;24335:136;24282:189;;:::o;24477:186::-;24537:120;24554:3;24547:5;24544:14;24537:120;;;24608:39;24645:1;24638:5;24608:39;:::i;:::-;24581:1;24574:5;24570:13;24561:22;;24537:120;;;24477:186;;:::o;24669:543::-;24770:2;24765:3;24762:11;24759:446;;;24804:38;24836:5;24804:38;:::i;:::-;24888:29;24906:10;24888:29;:::i;:::-;24878:8;24874:44;25071:2;25059:10;25056:18;25053:49;;;25092:8;25077:23;;25053:49;25115:80;25171:22;25189:3;25171:22;:::i;:::-;25161:8;25157:37;25144:11;25115:80;:::i;:::-;24774:431;;24759:446;24669:543;;;:::o;25218:117::-;25272:8;25322:5;25316:4;25312:16;25291:37;;25218:117;;;;:::o;25341:169::-;25385:6;25418:51;25466:1;25462:6;25454:5;25451:1;25447:13;25418:51;:::i;:::-;25414:56;25499:4;25493;25489:15;25479:25;;25392:118;25341:169;;;;:::o;25515:295::-;25591:4;25737:29;25762:3;25756:4;25737:29;:::i;:::-;25729:37;;25799:3;25796:1;25792:11;25786:4;25783:21;25775:29;;25515:295;;;;:::o;25815:1395::-;25932:37;25965:3;25932:37;:::i;:::-;26034:18;26026:6;26023:30;26020:56;;;26056:18;;:::i;:::-;26020:56;26100:38;26132:4;26126:11;26100:38;:::i;:::-;26185:67;26245:6;26237;26231:4;26185:67;:::i;:::-;26279:1;26303:4;26290:17;;26335:2;26327:6;26324:14;26352:1;26347:618;;;;27009:1;27026:6;27023:77;;;27075:9;27070:3;27066:19;27060:26;27051:35;;27023:77;27126:67;27186:6;27179:5;27126:67;:::i;:::-;27120:4;27113:81;26982:222;26317:887;;26347:618;26399:4;26395:9;26387:6;26383:22;26433:37;26465:4;26433:37;:::i;:::-;26492:1;26506:208;26520:7;26517:1;26514:14;26506:208;;;26599:9;26594:3;26590:19;26584:26;26576:6;26569:42;26650:1;26642:6;26638:14;26628:24;;26697:2;26686:9;26682:18;26669:31;;26543:4;26540:1;26536:12;26531:17;;26506:208;;;26742:6;26733:7;26730:19;26727:179;;;26800:9;26795:3;26791:19;26785:26;26843:48;26885:4;26877:6;26873:17;26862:9;26843:48;:::i;:::-;26835:6;26828:64;26750:156;26727:179;26952:1;26948;26940:6;26936:14;26932:22;26926:4;26919:36;26354:611;;;26317:887;;25907:1303;;;25815:1395;;:::o;27216:174::-;27356:26;27352:1;27344:6;27340:14;27333:50;27216:174;:::o;27396:366::-;27538:3;27559:67;27623:2;27618:3;27559:67;:::i;:::-;27552:74;;27635:93;27724:3;27635:93;:::i;:::-;27753:2;27748:3;27744:12;27737:19;;27396:366;;;:::o;27768:419::-;27934:4;27972:2;27961:9;27957:18;27949:26;;28021:9;28015:4;28011:20;28007:1;27996:9;27992:17;27985:47;28049:131;28175:4;28049:131;:::i;:::-;28041:139;;27768:419;;;:::o;28193:228::-;28333:34;28329:1;28321:6;28317:14;28310:58;28402:11;28397:2;28389:6;28385:15;28378:36;28193:228;:::o;28427:366::-;28569:3;28590:67;28654:2;28649:3;28590:67;:::i;:::-;28583:74;;28666:93;28755:3;28666:93;:::i;:::-;28784:2;28779:3;28775:12;28768:19;;28427:366;;;:::o;28799:419::-;28965:4;29003:2;28992:9;28988:18;28980:26;;29052:9;29046:4;29042:20;29038:1;29027:9;29023:17;29016:47;29080:131;29206:4;29080:131;:::i;:::-;29072:139;;28799:419;;;:::o;29224:156::-;29364:8;29360:1;29352:6;29348:14;29341:32;29224:156;:::o;29386:365::-;29528:3;29549:66;29613:1;29608:3;29549:66;:::i;:::-;29542:73;;29624:93;29713:3;29624:93;:::i;:::-;29742:2;29737:3;29733:12;29726:19;;29386:365;;;:::o;29757:419::-;29923:4;29961:2;29950:9;29946:18;29938:26;;30010:9;30004:4;30000:20;29996:1;29985:9;29981:17;29974:47;30038:131;30164:4;30038:131;:::i;:::-;30030:139;;29757:419;;;:::o;30182:170::-;30322:22;30318:1;30310:6;30306:14;30299:46;30182:170;:::o;30358:366::-;30500:3;30521:67;30585:2;30580:3;30521:67;:::i;:::-;30514:74;;30597:93;30686:3;30597:93;:::i;:::-;30715:2;30710:3;30706:12;30699:19;;30358:366;;;:::o;30730:419::-;30896:4;30934:2;30923:9;30919:18;30911:26;;30983:9;30977:4;30973:20;30969:1;30958:9;30954:17;30947:47;31011:131;31137:4;31011:131;:::i;:::-;31003:139;;30730:419;;;:::o;31155:305::-;31195:3;31214:20;31232:1;31214:20;:::i;:::-;31209:25;;31248:20;31266:1;31248:20;:::i;:::-;31243:25;;31402:1;31334:66;31330:74;31327:1;31324:81;31321:107;;;31408:18;;:::i;:::-;31321:107;31452:1;31449;31445:9;31438:16;;31155:305;;;;:::o;31466:173::-;31606:25;31602:1;31594:6;31590:14;31583:49;31466:173;:::o;31645:366::-;31787:3;31808:67;31872:2;31867:3;31808:67;:::i;:::-;31801:74;;31884:93;31973:3;31884:93;:::i;:::-;32002:2;31997:3;31993:12;31986:19;;31645:366;;;:::o;32017:419::-;32183:4;32221:2;32210:9;32206:18;32198:26;;32270:9;32264:4;32260:20;32256:1;32245:9;32241:17;32234:47;32298:131;32424:4;32298:131;:::i;:::-;32290:139;;32017:419;;;:::o;32442:169::-;32582:21;32578:1;32570:6;32566:14;32559:45;32442:169;:::o;32617:366::-;32759:3;32780:67;32844:2;32839:3;32780:67;:::i;:::-;32773:74;;32856:93;32945:3;32856:93;:::i;:::-;32974:2;32969:3;32965:12;32958:19;;32617:366;;;:::o;32989:419::-;33155:4;33193:2;33182:9;33178:18;33170:26;;33242:9;33236:4;33232:20;33228:1;33217:9;33213:17;33206:47;33270:131;33396:4;33270:131;:::i;:::-;33262:139;;32989:419;;;:::o;33414:348::-;33454:7;33477:20;33495:1;33477:20;:::i;:::-;33472:25;;33511:20;33529:1;33511:20;:::i;:::-;33506:25;;33699:1;33631:66;33627:74;33624:1;33621:81;33616:1;33609:9;33602:17;33598:105;33595:131;;;33706:18;;:::i;:::-;33595:131;33754:1;33751;33747:9;33736:20;;33414:348;;;;:::o;33768:168::-;33908:20;33904:1;33896:6;33892:14;33885:44;33768:168;:::o;33942:366::-;34084:3;34105:67;34169:2;34164:3;34105:67;:::i;:::-;34098:74;;34181:93;34270:3;34181:93;:::i;:::-;34299:2;34294:3;34290:12;34283:19;;33942:366;;;:::o;34314:419::-;34480:4;34518:2;34507:9;34503:18;34495:26;;34567:9;34561:4;34557:20;34553:1;34542:9;34538:17;34531:47;34595:131;34721:4;34595:131;:::i;:::-;34587:139;;34314:419;;;:::o;34739:180::-;34787:77;34784:1;34777:88;34884:4;34881:1;34874:15;34908:4;34905:1;34898:15;34925:185;34965:1;34982:20;35000:1;34982:20;:::i;:::-;34977:25;;35016:20;35034:1;35016:20;:::i;:::-;35011:25;;35055:1;35045:35;;35060:18;;:::i;:::-;35045:35;35102:1;35099;35095:9;35090:14;;34925:185;;;;:::o;35116:234::-;35256:34;35252:1;35244:6;35240:14;35233:58;35325:17;35320:2;35312:6;35308:15;35301:42;35116:234;:::o;35356:366::-;35498:3;35519:67;35583:2;35578:3;35519:67;:::i;:::-;35512:74;;35595:93;35684:3;35595:93;:::i;:::-;35713:2;35708:3;35704:12;35697:19;;35356:366;;;:::o;35728:419::-;35894:4;35932:2;35921:9;35917:18;35909:26;;35981:9;35975:4;35971:20;35967:1;35956:9;35952:17;35945:47;36009:131;36135:4;36009:131;:::i;:::-;36001:139;;35728:419;;;:::o;36153:148::-;36255:11;36292:3;36277:18;;36153:148;;;;:::o;36307:377::-;36413:3;36441:39;36474:5;36441:39;:::i;:::-;36496:89;36578:6;36573:3;36496:89;:::i;:::-;36489:96;;36594:52;36639:6;36634:3;36627:4;36620:5;36616:16;36594:52;:::i;:::-;36671:6;36666:3;36662:16;36655:23;;36417:267;36307:377;;;;:::o;36714:874::-;36817:3;36854:5;36848:12;36883:36;36909:9;36883:36;:::i;:::-;36935:89;37017:6;37012:3;36935:89;:::i;:::-;36928:96;;37055:1;37044:9;37040:17;37071:1;37066:166;;;;37246:1;37241:341;;;;37033:549;;37066:166;37150:4;37146:9;37135;37131:25;37126:3;37119:38;37212:6;37205:14;37198:22;37190:6;37186:35;37181:3;37177:45;37170:52;;37066:166;;37241:341;37308:38;37340:5;37308:38;:::i;:::-;37368:1;37382:154;37396:6;37393:1;37390:13;37382:154;;;37470:7;37464:14;37460:1;37455:3;37451:11;37444:35;37520:1;37511:7;37507:15;37496:26;;37418:4;37415:1;37411:12;37406:17;;37382:154;;;37565:6;37560:3;37556:16;37549:23;;37248:334;;37033:549;;36821:767;;36714:874;;;;:::o;37594:589::-;37819:3;37841:95;37932:3;37923:6;37841:95;:::i;:::-;37834:102;;37953:95;38044:3;38035:6;37953:95;:::i;:::-;37946:102;;38065:92;38153:3;38144:6;38065:92;:::i;:::-;38058:99;;38174:3;38167:10;;37594:589;;;;;;:::o;38189:225::-;38329:34;38325:1;38317:6;38313:14;38306:58;38398:8;38393:2;38385:6;38381:15;38374:33;38189:225;:::o;38420:366::-;38562:3;38583:67;38647:2;38642:3;38583:67;:::i;:::-;38576:74;;38659:93;38748:3;38659:93;:::i;:::-;38777:2;38772:3;38768:12;38761:19;;38420:366;;;:::o;38792:419::-;38958:4;38996:2;38985:9;38981:18;38973:26;;39045:9;39039:4;39035:20;39031:1;39020:9;39016:17;39009:47;39073:131;39199:4;39073:131;:::i;:::-;39065:139;;38792:419;;;:::o;39217:182::-;39357:34;39353:1;39345:6;39341:14;39334:58;39217:182;:::o;39405:366::-;39547:3;39568:67;39632:2;39627:3;39568:67;:::i;:::-;39561:74;;39644:93;39733:3;39644:93;:::i;:::-;39762:2;39757:3;39753:12;39746:19;;39405:366;;;:::o;39777:419::-;39943:4;39981:2;39970:9;39966:18;39958:26;;40030:9;40024:4;40020:20;40016:1;40005:9;40001:17;39994:47;40058:131;40184:4;40058:131;:::i;:::-;40050:139;;39777:419;;;:::o;40202:224::-;40342:34;40338:1;40330:6;40326:14;40319:58;40411:7;40406:2;40398:6;40394:15;40387:32;40202:224;:::o;40432:366::-;40574:3;40595:67;40659:2;40654:3;40595:67;:::i;:::-;40588:74;;40671:93;40760:3;40671:93;:::i;:::-;40789:2;40784:3;40780:12;40773:19;;40432:366;;;:::o;40804:419::-;40970:4;41008:2;40997:9;40993:18;40985:26;;41057:9;41051:4;41047:20;41043:1;41032:9;41028:17;41021:47;41085:131;41211:4;41085:131;:::i;:::-;41077:139;;40804:419;;;:::o;41229:223::-;41369:34;41365:1;41357:6;41353:14;41346:58;41438:6;41433:2;41425:6;41421:15;41414:31;41229:223;:::o;41458:366::-;41600:3;41621:67;41685:2;41680:3;41621:67;:::i;:::-;41614:74;;41697:93;41786:3;41697:93;:::i;:::-;41815:2;41810:3;41806:12;41799:19;;41458:366;;;:::o;41830:419::-;41996:4;42034:2;42023:9;42019:18;42011:26;;42083:9;42077:4;42073:20;42069:1;42058:9;42054:17;42047:47;42111:131;42237:4;42111:131;:::i;:::-;42103:139;;41830:419;;;:::o;42255:191::-;42295:4;42315:20;42333:1;42315:20;:::i;:::-;42310:25;;42349:20;42367:1;42349:20;:::i;:::-;42344:25;;42388:1;42385;42382:8;42379:34;;;42393:18;;:::i;:::-;42379:34;42438:1;42435;42431:9;42423:17;;42255:191;;;;:::o;42452:175::-;42592:27;42588:1;42580:6;42576:14;42569:51;42452:175;:::o;42633:366::-;42775:3;42796:67;42860:2;42855:3;42796:67;:::i;:::-;42789:74;;42872:93;42961:3;42872:93;:::i;:::-;42990:2;42985:3;42981:12;42974:19;;42633:366;;;:::o;43005:419::-;43171:4;43209:2;43198:9;43194:18;43186:26;;43258:9;43252:4;43248:20;43244:1;43233:9;43229:17;43222:47;43286:131;43412:4;43286:131;:::i;:::-;43278:139;;43005:419;;;:::o;43430:237::-;43570:34;43566:1;43558:6;43554:14;43547:58;43639:20;43634:2;43626:6;43622:15;43615:45;43430:237;:::o;43673:366::-;43815:3;43836:67;43900:2;43895:3;43836:67;:::i;:::-;43829:74;;43912:93;44001:3;43912:93;:::i;:::-;44030:2;44025:3;44021:12;44014:19;;43673:366;;;:::o;44045:419::-;44211:4;44249:2;44238:9;44234:18;44226:26;;44298:9;44292:4;44288:20;44284:1;44273:9;44269:17;44262:47;44326:131;44452:4;44326:131;:::i;:::-;44318:139;;44045:419;;;:::o;44470:176::-;44502:1;44519:20;44537:1;44519:20;:::i;:::-;44514:25;;44553:20;44571:1;44553:20;:::i;:::-;44548:25;;44592:1;44582:35;;44597:18;;:::i;:::-;44582:35;44638:1;44635;44631:9;44626:14;;44470:176;;;;:::o;44652:98::-;44703:6;44737:5;44731:12;44721:22;;44652:98;;;:::o;44756:168::-;44839:11;44873:6;44868:3;44861:19;44913:4;44908:3;44904:14;44889:29;;44756:168;;;;:::o;44930:360::-;45016:3;45044:38;45076:5;45044:38;:::i;:::-;45098:70;45161:6;45156:3;45098:70;:::i;:::-;45091:77;;45177:52;45222:6;45217:3;45210:4;45203:5;45199:16;45177:52;:::i;:::-;45254:29;45276:6;45254:29;:::i;:::-;45249:3;45245:39;45238:46;;45020:270;44930:360;;;;:::o;45296:640::-;45491:4;45529:3;45518:9;45514:19;45506:27;;45543:71;45611:1;45600:9;45596:17;45587:6;45543:71;:::i;:::-;45624:72;45692:2;45681:9;45677:18;45668:6;45624:72;:::i;:::-;45706;45774:2;45763:9;45759:18;45750:6;45706:72;:::i;:::-;45825:9;45819:4;45815:20;45810:2;45799:9;45795:18;45788:48;45853:76;45924:4;45915:6;45853:76;:::i;:::-;45845:84;;45296:640;;;;;;;:::o;45942:141::-;45998:5;46029:6;46023:13;46014:22;;46045:32;46071:5;46045:32;:::i;:::-;45942:141;;;;:::o;46089:349::-;46158:6;46207:2;46195:9;46186:7;46182:23;46178:32;46175:119;;;46213:79;;:::i;:::-;46175:119;46333:1;46358:63;46413:7;46404:6;46393:9;46389:22;46358:63;:::i;:::-;46348:73;;46304:127;46089:349;;;;:::o;46444:180::-;46492:77;46489:1;46482:88;46589:4;46586:1;46579:15;46613:4;46610:1;46603:15;46630:182;46770:34;46766:1;46758:6;46754:14;46747:58;46630:182;:::o;46818:366::-;46960:3;46981:67;47045:2;47040:3;46981:67;:::i;:::-;46974:74;;47057:93;47146:3;47057:93;:::i;:::-;47175:2;47170:3;47166:12;47159:19;;46818:366;;;:::o;47190:419::-;47356:4;47394:2;47383:9;47379:18;47371:26;;47443:9;47437:4;47433:20;47429:1;47418:9;47414:17;47407:47;47471:131;47597:4;47471:131;:::i;:::-;47463:139;;47190:419;;;:::o;47615:178::-;47755:30;47751:1;47743:6;47739:14;47732:54;47615:178;:::o;47799:366::-;47941:3;47962:67;48026:2;48021:3;47962:67;:::i;:::-;47955:74;;48038:93;48127:3;48038:93;:::i;:::-;48156:2;48151:3;48147:12;48140:19;;47799:366;;;:::o;48171:419::-;48337:4;48375:2;48364:9;48360:18;48352:26;;48424:9;48418:4;48414:20;48410:1;48399:9;48395:17;48388:47;48452:131;48578:4;48452:131;:::i;:::-;48444:139;;48171:419;;;:::o
Swarm Source
ipfs://f6e459c8e8cb24bde62d183c06ecd3cd67cbf9c5b44ad6fba30f0b683358903b
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.