ERC-721
Overview
Max Total Supply
1,000 BEARS
Holders
358
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
1 BEARSLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
RookieBears
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-01-13 */ // File: @openzeppelin/contracts/utils/Counters.sol pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/RookieBears.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.7; contract RookieBears is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable, Pausable { using Counters for Counters.Counter; Counters.Counter private _tokenIds; uint256 public presaleDate = 1642255200; uint256 public saleDate = 1642258800; address payable public depositAddress = payable(0x0F961f594450E67D78557b444b90EFF8EB7c5a34); address private devAddress = 0x0F961f594450E67D78557b444b90EFF8EB7c5a34; string public baseURI; uint256 public maxSupply = 1000; uint256 public price = 10 ether; uint256 public whitelistPrice = 5 ether; mapping(address => uint8) public whitelistedAddress; constructor() ERC721 ("RookieBears", "BEARS") { baseURI = "https://mint.rookiestudio.xyz/api/bear/"; _pause(); } function _baseURI() internal view override returns (string memory) { return baseURI; } function setDepositAddress(address payable to) public onlyOwner { depositAddress = to; } function mint(uint256 amount) public payable whenNotPaused { require(msg.value == price * amount , "Invalid amount"); require(saleDate <= block.timestamp, "Sale isn't live yet"); depositAddress.transfer(price * amount); for (uint256 i = 0; i < amount; i++) { internalMint(msg.sender); } } function mintWhitelisted(uint8 amount) public payable whenNotPaused { require(presaleDate <= block.timestamp, "Pre-sale has not started yet."); require(saleDate >= block.timestamp, "Pre-sale is over."); require(whitelistedAddress[msg.sender] > 0, "The address can no longer pre-order"); require(amount <= whitelistedAddress[msg.sender], "All mints of the address are over"); require(msg.value == whitelistPrice * amount, "Invalid amount"); depositAddress.transfer(whitelistPrice * amount); whitelistedAddress[msg.sender] -= amount; for (uint8 i = 0; i < amount; i++) { internalMint(msg.sender); } } function addWhitelistAddresses(address[] memory _addresses) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { require(_addresses[i] != address(0), "Address cannot be 0."); require(whitelistedAddress[_addresses[i]] == 0, "Balance must be 0."); whitelistedAddress[_addresses[i]] = 10; } } function bearsOwned(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } function reserveForGiveaway(uint256 amount) public onlyOwner { for (uint256 i = 0; i < amount; i++) { internalMint(devAddress); } } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } function updatelPresaleDate(uint256 newDate) public onlyOwner { presaleDate = newDate; } function updatelSaleDate(uint256 newDate) public onlyOwner { saleDate = newDate; } function internalMint(address to) internal { require(totalSupply() < maxSupply, "All Bears have been minted!"); _safeMint(to, _tokenIds.current()); _tokenIds.increment(); } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) whenNotPaused { super._beforeTokenTransfer(from, to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addWhitelistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"bearsOwned","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"}],"name":"mintWhitelisted","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reserveForGiveaway","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":[],"name":"saleDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"setDepositAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDate","type":"uint256"}],"name":"updatelPresaleDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDate","type":"uint256"}],"name":"updatelSaleDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddress","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526361e2d360600d556361e2e170600e55730f961f594450e67d78557b444b90eff8eb7c5a34600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730f961f594450e67d78557b444b90eff8eb7c5a34601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103e8601255678ac7230489e80000601355674563918244f40000601455348015620000e957600080fd5b506040518060400160405280600b81526020017f526f6f6b696542656172730000000000000000000000000000000000000000008152506040518060400160405280600581526020017f424541525300000000000000000000000000000000000000000000000000000081525081600090805190602001906200016e929190620003aa565b50806001908051906020019062000187929190620003aa565b505050620001aa6200019e6200020d60201b60201c565b6200021560201b60201c565b6000600b60146101000a81548160ff021916908315150217905550604051806060016040528060278152602001620059d76027913960119080519060200190620001f6929190620003aa565b5062000207620002db60201b60201c565b620005a4565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002eb6200039360201b60201c565b156200032e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032590620004af565b60405180910390fd5b6001600b60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200037a6200020d60201b60201c565b60405162000389919062000492565b60405180910390a1565b6000600b60149054906101000a900460ff16905090565b828054620003b89062000516565b90600052602060002090601f016020900481019282620003dc576000855562000428565b82601f10620003f757805160ff191683800117855562000428565b8280016001018555821562000428579182015b82811115620004275782518255916020019190600101906200040a565b5b5090506200043791906200043b565b5090565b5b80821115620004565760008160009055506001016200043c565b5090565b6200046581620004e2565b82525050565b60006200047a601083620004d1565b915062000487826200057b565b602082019050919050565b6000602082019050620004a960008301846200045a565b92915050565b60006020820190508181036000830152620004ca816200046b565b9050919050565b600082825260208201905092915050565b6000620004ef82620004f6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200052f57607f821691505b602082108114156200054657620005456200054c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b61542380620005b46000396000f3fe6080604052600436106102305760003560e01c80636352211e1161012e578063a22cb465116100ab578063c889004b1161006f578063c889004b1461081d578063d5abeb0114610848578063e985e9c514610873578063f2fde38b146108b0578063fc1a1c36146108d957610230565b8063a22cb46514610728578063ab18af2714610751578063b88d4fde1461077a578063c30796ab146107a3578063c87b56dd146107e057610230565b80638da5cb5b116100f25780638da5cb5b14610662578063954e338e1461068d57806395d89b41146106b6578063a035b1fe146106e1578063a0712d681461070c57610230565b80636352211e1461058f5780636c0360eb146105cc57806370a08231146105f7578063715018a6146106345780638456cb591461064b57610230565b806324e4f65f116101bc578063462d99c011610180578063462d99c0146104aa57806347511d8e146104d55780634f6ccce7146104fe57806355f804b31461053b5780635c975abb1461056457610230565b806324e4f65f146103d957806328f833b7146104025780632f745c591461042d5780633f4ba83a1461046a57806342842e0e1461048157610230565b8063095ea7b311610203578063095ea7b3146103175780630cc03f72146103405780630e256a5e1461035c57806318160ddd1461038557806323b872dd146103b057610230565b806301850f081461023557806301ffc9a71461027257806306fdde03146102af578063081812fc146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906138b9565b610904565b6040516102699190614222565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613af2565b610a0e565b6040516102a69190614244565b60405180910390f35b3480156102bb57600080fd5b506102c4610a20565b6040516102d1919061425f565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613b95565b610ab2565b60405161030e91906141a0565b60405180910390f35b34801561032357600080fd5b5061033e60048036038101906103399190613a69565b610b37565b005b61035a60048036038101906103559190613bc2565b610c4f565b005b34801561036857600080fd5b50610383600480360381019061037e9190613aa9565b610fb7565b005b34801561039157600080fd5b5061039a6111ff565b6040516103a79190614641565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d29190613953565b61120c565b005b3480156103e557600080fd5b5061040060048036038101906103fb9190613b95565b61126c565b005b34801561040e57600080fd5b506104176112f2565b60405161042491906141bb565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613a69565b611318565b6040516104619190614641565b60405180910390f35b34801561047657600080fd5b5061047f6113bd565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613953565b611443565b005b3480156104b657600080fd5b506104bf611463565b6040516104cc9190614641565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190613b95565b611469565b005b34801561050a57600080fd5b5061052560048036038101906105209190613b95565b611532565b6040516105329190614641565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190613b4c565b6115a3565b005b34801561057057600080fd5b50610579611639565b6040516105869190614244565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b19190613b95565b611650565b6040516105c391906141a0565b60405180910390f35b3480156105d857600080fd5b506105e1611702565b6040516105ee919061425f565b60405180910390f35b34801561060357600080fd5b5061061e600480360381019061061991906138b9565b611790565b60405161062b9190614641565b60405180910390f35b34801561064057600080fd5b50610649611848565b005b34801561065757600080fd5b506106606118d0565b005b34801561066e57600080fd5b50610677611956565b60405161068491906141a0565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613b95565b611980565b005b3480156106c257600080fd5b506106cb611a06565b6040516106d8919061425f565b60405180910390f35b3480156106ed57600080fd5b506106f6611a98565b6040516107039190614641565b60405180910390f35b61072660048036038101906107219190613b95565b611a9e565b005b34801561073457600080fd5b5061074f600480360381019061074a9190613a29565b611c1b565b005b34801561075d57600080fd5b50610778600480360381019061077391906138e6565b611d9c565b005b34801561078657600080fd5b506107a1600480360381019061079c91906139a6565b611e5c565b005b3480156107af57600080fd5b506107ca60048036038101906107c591906138b9565b611ebe565b6040516107d7919061465c565b60405180910390f35b3480156107ec57600080fd5b5061080760048036038101906108029190613b95565b611ede565b604051610814919061425f565b60405180910390f35b34801561082957600080fd5b50610832611ef0565b60405161083f9190614641565b60405180910390f35b34801561085457600080fd5b5061085d611ef6565b60405161086a9190614641565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190613913565b611efc565b6040516108a79190614244565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d291906138b9565b611f90565b005b3480156108e557600080fd5b506108ee612088565b6040516108fb9190614641565b60405180910390f35b6060600061091183611790565b9050600081141561096e57600067ffffffffffffffff81111561093757610936614bb6565b5b6040519080825280602002602001820160405280156109655781602001602082028036833780820191505090505b50915050610a09565b60008167ffffffffffffffff81111561098a57610989614bb6565b5b6040519080825280602002602001820160405280156109b85781602001602082028036833780820191505090505b50905060005b82811015610a02576109d08582611318565b8282815181106109e3576109e2614b87565b5b60200260200101818152505080806109fa90614a27565b9150506109be565b8193505050505b919050565b6000610a198261208e565b9050919050565b606060008054610a2f906149c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5b906149c4565b8015610aa85780601f10610a7d57610100808354040283529160200191610aa8565b820191906000526020600020905b815481529060010190602001808311610a8b57829003601f168201915b5050505050905090565b6000610abd82612108565b610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af3906144e1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4282611650565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa90614561565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd2612174565b73ffffffffffffffffffffffffffffffffffffffff161480610c015750610c0081610bfb612174565b611efc565b5b610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790614421565b60405180910390fd5b610c4a838361217c565b505050565b610c57611639565b15610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90614401565b60405180910390fd5b42600d541115610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd390614281565b60405180910390fd5b42600e541015610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d18906145e1565b60405180910390fd5b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1611610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa906142c1565b60405180910390fd5b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff168160ff161115610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f906145c1565b60405180910390fd5b8060ff16601454610e59919061482d565b3414610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190614361565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8260ff16601454610ee7919061482d565b9081150290604051600060405180830381858888f19350505050158015610f12573d6000803e3d6000fd5b5080601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16610f6e91906148bb565b92506101000a81548160ff021916908360ff16021790555060005b8160ff168160ff161015610fb357610fa033612235565b8080610fab90614a70565b915050610f89565b5050565b610fbf612174565b73ffffffffffffffffffffffffffffffffffffffff16610fdd611956565b73ffffffffffffffffffffffffffffffffffffffff1614611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90614501565b60405180910390fd5b60005b81518110156111fb57600073ffffffffffffffffffffffffffffffffffffffff1682828151811061106a57611069614b87565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c090614621565b60405180910390fd5b6000601560008484815181106110e2576110e1614b87565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90614601565b60405180910390fd5b600a6015600084848151811061118e5761118d614b87565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806111f390614a27565b915050611036565b5050565b6000600880549050905090565b61121d611217612174565b826122a0565b61125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125390614581565b60405180910390fd5b61126783838361237e565b505050565b611274612174565b73ffffffffffffffffffffffffffffffffffffffff16611292611956565b73ffffffffffffffffffffffffffffffffffffffff16146112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90614501565b60405180910390fd5b80600e8190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061132383611790565b8210611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b906142e1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6113c5612174565b73ffffffffffffffffffffffffffffffffffffffff166113e3611956565b73ffffffffffffffffffffffffffffffffffffffff1614611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090614501565b60405180910390fd5b6114416125da565b565b61145e83838360405180602001604052806000815250611e5c565b505050565b600e5481565b611471612174565b73ffffffffffffffffffffffffffffffffffffffff1661148f611956565b73ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90614501565b60405180910390fd5b60005b8181101561152e5761151b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612235565b808061152690614a27565b9150506114e8565b5050565b600061153c6111ff565b821061157d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611574906145a1565b60405180910390fd5b6008828154811061159157611590614b87565b5b90600052602060002001549050919050565b6115ab612174565b73ffffffffffffffffffffffffffffffffffffffff166115c9611956565b73ffffffffffffffffffffffffffffffffffffffff161461161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690614501565b60405180910390fd5b8060119080519060200190611635929190613605565b5050565b6000600b60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f090614461565b60405180910390fd5b80915050919050565b6011805461170f906149c4565b80601f016020809104026020016040519081016040528092919081815260200182805461173b906149c4565b80156117885780601f1061175d57610100808354040283529160200191611788565b820191906000526020600020905b81548152906001019060200180831161176b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890614441565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611850612174565b73ffffffffffffffffffffffffffffffffffffffff1661186e611956565b73ffffffffffffffffffffffffffffffffffffffff16146118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb90614501565b60405180910390fd5b6118ce600061267c565b565b6118d8612174565b73ffffffffffffffffffffffffffffffffffffffff166118f6611956565b73ffffffffffffffffffffffffffffffffffffffff161461194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390614501565b60405180910390fd5b611954612742565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611988612174565b73ffffffffffffffffffffffffffffffffffffffff166119a6611956565b73ffffffffffffffffffffffffffffffffffffffff16146119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390614501565b60405180910390fd5b80600d8190555050565b606060018054611a15906149c4565b80601f0160208091040260200160405190810160405280929190818152602001828054611a41906149c4565b8015611a8e5780601f10611a6357610100808354040283529160200191611a8e565b820191906000526020600020905b815481529060010190602001808311611a7157829003601f168201915b5050505050905090565b60135481565b611aa6611639565b15611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add90614401565b60405180910390fd5b80601354611af4919061482d565b3414611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c90614361565b60405180910390fd5b42600e541115611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b71906143c1565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82601354611bc4919061482d565b9081150290604051600060405180830381858888f19350505050158015611bef573d6000803e3d6000fd5b5060005b81811015611c1757611c0433612235565b8080611c0f90614a27565b915050611bf3565b5050565b611c23612174565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c88906143a1565b60405180910390fd5b8060056000611c9e612174565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d4b612174565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d909190614244565b60405180910390a35050565b611da4612174565b73ffffffffffffffffffffffffffffffffffffffff16611dc2611956565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90614501565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e6d611e67612174565b836122a0565b611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea390614581565b60405180910390fd5b611eb8848484846127e5565b50505050565b60156020528060005260406000206000915054906101000a900460ff1681565b6060611ee982612841565b9050919050565b600d5481565b60125481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f98612174565b73ffffffffffffffffffffffffffffffffffffffff16611fb6611956565b73ffffffffffffffffffffffffffffffffffffffff161461200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200390614501565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561207c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207390614321565b60405180910390fd5b6120858161267c565b50565b60145481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612101575061210082612993565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121ef83611650565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6012546122406111ff565b10612280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612277906144c1565b60405180910390fd5b6122938161228e600c612a75565b612a83565b61229d600c612aa1565b50565b60006122ab82612108565b6122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e1906143e1565b60405180910390fd5b60006122f583611650565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061236457508373ffffffffffffffffffffffffffffffffffffffff1661234c84610ab2565b73ffffffffffffffffffffffffffffffffffffffff16145b8061237557506123748185611efc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661239e82611650565b73ffffffffffffffffffffffffffffffffffffffff16146123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb90614521565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90614381565b60405180910390fd5b61246f838383612ab7565b61247a60008261217c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ca9190614887565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461252191906147a6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6125e2611639565b612621576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612618906142a1565b60405180910390fd5b6000600b60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612665612174565b60405161267291906141a0565b60405180910390a1565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61274a611639565b1561278a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278190614401565b60405180910390fd5b6001600b60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127ce612174565b6040516127db91906141a0565b60405180910390a1565b6127f084848461237e565b6127fc84848484612b0f565b61283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290614301565b60405180910390fd5b50505050565b606061284c82612108565b61288b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612882906144a1565b60405180910390fd5b6000600a600084815260200190815260200160002080546128ab906149c4565b80601f01602080910402602001604051908101604052809291908181526020018280546128d7906149c4565b80156129245780601f106128f957610100808354040283529160200191612924565b820191906000526020600020905b81548152906001019060200180831161290757829003601f168201915b505050505090506000612935612ca6565b905060008151141561294b57819250505061298e565b60008251111561298057808260405160200161296892919061417c565b6040516020818303038152906040529250505061298e565b61298984612d38565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612a5e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612a6e5750612a6d82612ddf565b5b9050919050565b600081600001549050919050565b612a9d828260405180602001604052806000815250612e49565b5050565b6001816000016000828254019250508190555050565b612abf611639565b15612aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af690614401565b60405180910390fd5b612b0a838383612ea4565b505050565b6000612b308473ffffffffffffffffffffffffffffffffffffffff16612fb8565b15612c99578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b59612174565b8786866040518563ffffffff1660e01b8152600401612b7b94939291906141d6565b602060405180830381600087803b158015612b9557600080fd5b505af1925050508015612bc657506040513d601f19601f82011682018060405250810190612bc39190613b1f565b60015b612c49573d8060008114612bf6576040519150601f19603f3d011682016040523d82523d6000602084013e612bfb565b606091505b50600081511415612c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3890614301565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c9e565b600190505b949350505050565b606060118054612cb5906149c4565b80601f0160208091040260200160405190810160405280929190818152602001828054612ce1906149c4565b8015612d2e5780601f10612d0357610100808354040283529160200191612d2e565b820191906000526020600020905b815481529060010190602001808311612d1157829003601f168201915b5050505050905090565b6060612d4382612108565b612d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7990614541565b60405180910390fd5b6000612d8c612ca6565b90506000815111612dac5760405180602001604052806000815250612dd7565b80612db684612fcb565b604051602001612dc792919061417c565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e53838361312c565b612e606000848484612b0f565b612e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9690614301565b60405180910390fd5b505050565b612eaf8383836132fa565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ef257612eed816132ff565b612f31565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f3057612f2f8382613348565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f7457612f6f816134b5565b612fb3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612fb257612fb18282613586565b5b5b505050565b600080823b905060008111915050919050565b60606000821415613013576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613127565b600082905060005b6000821461304557808061302e90614a27565b915050600a8261303e91906147fc565b915061301b565b60008167ffffffffffffffff81111561306157613060614bb6565b5b6040519080825280601f01601f1916602001820160405280156130935781602001600182028036833780820191505090505b5090505b60008514613120576001826130ac9190614887565b9150600a856130bb9190614a9a565b60306130c791906147a6565b60f81b8183815181106130dd576130dc614b87565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561311991906147fc565b9450613097565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561319c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319390614481565b60405180910390fd5b6131a581612108565b156131e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dc90614341565b60405180910390fd5b6131f160008383612ab7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461324191906147a6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161335584611790565b61335f9190614887565b9050600060076000848152602001908152602001600020549050818114613444576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506134c99190614887565b90506000600960008481526020019081526020016000205490506000600883815481106134f9576134f8614b87565b5b90600052602060002001549050806008838154811061351b5761351a614b87565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061356a57613569614b58565b5b6001900381819060005260206000200160009055905550505050565b600061359183611790565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054613611906149c4565b90600052602060002090601f016020900481019282613633576000855561367a565b82601f1061364c57805160ff191683800117855561367a565b8280016001018555821561367a579182015b8281111561367957825182559160200191906001019061365e565b5b509050613687919061368b565b5090565b5b808211156136a457600081600090555060010161368c565b5090565b60006136bb6136b68461469c565b614677565b905080838252602082019050828560208602820111156136de576136dd614bea565b5b60005b8581101561370e57816136f4888261379c565b8452602084019350602083019250506001810190506136e1565b5050509392505050565b600061372b613726846146c8565b614677565b90508281526020810184848401111561374757613746614bef565b5b613752848285614982565b509392505050565b600061376d613768846146f9565b614677565b90508281526020810184848401111561378957613788614bef565b5b613794848285614982565b509392505050565b6000813590506137ab81615363565b92915050565b6000813590506137c08161537a565b92915050565b600082601f8301126137db576137da614be5565b5b81356137eb8482602086016136a8565b91505092915050565b60008135905061380381615391565b92915050565b600081359050613818816153a8565b92915050565b60008151905061382d816153a8565b92915050565b600082601f83011261384857613847614be5565b5b8135613858848260208601613718565b91505092915050565b600082601f83011261387657613875614be5565b5b813561388684826020860161375a565b91505092915050565b60008135905061389e816153bf565b92915050565b6000813590506138b3816153d6565b92915050565b6000602082840312156138cf576138ce614bf9565b5b60006138dd8482850161379c565b91505092915050565b6000602082840312156138fc576138fb614bf9565b5b600061390a848285016137b1565b91505092915050565b6000806040838503121561392a57613929614bf9565b5b60006139388582860161379c565b92505060206139498582860161379c565b9150509250929050565b60008060006060848603121561396c5761396b614bf9565b5b600061397a8682870161379c565b935050602061398b8682870161379c565b925050604061399c8682870161388f565b9150509250925092565b600080600080608085870312156139c0576139bf614bf9565b5b60006139ce8782880161379c565b94505060206139df8782880161379c565b93505060406139f08782880161388f565b925050606085013567ffffffffffffffff811115613a1157613a10614bf4565b5b613a1d87828801613833565b91505092959194509250565b60008060408385031215613a4057613a3f614bf9565b5b6000613a4e8582860161379c565b9250506020613a5f858286016137f4565b9150509250929050565b60008060408385031215613a8057613a7f614bf9565b5b6000613a8e8582860161379c565b9250506020613a9f8582860161388f565b9150509250929050565b600060208284031215613abf57613abe614bf9565b5b600082013567ffffffffffffffff811115613add57613adc614bf4565b5b613ae9848285016137c6565b91505092915050565b600060208284031215613b0857613b07614bf9565b5b6000613b1684828501613809565b91505092915050565b600060208284031215613b3557613b34614bf9565b5b6000613b438482850161381e565b91505092915050565b600060208284031215613b6257613b61614bf9565b5b600082013567ffffffffffffffff811115613b8057613b7f614bf4565b5b613b8c84828501613861565b91505092915050565b600060208284031215613bab57613baa614bf9565b5b6000613bb98482850161388f565b91505092915050565b600060208284031215613bd857613bd7614bf9565b5b6000613be6848285016138a4565b91505092915050565b6000613bfb838361414f565b60208301905092915050565b613c1081614901565b82525050565b613c1f816148ef565b82525050565b6000613c308261473a565b613c3a8185614768565b9350613c458361472a565b8060005b83811015613c76578151613c5d8882613bef565b9750613c688361475b565b925050600181019050613c49565b5085935050505092915050565b613c8c81614913565b82525050565b6000613c9d82614745565b613ca78185614779565b9350613cb7818560208601614991565b613cc081614bfe565b840191505092915050565b6000613cd682614750565b613ce0818561478a565b9350613cf0818560208601614991565b613cf981614bfe565b840191505092915050565b6000613d0f82614750565b613d19818561479b565b9350613d29818560208601614991565b80840191505092915050565b6000613d42601d8361478a565b9150613d4d82614c0f565b602082019050919050565b6000613d6560148361478a565b9150613d7082614c38565b602082019050919050565b6000613d8860238361478a565b9150613d9382614c61565b604082019050919050565b6000613dab602b8361478a565b9150613db682614cb0565b604082019050919050565b6000613dce60328361478a565b9150613dd982614cff565b604082019050919050565b6000613df160268361478a565b9150613dfc82614d4e565b604082019050919050565b6000613e14601c8361478a565b9150613e1f82614d9d565b602082019050919050565b6000613e37600e8361478a565b9150613e4282614dc6565b602082019050919050565b6000613e5a60248361478a565b9150613e6582614def565b604082019050919050565b6000613e7d60198361478a565b9150613e8882614e3e565b602082019050919050565b6000613ea060138361478a565b9150613eab82614e67565b602082019050919050565b6000613ec3602c8361478a565b9150613ece82614e90565b604082019050919050565b6000613ee660108361478a565b9150613ef182614edf565b602082019050919050565b6000613f0960388361478a565b9150613f1482614f08565b604082019050919050565b6000613f2c602a8361478a565b9150613f3782614f57565b604082019050919050565b6000613f4f60298361478a565b9150613f5a82614fa6565b604082019050919050565b6000613f7260208361478a565b9150613f7d82614ff5565b602082019050919050565b6000613f9560318361478a565b9150613fa08261501e565b604082019050919050565b6000613fb8601b8361478a565b9150613fc38261506d565b602082019050919050565b6000613fdb602c8361478a565b9150613fe682615096565b604082019050919050565b6000613ffe60208361478a565b9150614009826150e5565b602082019050919050565b600061402160298361478a565b915061402c8261510e565b604082019050919050565b6000614044602f8361478a565b915061404f8261515d565b604082019050919050565b600061406760218361478a565b9150614072826151ac565b604082019050919050565b600061408a60318361478a565b9150614095826151fb565b604082019050919050565b60006140ad602c8361478a565b91506140b88261524a565b604082019050919050565b60006140d060218361478a565b91506140db82615299565b604082019050919050565b60006140f360118361478a565b91506140fe826152e8565b602082019050919050565b600061411660128361478a565b915061412182615311565b602082019050919050565b600061413960148361478a565b91506141448261533a565b602082019050919050565b6141588161496b565b82525050565b6141678161496b565b82525050565b61417681614975565b82525050565b60006141888285613d04565b91506141948284613d04565b91508190509392505050565b60006020820190506141b56000830184613c16565b92915050565b60006020820190506141d06000830184613c07565b92915050565b60006080820190506141eb6000830187613c16565b6141f86020830186613c16565b614205604083018561415e565b81810360608301526142178184613c92565b905095945050505050565b6000602082019050818103600083015261423c8184613c25565b905092915050565b60006020820190506142596000830184613c83565b92915050565b600060208201905081810360008301526142798184613ccb565b905092915050565b6000602082019050818103600083015261429a81613d35565b9050919050565b600060208201905081810360008301526142ba81613d58565b9050919050565b600060208201905081810360008301526142da81613d7b565b9050919050565b600060208201905081810360008301526142fa81613d9e565b9050919050565b6000602082019050818103600083015261431a81613dc1565b9050919050565b6000602082019050818103600083015261433a81613de4565b9050919050565b6000602082019050818103600083015261435a81613e07565b9050919050565b6000602082019050818103600083015261437a81613e2a565b9050919050565b6000602082019050818103600083015261439a81613e4d565b9050919050565b600060208201905081810360008301526143ba81613e70565b9050919050565b600060208201905081810360008301526143da81613e93565b9050919050565b600060208201905081810360008301526143fa81613eb6565b9050919050565b6000602082019050818103600083015261441a81613ed9565b9050919050565b6000602082019050818103600083015261443a81613efc565b9050919050565b6000602082019050818103600083015261445a81613f1f565b9050919050565b6000602082019050818103600083015261447a81613f42565b9050919050565b6000602082019050818103600083015261449a81613f65565b9050919050565b600060208201905081810360008301526144ba81613f88565b9050919050565b600060208201905081810360008301526144da81613fab565b9050919050565b600060208201905081810360008301526144fa81613fce565b9050919050565b6000602082019050818103600083015261451a81613ff1565b9050919050565b6000602082019050818103600083015261453a81614014565b9050919050565b6000602082019050818103600083015261455a81614037565b9050919050565b6000602082019050818103600083015261457a8161405a565b9050919050565b6000602082019050818103600083015261459a8161407d565b9050919050565b600060208201905081810360008301526145ba816140a0565b9050919050565b600060208201905081810360008301526145da816140c3565b9050919050565b600060208201905081810360008301526145fa816140e6565b9050919050565b6000602082019050818103600083015261461a81614109565b9050919050565b6000602082019050818103600083015261463a8161412c565b9050919050565b6000602082019050614656600083018461415e565b92915050565b6000602082019050614671600083018461416d565b92915050565b6000614681614692565b905061468d82826149f6565b919050565b6000604051905090565b600067ffffffffffffffff8211156146b7576146b6614bb6565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146e3576146e2614bb6565b5b6146ec82614bfe565b9050602081019050919050565b600067ffffffffffffffff82111561471457614713614bb6565b5b61471d82614bfe565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147b18261496b565b91506147bc8361496b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147f1576147f0614acb565b5b828201905092915050565b60006148078261496b565b91506148128361496b565b92508261482257614821614afa565b5b828204905092915050565b60006148388261496b565b91506148438361496b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561487c5761487b614acb565b5b828202905092915050565b60006148928261496b565b915061489d8361496b565b9250828210156148b0576148af614acb565b5b828203905092915050565b60006148c682614975565b91506148d183614975565b9250828210156148e4576148e3614acb565b5b828203905092915050565b60006148fa8261494b565b9050919050565b600061490c8261494b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156149af578082015181840152602081019050614994565b838111156149be576000848401525b50505050565b600060028204905060018216806149dc57607f821691505b602082108114156149f0576149ef614b29565b5b50919050565b6149ff82614bfe565b810181811067ffffffffffffffff82111715614a1e57614a1d614bb6565b5b80604052505050565b6000614a328261496b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a6557614a64614acb565b5b600182019050919050565b6000614a7b82614975565b915060ff821415614a8f57614a8e614acb565b5b600182019050919050565b6000614aa58261496b565b9150614ab08361496b565b925082614ac057614abf614afa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5072652d73616c6520686173206e6f742073746172746564207965742e000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f54686520616464726573732063616e206e6f206c6f6e676572207072652d6f7260008201527f6465720000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c652069736e2774206c6976652079657400000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f416c6c2042656172732068617665206265656e206d696e746564210000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f416c6c206d696e7473206f6620746865206164647265737320617265206f766560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5072652d73616c65206973206f7665722e000000000000000000000000000000600082015250565b7f42616c616e6365206d75737420626520302e0000000000000000000000000000600082015250565b7f416464726573732063616e6e6f7420626520302e000000000000000000000000600082015250565b61536c816148ef565b811461537757600080fd5b50565b61538381614901565b811461538e57600080fd5b50565b61539a81614913565b81146153a557600080fd5b50565b6153b18161491f565b81146153bc57600080fd5b50565b6153c88161496b565b81146153d357600080fd5b50565b6153df81614975565b81146153ea57600080fd5b5056fea2646970667358221220e324391ddc8f136b8349d4365b37fd3213d5afba7edb18669760da8845e620ae64736f6c6343000807003368747470733a2f2f6d696e742e726f6f6b696573747564696f2e78797a2f6170692f626561722f
Deployed Bytecode
0x6080604052600436106102305760003560e01c80636352211e1161012e578063a22cb465116100ab578063c889004b1161006f578063c889004b1461081d578063d5abeb0114610848578063e985e9c514610873578063f2fde38b146108b0578063fc1a1c36146108d957610230565b8063a22cb46514610728578063ab18af2714610751578063b88d4fde1461077a578063c30796ab146107a3578063c87b56dd146107e057610230565b80638da5cb5b116100f25780638da5cb5b14610662578063954e338e1461068d57806395d89b41146106b6578063a035b1fe146106e1578063a0712d681461070c57610230565b80636352211e1461058f5780636c0360eb146105cc57806370a08231146105f7578063715018a6146106345780638456cb591461064b57610230565b806324e4f65f116101bc578063462d99c011610180578063462d99c0146104aa57806347511d8e146104d55780634f6ccce7146104fe57806355f804b31461053b5780635c975abb1461056457610230565b806324e4f65f146103d957806328f833b7146104025780632f745c591461042d5780633f4ba83a1461046a57806342842e0e1461048157610230565b8063095ea7b311610203578063095ea7b3146103175780630cc03f72146103405780630e256a5e1461035c57806318160ddd1461038557806323b872dd146103b057610230565b806301850f081461023557806301ffc9a71461027257806306fdde03146102af578063081812fc146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906138b9565b610904565b6040516102699190614222565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613af2565b610a0e565b6040516102a69190614244565b60405180910390f35b3480156102bb57600080fd5b506102c4610a20565b6040516102d1919061425f565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613b95565b610ab2565b60405161030e91906141a0565b60405180910390f35b34801561032357600080fd5b5061033e60048036038101906103399190613a69565b610b37565b005b61035a60048036038101906103559190613bc2565b610c4f565b005b34801561036857600080fd5b50610383600480360381019061037e9190613aa9565b610fb7565b005b34801561039157600080fd5b5061039a6111ff565b6040516103a79190614641565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d29190613953565b61120c565b005b3480156103e557600080fd5b5061040060048036038101906103fb9190613b95565b61126c565b005b34801561040e57600080fd5b506104176112f2565b60405161042491906141bb565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613a69565b611318565b6040516104619190614641565b60405180910390f35b34801561047657600080fd5b5061047f6113bd565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613953565b611443565b005b3480156104b657600080fd5b506104bf611463565b6040516104cc9190614641565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190613b95565b611469565b005b34801561050a57600080fd5b5061052560048036038101906105209190613b95565b611532565b6040516105329190614641565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190613b4c565b6115a3565b005b34801561057057600080fd5b50610579611639565b6040516105869190614244565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b19190613b95565b611650565b6040516105c391906141a0565b60405180910390f35b3480156105d857600080fd5b506105e1611702565b6040516105ee919061425f565b60405180910390f35b34801561060357600080fd5b5061061e600480360381019061061991906138b9565b611790565b60405161062b9190614641565b60405180910390f35b34801561064057600080fd5b50610649611848565b005b34801561065757600080fd5b506106606118d0565b005b34801561066e57600080fd5b50610677611956565b60405161068491906141a0565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613b95565b611980565b005b3480156106c257600080fd5b506106cb611a06565b6040516106d8919061425f565b60405180910390f35b3480156106ed57600080fd5b506106f6611a98565b6040516107039190614641565b60405180910390f35b61072660048036038101906107219190613b95565b611a9e565b005b34801561073457600080fd5b5061074f600480360381019061074a9190613a29565b611c1b565b005b34801561075d57600080fd5b50610778600480360381019061077391906138e6565b611d9c565b005b34801561078657600080fd5b506107a1600480360381019061079c91906139a6565b611e5c565b005b3480156107af57600080fd5b506107ca60048036038101906107c591906138b9565b611ebe565b6040516107d7919061465c565b60405180910390f35b3480156107ec57600080fd5b5061080760048036038101906108029190613b95565b611ede565b604051610814919061425f565b60405180910390f35b34801561082957600080fd5b50610832611ef0565b60405161083f9190614641565b60405180910390f35b34801561085457600080fd5b5061085d611ef6565b60405161086a9190614641565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190613913565b611efc565b6040516108a79190614244565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d291906138b9565b611f90565b005b3480156108e557600080fd5b506108ee612088565b6040516108fb9190614641565b60405180910390f35b6060600061091183611790565b9050600081141561096e57600067ffffffffffffffff81111561093757610936614bb6565b5b6040519080825280602002602001820160405280156109655781602001602082028036833780820191505090505b50915050610a09565b60008167ffffffffffffffff81111561098a57610989614bb6565b5b6040519080825280602002602001820160405280156109b85781602001602082028036833780820191505090505b50905060005b82811015610a02576109d08582611318565b8282815181106109e3576109e2614b87565b5b60200260200101818152505080806109fa90614a27565b9150506109be565b8193505050505b919050565b6000610a198261208e565b9050919050565b606060008054610a2f906149c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5b906149c4565b8015610aa85780601f10610a7d57610100808354040283529160200191610aa8565b820191906000526020600020905b815481529060010190602001808311610a8b57829003601f168201915b5050505050905090565b6000610abd82612108565b610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af3906144e1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4282611650565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa90614561565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd2612174565b73ffffffffffffffffffffffffffffffffffffffff161480610c015750610c0081610bfb612174565b611efc565b5b610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790614421565b60405180910390fd5b610c4a838361217c565b505050565b610c57611639565b15610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90614401565b60405180910390fd5b42600d541115610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd390614281565b60405180910390fd5b42600e541015610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d18906145e1565b60405180910390fd5b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1611610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa906142c1565b60405180910390fd5b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff168160ff161115610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f906145c1565b60405180910390fd5b8060ff16601454610e59919061482d565b3414610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190614361565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8260ff16601454610ee7919061482d565b9081150290604051600060405180830381858888f19350505050158015610f12573d6000803e3d6000fd5b5080601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16610f6e91906148bb565b92506101000a81548160ff021916908360ff16021790555060005b8160ff168160ff161015610fb357610fa033612235565b8080610fab90614a70565b915050610f89565b5050565b610fbf612174565b73ffffffffffffffffffffffffffffffffffffffff16610fdd611956565b73ffffffffffffffffffffffffffffffffffffffff1614611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90614501565b60405180910390fd5b60005b81518110156111fb57600073ffffffffffffffffffffffffffffffffffffffff1682828151811061106a57611069614b87565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c090614621565b60405180910390fd5b6000601560008484815181106110e2576110e1614b87565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90614601565b60405180910390fd5b600a6015600084848151811061118e5761118d614b87565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806111f390614a27565b915050611036565b5050565b6000600880549050905090565b61121d611217612174565b826122a0565b61125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125390614581565b60405180910390fd5b61126783838361237e565b505050565b611274612174565b73ffffffffffffffffffffffffffffffffffffffff16611292611956565b73ffffffffffffffffffffffffffffffffffffffff16146112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90614501565b60405180910390fd5b80600e8190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061132383611790565b8210611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b906142e1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6113c5612174565b73ffffffffffffffffffffffffffffffffffffffff166113e3611956565b73ffffffffffffffffffffffffffffffffffffffff1614611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090614501565b60405180910390fd5b6114416125da565b565b61145e83838360405180602001604052806000815250611e5c565b505050565b600e5481565b611471612174565b73ffffffffffffffffffffffffffffffffffffffff1661148f611956565b73ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90614501565b60405180910390fd5b60005b8181101561152e5761151b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612235565b808061152690614a27565b9150506114e8565b5050565b600061153c6111ff565b821061157d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611574906145a1565b60405180910390fd5b6008828154811061159157611590614b87565b5b90600052602060002001549050919050565b6115ab612174565b73ffffffffffffffffffffffffffffffffffffffff166115c9611956565b73ffffffffffffffffffffffffffffffffffffffff161461161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690614501565b60405180910390fd5b8060119080519060200190611635929190613605565b5050565b6000600b60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f090614461565b60405180910390fd5b80915050919050565b6011805461170f906149c4565b80601f016020809104026020016040519081016040528092919081815260200182805461173b906149c4565b80156117885780601f1061175d57610100808354040283529160200191611788565b820191906000526020600020905b81548152906001019060200180831161176b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890614441565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611850612174565b73ffffffffffffffffffffffffffffffffffffffff1661186e611956565b73ffffffffffffffffffffffffffffffffffffffff16146118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb90614501565b60405180910390fd5b6118ce600061267c565b565b6118d8612174565b73ffffffffffffffffffffffffffffffffffffffff166118f6611956565b73ffffffffffffffffffffffffffffffffffffffff161461194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390614501565b60405180910390fd5b611954612742565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611988612174565b73ffffffffffffffffffffffffffffffffffffffff166119a6611956565b73ffffffffffffffffffffffffffffffffffffffff16146119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390614501565b60405180910390fd5b80600d8190555050565b606060018054611a15906149c4565b80601f0160208091040260200160405190810160405280929190818152602001828054611a41906149c4565b8015611a8e5780601f10611a6357610100808354040283529160200191611a8e565b820191906000526020600020905b815481529060010190602001808311611a7157829003601f168201915b5050505050905090565b60135481565b611aa6611639565b15611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add90614401565b60405180910390fd5b80601354611af4919061482d565b3414611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c90614361565b60405180910390fd5b42600e541115611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b71906143c1565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82601354611bc4919061482d565b9081150290604051600060405180830381858888f19350505050158015611bef573d6000803e3d6000fd5b5060005b81811015611c1757611c0433612235565b8080611c0f90614a27565b915050611bf3565b5050565b611c23612174565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c88906143a1565b60405180910390fd5b8060056000611c9e612174565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d4b612174565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d909190614244565b60405180910390a35050565b611da4612174565b73ffffffffffffffffffffffffffffffffffffffff16611dc2611956565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90614501565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e6d611e67612174565b836122a0565b611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea390614581565b60405180910390fd5b611eb8848484846127e5565b50505050565b60156020528060005260406000206000915054906101000a900460ff1681565b6060611ee982612841565b9050919050565b600d5481565b60125481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f98612174565b73ffffffffffffffffffffffffffffffffffffffff16611fb6611956565b73ffffffffffffffffffffffffffffffffffffffff161461200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200390614501565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561207c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207390614321565b60405180910390fd5b6120858161267c565b50565b60145481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612101575061210082612993565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121ef83611650565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6012546122406111ff565b10612280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612277906144c1565b60405180910390fd5b6122938161228e600c612a75565b612a83565b61229d600c612aa1565b50565b60006122ab82612108565b6122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e1906143e1565b60405180910390fd5b60006122f583611650565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061236457508373ffffffffffffffffffffffffffffffffffffffff1661234c84610ab2565b73ffffffffffffffffffffffffffffffffffffffff16145b8061237557506123748185611efc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661239e82611650565b73ffffffffffffffffffffffffffffffffffffffff16146123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb90614521565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90614381565b60405180910390fd5b61246f838383612ab7565b61247a60008261217c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ca9190614887565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461252191906147a6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6125e2611639565b612621576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612618906142a1565b60405180910390fd5b6000600b60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612665612174565b60405161267291906141a0565b60405180910390a1565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61274a611639565b1561278a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278190614401565b60405180910390fd5b6001600b60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127ce612174565b6040516127db91906141a0565b60405180910390a1565b6127f084848461237e565b6127fc84848484612b0f565b61283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290614301565b60405180910390fd5b50505050565b606061284c82612108565b61288b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612882906144a1565b60405180910390fd5b6000600a600084815260200190815260200160002080546128ab906149c4565b80601f01602080910402602001604051908101604052809291908181526020018280546128d7906149c4565b80156129245780601f106128f957610100808354040283529160200191612924565b820191906000526020600020905b81548152906001019060200180831161290757829003601f168201915b505050505090506000612935612ca6565b905060008151141561294b57819250505061298e565b60008251111561298057808260405160200161296892919061417c565b6040516020818303038152906040529250505061298e565b61298984612d38565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612a5e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612a6e5750612a6d82612ddf565b5b9050919050565b600081600001549050919050565b612a9d828260405180602001604052806000815250612e49565b5050565b6001816000016000828254019250508190555050565b612abf611639565b15612aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af690614401565b60405180910390fd5b612b0a838383612ea4565b505050565b6000612b308473ffffffffffffffffffffffffffffffffffffffff16612fb8565b15612c99578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b59612174565b8786866040518563ffffffff1660e01b8152600401612b7b94939291906141d6565b602060405180830381600087803b158015612b9557600080fd5b505af1925050508015612bc657506040513d601f19601f82011682018060405250810190612bc39190613b1f565b60015b612c49573d8060008114612bf6576040519150601f19603f3d011682016040523d82523d6000602084013e612bfb565b606091505b50600081511415612c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3890614301565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c9e565b600190505b949350505050565b606060118054612cb5906149c4565b80601f0160208091040260200160405190810160405280929190818152602001828054612ce1906149c4565b8015612d2e5780601f10612d0357610100808354040283529160200191612d2e565b820191906000526020600020905b815481529060010190602001808311612d1157829003601f168201915b5050505050905090565b6060612d4382612108565b612d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7990614541565b60405180910390fd5b6000612d8c612ca6565b90506000815111612dac5760405180602001604052806000815250612dd7565b80612db684612fcb565b604051602001612dc792919061417c565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e53838361312c565b612e606000848484612b0f565b612e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9690614301565b60405180910390fd5b505050565b612eaf8383836132fa565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ef257612eed816132ff565b612f31565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f3057612f2f8382613348565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f7457612f6f816134b5565b612fb3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612fb257612fb18282613586565b5b5b505050565b600080823b905060008111915050919050565b60606000821415613013576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613127565b600082905060005b6000821461304557808061302e90614a27565b915050600a8261303e91906147fc565b915061301b565b60008167ffffffffffffffff81111561306157613060614bb6565b5b6040519080825280601f01601f1916602001820160405280156130935781602001600182028036833780820191505090505b5090505b60008514613120576001826130ac9190614887565b9150600a856130bb9190614a9a565b60306130c791906147a6565b60f81b8183815181106130dd576130dc614b87565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561311991906147fc565b9450613097565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561319c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319390614481565b60405180910390fd5b6131a581612108565b156131e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dc90614341565b60405180910390fd5b6131f160008383612ab7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461324191906147a6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161335584611790565b61335f9190614887565b9050600060076000848152602001908152602001600020549050818114613444576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506134c99190614887565b90506000600960008481526020019081526020016000205490506000600883815481106134f9576134f8614b87565b5b90600052602060002001549050806008838154811061351b5761351a614b87565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061356a57613569614b58565b5b6001900381819060005260206000200160009055905550505050565b600061359183611790565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054613611906149c4565b90600052602060002090601f016020900481019282613633576000855561367a565b82601f1061364c57805160ff191683800117855561367a565b8280016001018555821561367a579182015b8281111561367957825182559160200191906001019061365e565b5b509050613687919061368b565b5090565b5b808211156136a457600081600090555060010161368c565b5090565b60006136bb6136b68461469c565b614677565b905080838252602082019050828560208602820111156136de576136dd614bea565b5b60005b8581101561370e57816136f4888261379c565b8452602084019350602083019250506001810190506136e1565b5050509392505050565b600061372b613726846146c8565b614677565b90508281526020810184848401111561374757613746614bef565b5b613752848285614982565b509392505050565b600061376d613768846146f9565b614677565b90508281526020810184848401111561378957613788614bef565b5b613794848285614982565b509392505050565b6000813590506137ab81615363565b92915050565b6000813590506137c08161537a565b92915050565b600082601f8301126137db576137da614be5565b5b81356137eb8482602086016136a8565b91505092915050565b60008135905061380381615391565b92915050565b600081359050613818816153a8565b92915050565b60008151905061382d816153a8565b92915050565b600082601f83011261384857613847614be5565b5b8135613858848260208601613718565b91505092915050565b600082601f83011261387657613875614be5565b5b813561388684826020860161375a565b91505092915050565b60008135905061389e816153bf565b92915050565b6000813590506138b3816153d6565b92915050565b6000602082840312156138cf576138ce614bf9565b5b60006138dd8482850161379c565b91505092915050565b6000602082840312156138fc576138fb614bf9565b5b600061390a848285016137b1565b91505092915050565b6000806040838503121561392a57613929614bf9565b5b60006139388582860161379c565b92505060206139498582860161379c565b9150509250929050565b60008060006060848603121561396c5761396b614bf9565b5b600061397a8682870161379c565b935050602061398b8682870161379c565b925050604061399c8682870161388f565b9150509250925092565b600080600080608085870312156139c0576139bf614bf9565b5b60006139ce8782880161379c565b94505060206139df8782880161379c565b93505060406139f08782880161388f565b925050606085013567ffffffffffffffff811115613a1157613a10614bf4565b5b613a1d87828801613833565b91505092959194509250565b60008060408385031215613a4057613a3f614bf9565b5b6000613a4e8582860161379c565b9250506020613a5f858286016137f4565b9150509250929050565b60008060408385031215613a8057613a7f614bf9565b5b6000613a8e8582860161379c565b9250506020613a9f8582860161388f565b9150509250929050565b600060208284031215613abf57613abe614bf9565b5b600082013567ffffffffffffffff811115613add57613adc614bf4565b5b613ae9848285016137c6565b91505092915050565b600060208284031215613b0857613b07614bf9565b5b6000613b1684828501613809565b91505092915050565b600060208284031215613b3557613b34614bf9565b5b6000613b438482850161381e565b91505092915050565b600060208284031215613b6257613b61614bf9565b5b600082013567ffffffffffffffff811115613b8057613b7f614bf4565b5b613b8c84828501613861565b91505092915050565b600060208284031215613bab57613baa614bf9565b5b6000613bb98482850161388f565b91505092915050565b600060208284031215613bd857613bd7614bf9565b5b6000613be6848285016138a4565b91505092915050565b6000613bfb838361414f565b60208301905092915050565b613c1081614901565b82525050565b613c1f816148ef565b82525050565b6000613c308261473a565b613c3a8185614768565b9350613c458361472a565b8060005b83811015613c76578151613c5d8882613bef565b9750613c688361475b565b925050600181019050613c49565b5085935050505092915050565b613c8c81614913565b82525050565b6000613c9d82614745565b613ca78185614779565b9350613cb7818560208601614991565b613cc081614bfe565b840191505092915050565b6000613cd682614750565b613ce0818561478a565b9350613cf0818560208601614991565b613cf981614bfe565b840191505092915050565b6000613d0f82614750565b613d19818561479b565b9350613d29818560208601614991565b80840191505092915050565b6000613d42601d8361478a565b9150613d4d82614c0f565b602082019050919050565b6000613d6560148361478a565b9150613d7082614c38565b602082019050919050565b6000613d8860238361478a565b9150613d9382614c61565b604082019050919050565b6000613dab602b8361478a565b9150613db682614cb0565b604082019050919050565b6000613dce60328361478a565b9150613dd982614cff565b604082019050919050565b6000613df160268361478a565b9150613dfc82614d4e565b604082019050919050565b6000613e14601c8361478a565b9150613e1f82614d9d565b602082019050919050565b6000613e37600e8361478a565b9150613e4282614dc6565b602082019050919050565b6000613e5a60248361478a565b9150613e6582614def565b604082019050919050565b6000613e7d60198361478a565b9150613e8882614e3e565b602082019050919050565b6000613ea060138361478a565b9150613eab82614e67565b602082019050919050565b6000613ec3602c8361478a565b9150613ece82614e90565b604082019050919050565b6000613ee660108361478a565b9150613ef182614edf565b602082019050919050565b6000613f0960388361478a565b9150613f1482614f08565b604082019050919050565b6000613f2c602a8361478a565b9150613f3782614f57565b604082019050919050565b6000613f4f60298361478a565b9150613f5a82614fa6565b604082019050919050565b6000613f7260208361478a565b9150613f7d82614ff5565b602082019050919050565b6000613f9560318361478a565b9150613fa08261501e565b604082019050919050565b6000613fb8601b8361478a565b9150613fc38261506d565b602082019050919050565b6000613fdb602c8361478a565b9150613fe682615096565b604082019050919050565b6000613ffe60208361478a565b9150614009826150e5565b602082019050919050565b600061402160298361478a565b915061402c8261510e565b604082019050919050565b6000614044602f8361478a565b915061404f8261515d565b604082019050919050565b600061406760218361478a565b9150614072826151ac565b604082019050919050565b600061408a60318361478a565b9150614095826151fb565b604082019050919050565b60006140ad602c8361478a565b91506140b88261524a565b604082019050919050565b60006140d060218361478a565b91506140db82615299565b604082019050919050565b60006140f360118361478a565b91506140fe826152e8565b602082019050919050565b600061411660128361478a565b915061412182615311565b602082019050919050565b600061413960148361478a565b91506141448261533a565b602082019050919050565b6141588161496b565b82525050565b6141678161496b565b82525050565b61417681614975565b82525050565b60006141888285613d04565b91506141948284613d04565b91508190509392505050565b60006020820190506141b56000830184613c16565b92915050565b60006020820190506141d06000830184613c07565b92915050565b60006080820190506141eb6000830187613c16565b6141f86020830186613c16565b614205604083018561415e565b81810360608301526142178184613c92565b905095945050505050565b6000602082019050818103600083015261423c8184613c25565b905092915050565b60006020820190506142596000830184613c83565b92915050565b600060208201905081810360008301526142798184613ccb565b905092915050565b6000602082019050818103600083015261429a81613d35565b9050919050565b600060208201905081810360008301526142ba81613d58565b9050919050565b600060208201905081810360008301526142da81613d7b565b9050919050565b600060208201905081810360008301526142fa81613d9e565b9050919050565b6000602082019050818103600083015261431a81613dc1565b9050919050565b6000602082019050818103600083015261433a81613de4565b9050919050565b6000602082019050818103600083015261435a81613e07565b9050919050565b6000602082019050818103600083015261437a81613e2a565b9050919050565b6000602082019050818103600083015261439a81613e4d565b9050919050565b600060208201905081810360008301526143ba81613e70565b9050919050565b600060208201905081810360008301526143da81613e93565b9050919050565b600060208201905081810360008301526143fa81613eb6565b9050919050565b6000602082019050818103600083015261441a81613ed9565b9050919050565b6000602082019050818103600083015261443a81613efc565b9050919050565b6000602082019050818103600083015261445a81613f1f565b9050919050565b6000602082019050818103600083015261447a81613f42565b9050919050565b6000602082019050818103600083015261449a81613f65565b9050919050565b600060208201905081810360008301526144ba81613f88565b9050919050565b600060208201905081810360008301526144da81613fab565b9050919050565b600060208201905081810360008301526144fa81613fce565b9050919050565b6000602082019050818103600083015261451a81613ff1565b9050919050565b6000602082019050818103600083015261453a81614014565b9050919050565b6000602082019050818103600083015261455a81614037565b9050919050565b6000602082019050818103600083015261457a8161405a565b9050919050565b6000602082019050818103600083015261459a8161407d565b9050919050565b600060208201905081810360008301526145ba816140a0565b9050919050565b600060208201905081810360008301526145da816140c3565b9050919050565b600060208201905081810360008301526145fa816140e6565b9050919050565b6000602082019050818103600083015261461a81614109565b9050919050565b6000602082019050818103600083015261463a8161412c565b9050919050565b6000602082019050614656600083018461415e565b92915050565b6000602082019050614671600083018461416d565b92915050565b6000614681614692565b905061468d82826149f6565b919050565b6000604051905090565b600067ffffffffffffffff8211156146b7576146b6614bb6565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146e3576146e2614bb6565b5b6146ec82614bfe565b9050602081019050919050565b600067ffffffffffffffff82111561471457614713614bb6565b5b61471d82614bfe565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147b18261496b565b91506147bc8361496b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147f1576147f0614acb565b5b828201905092915050565b60006148078261496b565b91506148128361496b565b92508261482257614821614afa565b5b828204905092915050565b60006148388261496b565b91506148438361496b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561487c5761487b614acb565b5b828202905092915050565b60006148928261496b565b915061489d8361496b565b9250828210156148b0576148af614acb565b5b828203905092915050565b60006148c682614975565b91506148d183614975565b9250828210156148e4576148e3614acb565b5b828203905092915050565b60006148fa8261494b565b9050919050565b600061490c8261494b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156149af578082015181840152602081019050614994565b838111156149be576000848401525b50505050565b600060028204905060018216806149dc57607f821691505b602082108114156149f0576149ef614b29565b5b50919050565b6149ff82614bfe565b810181811067ffffffffffffffff82111715614a1e57614a1d614bb6565b5b80604052505050565b6000614a328261496b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a6557614a64614acb565b5b600182019050919050565b6000614a7b82614975565b915060ff821415614a8f57614a8e614acb565b5b600182019050919050565b6000614aa58261496b565b9150614ab08361496b565b925082614ac057614abf614afa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5072652d73616c6520686173206e6f742073746172746564207965742e000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f54686520616464726573732063616e206e6f206c6f6e676572207072652d6f7260008201527f6465720000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c652069736e2774206c6976652079657400000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f416c6c2042656172732068617665206265656e206d696e746564210000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f416c6c206d696e7473206f6620746865206164647265737320617265206f766560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5072652d73616c65206973206f7665722e000000000000000000000000000000600082015250565b7f42616c616e6365206d75737420626520302e0000000000000000000000000000600082015250565b7f416464726573732063616e6e6f7420626520302e000000000000000000000000600082015250565b61536c816148ef565b811461537757600080fd5b50565b61538381614901565b811461538e57600080fd5b50565b61539a81614913565b81146153a557600080fd5b50565b6153b18161491f565b81146153bc57600080fd5b50565b6153c88161496b565b81146153d357600080fd5b50565b6153df81614975565b81146153ea57600080fd5b5056fea2646970667358221220e324391ddc8f136b8349d4365b37fd3213d5afba7edb18669760da8845e620ae64736f6c63430008070033
Deployed Bytecode Sourcemap
48818:4184:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51139:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52834:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28529:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30088:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29611:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50121:665;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50792:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43201:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30978:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52077:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49079:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42869:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51808:59;;;;;;;;;;;;;:::i;:::-;;31388:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49036:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51590:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43391:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51873:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5393:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28223:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49251:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27953:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8228:94;;;;;;;;;;;;;:::i;:::-;;51747:55;;;;;;;;;;;;;:::i;:::-;;7577:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51975:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28698:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49315:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49790:325;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30381:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49688:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31644:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49399:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52679:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48992:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49279:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30747:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8477:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49351:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51139:445;51198:16;51223:18;51244:17;51254:6;51244:9;:17::i;:::-;51223:38;;51286:1;51272:10;:15;51268:309;;;51319:1;51305:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51298:23;;;;;51268:309;51344:23;51384:10;51370:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51344:51;;51404:13;51428:116;51452:10;51444:5;:18;51428:116;;;51500:34;51520:6;51528:5;51500:19;:34::i;:::-;51484:6;51491:5;51484:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;51464:7;;;;;:::i;:::-;;;;51428:116;;;51561:6;51554:13;;;;;51139:445;;;;:::o;52834:165::-;52937:4;52957:36;52981:11;52957:23;:36::i;:::-;52950:43;;52834:165;;;:::o;28529:100::-;28583:13;28616:5;28609:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28529:100;:::o;30088:221::-;30164:7;30192:16;30200:7;30192;:16::i;:::-;30184:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30277:15;:24;30293:7;30277:24;;;;;;;;;;;;;;;;;;;;;30270:31;;30088:221;;;:::o;29611:411::-;29692:13;29708:23;29723:7;29708:14;:23::i;:::-;29692:39;;29756:5;29750:11;;:2;:11;;;;29742:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29850:5;29834:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29859:37;29876:5;29883:12;:10;:12::i;:::-;29859:16;:37::i;:::-;29834:62;29812:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29993:21;30002:2;30006:7;29993:8;:21::i;:::-;29681:341;29611:411;;:::o;50121:665::-;5719:8;:6;:8::i;:::-;5718:9;5710:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;50219:15:::1;50204:11;;:30;;50196:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;50295:15;50283:8;;:27;;50275:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;50380:1;50347:18;:30;50366:10;50347:30;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;50339:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;50446:18;:30;50465:10;50446:30;;;;;;;;;;;;;;;;;;;;;;;;;50436:40;;:6;:40;;;;50428:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;50559:6;50542:23;;:14;;:23;;;;:::i;:::-;50529:9;:36;50521:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;50593:14;;;;;;;;;;;:23;;:48;50634:6;50617:23;;:14;;:23;;;;:::i;:::-;50593:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50684:6;50650:18;:30;50669:10;50650:30;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;50704:7;50699:80;50721:6;50717:10;;:1;:10;;;50699:80;;;50745:24;50758:10;50745:12;:24::i;:::-;50729:3;;;;;:::i;:::-;;;;50699:80;;;;50121:665:::0;:::o;50792:341::-;7808:12;:10;:12::i;:::-;7797:23;;:7;:5;:7::i;:::-;:23;;;7789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50883:9:::1;50878:250;50902:10;:17;50898:1;:21;50878:250;;;50968:1;50943:27;;:10;50954:1;50943:13;;;;;;;;:::i;:::-;;;;;;;;:27;;;;50935:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;51049:1;51012:18;:33;51031:10;51042:1;51031:13;;;;;;;;:::i;:::-;;;;;;;;51012:33;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;51004:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;51118:2;51082:18;:33;51101:10;51112:1;51101:13;;;;;;;;:::i;:::-;;;;;;;;51082:33;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;50921:3;;;;;:::i;:::-;;;;50878:250;;;;50792:341:::0;:::o;43201:113::-;43262:7;43289:10;:17;;;;43282:24;;43201:113;:::o;30978:339::-;31173:41;31192:12;:10;:12::i;:::-;31206:7;31173:18;:41::i;:::-;31165:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31281:28;31291:4;31297:2;31301:7;31281:9;:28::i;:::-;30978:339;;;:::o;52077:90::-;7808:12;:10;:12::i;:::-;7797:23;;:7;:5;:7::i;:::-;:23;;;7789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52154:7:::1;52143:8;:18;;;;52077:90:::0;:::o;49079:91::-;;;;;;;;;;;;;:::o;42869:256::-;42966:7;43002:23;43019:5;43002:16;:23::i;:::-;42994:5;:31;42986:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43091:12;:19;43104:5;43091:19;;;;;;;;;;;;;;;:26;43111:5;43091:26;;;;;;;;;;;;43084:33;;42869:256;;;;:::o;51808:59::-;7808:12;:10;:12::i;:::-;7797:23;;:7;:5;:7::i;:::-;:23;;;7789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51851:10:::1;:8;:10::i;:::-;51808:59::o:0;31388:185::-;31526:39;31543:4;31549:2;31553:7;31526:39;;;;;;;;;;;;:16;:39::i;:::-;31388:185;;;:::o;49036:36::-;;;;:::o;51590:151::-;7808:12;:10;:12::i;:::-;7797:23;;:7;:5;:7::i;:::-;:23;;;7789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51663:9:::1;51658:78;51682:6;51678:1;:10;51658:78;;;51704:24;51717:10;;;;;;;;;;;51704:12;:24::i;:::-;51690:3;;;;;:::i;:::-;;;;51658:78;;;;51590:151:::0;:::o;43391:233::-;43466:7;43502:30;:28;:30::i;:::-;43494:5;:38;43486:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43599:10;43610:5;43599:17;;;;;;;;:::i;:::-;;;;;;;;;;43592:24;;43391:233;;;:::o;51873:96::-;7808:12;:10;:12::i;:::-;7797:23;;:7;:5;:7::i;:::-;:23;;;7789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51953:10:::1;51943:7;:20;;;;;;;;;;;;:::i;:::-;;51873:96:::0;:::o;5393:86::-;5440:4;5464:7;;;;;;;;;;;5457:14;;5393:86;:::o;28223:239::-;28295:7;28315:13;28331:7;:16;28339:7;28331:16;;;;;;;;;;;;;;;;;;;;;28315:32;;28383:1;28366:19;;:5;:19;;;;28358:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28449:5;28442:12;;;28223:239;;;:::o;49251:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27953:208::-;28025:7;28070:1;28053:19;;:5;:19;;;;28045:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28137:9;:16;28147:5;28137:16;;;;;;;;;;;;;;;;28130:23;;27953:208;;;:::o;8228:94::-;7808:12;:10;:12::i;:::-;7797:23;;:7;:5;:7::i;:::-;:23;;;7789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8293:21:::1;8311:1;8293:9;:21::i;:::-;8228:94::o:0;51747:55::-;7808:12;:10;:12::i;:::-;7797:23;;:7;:5;:7::i;:::-;:23;;;7789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51788:8:::1;:6;:8::i;:::-;51747:55::o:0;7577:87::-;7623:7;7650:6;;;;;;;;;;;7643:13;;7577:87;:::o;51975:96::-;7808:12;:10;:12::i;:::-;7797:23;;:7;:5;:7::i;:::-;:23;;;7789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52058:7:::1;52044:11;:21;;;;51975:96:::0;:::o;28698:104::-;28754:13;28787:7;28780:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28698:104;:::o;49315:31::-;;;;:::o;49790:325::-;5719:8;:6;:8::i;:::-;5718:9;5710:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;49885:6:::1;49877:5;;:14;;;;:::i;:::-;49864:9;:27;49856:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;49938:15;49926:8;;:27;;49918:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;49984:14;;;;;;;;;;;:23;;:39;50016:6;50008:5;;:14;;;;:::i;:::-;49984:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50037:9;50032:78;50056:6;50052:1;:10;50032:78;;;50078:24;50091:10;50078:12;:24::i;:::-;50064:3;;;;;:::i;:::-;;;;50032:78;;;;49790:325:::0;:::o;30381:295::-;30496:12;:10;:12::i;:::-;30484:24;;:8;:24;;;;30476:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30596:8;30551:18;:32;30570:12;:10;:12::i;:::-;30551:32;;;;;;;;;;;;;;;:42;30584:8;30551:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30649:8;30620:48;;30635:12;:10;:12::i;:::-;30620:48;;;30659:8;30620:48;;;;;;:::i;:::-;;;;;;;;30381:295;;:::o;49688:96::-;7808:12;:10;:12::i;:::-;7797:23;;:7;:5;:7::i;:::-;:23;;;7789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49776:2:::1;49759:14;;:19;;;;;;;;;;;;;;;;;;49688:96:::0;:::o;31644:328::-;31819:41;31838:12;:10;:12::i;:::-;31852:7;31819:18;:41::i;:::-;31811:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31925:39;31939:4;31945:2;31949:7;31958:5;31925:13;:39::i;:::-;31644:328;;;;:::o;49399:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;52679:149::-;52770:13;52799:23;52814:7;52799:14;:23::i;:::-;52792:30;;52679:149;;;:::o;48992:39::-;;;;:::o;49279:31::-;;;;:::o;30747:164::-;30844:4;30868:18;:25;30887:5;30868:25;;;;;;;;;;;;;;;:35;30894:8;30868:35;;;;;;;;;;;;;;;;;;;;;;;;;30861:42;;30747:164;;;;:::o;8477:192::-;7808:12;:10;:12::i;:::-;7797:23;;:7;:5;:7::i;:::-;:23;;;7789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8586:1:::1;8566:22;;:8;:22;;;;8558:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8642:19;8652:8;8642:9;:19::i;:::-;8477:192:::0;:::o;49351:39::-;;;;:::o;42561:224::-;42663:4;42702:35;42687:50;;;:11;:50;;;;:90;;;;42741:36;42765:11;42741:23;:36::i;:::-;42687:90;42680:97;;42561:224;;;:::o;33482:127::-;33547:4;33599:1;33571:30;;:7;:16;33579:7;33571:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33564:37;;33482:127;;;:::o;4105:98::-;4158:7;4185:10;4178:17;;4105:98;:::o;37464:174::-;37566:2;37539:15;:24;37555:7;37539:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37622:7;37618:2;37584:46;;37593:23;37608:7;37593:14;:23::i;:::-;37584:46;;;;;;;;;;;;37464:174;;:::o;52173:190::-;52247:9;;52231:13;:11;:13::i;:::-;:25;52223:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;52295:34;52305:2;52309:19;:9;:17;:19::i;:::-;52295:9;:34::i;:::-;52336:21;:9;:19;:21::i;:::-;52173:190;:::o;33776:348::-;33869:4;33894:16;33902:7;33894;:16::i;:::-;33886:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33970:13;33986:23;34001:7;33986:14;:23::i;:::-;33970:39;;34039:5;34028:16;;:7;:16;;;:51;;;;34072:7;34048:31;;:20;34060:7;34048:11;:20::i;:::-;:31;;;34028:51;:87;;;;34083:32;34100:5;34107:7;34083:16;:32::i;:::-;34028:87;34020:96;;;33776:348;;;;:::o;36768:578::-;36927:4;36900:31;;:23;36915:7;36900:14;:23::i;:::-;:31;;;36892:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37010:1;36996:16;;:2;:16;;;;36988:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37066:39;37087:4;37093:2;37097:7;37066:20;:39::i;:::-;37170:29;37187:1;37191:7;37170:8;:29::i;:::-;37231:1;37212:9;:15;37222:4;37212:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37260:1;37243:9;:13;37253:2;37243:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37291:2;37272:7;:16;37280:7;37272:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37330:7;37326:2;37311:27;;37320:4;37311:27;;;;;;;;;;;;36768:578;;;:::o;6452:120::-;5996:8;:6;:8::i;:::-;5988:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;6521:5:::1;6511:7;;:15;;;;;;;;;;;;;;;;;;6542:22;6551:12;:10;:12::i;:::-;6542:22;;;;;;:::i;:::-;;;;;;;;6452:120::o:0;8677:173::-;8733:16;8752:6;;;;;;;;;;;8733:25;;8778:8;8769:6;;:17;;;;;;;;;;;;;;;;;;8833:8;8802:40;;8823:8;8802:40;;;;;;;;;;;;8722:128;8677:173;:::o;6193:118::-;5719:8;:6;:8::i;:::-;5718:9;5710:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;6263:4:::1;6253:7;;:14;;;;;;;;;;;;;;;;;;6283:20;6290:12;:10;:12::i;:::-;6283:20;;;;;;:::i;:::-;;;;;;;;6193:118::o:0;32854:315::-;33011:28;33021:4;33027:2;33031:7;33011:9;:28::i;:::-;33058:48;33081:4;33087:2;33091:7;33100:5;33058:22;:48::i;:::-;33050:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32854:315;;;;:::o;40137:679::-;40210:13;40244:16;40252:7;40244;:16::i;:::-;40236:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;40327:23;40353:10;:19;40364:7;40353:19;;;;;;;;;;;40327:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40383:18;40404:10;:8;:10::i;:::-;40383:31;;40512:1;40496:4;40490:18;:23;40486:72;;;40537:9;40530:16;;;;;;40486:72;40688:1;40668:9;40662:23;:27;40658:108;;;40737:4;40743:9;40720:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40706:48;;;;;;40658:108;40785:23;40800:7;40785:14;:23::i;:::-;40778:30;;;;40137:679;;;;:::o;27584:305::-;27686:4;27738:25;27723:40;;;:11;:40;;;;:105;;;;27795:33;27780:48;;;:11;:48;;;;27723:105;:158;;;;27845:36;27869:11;27845:23;:36::i;:::-;27723:158;27703:178;;27584:305;;;:::o;817:114::-;882:7;909;:14;;;902:21;;817:114;;;:::o;34466:110::-;34542:26;34552:2;34556:7;34542:26;;;;;;;;;;;;:9;:26::i;:::-;34466:110;;:::o;939:127::-;1046:1;1028:7;:14;;;:19;;;;;;;;;;;939:127;:::o;52369:189::-;5719:8;:6;:8::i;:::-;5718:9;5710:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;52507:45:::1;52534:4;52540:2;52544:7;52507:26;:45::i;:::-;52369:189:::0;;;:::o;38203:799::-;38358:4;38379:15;:2;:13;;;:15::i;:::-;38375:620;;;38431:2;38415:36;;;38452:12;:10;:12::i;:::-;38466:4;38472:7;38481:5;38415:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38411:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38674:1;38657:6;:13;:18;38653:272;;;38700:60;;;;;;;;;;:::i;:::-;;;;;;;;38653:272;38875:6;38869:13;38860:6;38856:2;38852:15;38845:38;38411:529;38548:41;;;38538:51;;;:6;:51;;;;38531:58;;;;;38375:620;38979:4;38972:11;;38203:799;;;;;;;:::o;49588:94::-;49640:13;49669:7;49662:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49588:94;:::o;28873:334::-;28946:13;28980:16;28988:7;28980;:16::i;:::-;28972:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29061:21;29085:10;:8;:10::i;:::-;29061:34;;29137:1;29119:7;29113:21;:25;:86;;;;;;;;;;;;;;;;;29165:7;29174:18;:7;:16;:18::i;:::-;29148:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29113:86;29106:93;;;28873:334;;;:::o;19563:157::-;19648:4;19687:25;19672:40;;;:11;:40;;;;19665:47;;19563:157;;;:::o;34803:321::-;34933:18;34939:2;34943:7;34933:5;:18::i;:::-;34984:54;35015:1;35019:2;35023:7;35032:5;34984:22;:54::i;:::-;34962:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34803:321;;;:::o;44237:589::-;44381:45;44408:4;44414:2;44418:7;44381:26;:45::i;:::-;44459:1;44443:18;;:4;:18;;;44439:187;;;44478:40;44510:7;44478:31;:40::i;:::-;44439:187;;;44548:2;44540:10;;:4;:10;;;44536:90;;44567:47;44600:4;44606:7;44567:32;:47::i;:::-;44536:90;44439:187;44654:1;44640:16;;:2;:16;;;44636:183;;;44673:45;44710:7;44673:36;:45::i;:::-;44636:183;;;44746:4;44740:10;;:2;:10;;;44736:83;;44767:40;44795:2;44799:7;44767:27;:40::i;:::-;44736:83;44636:183;44237:589;;;:::o;9623:387::-;9683:4;9891:12;9958:7;9946:20;9938:28;;10001:1;9994:4;:8;9987:15;;;9623:387;;;:::o;1721:723::-;1777:13;2007:1;1998:5;:10;1994:53;;;2025:10;;;;;;;;;;;;;;;;;;;;;1994:53;2057:12;2072:5;2057:20;;2088:14;2113:78;2128:1;2120:4;:9;2113:78;;2146:8;;;;;:::i;:::-;;;;2177:2;2169:10;;;;;:::i;:::-;;;2113:78;;;2201:19;2233:6;2223:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2201:39;;2251:154;2267:1;2258:5;:10;2251:154;;2295:1;2285:11;;;;;:::i;:::-;;;2362:2;2354:5;:10;;;;:::i;:::-;2341:2;:24;;;;:::i;:::-;2328:39;;2311:6;2318;2311:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2391:2;2382:11;;;;;:::i;:::-;;;2251:154;;;2429:6;2415:21;;;;;1721:723;;;;:::o;35460:382::-;35554:1;35540:16;;:2;:16;;;;35532:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35613:16;35621:7;35613;:16::i;:::-;35612:17;35604:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35675:45;35704:1;35708:2;35712:7;35675:20;:45::i;:::-;35750:1;35733:9;:13;35743:2;35733:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35781:2;35762:7;:16;35770:7;35762:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35826:7;35822:2;35801:33;;35818:1;35801:33;;;;;;;;;;;;35460:382;;:::o;39574:126::-;;;;:::o;45549:164::-;45653:10;:17;;;;45626:15;:24;45642:7;45626:24;;;;;;;;;;;:44;;;;45681:10;45697:7;45681:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45549:164;:::o;46340:988::-;46606:22;46656:1;46631:22;46648:4;46631:16;:22::i;:::-;:26;;;;:::i;:::-;46606:51;;46668:18;46689:17;:26;46707:7;46689:26;;;;;;;;;;;;46668:47;;46836:14;46822:10;:28;46818:328;;46867:19;46889:12;:18;46902:4;46889:18;;;;;;;;;;;;;;;:34;46908:14;46889:34;;;;;;;;;;;;46867:56;;46973:11;46940:12;:18;46953:4;46940:18;;;;;;;;;;;;;;;:30;46959:10;46940:30;;;;;;;;;;;:44;;;;47090:10;47057:17;:30;47075:11;47057:30;;;;;;;;;;;:43;;;;46852:294;46818:328;47242:17;:26;47260:7;47242:26;;;;;;;;;;;47235:33;;;47286:12;:18;47299:4;47286:18;;;;;;;;;;;;;;;:34;47305:14;47286:34;;;;;;;;;;;47279:41;;;46421:907;;46340:988;;:::o;47623:1079::-;47876:22;47921:1;47901:10;:17;;;;:21;;;;:::i;:::-;47876:46;;47933:18;47954:15;:24;47970:7;47954:24;;;;;;;;;;;;47933:45;;48305:19;48327:10;48338:14;48327:26;;;;;;;;:::i;:::-;;;;;;;;;;48305:48;;48391:11;48366:10;48377;48366:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48502:10;48471:15;:28;48487:11;48471:28;;;;;;;;;;;:41;;;;48643:15;:24;48659:7;48643:24;;;;;;;;;;;48636:31;;;48678:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47694:1008;;;47623:1079;:::o;45127:221::-;45212:14;45229:20;45246:2;45229:16;:20::i;:::-;45212:37;;45287:7;45260:12;:16;45273:2;45260:16;;;;;;;;;;;;;;;:24;45277:6;45260:24;;;;;;;;;;;:34;;;;45334:6;45305:17;:26;45323:7;45305:26;;;;;;;;;;;:35;;;;45201:147;45127:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1731:155::-;1785:5;1823:6;1810:20;1801:29;;1839:41;1874:5;1839:41;:::i;:::-;1731:155;;;;:::o;1909:370::-;1980:5;2029:3;2022:4;2014:6;2010:17;2006:27;1996:122;;2037:79;;:::i;:::-;1996:122;2154:6;2141:20;2179:94;2269:3;2261:6;2254:4;2246:6;2242:17;2179:94;:::i;:::-;2170:103;;1986:293;1909:370;;;;:::o;2285:133::-;2328:5;2366:6;2353:20;2344:29;;2382:30;2406:5;2382:30;:::i;:::-;2285:133;;;;:::o;2424:137::-;2469:5;2507:6;2494:20;2485:29;;2523:32;2549:5;2523:32;:::i;:::-;2424:137;;;;:::o;2567:141::-;2623:5;2654:6;2648:13;2639:22;;2670:32;2696:5;2670:32;:::i;:::-;2567:141;;;;:::o;2727:338::-;2782:5;2831:3;2824:4;2816:6;2812:17;2808:27;2798:122;;2839:79;;:::i;:::-;2798:122;2956:6;2943:20;2981:78;3055:3;3047:6;3040:4;3032:6;3028:17;2981:78;:::i;:::-;2972:87;;2788:277;2727:338;;;;:::o;3085:340::-;3141:5;3190:3;3183:4;3175:6;3171:17;3167:27;3157:122;;3198:79;;:::i;:::-;3157:122;3315:6;3302:20;3340:79;3415:3;3407:6;3400:4;3392:6;3388:17;3340:79;:::i;:::-;3331:88;;3147:278;3085:340;;;;:::o;3431:139::-;3477:5;3515:6;3502:20;3493:29;;3531:33;3558:5;3531:33;:::i;:::-;3431:139;;;;:::o;3576:135::-;3620:5;3658:6;3645:20;3636:29;;3674:31;3699:5;3674:31;:::i;:::-;3576:135;;;;:::o;3717:329::-;3776:6;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;3717:329;;;;:::o;4052:345::-;4119:6;4168:2;4156:9;4147:7;4143:23;4139:32;4136:119;;;4174:79;;:::i;:::-;4136:119;4294:1;4319:61;4372:7;4363:6;4352:9;4348:22;4319:61;:::i;:::-;4309:71;;4265:125;4052:345;;;;:::o;4403:474::-;4471:6;4479;4528:2;4516:9;4507:7;4503:23;4499:32;4496:119;;;4534:79;;:::i;:::-;4496:119;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4403:474;;;;;:::o;4883:619::-;4960:6;4968;4976;5025:2;5013:9;5004:7;5000:23;4996:32;4993:119;;;5031:79;;:::i;:::-;4993:119;5151:1;5176:53;5221:7;5212:6;5201:9;5197:22;5176:53;:::i;:::-;5166:63;;5122:117;5278:2;5304:53;5349:7;5340:6;5329:9;5325:22;5304:53;:::i;:::-;5294:63;;5249:118;5406:2;5432:53;5477:7;5468:6;5457:9;5453:22;5432:53;:::i;:::-;5422:63;;5377:118;4883:619;;;;;:::o;5508:943::-;5603:6;5611;5619;5627;5676:3;5664:9;5655:7;5651:23;5647:33;5644:120;;;5683:79;;:::i;:::-;5644:120;5803:1;5828:53;5873:7;5864:6;5853:9;5849:22;5828:53;:::i;:::-;5818:63;;5774:117;5930:2;5956:53;6001:7;5992:6;5981:9;5977:22;5956:53;:::i;:::-;5946:63;;5901:118;6058:2;6084:53;6129:7;6120:6;6109:9;6105:22;6084:53;:::i;:::-;6074:63;;6029:118;6214:2;6203:9;6199:18;6186:32;6245:18;6237:6;6234:30;6231:117;;;6267:79;;:::i;:::-;6231:117;6372:62;6426:7;6417:6;6406:9;6402:22;6372:62;:::i;:::-;6362:72;;6157:287;5508:943;;;;;;;:::o;6457:468::-;6522:6;6530;6579:2;6567:9;6558:7;6554:23;6550:32;6547:119;;;6585:79;;:::i;:::-;6547:119;6705:1;6730:53;6775:7;6766:6;6755:9;6751:22;6730:53;:::i;:::-;6720:63;;6676:117;6832:2;6858:50;6900:7;6891:6;6880:9;6876:22;6858:50;:::i;:::-;6848:60;;6803:115;6457:468;;;;;:::o;6931:474::-;6999:6;7007;7056:2;7044:9;7035:7;7031:23;7027:32;7024:119;;;7062:79;;:::i;:::-;7024:119;7182:1;7207:53;7252:7;7243:6;7232:9;7228:22;7207:53;:::i;:::-;7197:63;;7153:117;7309:2;7335:53;7380:7;7371:6;7360:9;7356:22;7335:53;:::i;:::-;7325:63;;7280:118;6931:474;;;;;:::o;7411:539::-;7495:6;7544:2;7532:9;7523:7;7519:23;7515:32;7512:119;;;7550:79;;:::i;:::-;7512:119;7698:1;7687:9;7683:17;7670:31;7728:18;7720:6;7717:30;7714:117;;;7750:79;;:::i;:::-;7714:117;7855:78;7925:7;7916:6;7905:9;7901:22;7855:78;:::i;:::-;7845:88;;7641:302;7411:539;;;;:::o;7956:327::-;8014:6;8063:2;8051:9;8042:7;8038:23;8034:32;8031:119;;;8069:79;;:::i;:::-;8031:119;8189:1;8214:52;8258:7;8249:6;8238:9;8234:22;8214:52;:::i;:::-;8204:62;;8160:116;7956:327;;;;:::o;8289:349::-;8358:6;8407:2;8395:9;8386:7;8382:23;8378:32;8375:119;;;8413:79;;:::i;:::-;8375:119;8533:1;8558:63;8613:7;8604:6;8593:9;8589:22;8558:63;:::i;:::-;8548:73;;8504:127;8289:349;;;;:::o;8644:509::-;8713:6;8762:2;8750:9;8741:7;8737:23;8733:32;8730:119;;;8768:79;;:::i;:::-;8730:119;8916:1;8905:9;8901:17;8888:31;8946:18;8938:6;8935:30;8932:117;;;8968:79;;:::i;:::-;8932:117;9073:63;9128:7;9119:6;9108:9;9104:22;9073:63;:::i;:::-;9063:73;;8859:287;8644:509;;;;:::o;9159:329::-;9218:6;9267:2;9255:9;9246:7;9242:23;9238:32;9235:119;;;9273:79;;:::i;:::-;9235:119;9393:1;9418:53;9463:7;9454:6;9443:9;9439:22;9418:53;:::i;:::-;9408:63;;9364:117;9159:329;;;;:::o;9494:325::-;9551:6;9600:2;9588:9;9579:7;9575:23;9571:32;9568:119;;;9606:79;;:::i;:::-;9568:119;9726:1;9751:51;9794:7;9785:6;9774:9;9770:22;9751:51;:::i;:::-;9741:61;;9697:115;9494:325;;;;:::o;9825:179::-;9894:10;9915:46;9957:3;9949:6;9915:46;:::i;:::-;9993:4;9988:3;9984:14;9970:28;;9825:179;;;;:::o;10010:142::-;10113:32;10139:5;10113:32;:::i;:::-;10108:3;10101:45;10010:142;;:::o;10158:118::-;10245:24;10263:5;10245:24;:::i;:::-;10240:3;10233:37;10158:118;;:::o;10312:732::-;10431:3;10460:54;10508:5;10460:54;:::i;:::-;10530:86;10609:6;10604:3;10530:86;:::i;:::-;10523:93;;10640:56;10690:5;10640:56;:::i;:::-;10719:7;10750:1;10735:284;10760:6;10757:1;10754:13;10735:284;;;10836:6;10830:13;10863:63;10922:3;10907:13;10863:63;:::i;:::-;10856:70;;10949:60;11002:6;10949:60;:::i;:::-;10939:70;;10795:224;10782:1;10779;10775:9;10770:14;;10735:284;;;10739:14;11035:3;11028:10;;10436:608;;;10312:732;;;;:::o;11050:109::-;11131:21;11146:5;11131:21;:::i;:::-;11126:3;11119:34;11050:109;;:::o;11165:360::-;11251:3;11279:38;11311:5;11279:38;:::i;:::-;11333:70;11396:6;11391:3;11333:70;:::i;:::-;11326:77;;11412:52;11457:6;11452:3;11445:4;11438:5;11434:16;11412:52;:::i;:::-;11489:29;11511:6;11489:29;:::i;:::-;11484:3;11480:39;11473:46;;11255:270;11165:360;;;;:::o;11531:364::-;11619:3;11647:39;11680:5;11647:39;:::i;:::-;11702:71;11766:6;11761:3;11702:71;:::i;:::-;11695:78;;11782:52;11827:6;11822:3;11815:4;11808:5;11804:16;11782:52;:::i;:::-;11859:29;11881:6;11859:29;:::i;:::-;11854:3;11850:39;11843:46;;11623:272;11531:364;;;;:::o;11901:377::-;12007:3;12035:39;12068:5;12035:39;:::i;:::-;12090:89;12172:6;12167:3;12090:89;:::i;:::-;12083:96;;12188:52;12233:6;12228:3;12221:4;12214:5;12210:16;12188:52;:::i;:::-;12265:6;12260:3;12256:16;12249:23;;12011:267;11901:377;;;;:::o;12284:366::-;12426:3;12447:67;12511:2;12506:3;12447:67;:::i;:::-;12440:74;;12523:93;12612:3;12523:93;:::i;:::-;12641:2;12636:3;12632:12;12625:19;;12284:366;;;:::o;12656:::-;12798:3;12819:67;12883:2;12878:3;12819:67;:::i;:::-;12812:74;;12895:93;12984:3;12895:93;:::i;:::-;13013:2;13008:3;13004:12;12997:19;;12656:366;;;:::o;13028:::-;13170:3;13191:67;13255:2;13250:3;13191:67;:::i;:::-;13184:74;;13267:93;13356:3;13267:93;:::i;:::-;13385:2;13380:3;13376:12;13369:19;;13028:366;;;:::o;13400:::-;13542:3;13563:67;13627:2;13622:3;13563:67;:::i;:::-;13556:74;;13639:93;13728:3;13639:93;:::i;:::-;13757:2;13752:3;13748:12;13741:19;;13400:366;;;:::o;13772:::-;13914:3;13935:67;13999:2;13994:3;13935:67;:::i;:::-;13928:74;;14011:93;14100:3;14011:93;:::i;:::-;14129:2;14124:3;14120:12;14113:19;;13772:366;;;:::o;14144:::-;14286:3;14307:67;14371:2;14366:3;14307:67;:::i;:::-;14300:74;;14383:93;14472:3;14383:93;:::i;:::-;14501:2;14496:3;14492:12;14485:19;;14144:366;;;:::o;14516:::-;14658:3;14679:67;14743:2;14738:3;14679:67;:::i;:::-;14672:74;;14755:93;14844:3;14755:93;:::i;:::-;14873:2;14868:3;14864:12;14857:19;;14516:366;;;:::o;14888:::-;15030:3;15051:67;15115:2;15110:3;15051:67;:::i;:::-;15044:74;;15127:93;15216:3;15127:93;:::i;:::-;15245:2;15240:3;15236:12;15229:19;;14888:366;;;:::o;15260:::-;15402:3;15423:67;15487:2;15482:3;15423:67;:::i;:::-;15416:74;;15499:93;15588:3;15499:93;:::i;:::-;15617:2;15612:3;15608:12;15601:19;;15260:366;;;:::o;15632:::-;15774:3;15795:67;15859:2;15854:3;15795:67;:::i;:::-;15788:74;;15871:93;15960:3;15871:93;:::i;:::-;15989:2;15984:3;15980:12;15973:19;;15632:366;;;:::o;16004:::-;16146:3;16167:67;16231:2;16226:3;16167:67;:::i;:::-;16160:74;;16243:93;16332:3;16243:93;:::i;:::-;16361:2;16356:3;16352:12;16345:19;;16004:366;;;:::o;16376:::-;16518:3;16539:67;16603:2;16598:3;16539:67;:::i;:::-;16532:74;;16615:93;16704:3;16615:93;:::i;:::-;16733:2;16728:3;16724:12;16717:19;;16376:366;;;:::o;16748:::-;16890:3;16911:67;16975:2;16970:3;16911:67;:::i;:::-;16904:74;;16987:93;17076:3;16987:93;:::i;:::-;17105:2;17100:3;17096:12;17089:19;;16748:366;;;:::o;17120:::-;17262:3;17283:67;17347:2;17342:3;17283:67;:::i;:::-;17276:74;;17359:93;17448:3;17359:93;:::i;:::-;17477:2;17472:3;17468:12;17461:19;;17120:366;;;:::o;17492:::-;17634:3;17655:67;17719:2;17714:3;17655:67;:::i;:::-;17648:74;;17731:93;17820:3;17731:93;:::i;:::-;17849:2;17844:3;17840:12;17833:19;;17492:366;;;:::o;17864:::-;18006:3;18027:67;18091:2;18086:3;18027:67;:::i;:::-;18020:74;;18103:93;18192:3;18103:93;:::i;:::-;18221:2;18216:3;18212:12;18205:19;;17864:366;;;:::o;18236:::-;18378:3;18399:67;18463:2;18458:3;18399:67;:::i;:::-;18392:74;;18475:93;18564:3;18475:93;:::i;:::-;18593:2;18588:3;18584:12;18577:19;;18236:366;;;:::o;18608:::-;18750:3;18771:67;18835:2;18830:3;18771:67;:::i;:::-;18764:74;;18847:93;18936:3;18847:93;:::i;:::-;18965:2;18960:3;18956:12;18949:19;;18608:366;;;:::o;18980:::-;19122:3;19143:67;19207:2;19202:3;19143:67;:::i;:::-;19136:74;;19219:93;19308:3;19219:93;:::i;:::-;19337:2;19332:3;19328:12;19321:19;;18980:366;;;:::o;19352:::-;19494:3;19515:67;19579:2;19574:3;19515:67;:::i;:::-;19508:74;;19591:93;19680:3;19591:93;:::i;:::-;19709:2;19704:3;19700:12;19693:19;;19352:366;;;:::o;19724:::-;19866:3;19887:67;19951:2;19946:3;19887:67;:::i;:::-;19880:74;;19963:93;20052:3;19963:93;:::i;:::-;20081:2;20076:3;20072:12;20065:19;;19724:366;;;:::o;20096:::-;20238:3;20259:67;20323:2;20318:3;20259:67;:::i;:::-;20252:74;;20335:93;20424:3;20335:93;:::i;:::-;20453:2;20448:3;20444:12;20437:19;;20096:366;;;:::o;20468:::-;20610:3;20631:67;20695:2;20690:3;20631:67;:::i;:::-;20624:74;;20707:93;20796:3;20707:93;:::i;:::-;20825:2;20820:3;20816:12;20809:19;;20468:366;;;:::o;20840:::-;20982:3;21003:67;21067:2;21062:3;21003:67;:::i;:::-;20996:74;;21079:93;21168:3;21079:93;:::i;:::-;21197:2;21192:3;21188:12;21181:19;;20840:366;;;:::o;21212:::-;21354:3;21375:67;21439:2;21434:3;21375:67;:::i;:::-;21368:74;;21451:93;21540:3;21451:93;:::i;:::-;21569:2;21564:3;21560:12;21553:19;;21212:366;;;:::o;21584:::-;21726:3;21747:67;21811:2;21806:3;21747:67;:::i;:::-;21740:74;;21823:93;21912:3;21823:93;:::i;:::-;21941:2;21936:3;21932:12;21925:19;;21584:366;;;:::o;21956:::-;22098:3;22119:67;22183:2;22178:3;22119:67;:::i;:::-;22112:74;;22195:93;22284:3;22195:93;:::i;:::-;22313:2;22308:3;22304:12;22297:19;;21956:366;;;:::o;22328:::-;22470:3;22491:67;22555:2;22550:3;22491:67;:::i;:::-;22484:74;;22567:93;22656:3;22567:93;:::i;:::-;22685:2;22680:3;22676:12;22669:19;;22328:366;;;:::o;22700:::-;22842:3;22863:67;22927:2;22922:3;22863:67;:::i;:::-;22856:74;;22939:93;23028:3;22939:93;:::i;:::-;23057:2;23052:3;23048:12;23041:19;;22700:366;;;:::o;23072:::-;23214:3;23235:67;23299:2;23294:3;23235:67;:::i;:::-;23228:74;;23311:93;23400:3;23311:93;:::i;:::-;23429:2;23424:3;23420:12;23413:19;;23072:366;;;:::o;23444:108::-;23521:24;23539:5;23521:24;:::i;:::-;23516:3;23509:37;23444:108;;:::o;23558:118::-;23645:24;23663:5;23645:24;:::i;:::-;23640:3;23633:37;23558:118;;:::o;23682:112::-;23765:22;23781:5;23765:22;:::i;:::-;23760:3;23753:35;23682:112;;:::o;23800:435::-;23980:3;24002:95;24093:3;24084:6;24002:95;:::i;:::-;23995:102;;24114:95;24205:3;24196:6;24114:95;:::i;:::-;24107:102;;24226:3;24219:10;;23800:435;;;;;:::o;24241:222::-;24334:4;24372:2;24361:9;24357:18;24349:26;;24385:71;24453:1;24442:9;24438:17;24429:6;24385:71;:::i;:::-;24241:222;;;;:::o;24469:254::-;24578:4;24616:2;24605:9;24601:18;24593:26;;24629:87;24713:1;24702:9;24698:17;24689:6;24629:87;:::i;:::-;24469:254;;;;:::o;24729:640::-;24924:4;24962:3;24951:9;24947:19;24939:27;;24976:71;25044:1;25033:9;25029:17;25020:6;24976:71;:::i;:::-;25057:72;25125:2;25114:9;25110:18;25101:6;25057:72;:::i;:::-;25139;25207:2;25196:9;25192:18;25183:6;25139:72;:::i;:::-;25258:9;25252:4;25248:20;25243:2;25232:9;25228:18;25221:48;25286:76;25357:4;25348:6;25286:76;:::i;:::-;25278:84;;24729:640;;;;;;;:::o;25375:373::-;25518:4;25556:2;25545:9;25541:18;25533:26;;25605:9;25599:4;25595:20;25591:1;25580:9;25576:17;25569:47;25633:108;25736:4;25727:6;25633:108;:::i;:::-;25625:116;;25375:373;;;;:::o;25754:210::-;25841:4;25879:2;25868:9;25864:18;25856:26;;25892:65;25954:1;25943:9;25939:17;25930:6;25892:65;:::i;:::-;25754:210;;;;:::o;25970:313::-;26083:4;26121:2;26110:9;26106:18;26098:26;;26170:9;26164:4;26160:20;26156:1;26145:9;26141:17;26134:47;26198:78;26271:4;26262:6;26198:78;:::i;:::-;26190:86;;25970:313;;;;:::o;26289:419::-;26455:4;26493:2;26482:9;26478:18;26470:26;;26542:9;26536:4;26532:20;26528:1;26517:9;26513:17;26506:47;26570:131;26696:4;26570:131;:::i;:::-;26562:139;;26289:419;;;:::o;26714:::-;26880:4;26918:2;26907:9;26903:18;26895:26;;26967:9;26961:4;26957:20;26953:1;26942:9;26938:17;26931:47;26995:131;27121:4;26995:131;:::i;:::-;26987:139;;26714:419;;;:::o;27139:::-;27305:4;27343:2;27332:9;27328:18;27320:26;;27392:9;27386:4;27382:20;27378:1;27367:9;27363:17;27356:47;27420:131;27546:4;27420:131;:::i;:::-;27412:139;;27139:419;;;:::o;27564:::-;27730:4;27768:2;27757:9;27753:18;27745:26;;27817:9;27811:4;27807:20;27803:1;27792:9;27788:17;27781:47;27845:131;27971:4;27845:131;:::i;:::-;27837:139;;27564:419;;;:::o;27989:::-;28155:4;28193:2;28182:9;28178:18;28170:26;;28242:9;28236:4;28232:20;28228:1;28217:9;28213:17;28206:47;28270:131;28396:4;28270:131;:::i;:::-;28262:139;;27989:419;;;:::o;28414:::-;28580:4;28618:2;28607:9;28603:18;28595:26;;28667:9;28661:4;28657:20;28653:1;28642:9;28638:17;28631:47;28695:131;28821:4;28695:131;:::i;:::-;28687:139;;28414:419;;;:::o;28839:::-;29005:4;29043:2;29032:9;29028:18;29020:26;;29092:9;29086:4;29082:20;29078:1;29067:9;29063:17;29056:47;29120:131;29246:4;29120:131;:::i;:::-;29112:139;;28839:419;;;:::o;29264:::-;29430:4;29468:2;29457:9;29453:18;29445:26;;29517:9;29511:4;29507:20;29503:1;29492:9;29488:17;29481:47;29545:131;29671:4;29545:131;:::i;:::-;29537:139;;29264:419;;;:::o;29689:::-;29855:4;29893:2;29882:9;29878:18;29870:26;;29942:9;29936:4;29932:20;29928:1;29917:9;29913:17;29906:47;29970:131;30096:4;29970:131;:::i;:::-;29962:139;;29689:419;;;:::o;30114:::-;30280:4;30318:2;30307:9;30303:18;30295:26;;30367:9;30361:4;30357:20;30353:1;30342:9;30338:17;30331:47;30395:131;30521:4;30395:131;:::i;:::-;30387:139;;30114:419;;;:::o;30539:::-;30705:4;30743:2;30732:9;30728:18;30720:26;;30792:9;30786:4;30782:20;30778:1;30767:9;30763:17;30756:47;30820:131;30946:4;30820:131;:::i;:::-;30812:139;;30539:419;;;:::o;30964:::-;31130:4;31168:2;31157:9;31153:18;31145:26;;31217:9;31211:4;31207:20;31203:1;31192:9;31188:17;31181:47;31245:131;31371:4;31245:131;:::i;:::-;31237:139;;30964:419;;;:::o;31389:::-;31555:4;31593:2;31582:9;31578:18;31570:26;;31642:9;31636:4;31632:20;31628:1;31617:9;31613:17;31606:47;31670:131;31796:4;31670:131;:::i;:::-;31662:139;;31389:419;;;:::o;31814:::-;31980:4;32018:2;32007:9;32003:18;31995:26;;32067:9;32061:4;32057:20;32053:1;32042:9;32038:17;32031:47;32095:131;32221:4;32095:131;:::i;:::-;32087:139;;31814:419;;;:::o;32239:::-;32405:4;32443:2;32432:9;32428:18;32420:26;;32492:9;32486:4;32482:20;32478:1;32467:9;32463:17;32456:47;32520:131;32646:4;32520:131;:::i;:::-;32512:139;;32239:419;;;:::o;32664:::-;32830:4;32868:2;32857:9;32853:18;32845:26;;32917:9;32911:4;32907:20;32903:1;32892:9;32888:17;32881:47;32945:131;33071:4;32945:131;:::i;:::-;32937:139;;32664:419;;;:::o;33089:::-;33255:4;33293:2;33282:9;33278:18;33270:26;;33342:9;33336:4;33332:20;33328:1;33317:9;33313:17;33306:47;33370:131;33496:4;33370:131;:::i;:::-;33362:139;;33089:419;;;:::o;33514:::-;33680:4;33718:2;33707:9;33703:18;33695:26;;33767:9;33761:4;33757:20;33753:1;33742:9;33738:17;33731:47;33795:131;33921:4;33795:131;:::i;:::-;33787:139;;33514:419;;;:::o;33939:::-;34105:4;34143:2;34132:9;34128:18;34120:26;;34192:9;34186:4;34182:20;34178:1;34167:9;34163:17;34156:47;34220:131;34346:4;34220:131;:::i;:::-;34212:139;;33939:419;;;:::o;34364:::-;34530:4;34568:2;34557:9;34553:18;34545:26;;34617:9;34611:4;34607:20;34603:1;34592:9;34588:17;34581:47;34645:131;34771:4;34645:131;:::i;:::-;34637:139;;34364:419;;;:::o;34789:::-;34955:4;34993:2;34982:9;34978:18;34970:26;;35042:9;35036:4;35032:20;35028:1;35017:9;35013:17;35006:47;35070:131;35196:4;35070:131;:::i;:::-;35062:139;;34789:419;;;:::o;35214:::-;35380:4;35418:2;35407:9;35403:18;35395:26;;35467:9;35461:4;35457:20;35453:1;35442:9;35438:17;35431:47;35495:131;35621:4;35495:131;:::i;:::-;35487:139;;35214:419;;;:::o;35639:::-;35805:4;35843:2;35832:9;35828:18;35820:26;;35892:9;35886:4;35882:20;35878:1;35867:9;35863:17;35856:47;35920:131;36046:4;35920:131;:::i;:::-;35912:139;;35639:419;;;:::o;36064:::-;36230:4;36268:2;36257:9;36253:18;36245:26;;36317:9;36311:4;36307:20;36303:1;36292:9;36288:17;36281:47;36345:131;36471:4;36345:131;:::i;:::-;36337:139;;36064:419;;;:::o;36489:::-;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:::-;37080:4;37118:2;37107:9;37103:18;37095:26;;37167:9;37161:4;37157:20;37153:1;37142:9;37138:17;37131:47;37195:131;37321:4;37195:131;:::i;:::-;37187:139;;36914:419;;;:::o;37339:::-;37505:4;37543:2;37532:9;37528:18;37520:26;;37592:9;37586:4;37582:20;37578:1;37567:9;37563:17;37556:47;37620:131;37746:4;37620:131;:::i;:::-;37612:139;;37339:419;;;:::o;37764:::-;37930:4;37968:2;37957:9;37953:18;37945:26;;38017:9;38011:4;38007:20;38003:1;37992:9;37988:17;37981:47;38045:131;38171:4;38045:131;:::i;:::-;38037:139;;37764:419;;;:::o;38189:::-;38355:4;38393:2;38382:9;38378:18;38370:26;;38442:9;38436:4;38432:20;38428:1;38417:9;38413:17;38406:47;38470:131;38596:4;38470:131;:::i;:::-;38462:139;;38189:419;;;:::o;38614:::-;38780:4;38818:2;38807:9;38803:18;38795:26;;38867:9;38861:4;38857:20;38853:1;38842:9;38838:17;38831:47;38895:131;39021:4;38895:131;:::i;:::-;38887:139;;38614:419;;;:::o;39039:222::-;39132:4;39170:2;39159:9;39155:18;39147:26;;39183:71;39251:1;39240:9;39236:17;39227:6;39183:71;:::i;:::-;39039:222;;;;:::o;39267:214::-;39356:4;39394:2;39383:9;39379:18;39371:26;;39407:67;39471:1;39460:9;39456:17;39447:6;39407:67;:::i;:::-;39267:214;;;;:::o;39487:129::-;39521:6;39548:20;;:::i;:::-;39538:30;;39577:33;39605:4;39597:6;39577:33;:::i;:::-;39487:129;;;:::o;39622:75::-;39655:6;39688:2;39682:9;39672:19;;39622:75;:::o;39703:311::-;39780:4;39870:18;39862:6;39859:30;39856:56;;;39892:18;;:::i;:::-;39856:56;39942:4;39934:6;39930:17;39922:25;;40002:4;39996;39992:15;39984:23;;39703:311;;;:::o;40020:307::-;40081:4;40171:18;40163:6;40160:30;40157:56;;;40193:18;;:::i;:::-;40157:56;40231:29;40253:6;40231:29;:::i;:::-;40223:37;;40315:4;40309;40305:15;40297:23;;40020:307;;;:::o;40333:308::-;40395:4;40485:18;40477:6;40474:30;40471:56;;;40507:18;;:::i;:::-;40471:56;40545:29;40567:6;40545:29;:::i;:::-;40537:37;;40629:4;40623;40619:15;40611:23;;40333:308;;;:::o;40647:132::-;40714:4;40737:3;40729:11;;40767:4;40762:3;40758:14;40750:22;;40647:132;;;:::o;40785:114::-;40852:6;40886:5;40880:12;40870:22;;40785:114;;;:::o;40905:98::-;40956:6;40990:5;40984:12;40974:22;;40905:98;;;:::o;41009:99::-;41061:6;41095:5;41089:12;41079:22;;41009:99;;;:::o;41114:113::-;41184:4;41216;41211:3;41207:14;41199:22;;41114:113;;;:::o;41233:184::-;41332:11;41366:6;41361:3;41354:19;41406:4;41401:3;41397:14;41382:29;;41233:184;;;;:::o;41423:168::-;41506:11;41540:6;41535:3;41528:19;41580:4;41575:3;41571:14;41556:29;;41423:168;;;;:::o;41597:169::-;41681:11;41715:6;41710:3;41703:19;41755:4;41750:3;41746:14;41731:29;;41597:169;;;;:::o;41772:148::-;41874:11;41911:3;41896:18;;41772:148;;;;:::o;41926:305::-;41966:3;41985:20;42003:1;41985:20;:::i;:::-;41980:25;;42019:20;42037:1;42019:20;:::i;:::-;42014:25;;42173:1;42105:66;42101:74;42098:1;42095:81;42092:107;;;42179:18;;:::i;:::-;42092:107;42223:1;42220;42216:9;42209:16;;41926:305;;;;:::o;42237:185::-;42277:1;42294:20;42312:1;42294:20;:::i;:::-;42289:25;;42328:20;42346:1;42328:20;:::i;:::-;42323:25;;42367:1;42357:35;;42372:18;;:::i;:::-;42357:35;42414:1;42411;42407:9;42402:14;;42237:185;;;;:::o;42428:348::-;42468:7;42491:20;42509:1;42491:20;:::i;:::-;42486:25;;42525:20;42543:1;42525:20;:::i;:::-;42520:25;;42713:1;42645:66;42641:74;42638:1;42635:81;42630:1;42623:9;42616:17;42612:105;42609:131;;;42720:18;;:::i;:::-;42609:131;42768:1;42765;42761:9;42750:20;;42428:348;;;;:::o;42782:191::-;42822:4;42842:20;42860:1;42842:20;:::i;:::-;42837:25;;42876:20;42894:1;42876:20;:::i;:::-;42871:25;;42915:1;42912;42909:8;42906:34;;;42920:18;;:::i;:::-;42906:34;42965:1;42962;42958:9;42950:17;;42782:191;;;;:::o;42979:185::-;43017:4;43037:18;43053:1;43037:18;:::i;:::-;43032:23;;43069:18;43085:1;43069:18;:::i;:::-;43064:23;;43106:1;43103;43100:8;43097:34;;;43111:18;;:::i;:::-;43097:34;43156:1;43153;43149:9;43141:17;;42979:185;;;;:::o;43170:96::-;43207:7;43236:24;43254:5;43236:24;:::i;:::-;43225:35;;43170:96;;;:::o;43272:104::-;43317:7;43346:24;43364:5;43346:24;:::i;:::-;43335:35;;43272:104;;;:::o;43382:90::-;43416:7;43459:5;43452:13;43445:21;43434:32;;43382:90;;;:::o;43478:149::-;43514:7;43554:66;43547:5;43543:78;43532:89;;43478:149;;;:::o;43633:126::-;43670:7;43710:42;43703:5;43699:54;43688:65;;43633:126;;;:::o;43765:77::-;43802:7;43831:5;43820:16;;43765:77;;;:::o;43848:86::-;43883:7;43923:4;43916:5;43912:16;43901:27;;43848:86;;;:::o;43940:154::-;44024:6;44019:3;44014;44001:30;44086:1;44077:6;44072:3;44068:16;44061:27;43940:154;;;:::o;44100:307::-;44168:1;44178:113;44192:6;44189:1;44186:13;44178:113;;;44277:1;44272:3;44268:11;44262:18;44258:1;44253:3;44249:11;44242:39;44214:2;44211:1;44207:10;44202:15;;44178:113;;;44309:6;44306:1;44303:13;44300:101;;;44389:1;44380:6;44375:3;44371:16;44364:27;44300:101;44149:258;44100:307;;;:::o;44413:320::-;44457:6;44494:1;44488:4;44484:12;44474:22;;44541:1;44535:4;44531:12;44562:18;44552:81;;44618:4;44610:6;44606:17;44596:27;;44552:81;44680:2;44672:6;44669:14;44649:18;44646:38;44643:84;;;44699:18;;:::i;:::-;44643:84;44464:269;44413:320;;;:::o;44739:281::-;44822:27;44844:4;44822:27;:::i;:::-;44814:6;44810:40;44952:6;44940:10;44937:22;44916:18;44904:10;44901:34;44898:62;44895:88;;;44963:18;;:::i;:::-;44895:88;45003:10;44999:2;44992:22;44782:238;44739:281;;:::o;45026:233::-;45065:3;45088:24;45106:5;45088:24;:::i;:::-;45079:33;;45134:66;45127:5;45124:77;45121:103;;;45204:18;;:::i;:::-;45121:103;45251:1;45244:5;45240:13;45233:20;;45026:233;;;:::o;45265:167::-;45302:3;45325:22;45341:5;45325:22;:::i;:::-;45316:31;;45369:4;45362:5;45359:15;45356:41;;;45377:18;;:::i;:::-;45356:41;45424:1;45417:5;45413:13;45406:20;;45265:167;;;:::o;45438:176::-;45470:1;45487:20;45505:1;45487:20;:::i;:::-;45482:25;;45521:20;45539:1;45521:20;:::i;:::-;45516:25;;45560:1;45550:35;;45565:18;;:::i;:::-;45550:35;45606:1;45603;45599:9;45594:14;;45438:176;;;;:::o;45620:180::-;45668:77;45665:1;45658:88;45765:4;45762:1;45755:15;45789:4;45786:1;45779:15;45806:180;45854:77;45851:1;45844:88;45951:4;45948:1;45941:15;45975:4;45972:1;45965:15;45992:180;46040:77;46037:1;46030:88;46137:4;46134:1;46127:15;46161:4;46158:1;46151:15;46178:180;46226:77;46223:1;46216:88;46323:4;46320:1;46313:15;46347:4;46344:1;46337:15;46364:180;46412:77;46409:1;46402:88;46509:4;46506:1;46499:15;46533:4;46530:1;46523:15;46550:180;46598:77;46595:1;46588:88;46695:4;46692:1;46685:15;46719:4;46716:1;46709:15;46736:117;46845:1;46842;46835:12;46859:117;46968:1;46965;46958:12;46982:117;47091:1;47088;47081:12;47105:117;47214:1;47211;47204:12;47228:117;47337:1;47334;47327:12;47351:102;47392:6;47443:2;47439:7;47434:2;47427:5;47423:14;47419:28;47409:38;;47351:102;;;:::o;47459:179::-;47599:31;47595:1;47587:6;47583:14;47576:55;47459:179;:::o;47644:170::-;47784:22;47780:1;47772:6;47768:14;47761:46;47644:170;:::o;47820:222::-;47960:34;47956:1;47948:6;47944:14;47937:58;48029:5;48024:2;48016:6;48012:15;48005:30;47820:222;:::o;48048:230::-;48188:34;48184:1;48176:6;48172:14;48165:58;48257:13;48252:2;48244:6;48240:15;48233:38;48048:230;:::o;48284:237::-;48424:34;48420:1;48412:6;48408:14;48401:58;48493:20;48488:2;48480:6;48476:15;48469:45;48284:237;:::o;48527:225::-;48667:34;48663:1;48655:6;48651:14;48644:58;48736:8;48731:2;48723:6;48719:15;48712:33;48527:225;:::o;48758:178::-;48898:30;48894:1;48886:6;48882:14;48875:54;48758:178;:::o;48942:164::-;49082:16;49078:1;49070:6;49066:14;49059:40;48942:164;:::o;49112:223::-;49252:34;49248:1;49240:6;49236:14;49229:58;49321:6;49316:2;49308:6;49304:15;49297:31;49112:223;:::o;49341:175::-;49481:27;49477:1;49469:6;49465:14;49458:51;49341:175;:::o;49522:169::-;49662:21;49658:1;49650:6;49646:14;49639:45;49522:169;:::o;49697:231::-;49837:34;49833:1;49825:6;49821:14;49814:58;49906:14;49901:2;49893:6;49889:15;49882:39;49697:231;:::o;49934:166::-;50074:18;50070:1;50062:6;50058:14;50051:42;49934:166;:::o;50106:243::-;50246:34;50242:1;50234:6;50230:14;50223:58;50315:26;50310:2;50302:6;50298:15;50291:51;50106:243;:::o;50355:229::-;50495:34;50491:1;50483:6;50479:14;50472:58;50564:12;50559:2;50551:6;50547:15;50540:37;50355:229;:::o;50590:228::-;50730:34;50726:1;50718:6;50714:14;50707:58;50799:11;50794:2;50786:6;50782:15;50775:36;50590:228;:::o;50824:182::-;50964:34;50960:1;50952:6;50948:14;50941:58;50824:182;:::o;51012:236::-;51152:34;51148:1;51140:6;51136:14;51129:58;51221:19;51216:2;51208:6;51204:15;51197:44;51012:236;:::o;51254:177::-;51394:29;51390:1;51382:6;51378:14;51371:53;51254:177;:::o;51437:231::-;51577:34;51573:1;51565:6;51561:14;51554:58;51646:14;51641:2;51633:6;51629:15;51622:39;51437:231;:::o;51674:182::-;51814:34;51810:1;51802:6;51798:14;51791:58;51674:182;:::o;51862:228::-;52002:34;51998:1;51990:6;51986:14;51979:58;52071:11;52066:2;52058:6;52054:15;52047:36;51862:228;:::o;52096:234::-;52236:34;52232:1;52224:6;52220:14;52213:58;52305:17;52300:2;52292:6;52288:15;52281:42;52096:234;:::o;52336:220::-;52476:34;52472:1;52464:6;52460:14;52453:58;52545:3;52540:2;52532:6;52528:15;52521:28;52336:220;:::o;52562:236::-;52702:34;52698:1;52690:6;52686:14;52679:58;52771:19;52766:2;52758:6;52754:15;52747:44;52562:236;:::o;52804:231::-;52944:34;52940:1;52932:6;52928:14;52921:58;53013:14;53008:2;53000:6;52996:15;52989:39;52804:231;:::o;53041:220::-;53181:34;53177:1;53169:6;53165:14;53158:58;53250:3;53245:2;53237:6;53233:15;53226:28;53041:220;:::o;53267:167::-;53407:19;53403:1;53395:6;53391:14;53384:43;53267:167;:::o;53440:168::-;53580:20;53576:1;53568:6;53564:14;53557:44;53440:168;:::o;53614:170::-;53754:22;53750:1;53742:6;53738:14;53731:46;53614:170;:::o;53790:122::-;53863:24;53881:5;53863:24;:::i;:::-;53856:5;53853:35;53843:63;;53902:1;53899;53892:12;53843:63;53790:122;:::o;53918:138::-;53999:32;54025:5;53999:32;:::i;:::-;53992:5;53989:43;53979:71;;54046:1;54043;54036:12;53979:71;53918:138;:::o;54062:116::-;54132:21;54147:5;54132:21;:::i;:::-;54125:5;54122:32;54112:60;;54168:1;54165;54158:12;54112:60;54062:116;:::o;54184:120::-;54256:23;54273:5;54256:23;:::i;:::-;54249:5;54246:34;54236:62;;54294:1;54291;54284:12;54236:62;54184:120;:::o;54310:122::-;54383:24;54401:5;54383:24;:::i;:::-;54376:5;54373:35;54363:63;;54422:1;54419;54412:12;54363:63;54310:122;:::o;54438:118::-;54509:22;54525:5;54509:22;:::i;:::-;54502:5;54499:33;54489:61;;54546:1;54543;54536:12;54489:61;54438:118;:::o
Swarm Source
ipfs://e324391ddc8f136b8349d4365b37fd3213d5afba7edb18669760da8845e620ae
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.