Feature Tip: Add private address tag to any address under My Name Tag !
Overview
TokenID
4763
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
McDoodleson
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-14 */ pragma solidity ^0.8.4; // SPDX-License-Identifier: MIT // Copyright (c) 2021 the ethier authors (github.com/divergencetech/ethier) // Inspired by BaseOpenSea by Simon Fremaux (@dievardump) but without the need // to pass specific addresses depending on deployment network. // https://gist.github.com/dievardump/483eb43bc6ed30b14f01e01842e3339b/ /// @notice Library to achieve gas-free listings on OpenSea. library OpenSeaGasFreeListing { /** @notice Returns whether the operator is an OpenSea proxy for the owner, thus allowing it to list without the token owner paying gas. @dev ERC{721,1155}.isApprovedForAll should be overriden to also check if this function returns true. */ function isApprovedForAll(address owner, address operator) internal view returns (bool) { ProxyRegistry registry; assembly { switch chainid() case 1 { // mainnet registry := 0xa5409ec958c83c3f309868babaca7c86dcb077c1 } case 4 { // rinkeby registry := 0xf57b2c51ded3a29e6891aba85459d600256cf317 } } return address(registry) != address(0) && address(registry.proxies(owner)) == operator; } } contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) /** * @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; } } // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts v4.4.0 (security/Pausable.sol) /** * @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()); } } // Copyright (c) 2021 the ethier authors (github.com/divergencetech/ethier) /// @notice A Pausable contract that can only be toggled by the Owner. contract OwnerPausable is Ownable, Pausable { /// @notice Pauses the contract. function pause() public onlyOwner { Pausable._pause(); } /// @notice Unpauses the contract. function unpause() public onlyOwner { Pausable._unpause(); } } // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) /** * @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); } // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) /** * @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; } // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) /** * @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); } // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) /** * @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); } // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) /** * @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); } } } } // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) /** * @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); } } // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) /** * @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; } } // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Pausable.sol) /** * @dev ERC721 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC721Pausable is ERC721, Pausable { /** * @dev See {ERC721-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); require(!paused(), "ERC721Pausable: token transfer while paused"); } } // Copyright (c) 2021 the ethier authors (github.com/divergencetech/ethier) /** @notice An ERC721 contract with common functionality: - OpenSea gas-free listings - OpenZeppelin Pausable - OpenZeppelin Pausable with functions exposed to Owner only */ contract ERC721Common is Context, ERC721Pausable, OwnerPausable { constructor(string memory name, string memory symbol) ERC721(name, symbol) {} /// @notice Requires that the token exists. modifier tokenExists(uint256 tokenId) { require(ERC721._exists(tokenId), "ERC721Common: Token doesn't exist"); _; } /// @notice Requires that msg.sender owns or is approved for the token. modifier onlyApprovedOrOwner(uint256 tokenId) { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721Common: Not approved nor owner" ); _; } /// @notice Overrides _beforeTokenTransfer as required by inheritance. function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override(ERC721Pausable) { super._beforeTokenTransfer(from, to, tokenId); } /// @notice Overrides supportsInterface as required by inheritance. function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) { return super.supportsInterface(interfaceId); } /** @notice Returns true if either standard isApprovedForAll() returns true or the operator is the OpenSea proxy for the owner. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return super.isApprovedForAll(owner, operator) || OpenSeaGasFreeListing.isApprovedForAll(owner, operator); } } // OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol) /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } contract McDoodleson is ERC721Common, ReentrancyGuard { using Strings for uint256; bool public saleActive; uint8 public constant MAX_MINT = 10; uint16 public _tokenIdTracker; uint16 public constant MAX_ITEMS = 8_888; uint256 public PRICE = 0.01 ether; address constant w1 = 0xAa8E615be791C34C894F1F36A2B6E0B6fF877c7c; address constant w2 = 0x370757417c9382E075C55B04D0914e5A97280C41; constructor( string memory name, string memory symbol ) ERC721Common(name, symbol) {} function mint(address _to, uint16 _count) public payable nonReentrant whenNotPaused { require(saleActive == true, "Sale has not yet started"); require(_tokenIdTracker + _count <= MAX_ITEMS, "Max limit"); require(_count <= MAX_MINT, "Exceeds number"); if(_tokenIdTracker > 4_444) require(msg.value >= PRICE * _count, "Value below price"); for (uint256 i = 0; i < _count; i++) { uint16 id = _tokenIdTracker; _tokenIdTracker++; _safeMint(_to, id); } } function setSaleStatus(bool _status) external onlyOwner { saleActive = _status; } function setPrice(uint256 _price) external onlyOwner { PRICE = _price; } /// @notice Prefix for tokenURI return values. string public baseTokenURI; /// @notice Set the baseTokenURI. function setBaseTokenURI(string memory baseTokenURI_) external onlyOwner { baseTokenURI = baseTokenURI_; } /// @notice Returns the token's metadata URI. function tokenURI(uint256 tokenId) public view override tokenExists(tokenId) returns (string memory) { return bytes(baseTokenURI).length > 0 ? string(abi.encodePacked(baseTokenURI, tokenId.toString())) : ""; } /** @notice Returns total number of existing tokens. @dev Using ERC721Enumerable is unnecessarily expensive wrt gas. However Etherscan uses totalSupply() so we provide it here. */ function totalSupply() external view returns (uint256) { return _tokenIdTracker; } function withdrawAll() public payable onlyOwner { uint256 balance = address(this).balance; require(balance > 0); _widthdraw(w1, balance * 80 / 100); _widthdraw(w2, address(this).balance); } function _widthdraw(address _address, uint256 _amount) private { (bool success,) = _address.call{value : _amount}(""); require(success, "Transfer failed."); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[],"name":"MAX_ITEMS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenIdTracker","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint16","name":"_count","type":"uint16"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"baseTokenURI_","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052662386f26fc100006009553480156200001c57600080fd5b506040516200470b3803806200470b8339818101604052810190620000429190620002c3565b8181818181600090805190602001906200005e92919062000195565b5080600190805190602001906200007792919062000195565b5050506200009a6200008e620000c760201b60201c565b620000cf60201b60201c565b6000600660146101000a81548160ff021916908315150217905550505060016007819055505050620004cc565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001a390620003dd565b90600052602060002090601f016020900481019282620001c7576000855562000213565b82601f10620001e257805160ff191683800117855562000213565b8280016001018555821562000213579182015b8281111562000212578251825591602001919060010190620001f5565b5b50905062000222919062000226565b5090565b5b808211156200024157600081600090555060010162000227565b5090565b60006200025c620002568462000371565b62000348565b9050828152602081018484840111156200027b576200027a620004ac565b5b62000288848285620003a7565b509392505050565b600082601f830112620002a857620002a7620004a7565b5b8151620002ba84826020860162000245565b91505092915050565b60008060408385031215620002dd57620002dc620004b6565b5b600083015167ffffffffffffffff811115620002fe57620002fd620004b1565b5b6200030c8582860162000290565b925050602083015167ffffffffffffffff81111562000330576200032f620004b1565b5b6200033e8582860162000290565b9150509250929050565b60006200035462000367565b905062000362828262000413565b919050565b6000604051905090565b600067ffffffffffffffff8211156200038f576200038e62000478565b5b6200039a82620004bb565b9050602081019050919050565b60005b83811015620003c7578082015181840152602081019050620003aa565b83811115620003d7576000848401525b50505050565b60006002820490506001821680620003f657607f821691505b602082108114156200040d576200040c62000449565b5b50919050565b6200041e82620004bb565b810181811067ffffffffffffffff8211171562000440576200043f62000478565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61422f80620004dc6000396000f3fe6080604052600436106101d85760003560e01c80638456cb5911610102578063ad0be4bd11610095578063d897833e11610064578063d897833e14610646578063e985e9c51461066f578063f0292a03146106ac578063f2fde38b146106d7576101d8565b8063ad0be4bd14610599578063b88d4fde146105b5578063c87b56dd146105de578063d547cfb71461061b576101d8565b806391b7f5ed116100d157806391b7f5ed146104f157806395d89b411461051a57806398bcede914610545578063a22cb46514610570576101d8565b80638456cb591461047a578063853828b6146104915780638d859f3e1461049b5780638da5cb5b146104c6576101d8565b80633f4ba83a1161017a5780636352211e116101495780636352211e146103be57806368428a1b146103fb57806370a0823114610426578063715018a614610463576101d8565b80633f4ba83a1461032857806342842e0e1461033f57806357d4c4ee146103685780635c975abb14610393576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806318160ddd146102ab57806323b872dd146102d657806330176e13146102ff576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612c05565b610700565b604051610211919061329d565b60405180910390f35b34801561022657600080fd5b5061022f610712565b60405161023c91906132b8565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612cd5565b6107a4565b6040516102799190613236565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612b98565b610829565b005b3480156102b757600080fd5b506102c0610941565b6040516102cd9190613615565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612a42565b61095d565b005b34801561030b57600080fd5b5061032660048036038101906103219190612c8c565b6109bd565b005b34801561033457600080fd5b5061033d610a53565b005b34801561034b57600080fd5b5061036660048036038101906103619190612a42565b610ad9565b005b34801561037457600080fd5b5061037d610af9565b60405161038a91906135fa565b60405180910390f35b34801561039f57600080fd5b506103a8610aff565b6040516103b5919061329d565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e09190612cd5565b610b16565b6040516103f29190613236565b60405180910390f35b34801561040757600080fd5b50610410610bc8565b60405161041d919061329d565b60405180910390f35b34801561043257600080fd5b5061044d600480360381019061044891906129d5565b610bdb565b60405161045a9190613615565b60405180910390f35b34801561046f57600080fd5b50610478610c93565b005b34801561048657600080fd5b5061048f610d1b565b005b610499610da1565b005b3480156104a757600080fd5b506104b0610e86565b6040516104bd9190613615565b60405180910390f35b3480156104d257600080fd5b506104db610e8c565b6040516104e89190613236565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190612cd5565b610eb6565b005b34801561052657600080fd5b5061052f610f3c565b60405161053c91906132b8565b60405180910390f35b34801561055157600080fd5b5061055a610fce565b60405161056791906135fa565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190612b18565b610fe2565b005b6105b360048036038101906105ae9190612b58565b610ff8565b005b3480156105c157600080fd5b506105dc60048036038101906105d79190612a95565b611298565b005b3480156105ea57600080fd5b5061060560048036038101906106009190612cd5565b6112fa565b60405161061291906132b8565b60405180910390f35b34801561062757600080fd5b506106306113a4565b60405161063d91906132b8565b60405180910390f35b34801561065257600080fd5b5061066d60048036038101906106689190612bd8565b611432565b005b34801561067b57600080fd5b5061069660048036038101906106919190612a02565b6114cb565b6040516106a3919061329d565b60405180910390f35b3480156106b857600080fd5b506106c16114f0565b6040516106ce9190613630565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f991906129d5565b6114f5565b005b600061070b826115ed565b9050919050565b60606000805461072190613965565b80601f016020809104026020016040519081016040528092919081815260200182805461074d90613965565b801561079a5780601f1061076f5761010080835404028352916020019161079a565b820191906000526020600020905b81548152906001019060200180831161077d57829003601f168201915b5050505050905090565b60006107af826116cf565b6107ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e5906134da565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061083482610b16565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c9061355a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108c461173b565b73ffffffffffffffffffffffffffffffffffffffff1614806108f357506108f2816108ed61173b565b6114cb565b5b610932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109299061345a565b60405180910390fd5b61093c8383611743565b505050565b6000600860019054906101000a900461ffff1661ffff16905090565b61096e61096861173b565b826117fc565b6109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a4906135ba565b60405180910390fd5b6109b88383836118da565b505050565b6109c561173b565b73ffffffffffffffffffffffffffffffffffffffff166109e3610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a30906134fa565b60405180910390fd5b80600a9080519060200190610a4f9291906127bf565b5050565b610a5b61173b565b73ffffffffffffffffffffffffffffffffffffffff16610a79610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906134fa565b60405180910390fd5b610ad7611b36565b565b610af483838360405180602001604052806000815250611298565b505050565b6122b881565b6000600660149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb69061349a565b60405180910390fd5b80915050919050565b600860009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c439061347a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c9b61173b565b73ffffffffffffffffffffffffffffffffffffffff16610cb9610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d06906134fa565b60405180910390fd5b610d196000611bd8565b565b610d2361173b565b73ffffffffffffffffffffffffffffffffffffffff16610d41610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e906134fa565b60405180910390fd5b610d9f611c9e565b565b610da961173b565b73ffffffffffffffffffffffffffffffffffffffff16610dc7610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e14906134fa565b60405180910390fd5b600047905060008111610e2f57600080fd5b610e6573aa8e615be791c34c894f1f36a2b6e0b6ff877c7c6064605084610e5691906137f4565b610e6091906137c3565b611d41565b610e8373370757417c9382e075c55b04d0914e5a97280c4147611d41565b50565b60095481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ebe61173b565b73ffffffffffffffffffffffffffffffffffffffff16610edc610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f29906134fa565b60405180910390fd5b8060098190555050565b606060018054610f4b90613965565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7790613965565b8015610fc45780601f10610f9957610100808354040283529160200191610fc4565b820191906000526020600020905b815481529060010190602001808311610fa757829003601f168201915b5050505050905090565b600860019054906101000a900461ffff1681565b610ff4610fed61173b565b8383611df2565b5050565b6002600754141561103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611035906135da565b60405180910390fd5b600260078190555061104e610aff565b1561108e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110859061343a565b60405180910390fd5b60011515600860009054906101000a900460ff161515146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db9061357a565b60405180910390fd5b6122b861ffff1681600860019054906101000a900461ffff166111079190613735565b61ffff16111561114c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611143906133fa565b60405180910390fd5b600a60ff168161ffff161115611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e9061333a565b60405180910390fd5b61115c600860019054906101000a900461ffff1661ffff16111561120a578061ffff166009546111c791906137f4565b341015611209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112009061353a565b60405180910390fd5b5b60005b8161ffff1681101561128b576000600860019054906101000a900461ffff1690506008600181819054906101000a900461ffff168092919061124e906139c8565b91906101000a81548161ffff021916908361ffff16021790555050611277848261ffff16611f5f565b508080611283906139f3565b91505061120d565b5060016007819055505050565b6112a96112a361173b565b836117fc565b6112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df906135ba565b60405180910390fd5b6112f484848484611f7d565b50505050565b606081611306816116cf565b611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c906132da565b60405180910390fd5b6000600a805461135490613965565b905011611370576040518060200160405280600081525061139c565b600a61137b84611fd9565b60405160200161138c9291906131fd565b6040516020818303038152906040525b915050919050565b600a80546113b190613965565b80601f01602080910402602001604051908101604052809291908181526020018280546113dd90613965565b801561142a5780601f106113ff5761010080835404028352916020019161142a565b820191906000526020600020905b81548152906001019060200180831161140d57829003601f168201915b505050505081565b61143a61173b565b73ffffffffffffffffffffffffffffffffffffffff16611458610e8c565b73ffffffffffffffffffffffffffffffffffffffff16146114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a5906134fa565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b60006114d7838361213a565b806114e857506114e783836121ce565b5b905092915050565b600a81565b6114fd61173b565b73ffffffffffffffffffffffffffffffffffffffff1661151b610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614611571576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611568906134fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d89061337a565b60405180910390fd5b6115ea81611bd8565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116b857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116c857506116c782612315565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117b683610b16565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611807826116cf565b611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d9061341a565b60405180910390fd5b600061185183610b16565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118c057508373ffffffffffffffffffffffffffffffffffffffff166118a8846107a4565b73ffffffffffffffffffffffffffffffffffffffff16145b806118d157506118d081856114cb565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118fa82610b16565b73ffffffffffffffffffffffffffffffffffffffff1614611950576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119479061351a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b7906133ba565b60405180910390fd5b6119cb83838361237f565b6119d6600082611743565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a26919061384e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a7d919061376d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611b3e610aff565b611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b749061331a565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611bc161173b565b604051611bce9190613236565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ca6610aff565b15611ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdd9061343a565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611d2a61173b565b604051611d379190613236565b60405180910390a1565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611d6790613221565b60006040518083038185875af1925050503d8060008114611da4576040519150601f19603f3d011682016040523d82523d6000602084013e611da9565b606091505b5050905080611ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de49061359a565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e58906133da565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f52919061329d565b60405180910390a3505050565b611f7982826040518060200160405280600081525061238f565b5050565b611f888484846118da565b611f94848484846123ea565b611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca9061335a565b60405180910390fd5b50505050565b60606000821415612021576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612135565b600082905060005b6000821461205357808061203c906139f3565b915050600a8261204c91906137c3565b9150612029565b60008167ffffffffffffffff81111561206f5761206e613b29565b5b6040519080825280601f01601f1916602001820160405280156120a15781602001600182028036833780820191505090505b5090505b6000851461212e576001826120ba919061384e565b9150600a856120c99190613a3c565b60306120d5919061376d565b60f81b8183815181106120eb576120ea613afa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561212791906137c3565b94506120a5565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008046600181146121e757600481146122035761221b565b73a5409ec958c83c3f309868babaca7c86dcb077c1915061221b565b73f57b2c51ded3a29e6891aba85459d600256cf31791505b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561230c57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016122a49190613236565b60206040518083038186803b1580156122bc57600080fd5b505afa1580156122d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f49190612c5f565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61238a838383612581565b505050565b61239983836125d9565b6123a660008484846123ea565b6123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc9061335a565b60405180910390fd5b505050565b600061240b8473ffffffffffffffffffffffffffffffffffffffff166127a7565b15612574578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261243461173b565b8786866040518563ffffffff1660e01b81526004016124569493929190613251565b602060405180830381600087803b15801561247057600080fd5b505af19250505080156124a157506040513d601f19601f8201168201806040525081019061249e9190612c32565b60015b612524573d80600081146124d1576040519150601f19603f3d011682016040523d82523d6000602084013e6124d6565b606091505b5060008151141561251c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125139061335a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612579565b600190505b949350505050565b61258c8383836127ba565b612594610aff565b156125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb906132fa565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612649576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612640906134ba565b60405180910390fd5b612652816116cf565b15612692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126899061339a565b60405180910390fd5b61269e6000838361237f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126ee919061376d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b8280546127cb90613965565b90600052602060002090601f0160209004810192826127ed5760008555612834565b82601f1061280657805160ff1916838001178555612834565b82800160010185558215612834579182015b82811115612833578251825591602001919060010190612818565b5b5090506128419190612845565b5090565b5b8082111561285e576000816000905550600101612846565b5090565b600061287561287084613670565b61364b565b90508281526020810184848401111561289157612890613b5d565b5b61289c848285613923565b509392505050565b60006128b76128b2846136a1565b61364b565b9050828152602081018484840111156128d3576128d2613b5d565b5b6128de848285613923565b509392505050565b6000813590506128f58161416f565b92915050565b60008135905061290a81614186565b92915050565b60008135905061291f8161419d565b92915050565b6000815190506129348161419d565b92915050565b600082601f83011261294f5761294e613b58565b5b813561295f848260208601612862565b91505092915050565b600081519050612977816141b4565b92915050565b600082601f83011261299257612991613b58565b5b81356129a28482602086016128a4565b91505092915050565b6000813590506129ba816141cb565b92915050565b6000813590506129cf816141e2565b92915050565b6000602082840312156129eb576129ea613b67565b5b60006129f9848285016128e6565b91505092915050565b60008060408385031215612a1957612a18613b67565b5b6000612a27858286016128e6565b9250506020612a38858286016128e6565b9150509250929050565b600080600060608486031215612a5b57612a5a613b67565b5b6000612a69868287016128e6565b9350506020612a7a868287016128e6565b9250506040612a8b868287016129c0565b9150509250925092565b60008060008060808587031215612aaf57612aae613b67565b5b6000612abd878288016128e6565b9450506020612ace878288016128e6565b9350506040612adf878288016129c0565b925050606085013567ffffffffffffffff811115612b0057612aff613b62565b5b612b0c8782880161293a565b91505092959194509250565b60008060408385031215612b2f57612b2e613b67565b5b6000612b3d858286016128e6565b9250506020612b4e858286016128fb565b9150509250929050565b60008060408385031215612b6f57612b6e613b67565b5b6000612b7d858286016128e6565b9250506020612b8e858286016129ab565b9150509250929050565b60008060408385031215612baf57612bae613b67565b5b6000612bbd858286016128e6565b9250506020612bce858286016129c0565b9150509250929050565b600060208284031215612bee57612bed613b67565b5b6000612bfc848285016128fb565b91505092915050565b600060208284031215612c1b57612c1a613b67565b5b6000612c2984828501612910565b91505092915050565b600060208284031215612c4857612c47613b67565b5b6000612c5684828501612925565b91505092915050565b600060208284031215612c7557612c74613b67565b5b6000612c8384828501612968565b91505092915050565b600060208284031215612ca257612ca1613b67565b5b600082013567ffffffffffffffff811115612cc057612cbf613b62565b5b612ccc8482850161297d565b91505092915050565b600060208284031215612ceb57612cea613b67565b5b6000612cf9848285016129c0565b91505092915050565b612d0b81613882565b82525050565b612d1a81613894565b82525050565b6000612d2b826136e7565b612d3581856136fd565b9350612d45818560208601613932565b612d4e81613b6c565b840191505092915050565b6000612d64826136f2565b612d6e8185613719565b9350612d7e818560208601613932565b612d8781613b6c565b840191505092915050565b6000612d9d826136f2565b612da7818561372a565b9350612db7818560208601613932565b80840191505092915050565b60008154612dd081613965565b612dda818661372a565b94506001821660008114612df55760018114612e0657612e39565b60ff19831686528186019350612e39565b612e0f856136d2565b60005b83811015612e3157815481890152600182019150602081019050612e12565b838801955050505b50505092915050565b6000612e4f602183613719565b9150612e5a82613b7d565b604082019050919050565b6000612e72602b83613719565b9150612e7d82613bcc565b604082019050919050565b6000612e95601483613719565b9150612ea082613c1b565b602082019050919050565b6000612eb8600e83613719565b9150612ec382613c44565b602082019050919050565b6000612edb603283613719565b9150612ee682613c6d565b604082019050919050565b6000612efe602683613719565b9150612f0982613cbc565b604082019050919050565b6000612f21601c83613719565b9150612f2c82613d0b565b602082019050919050565b6000612f44602483613719565b9150612f4f82613d34565b604082019050919050565b6000612f67601983613719565b9150612f7282613d83565b602082019050919050565b6000612f8a600983613719565b9150612f9582613dac565b602082019050919050565b6000612fad602c83613719565b9150612fb882613dd5565b604082019050919050565b6000612fd0601083613719565b9150612fdb82613e24565b602082019050919050565b6000612ff3603883613719565b9150612ffe82613e4d565b604082019050919050565b6000613016602a83613719565b915061302182613e9c565b604082019050919050565b6000613039602983613719565b915061304482613eeb565b604082019050919050565b600061305c602083613719565b915061306782613f3a565b602082019050919050565b600061307f602c83613719565b915061308a82613f63565b604082019050919050565b60006130a2602083613719565b91506130ad82613fb2565b602082019050919050565b60006130c5602983613719565b91506130d082613fdb565b604082019050919050565b60006130e8601183613719565b91506130f38261402a565b602082019050919050565b600061310b602183613719565b915061311682614053565b604082019050919050565b600061312e601883613719565b9150613139826140a2565b602082019050919050565b600061315160008361370e565b915061315c826140cb565b600082019050919050565b6000613174601083613719565b915061317f826140ce565b602082019050919050565b6000613197603183613719565b91506131a2826140f7565b604082019050919050565b60006131ba601f83613719565b91506131c582614146565b602082019050919050565b6131d9816138de565b82525050565b6131e88161390c565b82525050565b6131f781613916565b82525050565b60006132098285612dc3565b91506132158284612d92565b91508190509392505050565b600061322c82613144565b9150819050919050565b600060208201905061324b6000830184612d02565b92915050565b60006080820190506132666000830187612d02565b6132736020830186612d02565b61328060408301856131df565b81810360608301526132928184612d20565b905095945050505050565b60006020820190506132b26000830184612d11565b92915050565b600060208201905081810360008301526132d28184612d59565b905092915050565b600060208201905081810360008301526132f381612e42565b9050919050565b6000602082019050818103600083015261331381612e65565b9050919050565b6000602082019050818103600083015261333381612e88565b9050919050565b6000602082019050818103600083015261335381612eab565b9050919050565b6000602082019050818103600083015261337381612ece565b9050919050565b6000602082019050818103600083015261339381612ef1565b9050919050565b600060208201905081810360008301526133b381612f14565b9050919050565b600060208201905081810360008301526133d381612f37565b9050919050565b600060208201905081810360008301526133f381612f5a565b9050919050565b6000602082019050818103600083015261341381612f7d565b9050919050565b6000602082019050818103600083015261343381612fa0565b9050919050565b6000602082019050818103600083015261345381612fc3565b9050919050565b6000602082019050818103600083015261347381612fe6565b9050919050565b6000602082019050818103600083015261349381613009565b9050919050565b600060208201905081810360008301526134b38161302c565b9050919050565b600060208201905081810360008301526134d38161304f565b9050919050565b600060208201905081810360008301526134f381613072565b9050919050565b6000602082019050818103600083015261351381613095565b9050919050565b60006020820190508181036000830152613533816130b8565b9050919050565b60006020820190508181036000830152613553816130db565b9050919050565b60006020820190508181036000830152613573816130fe565b9050919050565b6000602082019050818103600083015261359381613121565b9050919050565b600060208201905081810360008301526135b381613167565b9050919050565b600060208201905081810360008301526135d38161318a565b9050919050565b600060208201905081810360008301526135f3816131ad565b9050919050565b600060208201905061360f60008301846131d0565b92915050565b600060208201905061362a60008301846131df565b92915050565b600060208201905061364560008301846131ee565b92915050565b6000613655613666565b90506136618282613997565b919050565b6000604051905090565b600067ffffffffffffffff82111561368b5761368a613b29565b5b61369482613b6c565b9050602081019050919050565b600067ffffffffffffffff8211156136bc576136bb613b29565b5b6136c582613b6c565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613740826138de565b915061374b836138de565b92508261ffff0382111561376257613761613a6d565b5b828201905092915050565b60006137788261390c565b91506137838361390c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137b8576137b7613a6d565b5b828201905092915050565b60006137ce8261390c565b91506137d98361390c565b9250826137e9576137e8613a9c565b5b828204905092915050565b60006137ff8261390c565b915061380a8361390c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561384357613842613a6d565b5b828202905092915050565b60006138598261390c565b91506138648361390c565b92508282101561387757613876613a6d565b5b828203905092915050565b600061388d826138ec565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006138d782613882565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613950578082015181840152602081019050613935565b8381111561395f576000848401525b50505050565b6000600282049050600182168061397d57607f821691505b6020821081141561399157613990613acb565b5b50919050565b6139a082613b6c565b810181811067ffffffffffffffff821117156139bf576139be613b29565b5b80604052505050565b60006139d3826138de565b915061ffff8214156139e8576139e7613a6d565b5b600182019050919050565b60006139fe8261390c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a3157613a30613a6d565b5b600182019050919050565b6000613a478261390c565b9150613a528361390c565b925082613a6257613a61613a9c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231436f6d6d6f6e3a20546f6b656e20646f65736e2774206578697360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45786365656473206e756d626572000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520686173206e6f742079657420737461727465640000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61417881613882565b811461418357600080fd5b50565b61418f81613894565b811461419a57600080fd5b50565b6141a6816138a0565b81146141b157600080fd5b50565b6141bd816138cc565b81146141c857600080fd5b50565b6141d4816138de565b81146141df57600080fd5b50565b6141eb8161390c565b81146141f657600080fd5b5056fea26469706673582212201e5fdf461c2b0030a8687769c6b717ef7ca5e39aba92d3e25783a28eef26de4c64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000194d63417065204d63446f6f646c65736f6e20536f636965747900000000000000000000000000000000000000000000000000000000000000000000000000000b4d63446f6f646c65736f6e000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101d85760003560e01c80638456cb5911610102578063ad0be4bd11610095578063d897833e11610064578063d897833e14610646578063e985e9c51461066f578063f0292a03146106ac578063f2fde38b146106d7576101d8565b8063ad0be4bd14610599578063b88d4fde146105b5578063c87b56dd146105de578063d547cfb71461061b576101d8565b806391b7f5ed116100d157806391b7f5ed146104f157806395d89b411461051a57806398bcede914610545578063a22cb46514610570576101d8565b80638456cb591461047a578063853828b6146104915780638d859f3e1461049b5780638da5cb5b146104c6576101d8565b80633f4ba83a1161017a5780636352211e116101495780636352211e146103be57806368428a1b146103fb57806370a0823114610426578063715018a614610463576101d8565b80633f4ba83a1461032857806342842e0e1461033f57806357d4c4ee146103685780635c975abb14610393576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806318160ddd146102ab57806323b872dd146102d657806330176e13146102ff576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612c05565b610700565b604051610211919061329d565b60405180910390f35b34801561022657600080fd5b5061022f610712565b60405161023c91906132b8565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612cd5565b6107a4565b6040516102799190613236565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612b98565b610829565b005b3480156102b757600080fd5b506102c0610941565b6040516102cd9190613615565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612a42565b61095d565b005b34801561030b57600080fd5b5061032660048036038101906103219190612c8c565b6109bd565b005b34801561033457600080fd5b5061033d610a53565b005b34801561034b57600080fd5b5061036660048036038101906103619190612a42565b610ad9565b005b34801561037457600080fd5b5061037d610af9565b60405161038a91906135fa565b60405180910390f35b34801561039f57600080fd5b506103a8610aff565b6040516103b5919061329d565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e09190612cd5565b610b16565b6040516103f29190613236565b60405180910390f35b34801561040757600080fd5b50610410610bc8565b60405161041d919061329d565b60405180910390f35b34801561043257600080fd5b5061044d600480360381019061044891906129d5565b610bdb565b60405161045a9190613615565b60405180910390f35b34801561046f57600080fd5b50610478610c93565b005b34801561048657600080fd5b5061048f610d1b565b005b610499610da1565b005b3480156104a757600080fd5b506104b0610e86565b6040516104bd9190613615565b60405180910390f35b3480156104d257600080fd5b506104db610e8c565b6040516104e89190613236565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190612cd5565b610eb6565b005b34801561052657600080fd5b5061052f610f3c565b60405161053c91906132b8565b60405180910390f35b34801561055157600080fd5b5061055a610fce565b60405161056791906135fa565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190612b18565b610fe2565b005b6105b360048036038101906105ae9190612b58565b610ff8565b005b3480156105c157600080fd5b506105dc60048036038101906105d79190612a95565b611298565b005b3480156105ea57600080fd5b5061060560048036038101906106009190612cd5565b6112fa565b60405161061291906132b8565b60405180910390f35b34801561062757600080fd5b506106306113a4565b60405161063d91906132b8565b60405180910390f35b34801561065257600080fd5b5061066d60048036038101906106689190612bd8565b611432565b005b34801561067b57600080fd5b5061069660048036038101906106919190612a02565b6114cb565b6040516106a3919061329d565b60405180910390f35b3480156106b857600080fd5b506106c16114f0565b6040516106ce9190613630565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f991906129d5565b6114f5565b005b600061070b826115ed565b9050919050565b60606000805461072190613965565b80601f016020809104026020016040519081016040528092919081815260200182805461074d90613965565b801561079a5780601f1061076f5761010080835404028352916020019161079a565b820191906000526020600020905b81548152906001019060200180831161077d57829003601f168201915b5050505050905090565b60006107af826116cf565b6107ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e5906134da565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061083482610b16565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c9061355a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108c461173b565b73ffffffffffffffffffffffffffffffffffffffff1614806108f357506108f2816108ed61173b565b6114cb565b5b610932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109299061345a565b60405180910390fd5b61093c8383611743565b505050565b6000600860019054906101000a900461ffff1661ffff16905090565b61096e61096861173b565b826117fc565b6109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a4906135ba565b60405180910390fd5b6109b88383836118da565b505050565b6109c561173b565b73ffffffffffffffffffffffffffffffffffffffff166109e3610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a30906134fa565b60405180910390fd5b80600a9080519060200190610a4f9291906127bf565b5050565b610a5b61173b565b73ffffffffffffffffffffffffffffffffffffffff16610a79610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906134fa565b60405180910390fd5b610ad7611b36565b565b610af483838360405180602001604052806000815250611298565b505050565b6122b881565b6000600660149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb69061349a565b60405180910390fd5b80915050919050565b600860009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c439061347a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c9b61173b565b73ffffffffffffffffffffffffffffffffffffffff16610cb9610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d06906134fa565b60405180910390fd5b610d196000611bd8565b565b610d2361173b565b73ffffffffffffffffffffffffffffffffffffffff16610d41610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e906134fa565b60405180910390fd5b610d9f611c9e565b565b610da961173b565b73ffffffffffffffffffffffffffffffffffffffff16610dc7610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e14906134fa565b60405180910390fd5b600047905060008111610e2f57600080fd5b610e6573aa8e615be791c34c894f1f36a2b6e0b6ff877c7c6064605084610e5691906137f4565b610e6091906137c3565b611d41565b610e8373370757417c9382e075c55b04d0914e5a97280c4147611d41565b50565b60095481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ebe61173b565b73ffffffffffffffffffffffffffffffffffffffff16610edc610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f29906134fa565b60405180910390fd5b8060098190555050565b606060018054610f4b90613965565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7790613965565b8015610fc45780601f10610f9957610100808354040283529160200191610fc4565b820191906000526020600020905b815481529060010190602001808311610fa757829003601f168201915b5050505050905090565b600860019054906101000a900461ffff1681565b610ff4610fed61173b565b8383611df2565b5050565b6002600754141561103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611035906135da565b60405180910390fd5b600260078190555061104e610aff565b1561108e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110859061343a565b60405180910390fd5b60011515600860009054906101000a900460ff161515146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db9061357a565b60405180910390fd5b6122b861ffff1681600860019054906101000a900461ffff166111079190613735565b61ffff16111561114c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611143906133fa565b60405180910390fd5b600a60ff168161ffff161115611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e9061333a565b60405180910390fd5b61115c600860019054906101000a900461ffff1661ffff16111561120a578061ffff166009546111c791906137f4565b341015611209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112009061353a565b60405180910390fd5b5b60005b8161ffff1681101561128b576000600860019054906101000a900461ffff1690506008600181819054906101000a900461ffff168092919061124e906139c8565b91906101000a81548161ffff021916908361ffff16021790555050611277848261ffff16611f5f565b508080611283906139f3565b91505061120d565b5060016007819055505050565b6112a96112a361173b565b836117fc565b6112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df906135ba565b60405180910390fd5b6112f484848484611f7d565b50505050565b606081611306816116cf565b611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c906132da565b60405180910390fd5b6000600a805461135490613965565b905011611370576040518060200160405280600081525061139c565b600a61137b84611fd9565b60405160200161138c9291906131fd565b6040516020818303038152906040525b915050919050565b600a80546113b190613965565b80601f01602080910402602001604051908101604052809291908181526020018280546113dd90613965565b801561142a5780601f106113ff5761010080835404028352916020019161142a565b820191906000526020600020905b81548152906001019060200180831161140d57829003601f168201915b505050505081565b61143a61173b565b73ffffffffffffffffffffffffffffffffffffffff16611458610e8c565b73ffffffffffffffffffffffffffffffffffffffff16146114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a5906134fa565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b60006114d7838361213a565b806114e857506114e783836121ce565b5b905092915050565b600a81565b6114fd61173b565b73ffffffffffffffffffffffffffffffffffffffff1661151b610e8c565b73ffffffffffffffffffffffffffffffffffffffff1614611571576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611568906134fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d89061337a565b60405180910390fd5b6115ea81611bd8565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116b857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116c857506116c782612315565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117b683610b16565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611807826116cf565b611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d9061341a565b60405180910390fd5b600061185183610b16565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118c057508373ffffffffffffffffffffffffffffffffffffffff166118a8846107a4565b73ffffffffffffffffffffffffffffffffffffffff16145b806118d157506118d081856114cb565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118fa82610b16565b73ffffffffffffffffffffffffffffffffffffffff1614611950576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119479061351a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b7906133ba565b60405180910390fd5b6119cb83838361237f565b6119d6600082611743565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a26919061384e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a7d919061376d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611b3e610aff565b611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b749061331a565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611bc161173b565b604051611bce9190613236565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ca6610aff565b15611ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdd9061343a565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611d2a61173b565b604051611d379190613236565b60405180910390a1565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611d6790613221565b60006040518083038185875af1925050503d8060008114611da4576040519150601f19603f3d011682016040523d82523d6000602084013e611da9565b606091505b5050905080611ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de49061359a565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e58906133da565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f52919061329d565b60405180910390a3505050565b611f7982826040518060200160405280600081525061238f565b5050565b611f888484846118da565b611f94848484846123ea565b611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca9061335a565b60405180910390fd5b50505050565b60606000821415612021576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612135565b600082905060005b6000821461205357808061203c906139f3565b915050600a8261204c91906137c3565b9150612029565b60008167ffffffffffffffff81111561206f5761206e613b29565b5b6040519080825280601f01601f1916602001820160405280156120a15781602001600182028036833780820191505090505b5090505b6000851461212e576001826120ba919061384e565b9150600a856120c99190613a3c565b60306120d5919061376d565b60f81b8183815181106120eb576120ea613afa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561212791906137c3565b94506120a5565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008046600181146121e757600481146122035761221b565b73a5409ec958c83c3f309868babaca7c86dcb077c1915061221b565b73f57b2c51ded3a29e6891aba85459d600256cf31791505b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561230c57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016122a49190613236565b60206040518083038186803b1580156122bc57600080fd5b505afa1580156122d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f49190612c5f565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61238a838383612581565b505050565b61239983836125d9565b6123a660008484846123ea565b6123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc9061335a565b60405180910390fd5b505050565b600061240b8473ffffffffffffffffffffffffffffffffffffffff166127a7565b15612574578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261243461173b565b8786866040518563ffffffff1660e01b81526004016124569493929190613251565b602060405180830381600087803b15801561247057600080fd5b505af19250505080156124a157506040513d601f19601f8201168201806040525081019061249e9190612c32565b60015b612524573d80600081146124d1576040519150601f19603f3d011682016040523d82523d6000602084013e6124d6565b606091505b5060008151141561251c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125139061335a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612579565b600190505b949350505050565b61258c8383836127ba565b612594610aff565b156125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb906132fa565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612649576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612640906134ba565b60405180910390fd5b612652816116cf565b15612692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126899061339a565b60405180910390fd5b61269e6000838361237f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126ee919061376d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b8280546127cb90613965565b90600052602060002090601f0160209004810192826127ed5760008555612834565b82601f1061280657805160ff1916838001178555612834565b82800160010185558215612834579182015b82811115612833578251825591602001919060010190612818565b5b5090506128419190612845565b5090565b5b8082111561285e576000816000905550600101612846565b5090565b600061287561287084613670565b61364b565b90508281526020810184848401111561289157612890613b5d565b5b61289c848285613923565b509392505050565b60006128b76128b2846136a1565b61364b565b9050828152602081018484840111156128d3576128d2613b5d565b5b6128de848285613923565b509392505050565b6000813590506128f58161416f565b92915050565b60008135905061290a81614186565b92915050565b60008135905061291f8161419d565b92915050565b6000815190506129348161419d565b92915050565b600082601f83011261294f5761294e613b58565b5b813561295f848260208601612862565b91505092915050565b600081519050612977816141b4565b92915050565b600082601f83011261299257612991613b58565b5b81356129a28482602086016128a4565b91505092915050565b6000813590506129ba816141cb565b92915050565b6000813590506129cf816141e2565b92915050565b6000602082840312156129eb576129ea613b67565b5b60006129f9848285016128e6565b91505092915050565b60008060408385031215612a1957612a18613b67565b5b6000612a27858286016128e6565b9250506020612a38858286016128e6565b9150509250929050565b600080600060608486031215612a5b57612a5a613b67565b5b6000612a69868287016128e6565b9350506020612a7a868287016128e6565b9250506040612a8b868287016129c0565b9150509250925092565b60008060008060808587031215612aaf57612aae613b67565b5b6000612abd878288016128e6565b9450506020612ace878288016128e6565b9350506040612adf878288016129c0565b925050606085013567ffffffffffffffff811115612b0057612aff613b62565b5b612b0c8782880161293a565b91505092959194509250565b60008060408385031215612b2f57612b2e613b67565b5b6000612b3d858286016128e6565b9250506020612b4e858286016128fb565b9150509250929050565b60008060408385031215612b6f57612b6e613b67565b5b6000612b7d858286016128e6565b9250506020612b8e858286016129ab565b9150509250929050565b60008060408385031215612baf57612bae613b67565b5b6000612bbd858286016128e6565b9250506020612bce858286016129c0565b9150509250929050565b600060208284031215612bee57612bed613b67565b5b6000612bfc848285016128fb565b91505092915050565b600060208284031215612c1b57612c1a613b67565b5b6000612c2984828501612910565b91505092915050565b600060208284031215612c4857612c47613b67565b5b6000612c5684828501612925565b91505092915050565b600060208284031215612c7557612c74613b67565b5b6000612c8384828501612968565b91505092915050565b600060208284031215612ca257612ca1613b67565b5b600082013567ffffffffffffffff811115612cc057612cbf613b62565b5b612ccc8482850161297d565b91505092915050565b600060208284031215612ceb57612cea613b67565b5b6000612cf9848285016129c0565b91505092915050565b612d0b81613882565b82525050565b612d1a81613894565b82525050565b6000612d2b826136e7565b612d3581856136fd565b9350612d45818560208601613932565b612d4e81613b6c565b840191505092915050565b6000612d64826136f2565b612d6e8185613719565b9350612d7e818560208601613932565b612d8781613b6c565b840191505092915050565b6000612d9d826136f2565b612da7818561372a565b9350612db7818560208601613932565b80840191505092915050565b60008154612dd081613965565b612dda818661372a565b94506001821660008114612df55760018114612e0657612e39565b60ff19831686528186019350612e39565b612e0f856136d2565b60005b83811015612e3157815481890152600182019150602081019050612e12565b838801955050505b50505092915050565b6000612e4f602183613719565b9150612e5a82613b7d565b604082019050919050565b6000612e72602b83613719565b9150612e7d82613bcc565b604082019050919050565b6000612e95601483613719565b9150612ea082613c1b565b602082019050919050565b6000612eb8600e83613719565b9150612ec382613c44565b602082019050919050565b6000612edb603283613719565b9150612ee682613c6d565b604082019050919050565b6000612efe602683613719565b9150612f0982613cbc565b604082019050919050565b6000612f21601c83613719565b9150612f2c82613d0b565b602082019050919050565b6000612f44602483613719565b9150612f4f82613d34565b604082019050919050565b6000612f67601983613719565b9150612f7282613d83565b602082019050919050565b6000612f8a600983613719565b9150612f9582613dac565b602082019050919050565b6000612fad602c83613719565b9150612fb882613dd5565b604082019050919050565b6000612fd0601083613719565b9150612fdb82613e24565b602082019050919050565b6000612ff3603883613719565b9150612ffe82613e4d565b604082019050919050565b6000613016602a83613719565b915061302182613e9c565b604082019050919050565b6000613039602983613719565b915061304482613eeb565b604082019050919050565b600061305c602083613719565b915061306782613f3a565b602082019050919050565b600061307f602c83613719565b915061308a82613f63565b604082019050919050565b60006130a2602083613719565b91506130ad82613fb2565b602082019050919050565b60006130c5602983613719565b91506130d082613fdb565b604082019050919050565b60006130e8601183613719565b91506130f38261402a565b602082019050919050565b600061310b602183613719565b915061311682614053565b604082019050919050565b600061312e601883613719565b9150613139826140a2565b602082019050919050565b600061315160008361370e565b915061315c826140cb565b600082019050919050565b6000613174601083613719565b915061317f826140ce565b602082019050919050565b6000613197603183613719565b91506131a2826140f7565b604082019050919050565b60006131ba601f83613719565b91506131c582614146565b602082019050919050565b6131d9816138de565b82525050565b6131e88161390c565b82525050565b6131f781613916565b82525050565b60006132098285612dc3565b91506132158284612d92565b91508190509392505050565b600061322c82613144565b9150819050919050565b600060208201905061324b6000830184612d02565b92915050565b60006080820190506132666000830187612d02565b6132736020830186612d02565b61328060408301856131df565b81810360608301526132928184612d20565b905095945050505050565b60006020820190506132b26000830184612d11565b92915050565b600060208201905081810360008301526132d28184612d59565b905092915050565b600060208201905081810360008301526132f381612e42565b9050919050565b6000602082019050818103600083015261331381612e65565b9050919050565b6000602082019050818103600083015261333381612e88565b9050919050565b6000602082019050818103600083015261335381612eab565b9050919050565b6000602082019050818103600083015261337381612ece565b9050919050565b6000602082019050818103600083015261339381612ef1565b9050919050565b600060208201905081810360008301526133b381612f14565b9050919050565b600060208201905081810360008301526133d381612f37565b9050919050565b600060208201905081810360008301526133f381612f5a565b9050919050565b6000602082019050818103600083015261341381612f7d565b9050919050565b6000602082019050818103600083015261343381612fa0565b9050919050565b6000602082019050818103600083015261345381612fc3565b9050919050565b6000602082019050818103600083015261347381612fe6565b9050919050565b6000602082019050818103600083015261349381613009565b9050919050565b600060208201905081810360008301526134b38161302c565b9050919050565b600060208201905081810360008301526134d38161304f565b9050919050565b600060208201905081810360008301526134f381613072565b9050919050565b6000602082019050818103600083015261351381613095565b9050919050565b60006020820190508181036000830152613533816130b8565b9050919050565b60006020820190508181036000830152613553816130db565b9050919050565b60006020820190508181036000830152613573816130fe565b9050919050565b6000602082019050818103600083015261359381613121565b9050919050565b600060208201905081810360008301526135b381613167565b9050919050565b600060208201905081810360008301526135d38161318a565b9050919050565b600060208201905081810360008301526135f3816131ad565b9050919050565b600060208201905061360f60008301846131d0565b92915050565b600060208201905061362a60008301846131df565b92915050565b600060208201905061364560008301846131ee565b92915050565b6000613655613666565b90506136618282613997565b919050565b6000604051905090565b600067ffffffffffffffff82111561368b5761368a613b29565b5b61369482613b6c565b9050602081019050919050565b600067ffffffffffffffff8211156136bc576136bb613b29565b5b6136c582613b6c565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613740826138de565b915061374b836138de565b92508261ffff0382111561376257613761613a6d565b5b828201905092915050565b60006137788261390c565b91506137838361390c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137b8576137b7613a6d565b5b828201905092915050565b60006137ce8261390c565b91506137d98361390c565b9250826137e9576137e8613a9c565b5b828204905092915050565b60006137ff8261390c565b915061380a8361390c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561384357613842613a6d565b5b828202905092915050565b60006138598261390c565b91506138648361390c565b92508282101561387757613876613a6d565b5b828203905092915050565b600061388d826138ec565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006138d782613882565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613950578082015181840152602081019050613935565b8381111561395f576000848401525b50505050565b6000600282049050600182168061397d57607f821691505b6020821081141561399157613990613acb565b5b50919050565b6139a082613b6c565b810181811067ffffffffffffffff821117156139bf576139be613b29565b5b80604052505050565b60006139d3826138de565b915061ffff8214156139e8576139e7613a6d565b5b600182019050919050565b60006139fe8261390c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a3157613a30613a6d565b5b600182019050919050565b6000613a478261390c565b9150613a528361390c565b925082613a6257613a61613a9c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231436f6d6d6f6e3a20546f6b656e20646f65736e2774206578697360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45786365656473206e756d626572000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520686173206e6f742079657420737461727465640000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61417881613882565b811461418357600080fd5b50565b61418f81613894565b811461419a57600080fd5b50565b6141a6816138a0565b81146141b157600080fd5b50565b6141bd816138cc565b81146141c857600080fd5b50565b6141d4816138de565b81146141df57600080fd5b50565b6141eb8161390c565b81146141f657600080fd5b5056fea26469706673582212201e5fdf461c2b0030a8687769c6b717ef7ca5e39aba92d3e25783a28eef26de4c64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000194d63417065204d63446f6f646c65736f6e20536f636965747900000000000000000000000000000000000000000000000000000000000000000000000000000b4d63446f6f646c65736f6e000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): McApe McDoodleson Society
Arg [1] : symbol (string): McDoodleson
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [3] : 4d63417065204d63446f6f646c65736f6e20536f636965747900000000000000
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [5] : 4d63446f6f646c65736f6e000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44883:2655:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41535:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27905:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29464:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28987:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47012:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30214:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46346:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7325:74;;;;;;;;;;;;;:::i;:::-;;30624:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45085:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5781:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27599:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44978:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27329:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3921:103;;;;;;;;;;;;;:::i;:::-;;7207:70;;;;;;;;;;;;;:::i;:::-;;47116:230;;;:::i;:::-;;45132:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3270:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46126:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28074:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45049:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29757:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45448:567;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30880:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46525:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46272:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46023:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41906:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45007:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4179:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41535:211;41673:4;41702:36;41726:11;41702:23;:36::i;:::-;41695:43;;41535:211;;;:::o;27905:100::-;27959:13;27992:5;27985:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27905:100;:::o;29464:221::-;29540:7;29568:16;29576:7;29568;:16::i;:::-;29560:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29653:15;:24;29669:7;29653:24;;;;;;;;;;;;;;;;;;;;;29646:31;;29464:221;;;:::o;28987:411::-;29068:13;29084:23;29099:7;29084:14;:23::i;:::-;29068:39;;29132:5;29126:11;;:2;:11;;;;29118:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29226:5;29210:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29235:37;29252:5;29259:12;:10;:12::i;:::-;29235:16;:37::i;:::-;29210:62;29188:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29369:21;29378:2;29382:7;29369:8;:21::i;:::-;29057:341;28987:411;;:::o;47012:96::-;47058:7;47085:15;;;;;;;;;;;47078:22;;;;47012:96;:::o;30214:339::-;30409:41;30428:12;:10;:12::i;:::-;30442:7;30409:18;:41::i;:::-;30401:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30517:28;30527:4;30533:2;30537:7;30517:9;:28::i;:::-;30214:339;;;:::o;46346:120::-;3501:12;:10;:12::i;:::-;3490:23;;:7;:5;:7::i;:::-;:23;;;3482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46445:13:::1;46430:12;:28;;;;;;;;;;;;:::i;:::-;;46346:120:::0;:::o;7325:74::-;3501:12;:10;:12::i;:::-;3490:23;;:7;:5;:7::i;:::-;:23;;;3482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7372:19:::1;:17;:19::i;:::-;7325:74::o:0;30624:185::-;30762:39;30779:4;30785:2;30789:7;30762:39;;;;;;;;;;;;:16;:39::i;:::-;30624:185;;;:::o;45085:40::-;45120:5;45085:40;:::o;5781:86::-;5828:4;5852:7;;;;;;;;;;;5845:14;;5781:86;:::o;27599:239::-;27671:7;27691:13;27707:7;:16;27715:7;27707:16;;;;;;;;;;;;;;;;;;;;;27691:32;;27759:1;27742:19;;:5;:19;;;;27734:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27825:5;27818:12;;;27599:239;;;:::o;44978:22::-;;;;;;;;;;;;;:::o;27329:208::-;27401:7;27446:1;27429:19;;:5;:19;;;;27421:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27513:9;:16;27523:5;27513:16;;;;;;;;;;;;;;;;27506:23;;27329:208;;;:::o;3921:103::-;3501:12;:10;:12::i;:::-;3490:23;;:7;:5;:7::i;:::-;:23;;;3482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3986:30:::1;4013:1;3986:18;:30::i;:::-;3921:103::o:0;7207:70::-;3501:12;:10;:12::i;:::-;3490:23;;:7;:5;:7::i;:::-;:23;;;3482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7252:17:::1;:15;:17::i;:::-;7207:70::o:0;47116:230::-;3501:12;:10;:12::i;:::-;3490:23;;:7;:5;:7::i;:::-;:23;;;3482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47175:15:::1;47193:21;47175:39;;47243:1;47233:7;:11;47225:20;;;::::0;::::1;;47256:34;45196:42;47286:3;47281:2;47271:7;:12;;;;:::i;:::-;:18;;;;:::i;:::-;47256:10;:34::i;:::-;47301:37;45267:42;47316:21;47301:10;:37::i;:::-;47164:182;47116:230::o:0;45132:33::-;;;;:::o;3270:87::-;3316:7;3343:6;;;;;;;;;;;3336:13;;3270:87;:::o;46126:86::-;3501:12;:10;:12::i;:::-;3490:23;;:7;:5;:7::i;:::-;:23;;;3482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46198:6:::1;46190:5;:14;;;;46126:86:::0;:::o;28074:104::-;28130:13;28163:7;28156:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28074:104;:::o;45049:29::-;;;;;;;;;;;;;:::o;29757:155::-;29852:52;29871:12;:10;:12::i;:::-;29885:8;29895;29852:18;:52::i;:::-;29757:155;;:::o;45448:567::-;43934:1;44532:7;;:19;;44524:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43934:1;44665:7;:18;;;;6107:8:::1;:6;:8::i;:::-;6106:9;6098:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;45584:4:::2;45570:18;;:10;;;;;;;;;;;:18;;;45562:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45120:5;45636:37;;45654:6;45636:15;;;;;;;;;;;:24;;;;:::i;:::-;:37;;;;45628:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45040:2;45706:18;;:6;:18;;;;45698:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;45775:5;45757:15;;;;;;;;;;;:23;;;45754:85;;;45811:6;45803:14;;:5;;:14;;;;:::i;:::-;45790:9;:27;;45782:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;45754:85;45857:9;45852:156;45876:6;45872:10;;:1;:10;45852:156;;;45904:9;45916:15;;;;;;;;;;;45904:27;;45946:15;;:17;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;45978:18;45988:3;45993:2;45978:18;;:9;:18::i;:::-;45889:119;45884:3;;;;;:::i;:::-;;;;45852:156;;;;43890:1:::0;44844:7;:22;;;;45448:567;;:::o;30880:328::-;31055:41;31074:12;:10;:12::i;:::-;31088:7;31055:18;:41::i;:::-;31047:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31161:39;31175:4;31181:2;31185:7;31194:5;31161:13;:39::i;:::-;30880:328;;;;:::o;46525:273::-;46656:13;46629:7;40787:23;40802:7;40787:14;:23::i;:::-;40779:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;46723:1:::1;46700:12;46694:26;;;;;:::i;:::-;;;:30;:96;;;;;;;;;;;;;::::0;::::1;;;46751:12;46765:18;:7;:16;:18::i;:::-;46734:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46694:96;46687:103;;46525:273:::0;;;;:::o;46272:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46023:95::-;3501:12;:10;:12::i;:::-;3490:23;;:7;:5;:7::i;:::-;:23;;;3482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46103:7:::1;46090:10;;:20;;;;;;;;;;;;;;;;;;46023:95:::0;:::o;41906:303::-;42048:4;42090:39;42113:5;42120:8;42090:22;:39::i;:::-;:111;;;;42146:55;42185:5;42192:8;42146:38;:55::i;:::-;42090:111;42070:131;;41906:303;;;;:::o;45007:35::-;45040:2;45007:35;:::o;4179:201::-;3501:12;:10;:12::i;:::-;3490:23;;:7;:5;:7::i;:::-;:23;;;3482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4288:1:::1;4268:22;;:8;:22;;;;4260:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4344:28;4363:8;4344:18;:28::i;:::-;4179:201:::0;:::o;26960:305::-;27062:4;27114:25;27099:40;;;:11;:40;;;;:105;;;;27171:33;27156:48;;;:11;:48;;;;27099:105;:158;;;;27221:36;27245:11;27221:23;:36::i;:::-;27099:158;27079:178;;26960:305;;;:::o;32718:127::-;32783:4;32835:1;32807:30;;:7;:16;32815:7;32807:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32800:37;;32718:127;;;:::o;2080:98::-;2133:7;2160:10;2153:17;;2080:98;:::o;36700:174::-;36802:2;36775:15;:24;36791:7;36775:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36858:7;36854:2;36820:46;;36829:23;36844:7;36829:14;:23::i;:::-;36820:46;;;;;;;;;;;;36700:174;;:::o;33012:348::-;33105:4;33130:16;33138:7;33130;:16::i;:::-;33122:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33206:13;33222:23;33237:7;33222:14;:23::i;:::-;33206:39;;33275:5;33264:16;;:7;:16;;;:51;;;;33308:7;33284:31;;:20;33296:7;33284:11;:20::i;:::-;:31;;;33264:51;:87;;;;33319:32;33336:5;33343:7;33319:16;:32::i;:::-;33264:87;33256:96;;;33012:348;;;;:::o;36004:578::-;36163:4;36136:31;;:23;36151:7;36136:14;:23::i;:::-;:31;;;36128:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36246:1;36232:16;;:2;:16;;;;36224:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36302:39;36323:4;36329:2;36333:7;36302:20;:39::i;:::-;36406:29;36423:1;36427:7;36406:8;:29::i;:::-;36467:1;36448:9;:15;36458:4;36448:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36496:1;36479:9;:13;36489:2;36479:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36527:2;36508:7;:16;36516:7;36508:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36566:7;36562:2;36547:27;;36556:4;36547:27;;;;;;;;;;;;36004:578;;;:::o;6840:120::-;6384:8;:6;:8::i;:::-;6376:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;6909:5:::1;6899:7;;:15;;;;;;;;;;;;;;;;;;6930:22;6939:12;:10;:12::i;:::-;6930:22;;;;;;:::i;:::-;;;;;;;;6840:120::o:0;4540:191::-;4614:16;4633:6;;;;;;;;;;;4614:25;;4659:8;4650:6;;:17;;;;;;;;;;;;;;;;;;4714:8;4683:40;;4704:8;4683:40;;;;;;;;;;;;4603:128;4540:191;:::o;6581:118::-;6107:8;:6;:8::i;:::-;6106:9;6098:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;6651:4:::1;6641:7;;:14;;;;;;;;;;;;;;;;;;6671:20;6678:12;:10;:12::i;:::-;6671:20;;;;;;:::i;:::-;;;;;;;;6581:118::o:0;47354:181::-;47429:12;47446:8;:13;;47468:7;47446:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47428:52;;;47499:7;47491:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;47417:118;47354:181;;:::o;37016:315::-;37171:8;37162:17;;:5;:17;;;;37154:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37258:8;37220:18;:25;37239:5;37220:25;;;;;;;;;;;;;;;:35;37246:8;37220:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37304:8;37282:41;;37297:5;37282:41;;;37314:8;37282:41;;;;;;:::i;:::-;;;;;;;;37016:315;;;:::o;33702:110::-;33778:26;33788:2;33792:7;33778:26;;;;;;;;;;;;:9;:26::i;:::-;33702:110;;:::o;32090:315::-;32247:28;32257:4;32263:2;32267:7;32247:9;:28::i;:::-;32294:48;32317:4;32323:2;32327:7;32336:5;32294:22;:48::i;:::-;32286:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32090:315;;;;:::o;22981:723::-;23037:13;23267:1;23258:5;:10;23254:53;;;23285:10;;;;;;;;;;;;;;;;;;;;;23254:53;23317:12;23332:5;23317:20;;23348:14;23373:78;23388:1;23380:4;:9;23373:78;;23406:8;;;;;:::i;:::-;;;;23437:2;23429:10;;;;;:::i;:::-;;;23373:78;;;23461:19;23493:6;23483:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23461:39;;23511:154;23527:1;23518:5;:10;23511:154;;23555:1;23545:11;;;;;:::i;:::-;;;23622:2;23614:5;:10;;;;:::i;:::-;23601:2;:24;;;;:::i;:::-;23588:39;;23571:6;23578;23571:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;23651:2;23642:11;;;;;:::i;:::-;;;23511:154;;;23689:6;23675:21;;;;;22981:723;;;;:::o;29983:164::-;30080:4;30104:18;:25;30123:5;30104:25;;;;;;;;;;;;;;;:35;30130:8;30104:35;;;;;;;;;;;;;;;;;;;;;;;;;30097:42;;29983:164;;;;:::o;727:621::-;836:4;858:22;922:9;950:1;945:123;;;;1087:1;1082:123;;;;915:290;;945:123;1011:42;999:54;;945:123;;1082;1148:42;1136:54;;915:290;;1277:1;1248:31;;1256:8;1248:31;;;;:92;;;;;1332:8;1296:44;;1304:8;:16;;;1321:5;1304:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1296:44;;;1248:92;1228:112;;;727:621;;;;:::o;25507:157::-;25592:4;25631:25;25616:40;;;:11;:40;;;;25609:47;;25507:157;;;:::o;41241:213::-;41401:45;41428:4;41434:2;41438:7;41401:26;:45::i;:::-;41241:213;;;:::o;34039:321::-;34169:18;34175:2;34179:7;34169:5;:18::i;:::-;34220:54;34251:1;34255:2;34259:7;34268:5;34220:22;:54::i;:::-;34198:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34039:321;;;:::o;37896:799::-;38051:4;38072:15;:2;:13;;;:15::i;:::-;38068:620;;;38124:2;38108:36;;;38145:12;:10;:12::i;:::-;38159:4;38165:7;38174:5;38108:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38104:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38367:1;38350:6;:13;:18;38346:272;;;38393:60;;;;;;;;;;:::i;:::-;;;;;;;;38346:272;38568:6;38562:13;38553:6;38549:2;38545:15;38538:38;38104:529;38241:41;;;38231:51;;;:6;:51;;;;38224:58;;;;;38068:620;38672:4;38665:11;;37896:799;;;;;;;:::o;39966:275::-;40110:45;40137:4;40143:2;40147:7;40110:26;:45::i;:::-;40177:8;:6;:8::i;:::-;40176:9;40168:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39966:275;;;:::o;34696:382::-;34790:1;34776:16;;:2;:16;;;;34768:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34849:16;34857:7;34849;:16::i;:::-;34848:17;34840:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34911:45;34940:1;34944:2;34948:7;34911:20;:45::i;:::-;34986:1;34969:9;:13;34979:2;34969:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35017:2;34998:7;:16;35006:7;34998:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35062:7;35058:2;35037:33;;35054:1;35037:33;;;;;;;;;;;;34696:382;;:::o;15368:387::-;15428:4;15636:12;15703:7;15691:20;15683:28;;15746:1;15739:4;:8;15732:15;;;15368:387;;;:::o;39267:126::-;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1772:197::-;1856:5;1887:6;1881:13;1872:22;;1903:60;1957:5;1903:60;:::i;:::-;1772:197;;;;:::o;1989:340::-;2045:5;2094:3;2087:4;2079:6;2075:17;2071:27;2061:122;;2102:79;;:::i;:::-;2061:122;2219:6;2206:20;2244:79;2319:3;2311:6;2304:4;2296:6;2292:17;2244:79;:::i;:::-;2235:88;;2051:278;1989:340;;;;:::o;2335:137::-;2380:5;2418:6;2405:20;2396:29;;2434:32;2460:5;2434:32;:::i;:::-;2335:137;;;;:::o;2478:139::-;2524:5;2562:6;2549:20;2540:29;;2578:33;2605:5;2578:33;:::i;:::-;2478:139;;;;:::o;2623:329::-;2682:6;2731:2;2719:9;2710:7;2706:23;2702:32;2699:119;;;2737:79;;:::i;:::-;2699:119;2857:1;2882:53;2927:7;2918:6;2907:9;2903:22;2882:53;:::i;:::-;2872:63;;2828:117;2623:329;;;;:::o;2958:474::-;3026:6;3034;3083:2;3071:9;3062:7;3058:23;3054:32;3051:119;;;3089:79;;:::i;:::-;3051:119;3209:1;3234:53;3279:7;3270:6;3259:9;3255:22;3234:53;:::i;:::-;3224:63;;3180:117;3336:2;3362:53;3407:7;3398:6;3387:9;3383:22;3362:53;:::i;:::-;3352:63;;3307:118;2958:474;;;;;:::o;3438:619::-;3515:6;3523;3531;3580:2;3568:9;3559:7;3555:23;3551:32;3548:119;;;3586:79;;:::i;:::-;3548:119;3706:1;3731:53;3776:7;3767:6;3756:9;3752:22;3731:53;:::i;:::-;3721:63;;3677:117;3833:2;3859:53;3904:7;3895:6;3884:9;3880:22;3859:53;:::i;:::-;3849:63;;3804:118;3961:2;3987:53;4032:7;4023:6;4012:9;4008:22;3987:53;:::i;:::-;3977:63;;3932:118;3438:619;;;;;:::o;4063:943::-;4158:6;4166;4174;4182;4231:3;4219:9;4210:7;4206:23;4202:33;4199:120;;;4238:79;;:::i;:::-;4199:120;4358:1;4383:53;4428:7;4419:6;4408:9;4404:22;4383:53;:::i;:::-;4373:63;;4329:117;4485:2;4511:53;4556:7;4547:6;4536:9;4532:22;4511:53;:::i;:::-;4501:63;;4456:118;4613:2;4639:53;4684:7;4675:6;4664:9;4660:22;4639:53;:::i;:::-;4629:63;;4584:118;4769:2;4758:9;4754:18;4741:32;4800:18;4792:6;4789:30;4786:117;;;4822:79;;:::i;:::-;4786:117;4927:62;4981:7;4972:6;4961:9;4957:22;4927:62;:::i;:::-;4917:72;;4712:287;4063:943;;;;;;;:::o;5012:468::-;5077:6;5085;5134:2;5122:9;5113:7;5109:23;5105:32;5102:119;;;5140:79;;:::i;:::-;5102:119;5260:1;5285:53;5330:7;5321:6;5310:9;5306:22;5285:53;:::i;:::-;5275:63;;5231:117;5387:2;5413:50;5455:7;5446:6;5435:9;5431:22;5413:50;:::i;:::-;5403:60;;5358:115;5012:468;;;;;:::o;5486:472::-;5553:6;5561;5610:2;5598:9;5589:7;5585:23;5581:32;5578:119;;;5616:79;;:::i;:::-;5578:119;5736:1;5761:53;5806:7;5797:6;5786:9;5782:22;5761:53;:::i;:::-;5751:63;;5707:117;5863:2;5889:52;5933:7;5924:6;5913:9;5909:22;5889:52;:::i;:::-;5879:62;;5834:117;5486:472;;;;;:::o;5964:474::-;6032:6;6040;6089:2;6077:9;6068:7;6064:23;6060:32;6057:119;;;6095:79;;:::i;:::-;6057:119;6215:1;6240:53;6285:7;6276:6;6265:9;6261:22;6240:53;:::i;:::-;6230:63;;6186:117;6342:2;6368:53;6413:7;6404:6;6393:9;6389:22;6368:53;:::i;:::-;6358:63;;6313:118;5964:474;;;;;:::o;6444:323::-;6500:6;6549:2;6537:9;6528:7;6524:23;6520:32;6517:119;;;6555:79;;:::i;:::-;6517:119;6675:1;6700:50;6742:7;6733:6;6722:9;6718:22;6700:50;:::i;:::-;6690:60;;6646:114;6444:323;;;;:::o;6773:327::-;6831:6;6880:2;6868:9;6859:7;6855:23;6851:32;6848:119;;;6886:79;;:::i;:::-;6848:119;7006:1;7031:52;7075:7;7066:6;7055:9;7051:22;7031:52;:::i;:::-;7021:62;;6977:116;6773:327;;;;:::o;7106:349::-;7175:6;7224:2;7212:9;7203:7;7199:23;7195:32;7192:119;;;7230:79;;:::i;:::-;7192:119;7350:1;7375:63;7430:7;7421:6;7410:9;7406:22;7375:63;:::i;:::-;7365:73;;7321:127;7106:349;;;;:::o;7461:405::-;7558:6;7607:2;7595:9;7586:7;7582:23;7578:32;7575:119;;;7613:79;;:::i;:::-;7575:119;7733:1;7758:91;7841:7;7832:6;7821:9;7817:22;7758:91;:::i;:::-;7748:101;;7704:155;7461:405;;;;:::o;7872:509::-;7941:6;7990:2;7978:9;7969:7;7965:23;7961:32;7958:119;;;7996:79;;:::i;:::-;7958:119;8144:1;8133:9;8129:17;8116:31;8174:18;8166:6;8163:30;8160:117;;;8196:79;;:::i;:::-;8160:117;8301:63;8356:7;8347:6;8336:9;8332:22;8301:63;:::i;:::-;8291:73;;8087:287;7872:509;;;;:::o;8387:329::-;8446:6;8495:2;8483:9;8474:7;8470:23;8466:32;8463:119;;;8501:79;;:::i;:::-;8463:119;8621:1;8646:53;8691:7;8682:6;8671:9;8667:22;8646:53;:::i;:::-;8636:63;;8592:117;8387:329;;;;:::o;8722:118::-;8809:24;8827:5;8809:24;:::i;:::-;8804:3;8797:37;8722:118;;:::o;8846:109::-;8927:21;8942:5;8927:21;:::i;:::-;8922:3;8915:34;8846:109;;:::o;8961:360::-;9047:3;9075:38;9107:5;9075:38;:::i;:::-;9129:70;9192:6;9187:3;9129:70;:::i;:::-;9122:77;;9208:52;9253:6;9248:3;9241:4;9234:5;9230:16;9208:52;:::i;:::-;9285:29;9307:6;9285:29;:::i;:::-;9280:3;9276:39;9269:46;;9051:270;8961:360;;;;:::o;9327:364::-;9415:3;9443:39;9476:5;9443:39;:::i;:::-;9498:71;9562:6;9557:3;9498:71;:::i;:::-;9491:78;;9578:52;9623:6;9618:3;9611:4;9604:5;9600:16;9578:52;:::i;:::-;9655:29;9677:6;9655:29;:::i;:::-;9650:3;9646:39;9639:46;;9419:272;9327:364;;;;:::o;9697:377::-;9803:3;9831:39;9864:5;9831:39;:::i;:::-;9886:89;9968:6;9963:3;9886:89;:::i;:::-;9879:96;;9984:52;10029:6;10024:3;10017:4;10010:5;10006:16;9984:52;:::i;:::-;10061:6;10056:3;10052:16;10045:23;;9807:267;9697:377;;;;:::o;10104:845::-;10207:3;10244:5;10238:12;10273:36;10299:9;10273:36;:::i;:::-;10325:89;10407:6;10402:3;10325:89;:::i;:::-;10318:96;;10445:1;10434:9;10430:17;10461:1;10456:137;;;;10607:1;10602:341;;;;10423:520;;10456:137;10540:4;10536:9;10525;10521:25;10516:3;10509:38;10576:6;10571:3;10567:16;10560:23;;10456:137;;10602:341;10669:38;10701:5;10669:38;:::i;:::-;10729:1;10743:154;10757:6;10754:1;10751:13;10743:154;;;10831:7;10825:14;10821:1;10816:3;10812:11;10805:35;10881:1;10872:7;10868:15;10857:26;;10779:4;10776:1;10772:12;10767:17;;10743:154;;;10926:6;10921:3;10917:16;10910:23;;10609:334;;10423:520;;10211:738;;10104:845;;;;:::o;10955:366::-;11097:3;11118:67;11182:2;11177:3;11118:67;:::i;:::-;11111:74;;11194:93;11283:3;11194:93;:::i;:::-;11312:2;11307:3;11303:12;11296:19;;10955:366;;;:::o;11327:::-;11469:3;11490:67;11554:2;11549:3;11490:67;:::i;:::-;11483:74;;11566:93;11655:3;11566:93;:::i;:::-;11684:2;11679:3;11675:12;11668:19;;11327:366;;;:::o;11699:::-;11841:3;11862:67;11926:2;11921:3;11862:67;:::i;:::-;11855:74;;11938:93;12027:3;11938:93;:::i;:::-;12056:2;12051:3;12047:12;12040:19;;11699:366;;;:::o;12071:::-;12213:3;12234:67;12298:2;12293:3;12234:67;:::i;:::-;12227:74;;12310:93;12399:3;12310:93;:::i;:::-;12428:2;12423:3;12419:12;12412:19;;12071:366;;;:::o;12443:::-;12585:3;12606:67;12670:2;12665:3;12606:67;:::i;:::-;12599:74;;12682:93;12771:3;12682:93;:::i;:::-;12800:2;12795:3;12791:12;12784:19;;12443:366;;;:::o;12815:::-;12957:3;12978:67;13042:2;13037:3;12978:67;:::i;:::-;12971:74;;13054:93;13143:3;13054:93;:::i;:::-;13172:2;13167:3;13163:12;13156:19;;12815:366;;;:::o;13187:::-;13329:3;13350:67;13414:2;13409:3;13350:67;:::i;:::-;13343:74;;13426:93;13515:3;13426:93;:::i;:::-;13544:2;13539:3;13535:12;13528:19;;13187:366;;;:::o;13559:::-;13701:3;13722:67;13786:2;13781:3;13722:67;:::i;:::-;13715:74;;13798:93;13887:3;13798:93;:::i;:::-;13916:2;13911:3;13907:12;13900:19;;13559:366;;;:::o;13931:::-;14073:3;14094:67;14158:2;14153:3;14094:67;:::i;:::-;14087:74;;14170:93;14259:3;14170:93;:::i;:::-;14288:2;14283:3;14279:12;14272:19;;13931:366;;;:::o;14303:365::-;14445:3;14466:66;14530:1;14525:3;14466:66;:::i;:::-;14459:73;;14541:93;14630:3;14541:93;:::i;:::-;14659:2;14654:3;14650:12;14643:19;;14303:365;;;:::o;14674:366::-;14816:3;14837:67;14901:2;14896:3;14837:67;:::i;:::-;14830:74;;14913:93;15002:3;14913:93;:::i;:::-;15031:2;15026:3;15022:12;15015:19;;14674:366;;;:::o;15046:::-;15188:3;15209:67;15273:2;15268:3;15209:67;:::i;:::-;15202:74;;15285:93;15374:3;15285:93;:::i;:::-;15403:2;15398:3;15394:12;15387:19;;15046:366;;;:::o;15418:::-;15560:3;15581:67;15645:2;15640:3;15581:67;:::i;:::-;15574:74;;15657:93;15746:3;15657:93;:::i;:::-;15775:2;15770:3;15766:12;15759:19;;15418:366;;;:::o;15790:::-;15932:3;15953:67;16017:2;16012:3;15953:67;:::i;:::-;15946:74;;16029:93;16118:3;16029:93;:::i;:::-;16147:2;16142:3;16138:12;16131:19;;15790:366;;;:::o;16162:::-;16304:3;16325:67;16389:2;16384:3;16325:67;:::i;:::-;16318:74;;16401:93;16490:3;16401:93;:::i;:::-;16519:2;16514:3;16510:12;16503:19;;16162:366;;;:::o;16534:::-;16676:3;16697:67;16761:2;16756:3;16697:67;:::i;:::-;16690:74;;16773:93;16862:3;16773:93;:::i;:::-;16891:2;16886:3;16882:12;16875:19;;16534:366;;;:::o;16906:::-;17048:3;17069:67;17133:2;17128:3;17069:67;:::i;:::-;17062:74;;17145:93;17234:3;17145:93;:::i;:::-;17263:2;17258:3;17254:12;17247:19;;16906:366;;;:::o;17278:::-;17420:3;17441:67;17505:2;17500:3;17441:67;:::i;:::-;17434:74;;17517:93;17606:3;17517:93;:::i;:::-;17635:2;17630:3;17626:12;17619:19;;17278:366;;;:::o;17650:::-;17792:3;17813:67;17877:2;17872:3;17813:67;:::i;:::-;17806:74;;17889:93;17978:3;17889:93;:::i;:::-;18007:2;18002:3;17998:12;17991:19;;17650:366;;;:::o;18022:::-;18164:3;18185:67;18249:2;18244:3;18185:67;:::i;:::-;18178:74;;18261:93;18350:3;18261:93;:::i;:::-;18379:2;18374:3;18370:12;18363:19;;18022:366;;;:::o;18394:::-;18536:3;18557:67;18621:2;18616:3;18557:67;:::i;:::-;18550:74;;18633:93;18722:3;18633:93;:::i;:::-;18751:2;18746:3;18742:12;18735:19;;18394:366;;;:::o;18766:::-;18908:3;18929:67;18993:2;18988:3;18929:67;:::i;:::-;18922:74;;19005:93;19094:3;19005:93;:::i;:::-;19123:2;19118:3;19114:12;19107:19;;18766:366;;;:::o;19138:398::-;19297:3;19318:83;19399:1;19394:3;19318:83;:::i;:::-;19311:90;;19410:93;19499:3;19410:93;:::i;:::-;19528:1;19523:3;19519:11;19512:18;;19138:398;;;:::o;19542:366::-;19684:3;19705:67;19769:2;19764:3;19705:67;:::i;:::-;19698:74;;19781:93;19870:3;19781:93;:::i;:::-;19899:2;19894:3;19890:12;19883:19;;19542:366;;;:::o;19914:::-;20056:3;20077:67;20141:2;20136:3;20077:67;:::i;:::-;20070:74;;20153:93;20242:3;20153:93;:::i;:::-;20271:2;20266:3;20262:12;20255:19;;19914:366;;;:::o;20286:::-;20428:3;20449:67;20513:2;20508:3;20449:67;:::i;:::-;20442:74;;20525:93;20614:3;20525:93;:::i;:::-;20643:2;20638:3;20634:12;20627:19;;20286:366;;;:::o;20658:115::-;20743:23;20760:5;20743:23;:::i;:::-;20738:3;20731:36;20658:115;;:::o;20779:118::-;20866:24;20884:5;20866:24;:::i;:::-;20861:3;20854:37;20779:118;;:::o;20903:112::-;20986:22;21002:5;20986:22;:::i;:::-;20981:3;20974:35;20903:112;;:::o;21021:429::-;21198:3;21220:92;21308:3;21299:6;21220:92;:::i;:::-;21213:99;;21329:95;21420:3;21411:6;21329:95;:::i;:::-;21322:102;;21441:3;21434:10;;21021:429;;;;;:::o;21456:379::-;21640:3;21662:147;21805:3;21662:147;:::i;:::-;21655:154;;21826:3;21819:10;;21456:379;;;:::o;21841:222::-;21934:4;21972:2;21961:9;21957:18;21949:26;;21985:71;22053:1;22042:9;22038:17;22029:6;21985:71;:::i;:::-;21841:222;;;;:::o;22069:640::-;22264:4;22302:3;22291:9;22287:19;22279:27;;22316:71;22384:1;22373:9;22369:17;22360:6;22316:71;:::i;:::-;22397:72;22465:2;22454:9;22450:18;22441:6;22397:72;:::i;:::-;22479;22547:2;22536:9;22532:18;22523:6;22479:72;:::i;:::-;22598:9;22592:4;22588:20;22583:2;22572:9;22568:18;22561:48;22626:76;22697:4;22688:6;22626:76;:::i;:::-;22618:84;;22069:640;;;;;;;:::o;22715:210::-;22802:4;22840:2;22829:9;22825:18;22817:26;;22853:65;22915:1;22904:9;22900:17;22891:6;22853:65;:::i;:::-;22715:210;;;;:::o;22931:313::-;23044:4;23082:2;23071:9;23067:18;23059:26;;23131:9;23125:4;23121:20;23117:1;23106:9;23102:17;23095:47;23159:78;23232:4;23223:6;23159:78;:::i;:::-;23151:86;;22931:313;;;;:::o;23250:419::-;23416:4;23454:2;23443:9;23439:18;23431:26;;23503:9;23497:4;23493:20;23489:1;23478:9;23474:17;23467:47;23531:131;23657:4;23531:131;:::i;:::-;23523:139;;23250:419;;;:::o;23675:::-;23841:4;23879:2;23868:9;23864:18;23856:26;;23928:9;23922:4;23918:20;23914:1;23903:9;23899:17;23892:47;23956:131;24082:4;23956:131;:::i;:::-;23948:139;;23675:419;;;:::o;24100:::-;24266:4;24304:2;24293:9;24289:18;24281:26;;24353:9;24347:4;24343:20;24339:1;24328:9;24324:17;24317:47;24381:131;24507:4;24381:131;:::i;:::-;24373:139;;24100:419;;;:::o;24525:::-;24691:4;24729:2;24718:9;24714:18;24706:26;;24778:9;24772:4;24768:20;24764:1;24753:9;24749:17;24742:47;24806:131;24932:4;24806:131;:::i;:::-;24798:139;;24525:419;;;:::o;24950:::-;25116:4;25154:2;25143:9;25139:18;25131:26;;25203:9;25197:4;25193:20;25189:1;25178:9;25174:17;25167:47;25231:131;25357:4;25231:131;:::i;:::-;25223:139;;24950:419;;;:::o;25375:::-;25541:4;25579:2;25568:9;25564:18;25556:26;;25628:9;25622:4;25618:20;25614:1;25603:9;25599:17;25592:47;25656:131;25782:4;25656:131;:::i;:::-;25648:139;;25375:419;;;:::o;25800:::-;25966:4;26004:2;25993:9;25989:18;25981:26;;26053:9;26047:4;26043:20;26039:1;26028:9;26024:17;26017:47;26081:131;26207:4;26081:131;:::i;:::-;26073:139;;25800:419;;;:::o;26225:::-;26391:4;26429:2;26418:9;26414:18;26406:26;;26478:9;26472:4;26468:20;26464:1;26453:9;26449:17;26442:47;26506:131;26632:4;26506:131;:::i;:::-;26498:139;;26225:419;;;:::o;26650:::-;26816:4;26854:2;26843:9;26839:18;26831:26;;26903:9;26897:4;26893:20;26889:1;26878:9;26874:17;26867:47;26931:131;27057:4;26931:131;:::i;:::-;26923:139;;26650:419;;;:::o;27075:::-;27241:4;27279:2;27268:9;27264:18;27256:26;;27328:9;27322:4;27318:20;27314:1;27303:9;27299:17;27292:47;27356:131;27482:4;27356:131;:::i;:::-;27348:139;;27075:419;;;:::o;27500:::-;27666:4;27704:2;27693:9;27689:18;27681:26;;27753:9;27747:4;27743:20;27739:1;27728:9;27724:17;27717:47;27781:131;27907:4;27781:131;:::i;:::-;27773:139;;27500:419;;;:::o;27925:::-;28091:4;28129:2;28118:9;28114:18;28106:26;;28178:9;28172:4;28168:20;28164:1;28153:9;28149:17;28142:47;28206:131;28332:4;28206:131;:::i;:::-;28198:139;;27925:419;;;:::o;28350:::-;28516:4;28554:2;28543:9;28539:18;28531:26;;28603:9;28597:4;28593:20;28589:1;28578:9;28574:17;28567:47;28631:131;28757:4;28631:131;:::i;:::-;28623:139;;28350:419;;;:::o;28775:::-;28941:4;28979:2;28968:9;28964:18;28956:26;;29028:9;29022:4;29018:20;29014:1;29003:9;28999:17;28992:47;29056:131;29182:4;29056:131;:::i;:::-;29048:139;;28775:419;;;:::o;29200:::-;29366:4;29404:2;29393:9;29389:18;29381:26;;29453:9;29447:4;29443:20;29439:1;29428:9;29424:17;29417:47;29481:131;29607:4;29481:131;:::i;:::-;29473:139;;29200:419;;;:::o;29625:::-;29791:4;29829:2;29818:9;29814:18;29806:26;;29878:9;29872:4;29868:20;29864:1;29853:9;29849:17;29842:47;29906:131;30032:4;29906:131;:::i;:::-;29898:139;;29625:419;;;:::o;30050:::-;30216:4;30254:2;30243:9;30239:18;30231:26;;30303:9;30297:4;30293:20;30289:1;30278:9;30274:17;30267:47;30331:131;30457:4;30331:131;:::i;:::-;30323:139;;30050:419;;;:::o;30475:::-;30641:4;30679:2;30668:9;30664:18;30656:26;;30728:9;30722:4;30718:20;30714:1;30703:9;30699:17;30692:47;30756:131;30882:4;30756:131;:::i;:::-;30748:139;;30475:419;;;:::o;30900:::-;31066:4;31104:2;31093:9;31089:18;31081:26;;31153:9;31147:4;31143:20;31139:1;31128:9;31124:17;31117:47;31181:131;31307:4;31181:131;:::i;:::-;31173:139;;30900:419;;;:::o;31325:::-;31491:4;31529:2;31518:9;31514:18;31506:26;;31578:9;31572:4;31568:20;31564:1;31553:9;31549:17;31542:47;31606:131;31732:4;31606:131;:::i;:::-;31598:139;;31325:419;;;:::o;31750:::-;31916:4;31954:2;31943:9;31939:18;31931:26;;32003:9;31997:4;31993:20;31989:1;31978:9;31974:17;31967:47;32031:131;32157:4;32031:131;:::i;:::-;32023:139;;31750:419;;;:::o;32175:::-;32341:4;32379:2;32368:9;32364:18;32356:26;;32428:9;32422:4;32418:20;32414:1;32403:9;32399:17;32392:47;32456:131;32582:4;32456:131;:::i;:::-;32448:139;;32175:419;;;:::o;32600:::-;32766:4;32804:2;32793:9;32789:18;32781:26;;32853:9;32847:4;32843:20;32839:1;32828:9;32824:17;32817:47;32881:131;33007:4;32881:131;:::i;:::-;32873:139;;32600:419;;;:::o;33025:::-;33191:4;33229:2;33218:9;33214:18;33206:26;;33278:9;33272:4;33268:20;33264:1;33253:9;33249:17;33242:47;33306:131;33432:4;33306:131;:::i;:::-;33298:139;;33025:419;;;:::o;33450:::-;33616:4;33654:2;33643:9;33639:18;33631:26;;33703:9;33697:4;33693:20;33689:1;33678:9;33674:17;33667:47;33731:131;33857:4;33731:131;:::i;:::-;33723:139;;33450:419;;;:::o;33875:218::-;33966:4;34004:2;33993:9;33989:18;33981:26;;34017:69;34083:1;34072:9;34068:17;34059:6;34017:69;:::i;:::-;33875:218;;;;:::o;34099:222::-;34192:4;34230:2;34219:9;34215:18;34207:26;;34243:71;34311:1;34300:9;34296:17;34287:6;34243:71;:::i;:::-;34099:222;;;;:::o;34327:214::-;34416:4;34454:2;34443:9;34439:18;34431:26;;34467:67;34531:1;34520:9;34516:17;34507:6;34467:67;:::i;:::-;34327:214;;;;:::o;34547:129::-;34581:6;34608:20;;:::i;:::-;34598:30;;34637:33;34665:4;34657:6;34637:33;:::i;:::-;34547:129;;;:::o;34682:75::-;34715:6;34748:2;34742:9;34732:19;;34682:75;:::o;34763:307::-;34824:4;34914:18;34906:6;34903:30;34900:56;;;34936:18;;:::i;:::-;34900:56;34974:29;34996:6;34974:29;:::i;:::-;34966:37;;35058:4;35052;35048:15;35040:23;;34763:307;;;:::o;35076:308::-;35138:4;35228:18;35220:6;35217:30;35214:56;;;35250:18;;:::i;:::-;35214:56;35288:29;35310:6;35288:29;:::i;:::-;35280:37;;35372:4;35366;35362:15;35354:23;;35076:308;;;:::o;35390:141::-;35439:4;35462:3;35454:11;;35485:3;35482:1;35475:14;35519:4;35516:1;35506:18;35498:26;;35390:141;;;:::o;35537:98::-;35588:6;35622:5;35616:12;35606:22;;35537:98;;;:::o;35641:99::-;35693:6;35727:5;35721:12;35711:22;;35641:99;;;:::o;35746:168::-;35829:11;35863:6;35858:3;35851:19;35903:4;35898:3;35894:14;35879:29;;35746:168;;;;:::o;35920:147::-;36021:11;36058:3;36043:18;;35920:147;;;;:::o;36073:169::-;36157:11;36191:6;36186:3;36179:19;36231:4;36226:3;36222:14;36207:29;;36073:169;;;;:::o;36248:148::-;36350:11;36387:3;36372:18;;36248:148;;;;:::o;36402:242::-;36441:3;36460:19;36477:1;36460:19;:::i;:::-;36455:24;;36493:19;36510:1;36493:19;:::i;:::-;36488:24;;36586:1;36578:6;36574:14;36571:1;36568:21;36565:47;;;36592:18;;:::i;:::-;36565:47;36636:1;36633;36629:9;36622:16;;36402:242;;;;:::o;36650:305::-;36690:3;36709:20;36727:1;36709:20;:::i;:::-;36704:25;;36743:20;36761:1;36743:20;:::i;:::-;36738:25;;36897:1;36829:66;36825:74;36822:1;36819:81;36816:107;;;36903:18;;:::i;:::-;36816:107;36947:1;36944;36940:9;36933:16;;36650:305;;;;:::o;36961:185::-;37001:1;37018:20;37036:1;37018:20;:::i;:::-;37013:25;;37052:20;37070:1;37052:20;:::i;:::-;37047:25;;37091:1;37081:35;;37096:18;;:::i;:::-;37081:35;37138:1;37135;37131:9;37126:14;;36961:185;;;;:::o;37152:348::-;37192:7;37215:20;37233:1;37215:20;:::i;:::-;37210:25;;37249:20;37267:1;37249:20;:::i;:::-;37244:25;;37437:1;37369:66;37365:74;37362:1;37359:81;37354:1;37347:9;37340:17;37336:105;37333:131;;;37444:18;;:::i;:::-;37333:131;37492:1;37489;37485:9;37474:20;;37152:348;;;;:::o;37506:191::-;37546:4;37566:20;37584:1;37566:20;:::i;:::-;37561:25;;37600:20;37618:1;37600:20;:::i;:::-;37595:25;;37639:1;37636;37633:8;37630:34;;;37644:18;;:::i;:::-;37630:34;37689:1;37686;37682:9;37674:17;;37506:191;;;;:::o;37703:96::-;37740:7;37769:24;37787:5;37769:24;:::i;:::-;37758:35;;37703:96;;;:::o;37805:90::-;37839:7;37882:5;37875:13;37868:21;37857:32;;37805:90;;;:::o;37901:149::-;37937:7;37977:66;37970:5;37966:78;37955:89;;37901:149;;;:::o;38056:123::-;38120:7;38149:24;38167:5;38149:24;:::i;:::-;38138:35;;38056:123;;;:::o;38185:89::-;38221:7;38261:6;38254:5;38250:18;38239:29;;38185:89;;;:::o;38280:126::-;38317:7;38357:42;38350:5;38346:54;38335:65;;38280:126;;;:::o;38412:77::-;38449:7;38478:5;38467:16;;38412:77;;;:::o;38495:86::-;38530:7;38570:4;38563:5;38559:16;38548:27;;38495:86;;;:::o;38587:154::-;38671:6;38666:3;38661;38648:30;38733:1;38724:6;38719:3;38715:16;38708:27;38587:154;;;:::o;38747:307::-;38815:1;38825:113;38839:6;38836:1;38833:13;38825:113;;;38924:1;38919:3;38915:11;38909:18;38905:1;38900:3;38896:11;38889:39;38861:2;38858:1;38854:10;38849:15;;38825:113;;;38956:6;38953:1;38950:13;38947:101;;;39036:1;39027:6;39022:3;39018:16;39011:27;38947:101;38796:258;38747:307;;;:::o;39060:320::-;39104:6;39141:1;39135:4;39131:12;39121:22;;39188:1;39182:4;39178:12;39209:18;39199:81;;39265:4;39257:6;39253:17;39243:27;;39199:81;39327:2;39319:6;39316:14;39296:18;39293:38;39290:84;;;39346:18;;:::i;:::-;39290:84;39111:269;39060:320;;;:::o;39386:281::-;39469:27;39491:4;39469:27;:::i;:::-;39461:6;39457:40;39599:6;39587:10;39584:22;39563:18;39551:10;39548:34;39545:62;39542:88;;;39610:18;;:::i;:::-;39542:88;39650:10;39646:2;39639:22;39429:238;39386:281;;:::o;39673:171::-;39711:3;39734:23;39751:5;39734:23;:::i;:::-;39725:32;;39779:6;39772:5;39769:17;39766:43;;;39789:18;;:::i;:::-;39766:43;39836:1;39829:5;39825:13;39818:20;;39673:171;;;:::o;39850:233::-;39889:3;39912:24;39930:5;39912:24;:::i;:::-;39903:33;;39958:66;39951:5;39948:77;39945:103;;;40028:18;;:::i;:::-;39945:103;40075:1;40068:5;40064:13;40057:20;;39850:233;;;:::o;40089:176::-;40121:1;40138:20;40156:1;40138:20;:::i;:::-;40133:25;;40172:20;40190:1;40172:20;:::i;:::-;40167:25;;40211:1;40201:35;;40216:18;;:::i;:::-;40201:35;40257:1;40254;40250:9;40245:14;;40089:176;;;;:::o;40271:180::-;40319:77;40316:1;40309:88;40416:4;40413:1;40406:15;40440:4;40437:1;40430:15;40457:180;40505:77;40502:1;40495:88;40602:4;40599:1;40592:15;40626:4;40623:1;40616:15;40643:180;40691:77;40688:1;40681:88;40788:4;40785:1;40778:15;40812:4;40809:1;40802:15;40829:180;40877:77;40874:1;40867:88;40974:4;40971:1;40964:15;40998:4;40995:1;40988:15;41015:180;41063:77;41060:1;41053:88;41160:4;41157:1;41150:15;41184:4;41181:1;41174:15;41201:117;41310:1;41307;41300:12;41324:117;41433:1;41430;41423:12;41447:117;41556:1;41553;41546:12;41570:117;41679:1;41676;41669:12;41693:102;41734:6;41785:2;41781:7;41776:2;41769:5;41765:14;41761:28;41751:38;;41693:102;;;:::o;41801:220::-;41941:34;41937:1;41929:6;41925:14;41918:58;42010:3;42005:2;41997:6;41993:15;41986:28;41801:220;:::o;42027:230::-;42167:34;42163:1;42155:6;42151:14;42144:58;42236:13;42231:2;42223:6;42219:15;42212:38;42027:230;:::o;42263:170::-;42403:22;42399:1;42391:6;42387:14;42380:46;42263:170;:::o;42439:164::-;42579:16;42575:1;42567:6;42563:14;42556:40;42439:164;:::o;42609:237::-;42749:34;42745:1;42737:6;42733:14;42726:58;42818:20;42813:2;42805:6;42801:15;42794:45;42609:237;:::o;42852:225::-;42992:34;42988:1;42980:6;42976:14;42969:58;43061:8;43056:2;43048:6;43044:15;43037:33;42852:225;:::o;43083:178::-;43223:30;43219:1;43211:6;43207:14;43200:54;43083:178;:::o;43267:223::-;43407:34;43403:1;43395:6;43391:14;43384:58;43476:6;43471:2;43463:6;43459:15;43452:31;43267:223;:::o;43496:175::-;43636:27;43632:1;43624:6;43620:14;43613:51;43496:175;:::o;43677:159::-;43817:11;43813:1;43805:6;43801:14;43794:35;43677:159;:::o;43842:231::-;43982:34;43978:1;43970:6;43966:14;43959:58;44051:14;44046:2;44038:6;44034:15;44027:39;43842:231;:::o;44079:166::-;44219:18;44215:1;44207:6;44203:14;44196:42;44079:166;:::o;44251:243::-;44391:34;44387:1;44379:6;44375:14;44368:58;44460:26;44455:2;44447:6;44443:15;44436:51;44251:243;:::o;44500:229::-;44640:34;44636:1;44628:6;44624:14;44617:58;44709:12;44704:2;44696:6;44692:15;44685:37;44500:229;:::o;44735:228::-;44875:34;44871:1;44863:6;44859:14;44852:58;44944:11;44939:2;44931:6;44927:15;44920:36;44735:228;:::o;44969:182::-;45109:34;45105:1;45097:6;45093:14;45086:58;44969:182;:::o;45157:231::-;45297:34;45293:1;45285:6;45281:14;45274:58;45366:14;45361:2;45353:6;45349:15;45342:39;45157:231;:::o;45394:182::-;45534:34;45530:1;45522:6;45518:14;45511:58;45394:182;:::o;45582:228::-;45722:34;45718:1;45710:6;45706:14;45699:58;45791:11;45786:2;45778:6;45774:15;45767:36;45582:228;:::o;45816:167::-;45956:19;45952:1;45944:6;45940:14;45933:43;45816:167;:::o;45989:220::-;46129:34;46125:1;46117:6;46113:14;46106:58;46198:3;46193:2;46185:6;46181:15;46174:28;45989:220;:::o;46215:174::-;46355:26;46351:1;46343:6;46339:14;46332:50;46215:174;:::o;46395:114::-;;:::o;46515:166::-;46655:18;46651:1;46643:6;46639:14;46632:42;46515:166;:::o;46687:236::-;46827:34;46823:1;46815:6;46811:14;46804:58;46896:19;46891:2;46883:6;46879:15;46872:44;46687:236;:::o;46929:181::-;47069:33;47065:1;47057:6;47053:14;47046:57;46929:181;:::o;47116:122::-;47189:24;47207:5;47189:24;:::i;:::-;47182:5;47179:35;47169:63;;47228:1;47225;47218:12;47169:63;47116:122;:::o;47244:116::-;47314:21;47329:5;47314:21;:::i;:::-;47307:5;47304:32;47294:60;;47350:1;47347;47340:12;47294:60;47244:116;:::o;47366:120::-;47438:23;47455:5;47438:23;:::i;:::-;47431:5;47428:34;47418:62;;47476:1;47473;47466:12;47418:62;47366:120;:::o;47492:176::-;47592:51;47637:5;47592:51;:::i;:::-;47585:5;47582:62;47572:90;;47658:1;47655;47648:12;47572:90;47492:176;:::o;47674:120::-;47746:23;47763:5;47746:23;:::i;:::-;47739:5;47736:34;47726:62;;47784:1;47781;47774:12;47726:62;47674:120;:::o;47800:122::-;47873:24;47891:5;47873:24;:::i;:::-;47866:5;47863:35;47853:63;;47912:1;47909;47902:12;47853:63;47800:122;:::o
Swarm Source
ipfs://1e5fdf461c2b0030a8687769c6b717ef7ca5e39aba92d3e25783a28eef26de4c
Loading...
Loading
Loading...
Loading
[ 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.