Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
0 BKS
Holders
283
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 BKSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BridgeKeepers
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-17 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * 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); } /** * @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); } /** * @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); } /** * @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); } } } } /** * @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; } } /** * @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); } } /** * @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; } } /** * @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 {} } /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } /** * @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); } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface Whitelist { function _whitlisted(address account) external view returns (bool); } contract BridgeKeepers is ERC721, Ownable { using Strings for uint256; using SafeMath for uint256; using Counters for Counters.Counter; Whitelist private _Whitelist = Whitelist(0xb35bB4d6Fbc83812ec4ABc19203721D4CA857a11); Counters.Counter private _tokenIdTracker; mapping (uint256 => string) private _tokenURIs; mapping (string => address) private _tokenIDs; mapping (address => uint) public _whitlistedBuy; mapping (address => uint) public _publicBuy; address private constant CreatorAddress = 0xf99613B4AE868b1aB1219Ba4FAf933DA928EA8ec; string private baseURIextended; uint256 private constant min_price = 1 ether; uint256 private maxSupply = 500; uint256 public publicTime; uint256 private whitelistedTime = 6 hours; uint whitelistedMaxBuy = 5; uint publicMaxBuy = 5; bool private pause = false; event NFTMinted(uint256 indexed tokenId, address owner, address to, string tokenURI); event NFTMintTransfered(address to, uint value); constructor(string memory _baseURIextended, uint256 _publicTime ) ERC721("BRIDGE KEEPERS", "BKS"){ baseURIextended = _baseURIextended; publicTime = _publicTime; } function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } function revealCollection(string memory _baseURIextended) public onlyOwner { require(keccak256(bytes(baseURIextended)) != keccak256(bytes(_baseURIextended)), "Collection already revealed"); setBaseURI(_baseURIextended); } function setBaseURI(string memory _baseURIextended) private onlyOwner { baseURIextended = _baseURIextended; } function setMaxSupply(uint256 _maxSupply) public onlyOwner { maxSupply = _maxSupply; } function setPause(bool _pause) public onlyOwner { pause = _pause; } function getPause() public view virtual returns (bool) { return pause; } function _baseURI() internal view virtual override returns (string memory) { return baseURIextended; } function burn(uint256 tokenId) public onlyOwner { require(_exists(tokenId), "URI query for nonexistent token"); _tokenIDs[_tokenURIs[tokenId]] = address(0); _tokenURIs[tokenId] = ""; _burn(tokenId); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); return string(abi.encodePacked(base, _tokenURI)); } function setWhitelistedMaxBuy(uint256 _whitelistedMaxBuy) public onlyOwner { whitelistedMaxBuy = _whitelistedMaxBuy; } function setPublicMaxBuy(uint256 _publicMaxBuy) public onlyOwner { publicMaxBuy = _publicMaxBuy; } function mint(address _to, string[] memory _tokensURI, uint256 _deadline) public payable { require(!pause, "Sales paused"); require(msg.value >= min_price.mul(_tokensURI.length), "Value below price"); require(maxSupply >= _tokenIdTracker.current() + _tokensURI.length, "SoldOut"); require(_tokensURI.length > 0, "Minimum count"); require(_deadline >= block.timestamp - 300, "Out of time"); if(publicTime > block.timestamp){ if(_Whitelist._whitlisted(msg.sender)){ require(block.timestamp >= publicTime - whitelistedTime, "Mint not opened yet for whitelisted"); require(whitelistedMaxBuy >= _tokensURI.length, "Max Buy Limit"); require(whitelistedMaxBuy >= _whitlistedBuy[msg.sender] + _tokensURI.length, "Max Buy Limit"); } else { require(block.timestamp >= publicTime, "Mint not opened yet for public"); } } else { require(block.timestamp >= publicTime, "Mint not opened yet for public"); require(publicMaxBuy >= _tokensURI.length, "Max Buy Limit"); require(publicMaxBuy >= _publicBuy[msg.sender] + _tokensURI.length, "Max Buy Limit"); } _mintAnElement(_to, _tokensURI[0]); if(publicTime > block.timestamp){ _whitlistedBuy[msg.sender] += 1; } else { _publicBuy[msg.sender] += 1; } transfer(CreatorAddress, msg.value); } function _mintAnElement(address _to, string memory _tokenURI) private { uint256 _tokenId = _tokenIdTracker.current(); _tokenIdTracker.increment(); _tokenId = _tokenId + 1; _mint(_to, _tokenId); _setTokenURI(_tokenId, _tokenURI); _tokenIDs[_tokenURI] = _to; emit NFTMinted(_tokenId, CreatorAddress, _to, _tokenURI); } function transfer(address to, uint256 value) private { (bool success, ) = to.call{value: value}(""); require(success, "Transfer failed."); emit NFTMintTransfered(to, value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseURIextended","type":"string"},{"internalType":"uint256","name":"_publicTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NFTMintTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"string","name":"tokenURI","type":"string"}],"name":"NFTMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_publicBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_whitlistedBuy","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"string[]","name":"_tokensURI","type":"string[]"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURIextended","type":"string"}],"name":"revealCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicMaxBuy","type":"uint256"}],"name":"setPublicMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistedMaxBuy","type":"uint256"}],"name":"setWhitelistedMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405273b35bb4d6fbc83812ec4abc19203721d4ca857a11600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101f4600e55615460601055600560115560056012556000601360006101000a81548160ff0219169083151502179055503480156200009757600080fd5b50604051620049ee380380620049ee8339818101604052810190620000bd91906200042c565b6040518060400160405280600e81526020017f425249444745204b4545504552530000000000000000000000000000000000008152506040518060400160405280600381526020017f424b53000000000000000000000000000000000000000000000000000000000081525081600090816200013a9190620006d3565b5080600190816200014c9190620006d3565b5050506200016f620001636200019060201b60201c565b6200019860201b60201c565b81600d9081620001809190620006d3565b5080600f819055505050620007ba565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002c7826200027c565b810181811067ffffffffffffffff82111715620002e957620002e86200028d565b5b80604052505050565b6000620002fe6200025e565b90506200030c8282620002bc565b919050565b600067ffffffffffffffff8211156200032f576200032e6200028d565b5b6200033a826200027c565b9050602081019050919050565b60005b83811015620003675780820151818401526020810190506200034a565b60008484015250505050565b60006200038a620003848462000311565b620002f2565b905082815260208101848484011115620003a957620003a862000277565b5b620003b684828562000347565b509392505050565b600082601f830112620003d657620003d562000272565b5b8151620003e884826020860162000373565b91505092915050565b6000819050919050565b6200040681620003f1565b81146200041257600080fd5b50565b6000815190506200042681620003fb565b92915050565b6000806040838503121562000446576200044562000268565b5b600083015167ffffffffffffffff8111156200046757620004666200026d565b5b6200047585828601620003be565b9250506020620004888582860162000415565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e557607f821691505b602082108103620004fb57620004fa6200049d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000526565b62000571868362000526565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620005b4620005ae620005a884620003f1565b62000589565b620003f1565b9050919050565b6000819050919050565b620005d08362000593565b620005e8620005df82620005bb565b84845462000533565b825550505050565b600090565b620005ff620005f0565b6200060c818484620005c5565b505050565b5b81811015620006345762000628600082620005f5565b60018101905062000612565b5050565b601f82111562000683576200064d8162000501565b620006588462000516565b8101602085101562000668578190505b62000680620006778562000516565b83018262000611565b50505b505050565b600082821c905092915050565b6000620006a86000198460080262000688565b1980831691505092915050565b6000620006c3838362000695565b9150826002028217905092915050565b620006de8262000492565b67ffffffffffffffff811115620006fa57620006f96200028d565b5b620007068254620004cc565b6200071382828562000638565b600060209050601f8311600181146200074b576000841562000736578287015190505b620007428582620006b5565b865550620007b2565b601f1984166200075b8662000501565b60005b8281101562000785578489015182556001820191506020850194506020810190506200075e565b86831015620007a55784890151620007a1601f89168262000695565b8355505b6001600288020188555050505b505050505050565b61422480620007ca6000396000f3fe60806040526004361061019c5760003560e01c80636352211e116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146105b3578063c9223a28146105f0578063e985e9c514610619578063f2fde38b146106565761019c565b8063a22cb46514610538578063b88d4fde14610561578063bedb86fb1461058a5761019c565b8063715018a6116100c6578063715018a6146104a25780638da5cb5b146104b957806394038506146104e457806395d89b411461050d5761019c565b80636352211e146103ff5780636f8b44b01461043c57806370a08231146104655761019c565b80631bdc608e116101595780633e3ca9d3116101335780633e3ca9d31461035957806342842e0e1461038457806342966c68146103ad57806350179bae146103d65761019c565b80631bdc608e146102c857806323b872dd146102f357806326f23fa91461031c5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b3146102465780630de1b4521461026f5780630f59896c1461028b575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c391906126da565b61067f565b6040516101d59190612722565b60405180910390f35b3480156101ea57600080fd5b506101f3610761565b60405161020091906127cd565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612825565b6107f3565b60405161023d9190612893565b60405180910390f35b34801561025257600080fd5b5061026d600480360381019061026891906128da565b610839565b005b61028960048036038101906102849190612b35565b610950565b005b34801561029757600080fd5b506102b260048036038101906102ad9190612ba4565b610f31565b6040516102bf9190612be0565b60405180910390f35b3480156102d457600080fd5b506102dd610f49565b6040516102ea9190612be0565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190612bfb565b610f4f565b005b34801561032857600080fd5b50610343600480360381019061033e9190612ba4565b610faf565b6040516103509190612be0565b60405180910390f35b34801561036557600080fd5b5061036e610fc7565b60405161037b9190612722565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a69190612bfb565b610fde565b005b3480156103b957600080fd5b506103d460048036038101906103cf9190612825565b610ffe565b005b3480156103e257600080fd5b506103fd60048036038101906103f89190612c4e565b6110fa565b005b34801561040b57600080fd5b5061042660048036038101906104219190612825565b61116d565b6040516104339190612893565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e9190612825565b61121e565b005b34801561047157600080fd5b5061048c60048036038101906104879190612ba4565b611230565b6040516104999190612be0565b60405180910390f35b3480156104ae57600080fd5b506104b76112e7565b005b3480156104c557600080fd5b506104ce6112fb565b6040516104db9190612893565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190612825565b611325565b005b34801561051957600080fd5b50610522611337565b60405161052f91906127cd565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190612cc3565b6113c9565b005b34801561056d57600080fd5b5061058860048036038101906105839190612da4565b6113df565b005b34801561059657600080fd5b506105b160048036038101906105ac9190612e27565b611441565b005b3480156105bf57600080fd5b506105da60048036038101906105d59190612825565b611466565b6040516105e791906127cd565b60405180910390f35b3480156105fc57600080fd5b5061061760048036038101906106129190612825565b611587565b005b34801561062557600080fd5b50610640600480360381019061063b9190612e54565b611599565b60405161064d9190612722565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190612ba4565b61162d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061075a5750610759826116b0565b5b9050919050565b60606000805461077090612ec3565b80601f016020809104026020016040519081016040528092919081815260200182805461079c90612ec3565b80156107e95780601f106107be576101008083540402835291602001916107e9565b820191906000526020600020905b8154815290600101906020018083116107cc57829003601f168201915b5050505050905090565b60006107fe8261171a565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108448261116d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ab90612f66565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108d3611765565b73ffffffffffffffffffffffffffffffffffffffff1614806109025750610901816108fc611765565b611599565b5b610941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093890612ff8565b60405180910390fd5b61094b838361176d565b505050565b601360009054906101000a900460ff16156109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790613064565b60405180910390fd5b6109bc8251670de0b6b3a764000061182690919063ffffffff16565b3410156109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f5906130d0565b60405180910390fd5b8151610a0a600861183c565b610a14919061311f565b600e541015610a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4f9061319f565b60405180910390fd5b6000825111610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a939061320b565b60405180910390fd5b61012c42610aaa919061322b565b811015610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae3906132ab565b60405180910390fd5b42600f541115610d0f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340fdf707336040518263ffffffff1660e01b8152600401610b519190612893565b602060405180830381865afa158015610b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9291906132e0565b15610cc457601054600f54610ba7919061322b565b421015610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be09061337f565b60405180910390fd5b81516011541015610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c26906133eb565b60405180910390fd5b8151600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c7b919061311f565b6011541015610cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb6906133eb565b60405180910390fd5b610d0a565b600f54421015610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090613457565b60405180910390fd5b5b610e2b565b600f54421015610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90613457565b60405180910390fd5b81516012541015610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d91906133eb565b60405180910390fd5b8151600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de6919061311f565b6012541015610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906133eb565b60405180910390fd5b5b610e508383600081518110610e4357610e42613477565b5b602002602001015161184a565b42600f541115610eb6576001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610eaa919061311f565b92505081905550610f0e565b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f06919061311f565b925050819055505b610f2c73f99613b4ae868b1ab1219ba4faf933da928ea8ec34611937565b505050565b600c6020528060005260406000206000915090505481565b600f5481565b610f60610f5a611765565b82611a21565b610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613518565b60405180910390fd5b610faa838383611ab6565b505050565b600b6020528060005260406000206000915090505481565b6000601360009054906101000a900460ff16905090565b610ff9838383604051806020016040528060008152506113df565b505050565b611006611d1c565b61100f81611d9a565b61104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104590613584565b60405180910390fd5b6000600a600960008481526020019081526020016000206040516110729190613647565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806020016040528060008152506009600083815260200190815260200160002090816110ed91906137f5565b506110f781611e06565b50565b611102611d1c565b8080519060200120600d604051611119919061396a565b604051809103902003611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906139cd565b60405180910390fd5b61116a81611f23565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c90613a39565b60405180910390fd5b80915050919050565b611226611d1c565b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790613acb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ef611d1c565b6112f96000611f3e565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61132d611d1c565b8060118190555050565b60606001805461134690612ec3565b80601f016020809104026020016040519081016040528092919081815260200182805461137290612ec3565b80156113bf5780601f10611394576101008083540402835291602001916113bf565b820191906000526020600020905b8154815290600101906020018083116113a257829003601f168201915b5050505050905090565b6113db6113d4611765565b8383612004565b5050565b6113f06113ea611765565b83611a21565b61142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690613518565b60405180910390fd5b61143b84848484612170565b50505050565b611449611d1c565b80601360006101000a81548160ff02191690831515021790555050565b606061147182611d9a565b6114b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a790613584565b60405180910390fd5b60006009600084815260200190815260200160002080546114d090612ec3565b80601f01602080910402602001604051908101604052809291908181526020018280546114fc90612ec3565b80156115495780601f1061151e57610100808354040283529160200191611549565b820191906000526020600020905b81548152906001019060200180831161152c57829003601f168201915b50505050509050600061155a6121cc565b9050808260405160200161156f929190613b1c565b60405160208183030381529060405292505050919050565b61158f611d1c565b8060128190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611635611d1c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90613bb2565b60405180910390fd5b6116ad81611f3e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61172381611d9a565b611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990613a39565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117e08361116d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081836118349190613bd2565b905092915050565b600081600001549050919050565b6000611856600861183c565b9050611862600861225e565b60018161186f919061311f565b905061187b8382612274565b611885818361244d565b82600a836040516118969190613c14565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550807fc8e51ba44d56c605bd20ad8cb591cfa3f9982310c747620ce20f77fd612bb39b73f99613b4ae868b1ab1219ba4faf933da928ea8ec858560405161192a93929190613c2b565b60405180910390a2505050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161195d90613c8f565b60006040518083038185875af1925050503d806000811461199a576040519150601f19603f3d011682016040523d82523d6000602084013e61199f565b606091505b50509050806119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90613cf0565b60405180910390fd5b7f1a1feae86fcd4455075841e2909f3f90294aac0febaa42af8e294a5b729fdbaa8383604051611a14929190613d10565b60405180910390a1505050565b600080611a2d8361116d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a6f5750611a6e8185611599565b5b80611aad57508373ffffffffffffffffffffffffffffffffffffffff16611a95846107f3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ad68261116d565b73ffffffffffffffffffffffffffffffffffffffff1614611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2390613dab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290613e3d565b60405180910390fd5b611ba68383836124ba565b611bb160008261176d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c01919061322b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c58919061311f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d178383836124bf565b505050565b611d24611765565b73ffffffffffffffffffffffffffffffffffffffff16611d426112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f90613ea9565b60405180910390fd5b565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000611e118261116d565b9050611e1f816000846124ba565b611e2a60008361176d565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e7a919061322b565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f1f816000846124bf565b5050565b611f2b611d1c565b80600d9081611f3a91906137f5565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990613f15565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121639190612722565b60405180910390a3505050565b61217b848484611ab6565b612187848484846124c4565b6121c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bd90613fa7565b60405180910390fd5b50505050565b6060600d80546121db90612ec3565b80601f016020809104026020016040519081016040528092919081815260200182805461220790612ec3565b80156122545780601f1061222957610100808354040283529160200191612254565b820191906000526020600020905b81548152906001019060200180831161223757829003601f168201915b5050505050905090565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90614013565b60405180910390fd5b6122ec81611d9a565b1561232c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123239061407f565b60405180910390fd5b612338600083836124ba565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612388919061311f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612449600083836124bf565b5050565b61245682611d9a565b612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c906140eb565b60405180910390fd5b806009600084815260200190815260200160002090816124b591906137f5565b505050565b505050565b505050565b60006124e58473ffffffffffffffffffffffffffffffffffffffff1661264b565b1561263e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261250e611765565b8786866040518563ffffffff1660e01b81526004016125309493929190614160565b6020604051808303816000875af192505050801561256c57506040513d601f19601f8201168201806040525081019061256991906141c1565b60015b6125ee573d806000811461259c576040519150601f19603f3d011682016040523d82523d6000602084013e6125a1565b606091505b5060008151036125e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125dd90613fa7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612643565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126b781612682565b81146126c257600080fd5b50565b6000813590506126d4816126ae565b92915050565b6000602082840312156126f0576126ef612678565b5b60006126fe848285016126c5565b91505092915050565b60008115159050919050565b61271c81612707565b82525050565b60006020820190506127376000830184612713565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561277757808201518184015260208101905061275c565b60008484015250505050565b6000601f19601f8301169050919050565b600061279f8261273d565b6127a98185612748565b93506127b9818560208601612759565b6127c281612783565b840191505092915050565b600060208201905081810360008301526127e78184612794565b905092915050565b6000819050919050565b612802816127ef565b811461280d57600080fd5b50565b60008135905061281f816127f9565b92915050565b60006020828403121561283b5761283a612678565b5b600061284984828501612810565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061287d82612852565b9050919050565b61288d81612872565b82525050565b60006020820190506128a86000830184612884565b92915050565b6128b781612872565b81146128c257600080fd5b50565b6000813590506128d4816128ae565b92915050565b600080604083850312156128f1576128f0612678565b5b60006128ff858286016128c5565b925050602061291085828601612810565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61295782612783565b810181811067ffffffffffffffff821117156129765761297561291f565b5b80604052505050565b600061298961266e565b9050612995828261294e565b919050565b600067ffffffffffffffff8211156129b5576129b461291f565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff8211156129eb576129ea61291f565b5b6129f482612783565b9050602081019050919050565b82818337600083830152505050565b6000612a23612a1e846129d0565b61297f565b905082815260208101848484011115612a3f57612a3e6129cb565b5b612a4a848285612a01565b509392505050565b600082601f830112612a6757612a6661291a565b5b8135612a77848260208601612a10565b91505092915050565b6000612a93612a8e8461299a565b61297f565b90508083825260208201905060208402830185811115612ab657612ab56129c6565b5b835b81811015612afd57803567ffffffffffffffff811115612adb57612ada61291a565b5b808601612ae88982612a52565b85526020850194505050602081019050612ab8565b5050509392505050565b600082601f830112612b1c57612b1b61291a565b5b8135612b2c848260208601612a80565b91505092915050565b600080600060608486031215612b4e57612b4d612678565b5b6000612b5c868287016128c5565b935050602084013567ffffffffffffffff811115612b7d57612b7c61267d565b5b612b8986828701612b07565b9250506040612b9a86828701612810565b9150509250925092565b600060208284031215612bba57612bb9612678565b5b6000612bc8848285016128c5565b91505092915050565b612bda816127ef565b82525050565b6000602082019050612bf56000830184612bd1565b92915050565b600080600060608486031215612c1457612c13612678565b5b6000612c22868287016128c5565b9350506020612c33868287016128c5565b9250506040612c4486828701612810565b9150509250925092565b600060208284031215612c6457612c63612678565b5b600082013567ffffffffffffffff811115612c8257612c8161267d565b5b612c8e84828501612a52565b91505092915050565b612ca081612707565b8114612cab57600080fd5b50565b600081359050612cbd81612c97565b92915050565b60008060408385031215612cda57612cd9612678565b5b6000612ce8858286016128c5565b9250506020612cf985828601612cae565b9150509250929050565b600067ffffffffffffffff821115612d1e57612d1d61291f565b5b612d2782612783565b9050602081019050919050565b6000612d47612d4284612d03565b61297f565b905082815260208101848484011115612d6357612d626129cb565b5b612d6e848285612a01565b509392505050565b600082601f830112612d8b57612d8a61291a565b5b8135612d9b848260208601612d34565b91505092915050565b60008060008060808587031215612dbe57612dbd612678565b5b6000612dcc878288016128c5565b9450506020612ddd878288016128c5565b9350506040612dee87828801612810565b925050606085013567ffffffffffffffff811115612e0f57612e0e61267d565b5b612e1b87828801612d76565b91505092959194509250565b600060208284031215612e3d57612e3c612678565b5b6000612e4b84828501612cae565b91505092915050565b60008060408385031215612e6b57612e6a612678565b5b6000612e79858286016128c5565b9250506020612e8a858286016128c5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612edb57607f821691505b602082108103612eee57612eed612e94565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f50602183612748565b9150612f5b82612ef4565b604082019050919050565b60006020820190508181036000830152612f7f81612f43565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000612fe2603e83612748565b9150612fed82612f86565b604082019050919050565b6000602082019050818103600083015261301181612fd5565b9050919050565b7f53616c6573207061757365640000000000000000000000000000000000000000600082015250565b600061304e600c83612748565b915061305982613018565b602082019050919050565b6000602082019050818103600083015261307d81613041565b9050919050565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b60006130ba601183612748565b91506130c582613084565b602082019050919050565b600060208201905081810360008301526130e9816130ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061312a826127ef565b9150613135836127ef565b925082820190508082111561314d5761314c6130f0565b5b92915050565b7f536f6c644f757400000000000000000000000000000000000000000000000000600082015250565b6000613189600783612748565b915061319482613153565b602082019050919050565b600060208201905081810360008301526131b88161317c565b9050919050565b7f4d696e696d756d20636f756e7400000000000000000000000000000000000000600082015250565b60006131f5600d83612748565b9150613200826131bf565b602082019050919050565b60006020820190508181036000830152613224816131e8565b9050919050565b6000613236826127ef565b9150613241836127ef565b9250828203905081811115613259576132586130f0565b5b92915050565b7f4f7574206f662074696d65000000000000000000000000000000000000000000600082015250565b6000613295600b83612748565b91506132a08261325f565b602082019050919050565b600060208201905081810360008301526132c481613288565b9050919050565b6000815190506132da81612c97565b92915050565b6000602082840312156132f6576132f5612678565b5b6000613304848285016132cb565b91505092915050565b7f4d696e74206e6f74206f70656e65642079657420666f722077686974656c697360008201527f7465640000000000000000000000000000000000000000000000000000000000602082015250565b6000613369602383612748565b91506133748261330d565b604082019050919050565b600060208201905081810360008301526133988161335c565b9050919050565b7f4d617820427579204c696d697400000000000000000000000000000000000000600082015250565b60006133d5600d83612748565b91506133e08261339f565b602082019050919050565b60006020820190508181036000830152613404816133c8565b9050919050565b7f4d696e74206e6f74206f70656e65642079657420666f72207075626c69630000600082015250565b6000613441601e83612748565b915061344c8261340b565b602082019050919050565b6000602082019050818103600083015261347081613434565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613502602e83612748565b915061350d826134a6565b604082019050919050565b60006020820190508181036000830152613531816134f5565b9050919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b600061356e601f83612748565b915061357982613538565b602082019050919050565b6000602082019050818103600083015261359d81613561565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546135d181612ec3565b6135db81866135a4565b945060018216600081146135f6576001811461360b5761363e565b60ff198316865281151582028601935061363e565b613614856135af565b60005b8381101561363657815481890152600182019150602081019050613617565b838801955050505b50505092915050565b600061365382846135c4565b915081905092915050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261366e565b6136b5868361366e565b95508019841693508086168417925050509392505050565b6000819050919050565b60006136f26136ed6136e8846127ef565b6136cd565b6127ef565b9050919050565b6000819050919050565b61370c836136d7565b613720613718826136f9565b84845461367b565b825550505050565b600090565b613735613728565b613740818484613703565b505050565b5b818110156137645761375960008261372d565b600181019050613746565b5050565b601f8211156137a95761377a816135af565b6137838461365e565b81016020851015613792578190505b6137a661379e8561365e565b830182613745565b50505b505050565b600082821c905092915050565b60006137cc600019846008026137ae565b1980831691505092915050565b60006137e583836137bb565b9150826002028217905092915050565b6137fe8261273d565b67ffffffffffffffff8111156138175761381661291f565b5b6138218254612ec3565b61382c828285613768565b600060209050601f83116001811461385f576000841561384d578287015190505b61385785826137d9565b8655506138bf565b601f19841661386d866135af565b60005b8281101561389557848901518255600182019150602085019450602081019050613870565b868310156138b257848901516138ae601f8916826137bb565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b60008190508160005260206000209050919050565b600081546138f481612ec3565b6138fe81866138c7565b94506001821660008114613919576001811461392e57613961565b60ff1983168652811515820286019350613961565b613937856138d2565b60005b838110156139595781548189015260018201915060208101905061393a565b838801955050505b50505092915050565b600061397682846138e7565b915081905092915050565b7f436f6c6c656374696f6e20616c72656164792072657665616c65640000000000600082015250565b60006139b7601b83612748565b91506139c282613981565b602082019050919050565b600060208201905081810360008301526139e6816139aa565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613a23601883612748565b9150613a2e826139ed565b602082019050919050565b60006020820190508181036000830152613a5281613a16565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613ab5602983612748565b9150613ac082613a59565b604082019050919050565b60006020820190508181036000830152613ae481613aa8565b9050919050565b6000613af68261273d565b613b0081856135a4565b9350613b10818560208601612759565b80840191505092915050565b6000613b288285613aeb565b9150613b348284613aeb565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b9c602683612748565b9150613ba782613b40565b604082019050919050565b60006020820190508181036000830152613bcb81613b8f565b9050919050565b6000613bdd826127ef565b9150613be8836127ef565b9250828202613bf6816127ef565b91508282048414831517613c0d57613c0c6130f0565b5b5092915050565b6000613c208284613aeb565b915081905092915050565b6000606082019050613c406000830186612884565b613c4d6020830185612884565b8181036040830152613c5f8184612794565b9050949350505050565b50565b6000613c796000836138c7565b9150613c8482613c69565b600082019050919050565b6000613c9a82613c6c565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613cda601083612748565b9150613ce582613ca4565b602082019050919050565b60006020820190508181036000830152613d0981613ccd565b9050919050565b6000604082019050613d256000830185612884565b613d326020830184612bd1565b9392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613d95602583612748565b9150613da082613d39565b604082019050919050565b60006020820190508181036000830152613dc481613d88565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e27602483612748565b9150613e3282613dcb565b604082019050919050565b60006020820190508181036000830152613e5681613e1a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e93602083612748565b9150613e9e82613e5d565b602082019050919050565b60006020820190508181036000830152613ec281613e86565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613eff601983612748565b9150613f0a82613ec9565b602082019050919050565b60006020820190508181036000830152613f2e81613ef2565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613f91603283612748565b9150613f9c82613f35565b604082019050919050565b60006020820190508181036000830152613fc081613f84565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613ffd602083612748565b915061400882613fc7565b602082019050919050565b6000602082019050818103600083015261402c81613ff0565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614069601c83612748565b915061407482614033565b602082019050919050565b600060208201905081810360008301526140988161405c565b9050919050565b7f55524920736574206f66206e6f6e6578697374656e7420746f6b656e00000000600082015250565b60006140d5601c83612748565b91506140e08261409f565b602082019050919050565b60006020820190508181036000830152614104816140c8565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006141328261410b565b61413c8185614116565b935061414c818560208601612759565b61415581612783565b840191505092915050565b60006080820190506141756000830187612884565b6141826020830186612884565b61418f6040830185612bd1565b81810360608301526141a18184614127565b905095945050505050565b6000815190506141bb816126ae565b92915050565b6000602082840312156141d7576141d6612678565b5b60006141e5848285016141ac565b9150509291505056fea2646970667358221220a8239f75f7a54848ada43af6f7813c7abe35769736aa23a7b5ab5bd96d7e115364736f6c634300081100330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000006376bcf0000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f70726f6f666f666d656d65732e6d7970696e6174612e636c6f75642f697066732f0000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061019c5760003560e01c80636352211e116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146105b3578063c9223a28146105f0578063e985e9c514610619578063f2fde38b146106565761019c565b8063a22cb46514610538578063b88d4fde14610561578063bedb86fb1461058a5761019c565b8063715018a6116100c6578063715018a6146104a25780638da5cb5b146104b957806394038506146104e457806395d89b411461050d5761019c565b80636352211e146103ff5780636f8b44b01461043c57806370a08231146104655761019c565b80631bdc608e116101595780633e3ca9d3116101335780633e3ca9d31461035957806342842e0e1461038457806342966c68146103ad57806350179bae146103d65761019c565b80631bdc608e146102c857806323b872dd146102f357806326f23fa91461031c5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b3146102465780630de1b4521461026f5780630f59896c1461028b575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c391906126da565b61067f565b6040516101d59190612722565b60405180910390f35b3480156101ea57600080fd5b506101f3610761565b60405161020091906127cd565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612825565b6107f3565b60405161023d9190612893565b60405180910390f35b34801561025257600080fd5b5061026d600480360381019061026891906128da565b610839565b005b61028960048036038101906102849190612b35565b610950565b005b34801561029757600080fd5b506102b260048036038101906102ad9190612ba4565b610f31565b6040516102bf9190612be0565b60405180910390f35b3480156102d457600080fd5b506102dd610f49565b6040516102ea9190612be0565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190612bfb565b610f4f565b005b34801561032857600080fd5b50610343600480360381019061033e9190612ba4565b610faf565b6040516103509190612be0565b60405180910390f35b34801561036557600080fd5b5061036e610fc7565b60405161037b9190612722565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a69190612bfb565b610fde565b005b3480156103b957600080fd5b506103d460048036038101906103cf9190612825565b610ffe565b005b3480156103e257600080fd5b506103fd60048036038101906103f89190612c4e565b6110fa565b005b34801561040b57600080fd5b5061042660048036038101906104219190612825565b61116d565b6040516104339190612893565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e9190612825565b61121e565b005b34801561047157600080fd5b5061048c60048036038101906104879190612ba4565b611230565b6040516104999190612be0565b60405180910390f35b3480156104ae57600080fd5b506104b76112e7565b005b3480156104c557600080fd5b506104ce6112fb565b6040516104db9190612893565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190612825565b611325565b005b34801561051957600080fd5b50610522611337565b60405161052f91906127cd565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190612cc3565b6113c9565b005b34801561056d57600080fd5b5061058860048036038101906105839190612da4565b6113df565b005b34801561059657600080fd5b506105b160048036038101906105ac9190612e27565b611441565b005b3480156105bf57600080fd5b506105da60048036038101906105d59190612825565b611466565b6040516105e791906127cd565b60405180910390f35b3480156105fc57600080fd5b5061061760048036038101906106129190612825565b611587565b005b34801561062557600080fd5b50610640600480360381019061063b9190612e54565b611599565b60405161064d9190612722565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190612ba4565b61162d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061075a5750610759826116b0565b5b9050919050565b60606000805461077090612ec3565b80601f016020809104026020016040519081016040528092919081815260200182805461079c90612ec3565b80156107e95780601f106107be576101008083540402835291602001916107e9565b820191906000526020600020905b8154815290600101906020018083116107cc57829003601f168201915b5050505050905090565b60006107fe8261171a565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108448261116d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ab90612f66565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108d3611765565b73ffffffffffffffffffffffffffffffffffffffff1614806109025750610901816108fc611765565b611599565b5b610941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093890612ff8565b60405180910390fd5b61094b838361176d565b505050565b601360009054906101000a900460ff16156109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790613064565b60405180910390fd5b6109bc8251670de0b6b3a764000061182690919063ffffffff16565b3410156109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f5906130d0565b60405180910390fd5b8151610a0a600861183c565b610a14919061311f565b600e541015610a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4f9061319f565b60405180910390fd5b6000825111610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a939061320b565b60405180910390fd5b61012c42610aaa919061322b565b811015610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae3906132ab565b60405180910390fd5b42600f541115610d0f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340fdf707336040518263ffffffff1660e01b8152600401610b519190612893565b602060405180830381865afa158015610b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9291906132e0565b15610cc457601054600f54610ba7919061322b565b421015610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be09061337f565b60405180910390fd5b81516011541015610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c26906133eb565b60405180910390fd5b8151600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c7b919061311f565b6011541015610cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb6906133eb565b60405180910390fd5b610d0a565b600f54421015610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090613457565b60405180910390fd5b5b610e2b565b600f54421015610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90613457565b60405180910390fd5b81516012541015610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d91906133eb565b60405180910390fd5b8151600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de6919061311f565b6012541015610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906133eb565b60405180910390fd5b5b610e508383600081518110610e4357610e42613477565b5b602002602001015161184a565b42600f541115610eb6576001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610eaa919061311f565b92505081905550610f0e565b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f06919061311f565b925050819055505b610f2c73f99613b4ae868b1ab1219ba4faf933da928ea8ec34611937565b505050565b600c6020528060005260406000206000915090505481565b600f5481565b610f60610f5a611765565b82611a21565b610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613518565b60405180910390fd5b610faa838383611ab6565b505050565b600b6020528060005260406000206000915090505481565b6000601360009054906101000a900460ff16905090565b610ff9838383604051806020016040528060008152506113df565b505050565b611006611d1c565b61100f81611d9a565b61104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104590613584565b60405180910390fd5b6000600a600960008481526020019081526020016000206040516110729190613647565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806020016040528060008152506009600083815260200190815260200160002090816110ed91906137f5565b506110f781611e06565b50565b611102611d1c565b8080519060200120600d604051611119919061396a565b604051809103902003611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906139cd565b60405180910390fd5b61116a81611f23565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c90613a39565b60405180910390fd5b80915050919050565b611226611d1c565b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790613acb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ef611d1c565b6112f96000611f3e565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61132d611d1c565b8060118190555050565b60606001805461134690612ec3565b80601f016020809104026020016040519081016040528092919081815260200182805461137290612ec3565b80156113bf5780601f10611394576101008083540402835291602001916113bf565b820191906000526020600020905b8154815290600101906020018083116113a257829003601f168201915b5050505050905090565b6113db6113d4611765565b8383612004565b5050565b6113f06113ea611765565b83611a21565b61142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690613518565b60405180910390fd5b61143b84848484612170565b50505050565b611449611d1c565b80601360006101000a81548160ff02191690831515021790555050565b606061147182611d9a565b6114b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a790613584565b60405180910390fd5b60006009600084815260200190815260200160002080546114d090612ec3565b80601f01602080910402602001604051908101604052809291908181526020018280546114fc90612ec3565b80156115495780601f1061151e57610100808354040283529160200191611549565b820191906000526020600020905b81548152906001019060200180831161152c57829003601f168201915b50505050509050600061155a6121cc565b9050808260405160200161156f929190613b1c565b60405160208183030381529060405292505050919050565b61158f611d1c565b8060128190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611635611d1c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90613bb2565b60405180910390fd5b6116ad81611f3e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61172381611d9a565b611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990613a39565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117e08361116d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081836118349190613bd2565b905092915050565b600081600001549050919050565b6000611856600861183c565b9050611862600861225e565b60018161186f919061311f565b905061187b8382612274565b611885818361244d565b82600a836040516118969190613c14565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550807fc8e51ba44d56c605bd20ad8cb591cfa3f9982310c747620ce20f77fd612bb39b73f99613b4ae868b1ab1219ba4faf933da928ea8ec858560405161192a93929190613c2b565b60405180910390a2505050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161195d90613c8f565b60006040518083038185875af1925050503d806000811461199a576040519150601f19603f3d011682016040523d82523d6000602084013e61199f565b606091505b50509050806119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90613cf0565b60405180910390fd5b7f1a1feae86fcd4455075841e2909f3f90294aac0febaa42af8e294a5b729fdbaa8383604051611a14929190613d10565b60405180910390a1505050565b600080611a2d8361116d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a6f5750611a6e8185611599565b5b80611aad57508373ffffffffffffffffffffffffffffffffffffffff16611a95846107f3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ad68261116d565b73ffffffffffffffffffffffffffffffffffffffff1614611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2390613dab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290613e3d565b60405180910390fd5b611ba68383836124ba565b611bb160008261176d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c01919061322b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c58919061311f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d178383836124bf565b505050565b611d24611765565b73ffffffffffffffffffffffffffffffffffffffff16611d426112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f90613ea9565b60405180910390fd5b565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000611e118261116d565b9050611e1f816000846124ba565b611e2a60008361176d565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e7a919061322b565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f1f816000846124bf565b5050565b611f2b611d1c565b80600d9081611f3a91906137f5565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990613f15565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121639190612722565b60405180910390a3505050565b61217b848484611ab6565b612187848484846124c4565b6121c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bd90613fa7565b60405180910390fd5b50505050565b6060600d80546121db90612ec3565b80601f016020809104026020016040519081016040528092919081815260200182805461220790612ec3565b80156122545780601f1061222957610100808354040283529160200191612254565b820191906000526020600020905b81548152906001019060200180831161223757829003601f168201915b5050505050905090565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90614013565b60405180910390fd5b6122ec81611d9a565b1561232c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123239061407f565b60405180910390fd5b612338600083836124ba565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612388919061311f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612449600083836124bf565b5050565b61245682611d9a565b612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c906140eb565b60405180910390fd5b806009600084815260200190815260200160002090816124b591906137f5565b505050565b505050565b505050565b60006124e58473ffffffffffffffffffffffffffffffffffffffff1661264b565b1561263e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261250e611765565b8786866040518563ffffffff1660e01b81526004016125309493929190614160565b6020604051808303816000875af192505050801561256c57506040513d601f19601f8201168201806040525081019061256991906141c1565b60015b6125ee573d806000811461259c576040519150601f19603f3d011682016040523d82523d6000602084013e6125a1565b606091505b5060008151036125e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125dd90613fa7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612643565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126b781612682565b81146126c257600080fd5b50565b6000813590506126d4816126ae565b92915050565b6000602082840312156126f0576126ef612678565b5b60006126fe848285016126c5565b91505092915050565b60008115159050919050565b61271c81612707565b82525050565b60006020820190506127376000830184612713565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561277757808201518184015260208101905061275c565b60008484015250505050565b6000601f19601f8301169050919050565b600061279f8261273d565b6127a98185612748565b93506127b9818560208601612759565b6127c281612783565b840191505092915050565b600060208201905081810360008301526127e78184612794565b905092915050565b6000819050919050565b612802816127ef565b811461280d57600080fd5b50565b60008135905061281f816127f9565b92915050565b60006020828403121561283b5761283a612678565b5b600061284984828501612810565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061287d82612852565b9050919050565b61288d81612872565b82525050565b60006020820190506128a86000830184612884565b92915050565b6128b781612872565b81146128c257600080fd5b50565b6000813590506128d4816128ae565b92915050565b600080604083850312156128f1576128f0612678565b5b60006128ff858286016128c5565b925050602061291085828601612810565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61295782612783565b810181811067ffffffffffffffff821117156129765761297561291f565b5b80604052505050565b600061298961266e565b9050612995828261294e565b919050565b600067ffffffffffffffff8211156129b5576129b461291f565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff8211156129eb576129ea61291f565b5b6129f482612783565b9050602081019050919050565b82818337600083830152505050565b6000612a23612a1e846129d0565b61297f565b905082815260208101848484011115612a3f57612a3e6129cb565b5b612a4a848285612a01565b509392505050565b600082601f830112612a6757612a6661291a565b5b8135612a77848260208601612a10565b91505092915050565b6000612a93612a8e8461299a565b61297f565b90508083825260208201905060208402830185811115612ab657612ab56129c6565b5b835b81811015612afd57803567ffffffffffffffff811115612adb57612ada61291a565b5b808601612ae88982612a52565b85526020850194505050602081019050612ab8565b5050509392505050565b600082601f830112612b1c57612b1b61291a565b5b8135612b2c848260208601612a80565b91505092915050565b600080600060608486031215612b4e57612b4d612678565b5b6000612b5c868287016128c5565b935050602084013567ffffffffffffffff811115612b7d57612b7c61267d565b5b612b8986828701612b07565b9250506040612b9a86828701612810565b9150509250925092565b600060208284031215612bba57612bb9612678565b5b6000612bc8848285016128c5565b91505092915050565b612bda816127ef565b82525050565b6000602082019050612bf56000830184612bd1565b92915050565b600080600060608486031215612c1457612c13612678565b5b6000612c22868287016128c5565b9350506020612c33868287016128c5565b9250506040612c4486828701612810565b9150509250925092565b600060208284031215612c6457612c63612678565b5b600082013567ffffffffffffffff811115612c8257612c8161267d565b5b612c8e84828501612a52565b91505092915050565b612ca081612707565b8114612cab57600080fd5b50565b600081359050612cbd81612c97565b92915050565b60008060408385031215612cda57612cd9612678565b5b6000612ce8858286016128c5565b9250506020612cf985828601612cae565b9150509250929050565b600067ffffffffffffffff821115612d1e57612d1d61291f565b5b612d2782612783565b9050602081019050919050565b6000612d47612d4284612d03565b61297f565b905082815260208101848484011115612d6357612d626129cb565b5b612d6e848285612a01565b509392505050565b600082601f830112612d8b57612d8a61291a565b5b8135612d9b848260208601612d34565b91505092915050565b60008060008060808587031215612dbe57612dbd612678565b5b6000612dcc878288016128c5565b9450506020612ddd878288016128c5565b9350506040612dee87828801612810565b925050606085013567ffffffffffffffff811115612e0f57612e0e61267d565b5b612e1b87828801612d76565b91505092959194509250565b600060208284031215612e3d57612e3c612678565b5b6000612e4b84828501612cae565b91505092915050565b60008060408385031215612e6b57612e6a612678565b5b6000612e79858286016128c5565b9250506020612e8a858286016128c5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612edb57607f821691505b602082108103612eee57612eed612e94565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f50602183612748565b9150612f5b82612ef4565b604082019050919050565b60006020820190508181036000830152612f7f81612f43565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000612fe2603e83612748565b9150612fed82612f86565b604082019050919050565b6000602082019050818103600083015261301181612fd5565b9050919050565b7f53616c6573207061757365640000000000000000000000000000000000000000600082015250565b600061304e600c83612748565b915061305982613018565b602082019050919050565b6000602082019050818103600083015261307d81613041565b9050919050565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b60006130ba601183612748565b91506130c582613084565b602082019050919050565b600060208201905081810360008301526130e9816130ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061312a826127ef565b9150613135836127ef565b925082820190508082111561314d5761314c6130f0565b5b92915050565b7f536f6c644f757400000000000000000000000000000000000000000000000000600082015250565b6000613189600783612748565b915061319482613153565b602082019050919050565b600060208201905081810360008301526131b88161317c565b9050919050565b7f4d696e696d756d20636f756e7400000000000000000000000000000000000000600082015250565b60006131f5600d83612748565b9150613200826131bf565b602082019050919050565b60006020820190508181036000830152613224816131e8565b9050919050565b6000613236826127ef565b9150613241836127ef565b9250828203905081811115613259576132586130f0565b5b92915050565b7f4f7574206f662074696d65000000000000000000000000000000000000000000600082015250565b6000613295600b83612748565b91506132a08261325f565b602082019050919050565b600060208201905081810360008301526132c481613288565b9050919050565b6000815190506132da81612c97565b92915050565b6000602082840312156132f6576132f5612678565b5b6000613304848285016132cb565b91505092915050565b7f4d696e74206e6f74206f70656e65642079657420666f722077686974656c697360008201527f7465640000000000000000000000000000000000000000000000000000000000602082015250565b6000613369602383612748565b91506133748261330d565b604082019050919050565b600060208201905081810360008301526133988161335c565b9050919050565b7f4d617820427579204c696d697400000000000000000000000000000000000000600082015250565b60006133d5600d83612748565b91506133e08261339f565b602082019050919050565b60006020820190508181036000830152613404816133c8565b9050919050565b7f4d696e74206e6f74206f70656e65642079657420666f72207075626c69630000600082015250565b6000613441601e83612748565b915061344c8261340b565b602082019050919050565b6000602082019050818103600083015261347081613434565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613502602e83612748565b915061350d826134a6565b604082019050919050565b60006020820190508181036000830152613531816134f5565b9050919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b600061356e601f83612748565b915061357982613538565b602082019050919050565b6000602082019050818103600083015261359d81613561565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546135d181612ec3565b6135db81866135a4565b945060018216600081146135f6576001811461360b5761363e565b60ff198316865281151582028601935061363e565b613614856135af565b60005b8381101561363657815481890152600182019150602081019050613617565b838801955050505b50505092915050565b600061365382846135c4565b915081905092915050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261366e565b6136b5868361366e565b95508019841693508086168417925050509392505050565b6000819050919050565b60006136f26136ed6136e8846127ef565b6136cd565b6127ef565b9050919050565b6000819050919050565b61370c836136d7565b613720613718826136f9565b84845461367b565b825550505050565b600090565b613735613728565b613740818484613703565b505050565b5b818110156137645761375960008261372d565b600181019050613746565b5050565b601f8211156137a95761377a816135af565b6137838461365e565b81016020851015613792578190505b6137a661379e8561365e565b830182613745565b50505b505050565b600082821c905092915050565b60006137cc600019846008026137ae565b1980831691505092915050565b60006137e583836137bb565b9150826002028217905092915050565b6137fe8261273d565b67ffffffffffffffff8111156138175761381661291f565b5b6138218254612ec3565b61382c828285613768565b600060209050601f83116001811461385f576000841561384d578287015190505b61385785826137d9565b8655506138bf565b601f19841661386d866135af565b60005b8281101561389557848901518255600182019150602085019450602081019050613870565b868310156138b257848901516138ae601f8916826137bb565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b60008190508160005260206000209050919050565b600081546138f481612ec3565b6138fe81866138c7565b94506001821660008114613919576001811461392e57613961565b60ff1983168652811515820286019350613961565b613937856138d2565b60005b838110156139595781548189015260018201915060208101905061393a565b838801955050505b50505092915050565b600061397682846138e7565b915081905092915050565b7f436f6c6c656374696f6e20616c72656164792072657665616c65640000000000600082015250565b60006139b7601b83612748565b91506139c282613981565b602082019050919050565b600060208201905081810360008301526139e6816139aa565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613a23601883612748565b9150613a2e826139ed565b602082019050919050565b60006020820190508181036000830152613a5281613a16565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613ab5602983612748565b9150613ac082613a59565b604082019050919050565b60006020820190508181036000830152613ae481613aa8565b9050919050565b6000613af68261273d565b613b0081856135a4565b9350613b10818560208601612759565b80840191505092915050565b6000613b288285613aeb565b9150613b348284613aeb565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b9c602683612748565b9150613ba782613b40565b604082019050919050565b60006020820190508181036000830152613bcb81613b8f565b9050919050565b6000613bdd826127ef565b9150613be8836127ef565b9250828202613bf6816127ef565b91508282048414831517613c0d57613c0c6130f0565b5b5092915050565b6000613c208284613aeb565b915081905092915050565b6000606082019050613c406000830186612884565b613c4d6020830185612884565b8181036040830152613c5f8184612794565b9050949350505050565b50565b6000613c796000836138c7565b9150613c8482613c69565b600082019050919050565b6000613c9a82613c6c565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613cda601083612748565b9150613ce582613ca4565b602082019050919050565b60006020820190508181036000830152613d0981613ccd565b9050919050565b6000604082019050613d256000830185612884565b613d326020830184612bd1565b9392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613d95602583612748565b9150613da082613d39565b604082019050919050565b60006020820190508181036000830152613dc481613d88565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e27602483612748565b9150613e3282613dcb565b604082019050919050565b60006020820190508181036000830152613e5681613e1a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e93602083612748565b9150613e9e82613e5d565b602082019050919050565b60006020820190508181036000830152613ec281613e86565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613eff601983612748565b9150613f0a82613ec9565b602082019050919050565b60006020820190508181036000830152613f2e81613ef2565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613f91603283612748565b9150613f9c82613f35565b604082019050919050565b60006020820190508181036000830152613fc081613f84565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613ffd602083612748565b915061400882613fc7565b602082019050919050565b6000602082019050818103600083015261402c81613ff0565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614069601c83612748565b915061407482614033565b602082019050919050565b600060208201905081810360008301526140988161405c565b9050919050565b7f55524920736574206f66206e6f6e6578697374656e7420746f6b656e00000000600082015250565b60006140d5601c83612748565b91506140e08261409f565b602082019050919050565b60006020820190508181036000830152614104816140c8565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006141328261410b565b61413c8185614116565b935061414c818560208601612759565b61415581612783565b840191505092915050565b60006080820190506141756000830187612884565b6141826020830186612884565b61418f6040830185612bd1565b81810360608301526141a18184614127565b905095945050505050565b6000815190506141bb816126ae565b92915050565b6000602082840312156141d7576141d6612678565b5b60006141e5848285016141ac565b9150509291505056fea2646970667358221220a8239f75f7a54848ada43af6f7813c7abe35769736aa23a7b5ab5bd96d7e115364736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000006376bcf0000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f70726f6f666f666d656d65732e6d7970696e6174612e636c6f75642f697066732f0000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _baseURIextended (string): https://proofofmemes.mypinata.cloud/ipfs/
Arg [1] : _publicTime (uint256): 1668726000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000000000000000000000000000000000006376bcf0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000029
Arg [3] : 68747470733a2f2f70726f6f666f666d656d65732e6d7970696e6174612e636c
Arg [4] : 6f75642f697066732f0000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44620:5241:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20595:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21522:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23035:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22552:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47757:1482;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45076:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45351:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23735:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45022:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46678:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24142:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46900:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46094:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21233:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46477:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20964:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36826:103;;;;;;;;;;;;;:::i;:::-;;36178:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47493:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21691:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23278:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24398:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46589:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47153:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47633:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23504:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37084:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20595:305;20697:4;20749:25;20734:40;;;:11;:40;;;;:105;;;;20806:33;20791:48;;;:11;:48;;;;20734:105;:158;;;;20856:36;20880:11;20856:23;:36::i;:::-;20734:158;20714:178;;20595:305;;;:::o;21522:100::-;21576:13;21609:5;21602:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21522:100;:::o;23035:171::-;23111:7;23131:23;23146:7;23131:14;:23::i;:::-;23174:15;:24;23190:7;23174:24;;;;;;;;;;;;;;;;;;;;;23167:31;;23035:171;;;:::o;22552:417::-;22633:13;22649:23;22664:7;22649:14;:23::i;:::-;22633:39;;22697:5;22691:11;;:2;:11;;;22683:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22791:5;22775:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22800:37;22817:5;22824:12;:10;:12::i;:::-;22800:16;:37::i;:::-;22775:62;22753:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;22940:21;22949:2;22953:7;22940:8;:21::i;:::-;22622:347;22552:417;;:::o;47757:1482::-;47866:5;;;;;;;;;;;47865:6;47857:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;47920:32;47934:10;:17;45299:7;47920:13;;:32;;;;:::i;:::-;47907:9;:45;;47899:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;48034:10;:17;48006:25;:15;:23;:25::i;:::-;:45;;;;:::i;:::-;47993:9;;:58;;47985:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;48102:1;48082:10;:17;:21;48074:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;48175:3;48157:15;:21;;;;:::i;:::-;48144:9;:34;;48136:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48219:15;48206:10;;:28;48203:779;;;48253:10;;;;;;;;;;;:22;;;48276:10;48253:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48250:455;;;48338:15;;48325:10;;:28;;;;:::i;:::-;48306:15;:47;;48298:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;48441:10;:17;48420;;:38;;48412:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;48553:10;:17;48524:14;:26;48539:10;48524:26;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;48503:17;;:67;;48495:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;48250:455;;;48650:10;;48631:15;:29;;48623:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;48250:455;48203:779;;;48758:10;;48739:15;:29;;48731:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;48842:10;:17;48826:12;;:33;;48818:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;48941:10;:17;48916:10;:22;48927:10;48916:22;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;48900:12;;:58;;48892:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;48203:779;49006:34;49021:3;49026:10;49037:1;49026:13;;;;;;;;:::i;:::-;;;;;;;;49006:14;:34::i;:::-;49078:15;49065:10;;:28;49062:126;;;49133:1;49103:14;:26;49118:10;49103:26;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;49062:126;;;49181:1;49155:10;:22;49166:10;49155:22;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;49062:126;49196:35;45174:42;49221:9;49196:8;:35::i;:::-;47757:1482;;;:::o;45076:43::-;;;;;;;;;;;;;;;;;:::o;45351:25::-;;;;:::o;23735:336::-;23930:41;23949:12;:10;:12::i;:::-;23963:7;23930:18;:41::i;:::-;23922:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;24035:28;24045:4;24051:2;24055:7;24035:9;:28::i;:::-;23735:336;;;:::o;45022:47::-;;;;;;;;;;;;;;;;;:::o;46678:86::-;46727:4;46751:5;;;;;;;;;;;46744:12;;46678:86;:::o;24142:185::-;24280:39;24297:4;24303:2;24307:7;24280:39;;;;;;;;;;;;:16;:39::i;:::-;24142:185;;;:::o;46900:241::-;36064:13;:11;:13::i;:::-;46967:16:::1;46975:7;46967;:16::i;:::-;46959:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47071:1;47030:9;47040:10;:19;47051:7;47040:19;;;;;;;;;;;47030:30;;;;;;:::i;:::-;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;47084:24;;;;;;;;;;;::::0;:10:::1;:19;47095:7;47084:19;;;;;;;;;;;:24;;;;;;:::i;:::-;;47119:14;47125:7;47119:5;:14::i;:::-;46900:241:::0;:::o;46094:244::-;36064:13;:11;:13::i;:::-;46241:16:::1;46225:34;;;;;;46204:15;46188:33;;;;;;:::i;:::-;;;;;;;;:71:::0;46180:111:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46302:28;46313:16;46302:10;:28::i;:::-;46094:244:::0;:::o;21233:222::-;21305:7;21325:13;21341:7;:16;21349:7;21341:16;;;;;;;;;;;;;;;;;;;;;21325:32;;21393:1;21376:19;;:5;:19;;;21368:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;21442:5;21435:12;;;21233:222;;;:::o;46477:100::-;36064:13;:11;:13::i;:::-;46559:10:::1;46547:9;:22;;;;46477:100:::0;:::o;20964:207::-;21036:7;21081:1;21064:19;;:5;:19;;;21056:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21147:9;:16;21157:5;21147:16;;;;;;;;;;;;;;;;21140:23;;20964:207;;;:::o;36826:103::-;36064:13;:11;:13::i;:::-;36891:30:::1;36918:1;36891:18;:30::i;:::-;36826:103::o:0;36178:87::-;36224:7;36251:6;;;;;;;;;;;36244:13;;36178:87;:::o;47493:132::-;36064:13;:11;:13::i;:::-;47599:18:::1;47579:17;:38;;;;47493:132:::0;:::o;21691:104::-;21747:13;21780:7;21773:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21691:104;:::o;23278:155::-;23373:52;23392:12;:10;:12::i;:::-;23406:8;23416;23373:18;:52::i;:::-;23278:155;;:::o;24398:323::-;24572:41;24591:12;:10;:12::i;:::-;24605:7;24572:18;:41::i;:::-;24564:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;24675:38;24689:4;24695:2;24699:7;24708:4;24675:13;:38::i;:::-;24398:323;;;;:::o;46589:81::-;36064:13;:11;:13::i;:::-;46656:6:::1;46648:5;;:14;;;;;;;;;;;;;;;;;;46589:81:::0;:::o;47153:328::-;47226:13;47260:16;47268:7;47260;:16::i;:::-;47252:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47325:23;47351:10;:19;47362:7;47351:19;;;;;;;;;;;47325:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47381:18;47402:10;:8;:10::i;:::-;47381:31;;47456:4;47462:9;47439:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47425:48;;;;47153:328;;;:::o;47633:112::-;36064:13;:11;:13::i;:::-;47724::::1;47709:12;:28;;;;47633:112:::0;:::o;23504:164::-;23601:4;23625:18;:25;23644:5;23625:25;;;;;;;;;;;;;;;:35;23651:8;23625:35;;;;;;;;;;;;;;;;;;;;;;;;;23618:42;;23504:164;;;;:::o;37084:201::-;36064:13;:11;:13::i;:::-;37193:1:::1;37173:22;;:8;:22;;::::0;37165:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37249:28;37268:8;37249:18;:28::i;:::-;37084:201:::0;:::o;19202:157::-;19287:4;19326:25;19311:40;;;:11;:40;;;;19304:47;;19202:157;;;:::o;31010:135::-;31092:16;31100:7;31092;:16::i;:::-;31084:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;31010:135;:::o;15947:98::-;16000:7;16027:10;16020:17;;15947:98;:::o;30289:174::-;30391:2;30364:15;:24;30380:7;30364:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30447:7;30443:2;30409:46;;30418:23;30433:7;30418:14;:23::i;:::-;30409:46;;;;;;;;;;;;30289:174;;:::o;41091:98::-;41149:7;41180:1;41176;:5;;;;:::i;:::-;41169:12;;41091:98;;;;:::o;34508:114::-;34573:7;34600;:14;;;34593:21;;34508:114;;;:::o;49247:396::-;49328:16;49347:25;:15;:23;:25::i;:::-;49328:44;;49393:27;:15;:25;:27::i;:::-;49453:1;49442:8;:12;;;;:::i;:::-;49431:23;;49465:20;49471:3;49476:8;49465:5;:20::i;:::-;49496:33;49509:8;49519:9;49496:12;:33::i;:::-;49563:3;49540:9;49550;49540:20;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;49594:8;49584:51;45174:42;49620:3;49625:9;49584:51;;;;;;;;:::i;:::-;;;;;;;;49317:326;49247:396;;:::o;49651:207::-;49716:12;49734:2;:7;;49749:5;49734:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49715:44;;;49778:7;49770:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;49822:28;49840:2;49844:5;49822:28;;;;;;;:::i;:::-;;;;;;;;49704:154;49651:207;;:::o;26522:264::-;26615:4;26632:13;26648:23;26663:7;26648:14;:23::i;:::-;26632:39;;26701:5;26690:16;;:7;:16;;;:52;;;;26710:32;26727:5;26734:7;26710:16;:32::i;:::-;26690:52;:87;;;;26770:7;26746:31;;:20;26758:7;26746:11;:20::i;:::-;:31;;;26690:87;26682:96;;;26522:264;;;;:::o;29545:625::-;29704:4;29677:31;;:23;29692:7;29677:14;:23::i;:::-;:31;;;29669:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29783:1;29769:16;;:2;:16;;;29761:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29839:39;29860:4;29866:2;29870:7;29839:20;:39::i;:::-;29943:29;29960:1;29964:7;29943:8;:29::i;:::-;30004:1;29985:9;:15;29995:4;29985:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30033:1;30016:9;:13;30026:2;30016:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30064:2;30045:7;:16;30053:7;30045:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30103:7;30099:2;30084:27;;30093:4;30084:27;;;;;;;;;;;;30124:38;30144:4;30150:2;30154:7;30124:19;:38::i;:::-;29545:625;;;:::o;36343:132::-;36418:12;:10;:12::i;:::-;36407:23;;:7;:5;:7::i;:::-;:23;;;36399:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36343:132::o;26228:127::-;26293:4;26345:1;26317:30;;:7;:16;26325:7;26317:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26310:37;;26228:127;;;:::o;28788:420::-;28848:13;28864:23;28879:7;28864:14;:23::i;:::-;28848:39;;28900:48;28921:5;28936:1;28940:7;28900:20;:48::i;:::-;28989:29;29006:1;29010:7;28989:8;:29::i;:::-;29051:1;29031:9;:16;29041:5;29031:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;29070:7;:16;29078:7;29070:16;;;;;;;;;;;;29063:23;;;;;;;;;;;29132:7;29128:1;29104:36;;29113:5;29104:36;;;;;;;;;;;;29153:47;29173:5;29188:1;29192:7;29153:19;:47::i;:::-;28837:371;28788:420;:::o;46346:123::-;36064:13;:11;:13::i;:::-;46445:16:::1;46427:15;:34;;;;;;:::i;:::-;;46346:123:::0;:::o;37445:191::-;37519:16;37538:6;;;;;;;;;;;37519:25;;37564:8;37555:6;;:17;;;;;;;;;;;;;;;;;;37619:8;37588:40;;37609:8;37588:40;;;;;;;;;;;;37508:128;37445:191;:::o;30606:315::-;30761:8;30752:17;;:5;:17;;;30744:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;30848:8;30810:18;:25;30829:5;30810:25;;;;;;;;;;;;;;;:35;30836:8;30810:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30894:8;30872:41;;30887:5;30872:41;;;30904:8;30872:41;;;;;;:::i;:::-;;;;;;;;30606:315;;;:::o;25602:313::-;25758:28;25768:4;25774:2;25778:7;25758:9;:28::i;:::-;25805:47;25828:4;25834:2;25838:7;25847:4;25805:22;:47::i;:::-;25797:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25602:313;;;;:::o;46776:116::-;46836:13;46869:15;46862:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46776:116;:::o;34630:127::-;34737:1;34719:7;:14;;;:19;;;;;;;;;;;34630:127;:::o;28120:439::-;28214:1;28200:16;;:2;:16;;;28192:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28273:16;28281:7;28273;:16::i;:::-;28272:17;28264:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28335:45;28364:1;28368:2;28372:7;28335:20;:45::i;:::-;28410:1;28393:9;:13;28403:2;28393:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28441:2;28422:7;:16;28430:7;28422:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28486:7;28482:2;28461:33;;28478:1;28461:33;;;;;;;;;;;;28507:44;28535:1;28539:2;28543:7;28507:19;:44::i;:::-;28120:439;;:::o;45883:199::-;45983:16;45991:7;45983;:16::i;:::-;45975:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46065:9;46043:10;:19;46054:7;46043:19;;;;;;;;;;;:31;;;;;;:::i;:::-;;45883:199;;:::o;33134:126::-;;;;:::o;33645:125::-;;;;:::o;31709:853::-;31863:4;31884:15;:2;:13;;;:15::i;:::-;31880:675;;;31936:2;31920:36;;;31957:12;:10;:12::i;:::-;31971:4;31977:7;31986:4;31920:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31916:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32178:1;32161:6;:13;:18;32157:328;;32204:60;;;;;;;;;;:::i;:::-;;;;;;;;32157:328;32435:6;32429:13;32420:6;32416:2;32412:15;32405:38;31916:584;32052:41;;;32042:51;;;:6;:51;;;;32035:58;;;;;31880:675;32539:4;32532:11;;31709:853;;;;;;;:::o;8087:326::-;8147:4;8404:1;8382:7;:19;;;:23;8375:30;;8087:326;;;:::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:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:180;5061:77;5058:1;5051:88;5158:4;5155:1;5148:15;5182:4;5179:1;5172:15;5199:281;5282:27;5304:4;5282:27;:::i;:::-;5274:6;5270:40;5412:6;5400:10;5397:22;5376:18;5364:10;5361:34;5358:62;5355:88;;;5423:18;;:::i;:::-;5355:88;5463:10;5459:2;5452:22;5242:238;5199:281;;:::o;5486:129::-;5520:6;5547:20;;:::i;:::-;5537:30;;5576:33;5604:4;5596:6;5576:33;:::i;:::-;5486:129;;;:::o;5621:321::-;5708:4;5798:18;5790:6;5787:30;5784:56;;;5820:18;;:::i;:::-;5784:56;5870:4;5862:6;5858:17;5850:25;;5930:4;5924;5920:15;5912:23;;5621:321;;;:::o;5948:117::-;6057:1;6054;6047:12;6071:117;6180:1;6177;6170:12;6194:308;6256:4;6346:18;6338:6;6335:30;6332:56;;;6368:18;;:::i;:::-;6332:56;6406:29;6428:6;6406:29;:::i;:::-;6398:37;;6490:4;6484;6480:15;6472:23;;6194:308;;;:::o;6508:146::-;6605:6;6600:3;6595;6582:30;6646:1;6637:6;6632:3;6628:16;6621:27;6508:146;;;:::o;6660:425::-;6738:5;6763:66;6779:49;6821:6;6779:49;:::i;:::-;6763:66;:::i;:::-;6754:75;;6852:6;6845:5;6838:21;6890:4;6883:5;6879:16;6928:3;6919:6;6914:3;6910:16;6907:25;6904:112;;;6935:79;;:::i;:::-;6904:112;7025:54;7072:6;7067:3;7062;7025:54;:::i;:::-;6744:341;6660:425;;;;;:::o;7105:340::-;7161:5;7210:3;7203:4;7195:6;7191:17;7187:27;7177:122;;7218:79;;:::i;:::-;7177:122;7335:6;7322:20;7360:79;7435:3;7427:6;7420:4;7412:6;7408:17;7360:79;:::i;:::-;7351:88;;7167:278;7105:340;;;;:::o;7467:945::-;7573:5;7598:91;7614:74;7681:6;7614:74;:::i;:::-;7598:91;:::i;:::-;7589:100;;7709:5;7738:6;7731:5;7724:21;7772:4;7765:5;7761:16;7754:23;;7825:4;7817:6;7813:17;7805:6;7801:30;7854:3;7846:6;7843:15;7840:122;;;7873:79;;:::i;:::-;7840:122;7988:6;7971:435;8005:6;8000:3;7997:15;7971:435;;;8094:3;8081:17;8130:18;8117:11;8114:35;8111:122;;;8152:79;;:::i;:::-;8111:122;8276:11;8268:6;8264:24;8314:47;8357:3;8345:10;8314:47;:::i;:::-;8309:3;8302:60;8391:4;8386:3;8382:14;8375:21;;8047:359;;8031:4;8026:3;8022:14;8015:21;;7971:435;;;7975:21;7579:833;;7467:945;;;;;:::o;8434:390::-;8515:5;8564:3;8557:4;8549:6;8545:17;8541:27;8531:122;;8572:79;;:::i;:::-;8531:122;8689:6;8676:20;8714:104;8814:3;8806:6;8799:4;8791:6;8787:17;8714:104;:::i;:::-;8705:113;;8521:303;8434:390;;;;:::o;8830:849::-;8942:6;8950;8958;9007:2;8995:9;8986:7;8982:23;8978:32;8975:119;;;9013:79;;:::i;:::-;8975:119;9133:1;9158:53;9203:7;9194:6;9183:9;9179:22;9158:53;:::i;:::-;9148:63;;9104:117;9288:2;9277:9;9273:18;9260:32;9319:18;9311:6;9308:30;9305:117;;;9341:79;;:::i;:::-;9305:117;9446:88;9526:7;9517:6;9506:9;9502:22;9446:88;:::i;:::-;9436:98;;9231:313;9583:2;9609:53;9654:7;9645:6;9634:9;9630:22;9609:53;:::i;:::-;9599:63;;9554:118;8830:849;;;;;:::o;9685:329::-;9744:6;9793:2;9781:9;9772:7;9768:23;9764:32;9761:119;;;9799:79;;:::i;:::-;9761:119;9919:1;9944:53;9989:7;9980:6;9969:9;9965:22;9944:53;:::i;:::-;9934:63;;9890:117;9685:329;;;;:::o;10020:118::-;10107:24;10125:5;10107:24;:::i;:::-;10102:3;10095:37;10020:118;;:::o;10144:222::-;10237:4;10275:2;10264:9;10260:18;10252:26;;10288:71;10356:1;10345:9;10341:17;10332:6;10288:71;:::i;:::-;10144:222;;;;:::o;10372:619::-;10449:6;10457;10465;10514:2;10502:9;10493:7;10489:23;10485:32;10482:119;;;10520:79;;:::i;:::-;10482:119;10640:1;10665:53;10710:7;10701:6;10690:9;10686:22;10665:53;:::i;:::-;10655:63;;10611:117;10767:2;10793:53;10838:7;10829:6;10818:9;10814:22;10793:53;:::i;:::-;10783:63;;10738:118;10895:2;10921:53;10966:7;10957:6;10946:9;10942:22;10921:53;:::i;:::-;10911:63;;10866:118;10372:619;;;;;:::o;10997:509::-;11066:6;11115:2;11103:9;11094:7;11090:23;11086:32;11083:119;;;11121:79;;:::i;:::-;11083:119;11269:1;11258:9;11254:17;11241:31;11299:18;11291:6;11288:30;11285:117;;;11321:79;;:::i;:::-;11285:117;11426:63;11481:7;11472:6;11461:9;11457:22;11426:63;:::i;:::-;11416:73;;11212:287;10997:509;;;;:::o;11512:116::-;11582:21;11597:5;11582:21;:::i;:::-;11575:5;11572:32;11562:60;;11618:1;11615;11608:12;11562:60;11512:116;:::o;11634:133::-;11677:5;11715:6;11702:20;11693:29;;11731:30;11755:5;11731:30;:::i;:::-;11634:133;;;;:::o;11773:468::-;11838:6;11846;11895:2;11883:9;11874:7;11870:23;11866:32;11863:119;;;11901:79;;:::i;:::-;11863:119;12021:1;12046:53;12091:7;12082:6;12071:9;12067:22;12046:53;:::i;:::-;12036:63;;11992:117;12148:2;12174:50;12216:7;12207:6;12196:9;12192:22;12174:50;:::i;:::-;12164:60;;12119:115;11773:468;;;;;:::o;12247:307::-;12308:4;12398:18;12390:6;12387:30;12384:56;;;12420:18;;:::i;:::-;12384:56;12458:29;12480:6;12458:29;:::i;:::-;12450:37;;12542:4;12536;12532:15;12524:23;;12247:307;;;:::o;12560:423::-;12637:5;12662:65;12678:48;12719:6;12678:48;:::i;:::-;12662:65;:::i;:::-;12653:74;;12750:6;12743:5;12736:21;12788:4;12781:5;12777:16;12826:3;12817:6;12812:3;12808:16;12805:25;12802:112;;;12833:79;;:::i;:::-;12802:112;12923:54;12970:6;12965:3;12960;12923:54;:::i;:::-;12643:340;12560:423;;;;;:::o;13002:338::-;13057:5;13106:3;13099:4;13091:6;13087:17;13083:27;13073:122;;13114:79;;:::i;:::-;13073:122;13231:6;13218:20;13256:78;13330:3;13322:6;13315:4;13307:6;13303:17;13256:78;:::i;:::-;13247:87;;13063:277;13002:338;;;;:::o;13346:943::-;13441:6;13449;13457;13465;13514:3;13502:9;13493:7;13489:23;13485:33;13482:120;;;13521:79;;:::i;:::-;13482:120;13641:1;13666:53;13711:7;13702:6;13691:9;13687:22;13666:53;:::i;:::-;13656:63;;13612:117;13768:2;13794:53;13839:7;13830:6;13819:9;13815:22;13794:53;:::i;:::-;13784:63;;13739:118;13896:2;13922:53;13967:7;13958:6;13947:9;13943:22;13922:53;:::i;:::-;13912:63;;13867:118;14052:2;14041:9;14037:18;14024:32;14083:18;14075:6;14072:30;14069:117;;;14105:79;;:::i;:::-;14069:117;14210:62;14264:7;14255:6;14244:9;14240:22;14210:62;:::i;:::-;14200:72;;13995:287;13346:943;;;;;;;:::o;14295:323::-;14351:6;14400:2;14388:9;14379:7;14375:23;14371:32;14368:119;;;14406:79;;:::i;:::-;14368:119;14526:1;14551:50;14593:7;14584:6;14573:9;14569:22;14551:50;:::i;:::-;14541:60;;14497:114;14295:323;;;;:::o;14624:474::-;14692:6;14700;14749:2;14737:9;14728:7;14724:23;14720:32;14717:119;;;14755:79;;:::i;:::-;14717:119;14875:1;14900:53;14945:7;14936:6;14925:9;14921:22;14900:53;:::i;:::-;14890:63;;14846:117;15002:2;15028:53;15073:7;15064:6;15053:9;15049:22;15028:53;:::i;:::-;15018:63;;14973:118;14624:474;;;;;:::o;15104:180::-;15152:77;15149:1;15142:88;15249:4;15246:1;15239:15;15273:4;15270:1;15263:15;15290:320;15334:6;15371:1;15365:4;15361:12;15351:22;;15418:1;15412:4;15408:12;15439:18;15429:81;;15495:4;15487:6;15483:17;15473:27;;15429:81;15557:2;15549:6;15546:14;15526:18;15523:38;15520:84;;15576:18;;:::i;:::-;15520:84;15341:269;15290:320;;;:::o;15616:220::-;15756:34;15752:1;15744:6;15740:14;15733:58;15825:3;15820:2;15812:6;15808:15;15801:28;15616:220;:::o;15842:366::-;15984:3;16005:67;16069:2;16064:3;16005:67;:::i;:::-;15998:74;;16081:93;16170:3;16081:93;:::i;:::-;16199:2;16194:3;16190:12;16183:19;;15842:366;;;:::o;16214:419::-;16380:4;16418:2;16407:9;16403:18;16395:26;;16467:9;16461:4;16457:20;16453:1;16442:9;16438:17;16431:47;16495:131;16621:4;16495:131;:::i;:::-;16487:139;;16214:419;;;:::o;16639:249::-;16779:34;16775:1;16767:6;16763:14;16756:58;16848:32;16843:2;16835:6;16831:15;16824:57;16639:249;:::o;16894:366::-;17036:3;17057:67;17121:2;17116:3;17057:67;:::i;:::-;17050:74;;17133:93;17222:3;17133:93;:::i;:::-;17251:2;17246:3;17242:12;17235:19;;16894:366;;;:::o;17266:419::-;17432:4;17470:2;17459:9;17455:18;17447:26;;17519:9;17513:4;17509:20;17505:1;17494:9;17490:17;17483:47;17547:131;17673:4;17547:131;:::i;:::-;17539:139;;17266:419;;;:::o;17691:162::-;17831:14;17827:1;17819:6;17815:14;17808:38;17691:162;:::o;17859:366::-;18001:3;18022:67;18086:2;18081:3;18022:67;:::i;:::-;18015:74;;18098:93;18187:3;18098:93;:::i;:::-;18216:2;18211:3;18207:12;18200:19;;17859:366;;;:::o;18231:419::-;18397:4;18435:2;18424:9;18420:18;18412:26;;18484:9;18478:4;18474:20;18470:1;18459:9;18455:17;18448:47;18512:131;18638:4;18512:131;:::i;:::-;18504:139;;18231:419;;;:::o;18656:167::-;18796:19;18792:1;18784:6;18780:14;18773:43;18656:167;:::o;18829:366::-;18971:3;18992:67;19056:2;19051:3;18992:67;:::i;:::-;18985:74;;19068:93;19157:3;19068:93;:::i;:::-;19186:2;19181:3;19177:12;19170:19;;18829:366;;;:::o;19201:419::-;19367:4;19405:2;19394:9;19390:18;19382:26;;19454:9;19448:4;19444:20;19440:1;19429:9;19425:17;19418:47;19482:131;19608:4;19482:131;:::i;:::-;19474:139;;19201:419;;;:::o;19626:180::-;19674:77;19671:1;19664:88;19771:4;19768:1;19761:15;19795:4;19792:1;19785:15;19812:191;19852:3;19871:20;19889:1;19871:20;:::i;:::-;19866:25;;19905:20;19923:1;19905:20;:::i;:::-;19900:25;;19948:1;19945;19941:9;19934:16;;19969:3;19966:1;19963:10;19960:36;;;19976:18;;:::i;:::-;19960:36;19812:191;;;;:::o;20009:157::-;20149:9;20145:1;20137:6;20133:14;20126:33;20009:157;:::o;20172:365::-;20314:3;20335:66;20399:1;20394:3;20335:66;:::i;:::-;20328:73;;20410:93;20499:3;20410:93;:::i;:::-;20528:2;20523:3;20519:12;20512:19;;20172:365;;;:::o;20543:419::-;20709:4;20747:2;20736:9;20732:18;20724:26;;20796:9;20790:4;20786:20;20782:1;20771:9;20767:17;20760:47;20824:131;20950:4;20824:131;:::i;:::-;20816:139;;20543:419;;;:::o;20968:163::-;21108:15;21104:1;21096:6;21092:14;21085:39;20968:163;:::o;21137:366::-;21279:3;21300:67;21364:2;21359:3;21300:67;:::i;:::-;21293:74;;21376:93;21465:3;21376:93;:::i;:::-;21494:2;21489:3;21485:12;21478:19;;21137:366;;;:::o;21509:419::-;21675:4;21713:2;21702:9;21698:18;21690:26;;21762:9;21756:4;21752:20;21748:1;21737:9;21733:17;21726:47;21790:131;21916:4;21790:131;:::i;:::-;21782:139;;21509:419;;;:::o;21934:194::-;21974:4;21994:20;22012:1;21994:20;:::i;:::-;21989:25;;22028:20;22046:1;22028:20;:::i;:::-;22023:25;;22072:1;22069;22065:9;22057:17;;22096:1;22090:4;22087:11;22084:37;;;22101:18;;:::i;:::-;22084:37;21934:194;;;;:::o;22134:161::-;22274:13;22270:1;22262:6;22258:14;22251:37;22134:161;:::o;22301:366::-;22443:3;22464:67;22528:2;22523:3;22464:67;:::i;:::-;22457:74;;22540:93;22629:3;22540:93;:::i;:::-;22658:2;22653:3;22649:12;22642:19;;22301:366;;;:::o;22673:419::-;22839:4;22877:2;22866:9;22862:18;22854:26;;22926:9;22920:4;22916:20;22912:1;22901:9;22897:17;22890:47;22954:131;23080:4;22954:131;:::i;:::-;22946:139;;22673:419;;;:::o;23098:137::-;23152:5;23183:6;23177:13;23168:22;;23199:30;23223:5;23199:30;:::i;:::-;23098:137;;;;:::o;23241:345::-;23308:6;23357:2;23345:9;23336:7;23332:23;23328:32;23325:119;;;23363:79;;:::i;:::-;23325:119;23483:1;23508:61;23561:7;23552:6;23541:9;23537:22;23508:61;:::i;:::-;23498:71;;23454:125;23241:345;;;;:::o;23592:222::-;23732:34;23728:1;23720:6;23716:14;23709:58;23801:5;23796:2;23788:6;23784:15;23777:30;23592:222;:::o;23820:366::-;23962:3;23983:67;24047:2;24042:3;23983:67;:::i;:::-;23976:74;;24059:93;24148:3;24059:93;:::i;:::-;24177:2;24172:3;24168:12;24161:19;;23820:366;;;:::o;24192:419::-;24358:4;24396:2;24385:9;24381:18;24373:26;;24445:9;24439:4;24435:20;24431:1;24420:9;24416:17;24409:47;24473:131;24599:4;24473:131;:::i;:::-;24465:139;;24192:419;;;:::o;24617:163::-;24757:15;24753:1;24745:6;24741:14;24734:39;24617:163;:::o;24786:366::-;24928:3;24949:67;25013:2;25008:3;24949:67;:::i;:::-;24942:74;;25025:93;25114:3;25025:93;:::i;:::-;25143:2;25138:3;25134:12;25127:19;;24786:366;;;:::o;25158:419::-;25324:4;25362:2;25351:9;25347:18;25339:26;;25411:9;25405:4;25401:20;25397:1;25386:9;25382:17;25375:47;25439:131;25565:4;25439:131;:::i;:::-;25431:139;;25158:419;;;:::o;25583:180::-;25723:32;25719:1;25711:6;25707:14;25700:56;25583:180;:::o;25769:366::-;25911:3;25932:67;25996:2;25991:3;25932:67;:::i;:::-;25925:74;;26008:93;26097:3;26008:93;:::i;:::-;26126:2;26121:3;26117:12;26110:19;;25769:366;;;:::o;26141:419::-;26307:4;26345:2;26334:9;26330:18;26322:26;;26394:9;26388:4;26384:20;26380:1;26369:9;26365:17;26358:47;26422:131;26548:4;26422:131;:::i;:::-;26414:139;;26141:419;;;:::o;26566:180::-;26614:77;26611:1;26604:88;26711:4;26708:1;26701:15;26735:4;26732:1;26725:15;26752:233;26892:34;26888:1;26880:6;26876:14;26869:58;26961:16;26956:2;26948:6;26944:15;26937:41;26752:233;:::o;26991:366::-;27133:3;27154:67;27218:2;27213:3;27154:67;:::i;:::-;27147:74;;27230:93;27319:3;27230:93;:::i;:::-;27348:2;27343:3;27339:12;27332:19;;26991:366;;;:::o;27363:419::-;27529:4;27567:2;27556:9;27552:18;27544:26;;27616:9;27610:4;27606:20;27602:1;27591:9;27587:17;27580:47;27644:131;27770:4;27644:131;:::i;:::-;27636:139;;27363:419;;;:::o;27788:181::-;27928:33;27924:1;27916:6;27912:14;27905:57;27788:181;:::o;27975:366::-;28117:3;28138:67;28202:2;28197:3;28138:67;:::i;:::-;28131:74;;28214:93;28303:3;28214:93;:::i;:::-;28332:2;28327:3;28323:12;28316:19;;27975:366;;;:::o;28347:419::-;28513:4;28551:2;28540:9;28536:18;28528:26;;28600:9;28594:4;28590:20;28586:1;28575:9;28571:17;28564:47;28628:131;28754:4;28628:131;:::i;:::-;28620:139;;28347:419;;;:::o;28772:148::-;28874:11;28911:3;28896:18;;28772:148;;;;:::o;28926:141::-;28975:4;28998:3;28990:11;;29021:3;29018:1;29011:14;29055:4;29052:1;29042:18;29034:26;;28926:141;;;:::o;29097:874::-;29200:3;29237:5;29231:12;29266:36;29292:9;29266:36;:::i;:::-;29318:89;29400:6;29395:3;29318:89;:::i;:::-;29311:96;;29438:1;29427:9;29423:17;29454:1;29449:166;;;;29629:1;29624:341;;;;29416:549;;29449:166;29533:4;29529:9;29518;29514:25;29509:3;29502:38;29595:6;29588:14;29581:22;29573:6;29569:35;29564:3;29560:45;29553:52;;29449:166;;29624:341;29691:38;29723:5;29691:38;:::i;:::-;29751:1;29765:154;29779:6;29776:1;29773:13;29765:154;;;29853:7;29847:14;29843:1;29838:3;29834:11;29827:35;29903:1;29894:7;29890:15;29879:26;;29801:4;29798:1;29794:12;29789:17;;29765:154;;;29948:6;29943:3;29939:16;29932:23;;29631:334;;29416:549;;29204:767;;29097:874;;;;:::o;29977:269::-;30106:3;30128:92;30216:3;30207:6;30128:92;:::i;:::-;30121:99;;30237:3;30230:10;;29977:269;;;;:::o;30252:93::-;30289:6;30336:2;30331;30324:5;30320:14;30316:23;30306:33;;30252:93;;;:::o;30351:107::-;30395:8;30445:5;30439:4;30435:16;30414:37;;30351:107;;;;:::o;30464:393::-;30533:6;30583:1;30571:10;30567:18;30606:97;30636:66;30625:9;30606:97;:::i;:::-;30724:39;30754:8;30743:9;30724:39;:::i;:::-;30712:51;;30796:4;30792:9;30785:5;30781:21;30772:30;;30845:4;30835:8;30831:19;30824:5;30821:30;30811:40;;30540:317;;30464:393;;;;;:::o;30863:60::-;30891:3;30912:5;30905:12;;30863:60;;;:::o;30929:142::-;30979:9;31012:53;31030:34;31039:24;31057:5;31039:24;:::i;:::-;31030:34;:::i;:::-;31012:53;:::i;:::-;30999:66;;30929:142;;;:::o;31077:75::-;31120:3;31141:5;31134:12;;31077:75;;;:::o;31158:269::-;31268:39;31299:7;31268:39;:::i;:::-;31329:91;31378:41;31402:16;31378:41;:::i;:::-;31370:6;31363:4;31357:11;31329:91;:::i;:::-;31323:4;31316:105;31234:193;31158:269;;;:::o;31433:73::-;31478:3;31433:73;:::o;31512:189::-;31589:32;;:::i;:::-;31630:65;31688:6;31680;31674:4;31630:65;:::i;:::-;31565:136;31512:189;;:::o;31707:186::-;31767:120;31784:3;31777:5;31774:14;31767:120;;;31838:39;31875:1;31868:5;31838:39;:::i;:::-;31811:1;31804:5;31800:13;31791:22;;31767:120;;;31707:186;;:::o;31899:543::-;32000:2;31995:3;31992:11;31989:446;;;32034:38;32066:5;32034:38;:::i;:::-;32118:29;32136:10;32118:29;:::i;:::-;32108:8;32104:44;32301:2;32289:10;32286:18;32283:49;;;32322:8;32307:23;;32283:49;32345:80;32401:22;32419:3;32401:22;:::i;:::-;32391:8;32387:37;32374:11;32345:80;:::i;:::-;32004:431;;31989:446;31899:543;;;:::o;32448:117::-;32502:8;32552:5;32546:4;32542:16;32521:37;;32448:117;;;;:::o;32571:169::-;32615:6;32648:51;32696:1;32692:6;32684:5;32681:1;32677:13;32648:51;:::i;:::-;32644:56;32729:4;32723;32719:15;32709:25;;32622:118;32571:169;;;;:::o;32745:295::-;32821:4;32967:29;32992:3;32986:4;32967:29;:::i;:::-;32959:37;;33029:3;33026:1;33022:11;33016:4;33013:21;33005:29;;32745:295;;;;:::o;33045:1395::-;33162:37;33195:3;33162:37;:::i;:::-;33264:18;33256:6;33253:30;33250:56;;;33286:18;;:::i;:::-;33250:56;33330:38;33362:4;33356:11;33330:38;:::i;:::-;33415:67;33475:6;33467;33461:4;33415:67;:::i;:::-;33509:1;33533:4;33520:17;;33565:2;33557:6;33554:14;33582:1;33577:618;;;;34239:1;34256:6;34253:77;;;34305:9;34300:3;34296:19;34290:26;34281:35;;34253:77;34356:67;34416:6;34409:5;34356:67;:::i;:::-;34350:4;34343:81;34212:222;33547:887;;33577:618;33629:4;33625:9;33617:6;33613:22;33663:37;33695:4;33663:37;:::i;:::-;33722:1;33736:208;33750:7;33747:1;33744:14;33736:208;;;33829:9;33824:3;33820:19;33814:26;33806:6;33799:42;33880:1;33872:6;33868:14;33858:24;;33927:2;33916:9;33912:18;33899:31;;33773:4;33770:1;33766:12;33761:17;;33736:208;;;33972:6;33963:7;33960:19;33957:179;;;34030:9;34025:3;34021:19;34015:26;34073:48;34115:4;34107:6;34103:17;34092:9;34073:48;:::i;:::-;34065:6;34058:64;33980:156;33957:179;34182:1;34178;34170:6;34166:14;34162:22;34156:4;34149:36;33584:611;;;33547:887;;33137:1303;;;33045:1395;;:::o;34446:147::-;34547:11;34584:3;34569:18;;34446:147;;;;:::o;34599:144::-;34651:4;34674:3;34666:11;;34697:3;34694:1;34687:14;34731:4;34728:1;34718:18;34710:26;;34599:144;;;:::o;34771:878::-;34876:3;34913:5;34907:12;34942:36;34968:9;34942:36;:::i;:::-;34994:88;35075:6;35070:3;34994:88;:::i;:::-;34987:95;;35113:1;35102:9;35098:17;35129:1;35124:166;;;;35304:1;35299:344;;;;35091:552;;35124:166;35208:4;35204:9;35193;35189:25;35184:3;35177:38;35270:6;35263:14;35256:22;35248:6;35244:35;35239:3;35235:45;35228:52;;35124:166;;35299:344;35366:41;35401:5;35366:41;:::i;:::-;35429:1;35443:154;35457:6;35454:1;35451:13;35443:154;;;35531:7;35525:14;35521:1;35516:3;35512:11;35505:35;35581:1;35572:7;35568:15;35557:26;;35479:4;35476:1;35472:12;35467:17;;35443:154;;;35626:6;35621:3;35617:16;35610:23;;35306:337;;35091:552;;34880:769;;34771:878;;;;:::o;35655:273::-;35786:3;35808:94;35898:3;35889:6;35808:94;:::i;:::-;35801:101;;35919:3;35912:10;;35655:273;;;;:::o;35934:177::-;36074:29;36070:1;36062:6;36058:14;36051:53;35934:177;:::o;36117:366::-;36259:3;36280:67;36344:2;36339:3;36280:67;:::i;:::-;36273:74;;36356:93;36445:3;36356:93;:::i;:::-;36474:2;36469:3;36465:12;36458:19;;36117:366;;;:::o;36489:419::-;36655:4;36693:2;36682:9;36678:18;36670:26;;36742:9;36736:4;36732:20;36728:1;36717:9;36713:17;36706:47;36770:131;36896:4;36770:131;:::i;:::-;36762:139;;36489:419;;;:::o;36914:174::-;37054:26;37050:1;37042:6;37038:14;37031:50;36914:174;:::o;37094:366::-;37236:3;37257:67;37321:2;37316:3;37257:67;:::i;:::-;37250:74;;37333:93;37422:3;37333:93;:::i;:::-;37451:2;37446:3;37442:12;37435:19;;37094:366;;;:::o;37466:419::-;37632:4;37670:2;37659:9;37655:18;37647:26;;37719:9;37713:4;37709:20;37705:1;37694:9;37690:17;37683:47;37747:131;37873:4;37747:131;:::i;:::-;37739:139;;37466:419;;;:::o;37891:228::-;38031:34;38027:1;38019:6;38015:14;38008:58;38100:11;38095:2;38087:6;38083:15;38076:36;37891:228;:::o;38125:366::-;38267:3;38288:67;38352:2;38347:3;38288:67;:::i;:::-;38281:74;;38364:93;38453:3;38364:93;:::i;:::-;38482:2;38477:3;38473:12;38466:19;;38125:366;;;:::o;38497:419::-;38663:4;38701:2;38690:9;38686:18;38678:26;;38750:9;38744:4;38740:20;38736:1;38725:9;38721:17;38714:47;38778:131;38904:4;38778:131;:::i;:::-;38770:139;;38497:419;;;:::o;38922:390::-;39028:3;39056:39;39089:5;39056:39;:::i;:::-;39111:89;39193:6;39188:3;39111:89;:::i;:::-;39104:96;;39209:65;39267:6;39262:3;39255:4;39248:5;39244:16;39209:65;:::i;:::-;39299:6;39294:3;39290:16;39283:23;;39032:280;38922:390;;;;:::o;39318:435::-;39498:3;39520:95;39611:3;39602:6;39520:95;:::i;:::-;39513:102;;39632:95;39723:3;39714:6;39632:95;:::i;:::-;39625:102;;39744:3;39737:10;;39318:435;;;;;:::o;39759:225::-;39899:34;39895:1;39887:6;39883:14;39876:58;39968:8;39963:2;39955:6;39951:15;39944:33;39759:225;:::o;39990:366::-;40132:3;40153:67;40217:2;40212:3;40153:67;:::i;:::-;40146:74;;40229:93;40318:3;40229:93;:::i;:::-;40347:2;40342:3;40338:12;40331:19;;39990:366;;;:::o;40362:419::-;40528:4;40566:2;40555:9;40551:18;40543:26;;40615:9;40609:4;40605:20;40601:1;40590:9;40586:17;40579:47;40643:131;40769:4;40643:131;:::i;:::-;40635:139;;40362:419;;;:::o;40787:410::-;40827:7;40850:20;40868:1;40850:20;:::i;:::-;40845:25;;40884:20;40902:1;40884:20;:::i;:::-;40879:25;;40939:1;40936;40932:9;40961:30;40979:11;40961:30;:::i;:::-;40950:41;;41140:1;41131:7;41127:15;41124:1;41121:22;41101:1;41094:9;41074:83;41051:139;;41170:18;;:::i;:::-;41051:139;40835:362;40787:410;;;;:::o;41203:275::-;41335:3;41357:95;41448:3;41439:6;41357:95;:::i;:::-;41350:102;;41469:3;41462:10;;41203:275;;;;:::o;41484:533::-;41653:4;41691:2;41680:9;41676:18;41668:26;;41704:71;41772:1;41761:9;41757:17;41748:6;41704:71;:::i;:::-;41785:72;41853:2;41842:9;41838:18;41829:6;41785:72;:::i;:::-;41904:9;41898:4;41894:20;41889:2;41878:9;41874:18;41867:48;41932:78;42005:4;41996:6;41932:78;:::i;:::-;41924:86;;41484:533;;;;;;:::o;42023:114::-;;:::o;42143:398::-;42302:3;42323:83;42404:1;42399:3;42323:83;:::i;:::-;42316:90;;42415:93;42504:3;42415:93;:::i;:::-;42533:1;42528:3;42524:11;42517:18;;42143:398;;;:::o;42547:379::-;42731:3;42753:147;42896:3;42753:147;:::i;:::-;42746:154;;42917:3;42910:10;;42547:379;;;:::o;42932:166::-;43072:18;43068:1;43060:6;43056:14;43049:42;42932:166;:::o;43104:366::-;43246:3;43267:67;43331:2;43326:3;43267:67;:::i;:::-;43260:74;;43343:93;43432:3;43343:93;:::i;:::-;43461:2;43456:3;43452:12;43445:19;;43104:366;;;:::o;43476:419::-;43642:4;43680:2;43669:9;43665:18;43657:26;;43729:9;43723:4;43719:20;43715:1;43704:9;43700:17;43693:47;43757:131;43883:4;43757:131;:::i;:::-;43749:139;;43476:419;;;:::o;43901:332::-;44022:4;44060:2;44049:9;44045:18;44037:26;;44073:71;44141:1;44130:9;44126:17;44117:6;44073:71;:::i;:::-;44154:72;44222:2;44211:9;44207:18;44198:6;44154:72;:::i;:::-;43901:332;;;;;:::o;44239:224::-;44379:34;44375:1;44367:6;44363:14;44356:58;44448:7;44443:2;44435:6;44431:15;44424:32;44239:224;:::o;44469:366::-;44611:3;44632:67;44696:2;44691:3;44632:67;:::i;:::-;44625:74;;44708:93;44797:3;44708:93;:::i;:::-;44826:2;44821:3;44817:12;44810:19;;44469:366;;;:::o;44841:419::-;45007:4;45045:2;45034:9;45030:18;45022:26;;45094:9;45088:4;45084:20;45080:1;45069:9;45065:17;45058:47;45122:131;45248:4;45122:131;:::i;:::-;45114:139;;44841:419;;;:::o;45266:223::-;45406:34;45402:1;45394:6;45390:14;45383:58;45475:6;45470:2;45462:6;45458:15;45451:31;45266:223;:::o;45495:366::-;45637:3;45658:67;45722:2;45717:3;45658:67;:::i;:::-;45651:74;;45734:93;45823:3;45734:93;:::i;:::-;45852:2;45847:3;45843:12;45836:19;;45495:366;;;:::o;45867:419::-;46033:4;46071:2;46060:9;46056:18;46048:26;;46120:9;46114:4;46110:20;46106:1;46095:9;46091:17;46084:47;46148:131;46274:4;46148:131;:::i;:::-;46140:139;;45867:419;;;:::o;46292:182::-;46432:34;46428:1;46420:6;46416:14;46409:58;46292:182;:::o;46480:366::-;46622:3;46643:67;46707:2;46702:3;46643:67;:::i;:::-;46636:74;;46719:93;46808:3;46719:93;:::i;:::-;46837:2;46832:3;46828:12;46821:19;;46480:366;;;:::o;46852:419::-;47018:4;47056:2;47045:9;47041:18;47033:26;;47105:9;47099:4;47095:20;47091:1;47080:9;47076:17;47069:47;47133:131;47259:4;47133:131;:::i;:::-;47125:139;;46852:419;;;:::o;47277:175::-;47417:27;47413:1;47405:6;47401:14;47394:51;47277:175;:::o;47458:366::-;47600:3;47621:67;47685:2;47680:3;47621:67;:::i;:::-;47614:74;;47697:93;47786:3;47697:93;:::i;:::-;47815:2;47810:3;47806:12;47799:19;;47458:366;;;:::o;47830:419::-;47996:4;48034:2;48023:9;48019:18;48011:26;;48083:9;48077:4;48073:20;48069:1;48058:9;48054:17;48047:47;48111:131;48237:4;48111:131;:::i;:::-;48103:139;;47830:419;;;:::o;48255:237::-;48395:34;48391:1;48383:6;48379:14;48372:58;48464:20;48459:2;48451:6;48447:15;48440:45;48255:237;:::o;48498:366::-;48640:3;48661:67;48725:2;48720:3;48661:67;:::i;:::-;48654:74;;48737:93;48826:3;48737:93;:::i;:::-;48855:2;48850:3;48846:12;48839:19;;48498:366;;;:::o;48870:419::-;49036:4;49074:2;49063:9;49059:18;49051:26;;49123:9;49117:4;49113:20;49109:1;49098:9;49094:17;49087:47;49151:131;49277:4;49151:131;:::i;:::-;49143:139;;48870:419;;;:::o;49295:182::-;49435:34;49431:1;49423:6;49419:14;49412:58;49295:182;:::o;49483:366::-;49625:3;49646:67;49710:2;49705:3;49646:67;:::i;:::-;49639:74;;49722:93;49811:3;49722:93;:::i;:::-;49840:2;49835:3;49831:12;49824:19;;49483:366;;;:::o;49855:419::-;50021:4;50059:2;50048:9;50044:18;50036:26;;50108:9;50102:4;50098:20;50094:1;50083:9;50079:17;50072:47;50136:131;50262:4;50136:131;:::i;:::-;50128:139;;49855:419;;;:::o;50280:178::-;50420:30;50416:1;50408:6;50404:14;50397:54;50280:178;:::o;50464:366::-;50606:3;50627:67;50691:2;50686:3;50627:67;:::i;:::-;50620:74;;50703:93;50792:3;50703:93;:::i;:::-;50821:2;50816:3;50812:12;50805:19;;50464:366;;;:::o;50836:419::-;51002:4;51040:2;51029:9;51025:18;51017:26;;51089:9;51083:4;51079:20;51075:1;51064:9;51060:17;51053:47;51117:131;51243:4;51117:131;:::i;:::-;51109:139;;50836:419;;;:::o;51261:178::-;51401:30;51397:1;51389:6;51385:14;51378:54;51261:178;:::o;51445:366::-;51587:3;51608:67;51672:2;51667:3;51608:67;:::i;:::-;51601:74;;51684:93;51773:3;51684:93;:::i;:::-;51802:2;51797:3;51793:12;51786:19;;51445:366;;;:::o;51817:419::-;51983:4;52021:2;52010:9;52006:18;51998:26;;52070:9;52064:4;52060:20;52056:1;52045:9;52041:17;52034:47;52098:131;52224:4;52098:131;:::i;:::-;52090:139;;51817:419;;;:::o;52242:98::-;52293:6;52327:5;52321:12;52311:22;;52242:98;;;:::o;52346:168::-;52429:11;52463:6;52458:3;52451:19;52503:4;52498:3;52494:14;52479:29;;52346:168;;;;:::o;52520:373::-;52606:3;52634:38;52666:5;52634:38;:::i;:::-;52688:70;52751:6;52746:3;52688:70;:::i;:::-;52681:77;;52767:65;52825:6;52820:3;52813:4;52806:5;52802:16;52767:65;:::i;:::-;52857:29;52879:6;52857:29;:::i;:::-;52852:3;52848:39;52841:46;;52610:283;52520:373;;;;:::o;52899:640::-;53094:4;53132:3;53121:9;53117:19;53109:27;;53146:71;53214:1;53203:9;53199:17;53190:6;53146:71;:::i;:::-;53227:72;53295:2;53284:9;53280:18;53271:6;53227:72;:::i;:::-;53309;53377:2;53366:9;53362:18;53353:6;53309:72;:::i;:::-;53428:9;53422:4;53418:20;53413:2;53402:9;53398:18;53391:48;53456:76;53527:4;53518:6;53456:76;:::i;:::-;53448:84;;52899:640;;;;;;;:::o;53545:141::-;53601:5;53632:6;53626:13;53617:22;;53648:32;53674:5;53648:32;:::i;:::-;53545:141;;;;:::o;53692:349::-;53761:6;53810:2;53798:9;53789:7;53785:23;53781:32;53778:119;;;53816:79;;:::i;:::-;53778:119;53936:1;53961:63;54016:7;54007:6;53996:9;53992:22;53961:63;:::i;:::-;53951:73;;53907:127;53692:349;;;;:::o
Swarm Source
ipfs://a8239f75f7a54848ada43af6f7813c7abe35769736aa23a7b5ab5bd96d7e1153
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.