Overview
GLMR Balance
0 GLMR
GLMR Value
$0.00More Info
Private Name Tags
ContractCreator:
TokenTracker
Latest 25 from a total of 633 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 5802058 | 3 days ago | IN | 0 GLMR | 0.02820261 | ||||
Transfer From | 5785399 | 5 days ago | IN | 0 GLMR | 0.04640382 | ||||
Transfer From | 5781100 | 6 days ago | IN | 0 GLMR | 0.03660122 | ||||
Safe Transfer Fr... | 5363308 | 65 days ago | IN | 0 GLMR | 0.63436181 | ||||
Withdraw | 5292544 | 75 days ago | IN | 0 GLMR | 0.00875789 | ||||
Claim | 5287848 | 76 days ago | IN | 3 GLMR | 0.02546149 | ||||
Claim | 5272994 | 78 days ago | IN | 3 GLMR | 0.0204203 | ||||
Claim | 5272994 | 78 days ago | IN | 3 GLMR | 0.0204203 | ||||
Claim | 5272993 | 78 days ago | IN | 3 GLMR | 0.02042131 | ||||
Claim | 5272993 | 78 days ago | IN | 3 GLMR | 0.02042131 | ||||
Claim | 5272992 | 78 days ago | IN | 3 GLMR | 0.02041967 | ||||
Claim | 5272989 | 78 days ago | IN | 3 GLMR | 0.02042463 | ||||
Claim | 5272988 | 78 days ago | IN | 3 GLMR | 0.02042953 | ||||
Claim | 5272987 | 78 days ago | IN | 3 GLMR | 0.02042948 | ||||
Claim | 5272986 | 78 days ago | IN | 3 GLMR | 0.0204268 | ||||
Claim | 5272888 | 78 days ago | IN | 3 GLMR | 0.0233743 | ||||
Claim | 5272887 | 78 days ago | IN | 3 GLMR | 0.02338028 | ||||
Claim | 5272887 | 78 days ago | IN | 3 GLMR | 0.02338028 | ||||
Claim | 5272886 | 78 days ago | IN | 3 GLMR | 0.02337541 | ||||
Claim | 5272886 | 78 days ago | IN | 3 GLMR | 0.02337541 | ||||
Claim | 5272885 | 78 days ago | IN | 3 GLMR | 0.02338032 | ||||
Claim | 5272884 | 78 days ago | IN | 3 GLMR | 0.02347084 | ||||
Claim | 5272884 | 78 days ago | IN | 3 GLMR | 0.02347084 | ||||
Claim | 5272883 | 78 days ago | IN | 3 GLMR | 0.02346382 | ||||
Claim | 5272876 | 78 days ago | IN | 3 GLMR | 0.02344168 |
Loading...
Loading
Contract Name:
OnChainDudes
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at moonbeam.moonscan.io on 2022-09-10 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // @title: OnChainDudes // Thanks to CanaryNetworkAgency and OCMonkeys for the smartcontract samples /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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; } /** * @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); } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @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 make 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; } } /** * @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); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ 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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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); } } } } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).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 {} } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } contract OnChainDudes is ERC721Enumerable, ReentrancyGuard, Ownable { using Strings for uint256; uint256 public cost = 3 ether; bool public paused = false; uint256 public constant maxSupply = 3333; uint256 public numClaimed = 0; string[] private background = ["656","dda","e92","1eb","663","9de","367","ccc"]; string[] private fur1 = ["653","532","444","a71","ffc","ca9","f89","777","049","901","fc5","ffe","574","bcc","d04","222","889","7f9","fd1"]; string[] private fur2 = ["532","653","653","653","653","653","653","653","653","653","110","653","711","344","799","555","8a8","32f","653"]; uint8[] private fur_w =[249, 246, 223, 141, 116, 114, 93, 90, 89, 86, 74, 72, 55, 48, 39, 32, 28, 14, 8]; string[] private eyes = ["abe","0a0","653","888","be7","abe","0a0","653","888","be7","cef","abe","0a0","653","888","be7","cef","abe","0a0","653","888","be7","cef"]; uint8[] private eyes_w = [245, 121, 107, 101, 79, 78, 70, 68, 62, 58, 56, 51, 50, 48, 44, 38, 35, 33, 31, 22, 15, 10, 7]; string[] private mouth = ["653","ffc","f89","777","049","901","bcc","d04","fd1","ffc","653","f89","777","049","bcc","901","901","bcc","653","d04","ffc","f89","777","049","fd1","f89","777","bcc","d04","049","ffc","901","fd1"]; uint8[] private mouth_w = [252, 172, 80, 79, 56, 49, 37, 33, 31, 30, 28, 27, 26, 23, 22, 18, 15, 14, 13, 12, 11, 10, 10, 10, 9, 8, 7, 7, 6, 5, 5, 4, 3]; string[] private earring = ["999","fe7","999","999","fe7","bdd"]; uint8[] private earring_w = [251, 32, 29, 17, 16, 8, 5]; string[] private hat1 = ["f00","f00","f00","f00","f00","f00","f00","00f","00f","00f","00f","00f","00f","00f","f00","f0f","f0f","f0f","f0f","f0f","f0f","f0f","f80","f80","f80","f80","f80","f80","f00","f80","90f","f48","22d","90f","90f","ff0",""]; string[] private hat2 = ["0f0","00f","f80","ff0","90f","f0f","f48","f00","0f0","00f","f80","ff0","90f","f0f","000","f00","0f0","00f","f80","ff0","90f","f0f","f00","0f0","00f","f80","ff0","90f","f00","f0f","f00","000","000","0f0","00f","f48",""]; uint8[] private hat_w = [251, 64, 47, 42, 39, 38, 36, 35, 34, 34, 33, 29, 28, 26, 26, 25, 25, 25, 22, 21, 20, 20, 18, 17, 17, 15, 14, 14, 13, 13, 12, 12, 12, 10, 9, 8, 7]; string[] private z = ['<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 500 500"><radialGradient id="grad1" cx="50%" cy="50%" r="50%" fx="50%" fy="50%"><stop offset="1%" style="stop-color:#eee;stop-opacity:1" /><stop offset="100%" style="stop-opacity:1;stop-color:#', '"/></radialGradient><rect x="0" y="0" width="500" height="500" style="fill:url(#grad1)"/><rect width="0" height="0" x="99" y="400" style="fill:#', '"/><circle cx="190" cy="470" r="0" style="fill:#', '"/><circle cx="310" cy="470" r="0" style="fill:#', '"/><circle cx="150" cy="250" r="50" style="fill:#', '"/><circle cx="150" cy="250" r="40" style="fill:#', '"/><circle cx="350" cy="250" r="50" style="fill:#', '"/><circle cx="350" cy="250" r="40" style="fill:#', '"/><rect x="150" y="100" width="200" height="300" rx="10" ry="10" style="fill:#', '"/><rect x="160" y="110" width="180" height="280" rx="10" ry="10" style="fill:#', '"/><circle cx="200" cy="215" r="35" style="fill:#fff"/><circle cx="305" cy="222" r="31" style="fill:#fff"/><circle cx="200" cy="220" r="20" style="fill:#', '"/><circle cx="300" cy="220" r="20" style="fill:#', '"/><circle cx="200" cy="220" r="7" style="fill:#000"/><circle cx="300" cy="220" r="7" style="fill:#000"/>', '<ellipse cx="250" cy="315" rx="0" ry="0" style="fill:#', '"/><circle cx="268" cy="295" r="5" style="fill:#000"/><circle cx="232" cy="295" r="5" style="fill:#000"/>', '</svg>']; string private cross='<rect x="125" y="275" width="10" height="40" style="fill:#c89a00"/><rect x="115" y="285" width="30" height="10" style="fill:#c89a00"/>'; string private clo1='<rect width="80" height="120" x="210" y="400" style="fill:#'; string private clo2='"/><rect width="60" height="120" x="220" y="400" style="fill:#'; string private hh1='<rect width="200" height="99" x="150" y="40" ry="20" style="fill:#'; string private hh2='"/><rect width="270" height="33" x="150" y="106" ry="5" style="fill:#'; string private hh21='"/><rect width="300" height="33" x="100" y="106" ry="5" style="fill:#'; string private hh22='"/><rect width="270" height="33" x="80" y="106" ry="5" style="fill:#'; string private sl1='<rect x="160" y="190" width="180" height="30" style="fill:#'; string private sl2='"/><rect x="160" y="170" width="180" height="50" style="fill:#'; string private mou='<line x1="287" y1="331" x2="320" y2="366" style="stroke:#000;stroke-width:5"/>'; string private mou1='<line x1="287" y1="344" x2="320" y2="378" style="stroke:#000;stroke-width:5"/>'; string private beard = '<rect width="200" height="90" x="150" y="310" ry="10" style="fill:#444"/>'; string private ey1='<rect x="160" y="190" width="75" height="15" style="fill:#'; string private ey2='"/><rect x="275" y="190" width="65" height="15" style="fill:#'; string private ey3='<rect x="160" y="235" width="180" height="50" style="fill:#'; string private hr1='<rect x="180" y="100" width="10" height="40" style="fill:#'; string private hr2='<rect x="190" y="140" width="10" height="30" style="fill:#'; string private hr3='<rect x="240" y="100" width="10" height="40" style="fill:#'; string private hr4='<rect x="230" y="140" width="10" height="30" style="fill:#'; string private hr5='<rect x="280" y="100" width="10" height="40" style="fill:#'; string private hr6='<rect x="290" y="140" width="10" height="30" style="fill:#'; string private basicMouth='<rect x="195" y="330" width="110" height="8" style="fill:#000"/>'; string private confMouth = '<line x1="195" y1="331" x2="300" y2="350" style="stroke:#000;stroke-width:8"/>'; string private eyePatch='<rect x="150" y="170" width="200" height="20" style="fill:#000"/><rect x="160" y="180" width="90" height="80" rx="10" ry="10" style="fill:#000"/>'; string private robotShades='<rect x="150" y="170" width="200" height="90" rx="10" ry="10" style="fill:#000"/><rect x="160" y="180" width="180" height="70" rx="10" ry="10" style="fill:#999"/>'; string private zz='"/>'; string private ea1='<circle cx="135" cy="290" r="14" style="fill:#'; string private ea2='fe7'; string private ea3='999'; string private ea4='"/><circle cx="135" cy="290" r="4" style="fill:#000"/>'; string private ea5='<circle cx="135" cy="290" r="12" style="fill:#'; string private ea6='bdd'; string private mo1='<line x1="'; string private mo2='" y1="307" x2="'; string private mo3='" y2="312" style="stroke:#000;stroke-width:2"/>'; string private mo4='" y1="317" x2="'; string private mo5='" y2="322" style="stroke:#000;stroke-width:2"/>'; string private tr1='", "attributes": [{"trait_type": "Background","value": "'; string private tr2='"},{"trait_type": "Skin","value": "'; string private tr3='"},{"trait_type": "Earring","value": "'; string private tr4='"},{"trait_type": "Hat","value": "'; string private tr5='"},{"trait_type": "Eyes","value": "'; string private tr8='"}],"image": "data:image/svg+xml;base64,'; string[] private ra = ['A','B','C','D','E','F','G']; struct Dude { uint8 bg; uint8 fur; uint8 eyes; uint8 mouth; uint8 earring; uint8 hat; uint8 hair; } // this was used to create the distributon of 10,000 and tested for uniqueness for the given parameters of this collection function random(string memory input) internal pure returns (uint256) { return uint256(keccak256(abi.encodePacked(input))); } function usew(uint8[] memory w,uint256 i) internal pure returns (uint8) { uint8 ind=0; uint256 j=uint256(w[0]); while (j<=i) { ind++; j+=uint256(w[ind]); } return ind; } function randomOne(uint256 tokenId) internal view returns (Dude memory) { tokenId=12839-tokenId; // avoid dupes Dude memory dude; dude.bg = uint8(random(string(abi.encodePacked(ra[0],tokenId.toString()))) % 8); dude.fur = usew(fur_w,random(string(abi.encodePacked(clo1,tokenId.toString())))%1817); dude.eyes = usew(eyes_w,random(string(abi.encodePacked(ra[1],tokenId.toString())))%1429); dude.mouth = usew(mouth_w,random(string(abi.encodePacked(ra[2],tokenId.toString())))%1112); dude.earring = usew(earring_w,random(string(abi.encodePacked(ra[3],tokenId.toString())))%358); dude.hat = usew(hat_w,random(string(abi.encodePacked(ra[5],tokenId.toString())))%1111); return dude; } // get string attributes of properties, used in tokenURI call function getTraits(Dude memory dude) internal view returns (string memory) { string memory o=string(abi.encodePacked(tr1,uint256(dude.bg).toString(),tr2,uint256(dude.fur).toString(),tr3,uint256(dude.earring).toString())); return string(abi.encodePacked(o,tr4,uint256(dude.hat).toString(),tr5,uint256(dude.eyes).toString(),tr8)); } // return comma separated traits in order: hat, fur, clothes, eyes, earring, mouth, background function getAttributes(uint256 tokenId) public view returns (string memory) { Dude memory dude = randomOne(tokenId); string memory o=string(abi.encodePacked(uint256(dude.hat).toString(),',',uint256(dude.fur).toString(),',')); return string(abi.encodePacked(o,uint256(dude.eyes).toString(),',',uint256(dude.earring).toString(),',',uint256(dude.bg).toString())); } function genEye(string memory a,string memory b,Dude memory dude) internal view returns (string memory) { string memory out = ''; if (dude.eyes>4) { out = string(abi.encodePacked(sl1,a,sl2,a,zz)); } if (dude.eyes>10) { out = string(abi.encodePacked(out,ey1,b,ey2,b,zz)); } if (dude.eyes>16) { out = string(abi.encodePacked(out,ey3,a,zz)); } if ((dude.hat>7 && dude.hat<12)|| (dude.hat>18 && dude.hat<22) || (dude.hat>29 && dude.hat<30)) { out = string(abi.encodePacked(out,eyePatch)); } if (dude.eyes>20 && dude.eyes<30 && !((dude.hat>7 && dude.hat<12)|| (dude.hat>18 && dude.hat<22) || (dude.hat>29 && dude.hat<30))) { out = string(abi.encodePacked(out,robotShades));} return out; } function genMouth(uint8 h, uint8 j) internal view returns (string memory) { string memory out = ''; uint i; if ((h>24) || ((h>8) && (h<16))) { for (i=0;i<7;i++) { out = string(abi.encodePacked(out,mo1,(175+i*25).toString(),mo2,(175+i*25).toString(),mo3)); } for (i=0;i<6;i++) { out = string(abi.encodePacked(out,mo1,(187+i*25).toString(),mo4,(187+i*25).toString(),mo5)); } } if (j==1){ out = string(abi.encodePacked(out,beard)); } if (j>5){ out = string (abi.encodePacked(out,confMouth)); }else{ out = string (abi.encodePacked(out,basicMouth)); } if (h>15 && j>5) { out = string(abi.encodePacked(out,mou1)); } if (h>15 && j<=5) { out = string(abi.encodePacked(out,mou)); } return out; } function genEarring(uint8 h) internal view returns (string memory) { if (h==0) { return ''; } if (h<3) { if (h>1) { return string(abi.encodePacked(ea1,ea2,ea4)); } return string(abi.encodePacked(ea1,ea3,ea4)); } if (h>3) { if (h>5) { return string(abi.encodePacked(ea5,ea6,zz)); } if (h>4) { return string(abi.encodePacked(ea5,ea2,zz)); } return string(abi.encodePacked(ea5,ea3,zz)); } return cross; } function genSVG(Dude memory dude) internal view returns (string memory) { string memory a=fur1[dude.fur]; string memory b=fur2[dude.fur]; string memory hatst=''; string memory clost=''; string memory hair=''; clost=string(abi.encodePacked(clo1,b,clo2,a,zz)); if (dude.hat>30){ hatst=string(abi.encodePacked(hh1,hat1[dude.hat-1],hh21,hat2[dude.hat-1],zz)); } else if (dude.hat>20){ hatst=string(abi.encodePacked(hh1,hat1[dude.hat-1],hh22,hat2[dude.hat-1],zz)); } else if (dude.hat>10) { hatst=string(abi.encodePacked(hh1,hat1[dude.hat-1],hh2,hat2[dude.hat-1],zz)); }else if (dude.hat>0){ hair=string(abi.encodePacked(hr1,b,zz,hr2,b,zz,hr3,b,zz)); hair= string(abi.encodePacked(hair,abi.encodePacked(hr4,b,zz,hr5,b,zz,hr6,b,zz))); } string memory output = string(abi.encodePacked(z[0],background[dude.bg],z[1],b,z[2])); output = string(abi.encodePacked(output,a,z[3],a,z[4],b,z[5],a,z[6])); output = string(abi.encodePacked(output,b,z[7],a,z[8],b,z[9],a,z[10])); output = string(abi.encodePacked(output,eyes[dude.eyes],z[11],eyes[dude.eyes],z[12],genEye(a,b,dude),z[13],mouth[dude.mouth],z[14])); return string(abi.encodePacked(output,genMouth(dude.mouth,dude.earring),genEarring(dude.earring),hatst,hair,clost,z[15])); } function tokenURI(uint256 tokenId) override public view returns (string memory) { Dude memory dude = randomOne(tokenId); string memory tempStart = '{"name": "OnChain Dude #'; string memory tempEnd='"}'; string memory rl4='data:application/json;base64,'; return string(abi.encodePacked(rl4,Base64.encode(bytes(string(abi.encodePacked(tempStart,tokenId.toString(),getTraits(dude),Base64.encode(bytes(genSVG(dude))),tempEnd)))))); } function claim() public nonReentrant payable { require(!paused, "minting is paused"); require(numClaimed + 1 <= maxSupply, "max NFT limit reached"); require(msg.value >= cost, "insufficient funds"); numClaimed += 1; _safeMint(_msgSender(), numClaimed); } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } constructor() ERC721("OnChainDudes", "DUDE") Ownable() { paused = true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"tokenId","type":"uint256"}],"name":"getAttributes","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6729a2241af62c0000600c55600d805460ff191690556000600e556003610180818152621b1a9b60e91b6101a05260809081526101c08281526264646160e81b6101e05260a05261020082815262329c9960e91b6102205260c0526102408281526218b2b160e91b6102605260e0526102808281526236363360e81b6102a052610100526102c08281526239646560e81b6102e052610120526103008281526233363760e81b61032052610140526103806040526103409182526263636360e81b6103605261016091909152620000db90600f906008620025b9565b50604080516102a081018252600361026082018181526236353360e81b610280840152825282518084018452818152621a999960e91b6020828101919091528084019190915283518085018552828152620d0d0d60ea1b8183015283850152835180850185528281526261373160e81b818301526060840152835180850185528281526266666360e81b818301526080840152835180850185528281526263613960e81b8183015260a0840152835180850185528281526266383960e81b8183015260c0840152835180850185528281526237373760e81b8183015260e0840152835180850185528281526230343960e81b81830152610100840152835180850185528281526239303160e81b81830152610120840152835180850185528281526266633560e81b81830152610140840152835180850185528281526266666560e81b8183015261016084015283518085018552828152620d4dcd60ea1b81830152610180840152835180850185528281526262636360e81b818301526101a08401528351808501855282815262190c0d60ea1b818301526101c0840152835180850185528281526219191960e91b818301526101e0840152835180850185528281526238383960e81b81830152610200840152835180850185528281526237663960e81b8183015261022084015283518085019094529083526266643160e81b90830152610240810191909152620002f99060109060136200261d565b50604080516102a08101825260036102608201818152621a999960e91b6102808401528252825180840184528181526236353360e81b60208281018290528085019290925284518086018652838152808301829052848601528451808601865283815280830182905260608501528451808601865283815280830182905260808501528451808601865283815280830182905260a08501528451808601865283815280830182905260c08501528451808601865283815280830182905260e08501528451808601865283815280830182905261010085015284518086018652838152808301829052610120850152845180860186528381526203131360ec1b8184015261014085015284518086018652838152808301829052610160850152845180860186528381526237313160e81b8184015261018085015284518086018652838152620ccd0d60ea1b818401526101a0850152845180860186528381526237393960e81b818401526101c0850152845180860186528381526235353560e81b818401526101e08501528451808601865283815262070c2760eb1b81840152610200850152845180860186528381526219993360e91b818401526102208501528451808601909552918452830152610240810191909152620004e19060119060136200261d565b50604080516102608101825260f9815260f660208083019190915260df92820192909252608d606082015260746080820152607260a0820152605d60c0820152605a60e082015260596101008201526056610120820152604a6101408201526048610160820152603761018082015260306101a082015260276101c08201526101e0810191909152601c610200820152600e6102208201526008610240820152620005919060129060136200266f565b50604051806102e001604052806040518060400160405280600381526020016261626560e81b81525081526020016040518060400160405280600381526020016203061360ec1b81525081526020016040518060400160405280600381526020016236353360e81b81525081526020016040518060400160405280600381526020016207070760eb1b81525081526020016040518060400160405280600381526020016262653760e81b81525081526020016040518060400160405280600381526020016261626560e81b81525081526020016040518060400160405280600381526020016203061360ec1b81525081526020016040518060400160405280600381526020016236353360e81b81525081526020016040518060400160405280600381526020016207070760eb1b81525081526020016040518060400160405280600381526020016262653760e81b81525081526020016040518060400160405280600381526020016231b2b360e91b81525081526020016040518060400160405280600381526020016261626560e81b81525081526020016040518060400160405280600381526020016203061360ec1b81525081526020016040518060400160405280600381526020016236353360e81b81525081526020016040518060400160405280600381526020016207070760eb1b81525081526020016040518060400160405280600381526020016262653760e81b81525081526020016040518060400160405280600381526020016231b2b360e91b81525081526020016040518060400160405280600381526020016261626560e81b81525081526020016040518060400160405280600381526020016203061360ec1b81525081526020016040518060400160405280600381526020016236353360e81b81525081526020016040518060400160405280600381526020016207070760eb1b81525081526020016040518060400160405280600381526020016262653760e81b81525081526020016040518060400160405280600381526020016231b2b360e91b8152508152506013906017620008a592919062002718565b50604080516102e08101825260f5815260796020820152606b9181019190915260656060820152604f6080820152604e60a0820152604660c0820152604460e0820152603e610100820152603a61012082015260386101408201526033610160820152603261018082015260306101a0820152602c6101c082015260266101e082015260236102008201526021610220820152601f6102408201526016610260820152600f610280820152600a6102a082015260076102c0820152620009709060149060176200266f565b506040518061042001604052806040518060400160405280600381526020016236353360e81b81525081526020016040518060400160405280600381526020016266666360e81b81525081526020016040518060400160405280600381526020016266383960e81b81525081526020016040518060400160405280600381526020016237373760e81b81525081526020016040518060400160405280600381526020016230343960e81b81525081526020016040518060400160405280600381526020016239303160e81b81525081526020016040518060400160405280600381526020016262636360e81b815250815260200160405180604001604052806003815260200162190c0d60ea1b81525081526020016040518060400160405280600381526020016266643160e81b81525081526020016040518060400160405280600381526020016266666360e81b81525081526020016040518060400160405280600381526020016236353360e81b81525081526020016040518060400160405280600381526020016266383960e81b81525081526020016040518060400160405280600381526020016237373760e81b81525081526020016040518060400160405280600381526020016230343960e81b81525081526020016040518060400160405280600381526020016262636360e81b81525081526020016040518060400160405280600381526020016239303160e81b81525081526020016040518060400160405280600381526020016239303160e81b81525081526020016040518060400160405280600381526020016262636360e81b81525081526020016040518060400160405280600381526020016236353360e81b815250815260200160405180604001604052806003815260200162190c0d60ea1b81525081526020016040518060400160405280600381526020016266666360e81b81525081526020016040518060400160405280600381526020016266383960e81b81525081526020016040518060400160405280600381526020016237373760e81b81525081526020016040518060400160405280600381526020016230343960e81b81525081526020016040518060400160405280600381526020016266643160e81b81525081526020016040518060400160405280600381526020016266383960e81b81525081526020016040518060400160405280600381526020016237373760e81b81525081526020016040518060400160405280600381526020016262636360e81b815250815260200160405180604001604052806003815260200162190c0d60ea1b81525081526020016040518060400160405280600381526020016230343960e81b81525081526020016040518060400160405280600381526020016266666360e81b81525081526020016040518060400160405280600381526020016239303160e81b81525081526020016040518060400160405280600381526020016266643160e81b815250815250601590602162000dce9291906200276a565b50604080516104208101825260fc815260ac6020820152605091810191909152604f606082015260386080820152603160a0820152602560c0820152602160e08201819052601f610100830152601e610120830152601c610140830152601b610160830152601a61018083015260176101a083015260166101c0830181905260126101e0840152600f610200840152600e610220840152600d610240840152600c610260840152600b610280840152600a6102a084018190526102c084018190526102e08401526009610300840152600861032084015260076103408401819052610360840152600661038084015260056103a084018190526103c084015260046103e0840152600361040084015262000eea9290916200266f565b506040518060c001604052806040518060400160405280600381526020016239393960e81b81525081526020016040518060400160405280600381526020016266653760e81b81525081526020016040518060400160405280600381526020016239393960e81b81525081526020016040518060400160405280600381526020016239393960e81b81525081526020016040518060400160405280600381526020016266653760e81b81525081526020016040518060400160405280600381526020016218991960ea1b815250815250601790600662000fcc929190620027bc565b506040805160e08101825260fb8152602080820152601d918101919091526011606082015260106080820152600860a0820152600560c0820152620010169060189060076200266f565b50604080516104e08101825260036104a082018181526206630360ec1b6104c084018190529083528351808501855282815260208181018390528085019190915284518086018652838152808201839052848601528451808601865283815280820183905260608501528451808601865283815280820183905260808501528451808601865283815280820183905260a08501528451808601865283815280820183905260c0850152845180860186528381526218183360e91b81830181905260e0860191909152855180870187528481528083018290526101008601528551808701875284815280830182905261012086015285518087018752848152808301829052610140860152855180870187528481528083018290526101608601528551808701875284815280830182905261018086015285518087018752848152808301919091526101a0850152845180860186528381528082018390526101c0850152845180860186528381526233183360e91b8183018190526101e0860191909152855180870187528481528083018290526102008601528551808701875284815280830182905261022086015285518087018752848152808301829052610240860152855180870187528481528083018290526102608601528551808701875284815280830182905261028086015285518087018752848152808301919091526102a0850152845180860186528381526206638360ec1b8183018190526102c0860191909152855180870187528481528083018290526102e086015285518087018752848152808301829052610300860152855180870187528481528083018290526103208601528551808701875284815280830182905261034086015285518087018752848152808301829052610360860152855180870187528481528083019390935261038085019290925284518086018652838152808201929092526103a084019190915283518085018552828152621c983360e91b8183018190526103c085019190915284518086018652838152620cc68760eb1b818401526103e085015284518086018652838152620c8c9960ea1b81840152610400850152845180860186528381528083018290526104208501528451808601865283815280830191909152610440840152835180850185529182526206666360ec1b82820152610460830191909152825190810190925260008252610480810191909152620013a69060199060256200280e565b50604051806104a001604052806040518060400160405280600381526020016203066360ec1b81525081526020016040518060400160405280600381526020016218183360e91b81525081526020016040518060400160405280600381526020016206638360ec1b81525081526020016040518060400160405280600381526020016206666360ec1b8152508152602001604051806040016040528060038152602001621c983360e91b81525081526020016040518060400160405280600381526020016233183360e91b8152508152602001604051806040016040528060038152602001620cc68760eb1b81525081526020016040518060400160405280600381526020016206630360ec1b81525081526020016040518060400160405280600381526020016203066360ec1b81525081526020016040518060400160405280600381526020016218183360e91b81525081526020016040518060400160405280600381526020016206638360ec1b81525081526020016040518060400160405280600381526020016206666360ec1b8152508152602001604051806040016040528060038152602001621c983360e91b81525081526020016040518060400160405280600381526020016233183360e91b81525081526020016040518060400160405280600381526020016203030360ec1b81525081526020016040518060400160405280600381526020016206630360ec1b81525081526020016040518060400160405280600381526020016203066360ec1b81525081526020016040518060400160405280600381526020016218183360e91b81525081526020016040518060400160405280600381526020016206638360ec1b81525081526020016040518060400160405280600381526020016206666360ec1b8152508152602001604051806040016040528060038152602001621c983360e91b81525081526020016040518060400160405280600381526020016233183360e91b81525081526020016040518060400160405280600381526020016206630360ec1b81525081526020016040518060400160405280600381526020016203066360ec1b81525081526020016040518060400160405280600381526020016218183360e91b81525081526020016040518060400160405280600381526020016206638360ec1b81525081526020016040518060400160405280600381526020016206666360ec1b8152508152602001604051806040016040528060038152602001621c983360e91b81525081526020016040518060400160405280600381526020016206630360ec1b81525081526020016040518060400160405280600381526020016233183360e91b81525081526020016040518060400160405280600381526020016206630360ec1b81525081526020016040518060400160405280600381526020016203030360ec1b81525081526020016040518060400160405280600381526020016203030360ec1b81525081526020016040518060400160405280600381526020016203066360ec1b81525081526020016040518060400160405280600381526020016218183360e91b8152508152602001604051806040016040528060038152602001620cc68760eb1b815250815260200160405180602001604052806000815250815250601a9060256200187c9291906200280e565b50604080516104a08101825260fb815260208101829052602f91810191909152602a606082015260276080820152602660a0820152602460c0820152602360e0820152602261010082018190526101208201526021610140820152601d610160820152601c610180820152601a6101a082018190526101c082015260196101e08201819052610200820181905261022082015260166102408201526015610260820152601461028082018190526102a082015260126102c082015260116102e08201819052610300820152600f610320820152600e6103408201819052610360820152600d61038082018190526103a0820152600c6103c082018190526103e08201819052610400820152600a610420820152600961044082015260086104608201526007610480820152620019b790601b9060256200266f565b5060408051610340810190915261011a610200820181815282916200633461022084013981526020016040518060c0016040528060908152602001620064b760909139815260200160405180606001604052806030815260200162006d8060309139815260200160405180606001604052806030815260200162006dd660309139815260200160405180606001604052806031815260200162006aad603191398152602001604051806060016040528060318152602001620070186031913981526020016040518060600160405280603181526020016200708e60319139815260200160405180606001604052806031815260200162006c3a60319139815260200160405180608001604052806050815260200162006e3c60509139815260200160405180608001604052806050815260200162006f8d6050913981526020016040518060c001604052806099815260200162006547609991398152602001604051806060016040528060318152602001620064866031913981526020016040518060a0016040528060698152602001620069c960699139815260200160405180606001604052806036815260200162006ccb6036913981526020016040518060a0016040528060698152602001620067c4606991398152602001604051806040016040528060068152602001651e17b9bb339f60d11b815250815250601c90601062001bc692919062002860565b506040518060c001604052806086815260200162006ade60869139805162001bf791601d91602090910190620028b2565b506040518060600160405280603b815260200162006e8c603b9139805162001c2891601e91602090910190620028b2565b506040518060600160405280603e815260200162006bc2603e9139805162001c5991601f91602090910190620028b2565b5060405180608001604052806042815260200162006d3e60429139805162001c889160209190820190620028b2565b506040518060800160405280604581526020016200704960459139805162001cb991602191602090910190620028b2565b506040518060800160405280604581526020016200665260459139805162001cea91602291602090910190620028b2565b50604051806080016040528060448152602001620065e060449139805162001d1b91602391602090910190620028b2565b506040518060600160405280603b8152602001620062d1603b9139805162001d4c91602491602090910190620028b2565b506040518060600160405280603e815260200162006c6b603e9139805162001d7d91602591602090910190620028b2565b506040518060800160405280604e8152602001620068ee604e9139805162001dae91602691602090910190620028b2565b506040518060800160405280604e815260200162006ec7604e9139805162001ddf91602791602090910190620028b2565b5060405180608001604052806049815260200162006f4460499139805162001e1091602891602090910190620028b2565b506040518060600160405280603a815260200162006c00603a9139805162001e4191602991602090910190620028b2565b506040518060600160405280603d815260200162006d01603d9139805162001e7291602a91602090910190620028b2565b506040518060600160405280603b8152602001620070bf603b9139805162001ea391602b91602090910190620028b2565b506040518060600160405280603b815260200162006a32603b9139805162001ed491602c91602090910190620028b2565b506040518060600160405280603b81526020016200695f603b9139805162001f0591602d91602090910190620028b2565b506040518060600160405280603b815260200162006296603b9139805162001f3691602e91602090910190620028b2565b506040518060600160405280603b815260200162006fdd603b9139805162001f6791602f91602090910190620028b2565b506040518060600160405280603b815260200162006697603b9139805162001f9891603091602090910190620028b2565b506040518060600160405280603b815260200162006b87603b9139805162001fc991603191602090910190620028b2565b5060405180606001604052806040815260200162006a6d60409139805162001ffa91603291602090910190620028b2565b506040518060800160405280604e8152602001620066d2604e913980516200202b91603391602090910190620028b2565b506040518060c00160405280609381526020016200685b6093913980516200205c91603491602090910190620028b2565b506040518060e0016040528060a481526020016200672060a4913980516200208d91603591602090910190620028b2565b506040805180820190915260038082526211179f60e91b6020909201918252620020ba91603691620028b2565b506040518060600160405280602e81526020016200682d602e91398051620020eb91603791602090910190620028b2565b506040805180820190915260038082526266653760e81b60209092019182526200211891603891620028b2565b506040805180820190915260038082526239393960e81b60209092019182526200214591603991620028b2565b5060405180606001604052806036815260200162006e066036913980516200217691603a91602090910190620028b2565b506040518060600160405280602e815260200162006624602e91398051620021a791603b91602090910190620028b2565b506040805180820190915260038082526218991960ea1b6020909201918252620021d491603c91620028b2565b5060408051808201909152600a808252691e3634b732903c189e9160b11b60209092019182526200220891603d91620028b2565b5060408051808201909152600f8082526e11103c989e9119981b91103c191e9160891b60209092019182526200224191603e91620028b2565b506040518060600160405280602f815260200162006f15602f913980516200227291603f91602090910190620028b2565b50604080518082018252600f8082526e11103c989e9119989b91103c191e9160891b6020909201918252620022a9929190620028b2565b506040518060600160405280602f81526020016200699a602f91398051620022da91604191602090910190620028b2565b506040518060600160405280603881526020016200644e6038913980516200230b91604291602090910190620028b2565b5060405180606001604052806023815260200162006b646023913980516200233c91604391602090910190620028b2565b5060405180606001604052806026815260200162006db06026913980516200236d91604491602090910190620028b2565b5060405180606001604052806022815260200162006ca96022913980516200239e91604591602090910190620028b2565b506040518060600160405280602381526020016200693c602391398051620023cf91604691602090910190620028b2565b506040518060600160405280602881526020016200630c6028913980516200240091604791602090910190620028b2565b506040805161012081018252600160e08201818152604160f81b610100840152825282518084018452818152602160f91b6020828101919091528084019190915283518085018552828152604360f81b818301528385015283518085018552828152601160fa1b81830152606084015283518085018552828152604560f81b81830152608084015283518085018552828152602360f91b8183015260a08401528351808501909452908352604760f81b9083015260c0810191909152620024cc9060489060076200292f565b50348015620024da57600080fd5b50604080518082018252600c81526b4f6e436861696e447564657360a01b6020808301918252835180850190945260048452634455444560e01b9084015281519192916200252b91600091620028b2565b50805162002541906001906020840190620028b2565b50506001600a5550620025543362002567565b600d805460ff1916600117905562002a38565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280548282559060005260206000209081019282156200260b579160200282015b828111156200260b5782518051620025fa918491602090910190620028b2565b5091602001919060010190620025da565b506200261992915062002981565b5090565b8280548282559060005260206000209081019282156200260b579160200282015b828111156200260b57825180516200265e918491602090910190620028b2565b50916020019190600101906200263e565b82805482825590600052602060002090601f016020900481019282156200270a5791602002820160005b83821115620026d957835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030262002699565b8015620027085782816101000a81549060ff0219169055600101602081600001049283019260010302620026d9565b505b5062002619929150620029a2565b8280548282559060005260206000209081019282156200260b579160200282015b828111156200260b578251805162002759918491602090910190620028b2565b509160200191906001019062002739565b8280548282559060005260206000209081019282156200260b579160200282015b828111156200260b5782518051620027ab918491602090910190620028b2565b50916020019190600101906200278b565b8280548282559060005260206000209081019282156200260b579160200282015b828111156200260b5782518051620027fd918491602090910190620028b2565b5091602001919060010190620027dd565b8280548282559060005260206000209081019282156200260b579160200282015b828111156200260b57825180516200284f918491602090910190620028b2565b50916020019190600101906200282f565b8280548282559060005260206000209081019282156200260b579160200282015b828111156200260b5782518051620028a1918491602090910190620028b2565b509160200191906001019062002881565b828054620028c090620029fb565b90600052602060002090601f016020900481019282620028e457600085556200270a565b82601f10620028ff57805160ff19168380011785556200270a565b828001600101855582156200270a579182015b828111156200270a57825182559160200191906001019062002912565b8280548282559060005260206000209081019282156200260b579160200282015b828111156200260b578251805162002970918491602090910190620028b2565b509160200191906001019062002950565b8082111562002619576000620029988282620029b9565b5060010162002981565b5b80821115620026195760008155600101620029a3565b508054620029c790620029fb565b6000825580601f10620029d8575050565b601f016020900490600052602060002090810190620029f89190620029a2565b50565b600181811c9082168062002a1057607f821691505b6020821081141562002a3257634e487b7160e01b600052602260045260246000fd5b50919050565b61384e8062002a486000396000f3fe60806040526004361061013c5760003560e01c806301ffc9a71461014157806302329a291461017657806306fdde0314610198578063081812fc146101ba578063095ea7b3146101f257806313faede61461021257806318160ddd1461023657806323b872dd1461024b5780632f745c591461026b5780633ccfd60b1461028b57806342842e0e146102935780634378a6e3146102b35780634e71d92d146102d35780634f6ccce7146102db5780635c975abb146102fb5780636352211e1461031557806370a0823114610335578063715018a6146103555780638da5cb5b1461036a57806395d89b411461037f5780639c2f2a4214610394578063a22cb465146103aa578063b88d4fde146103ca578063c87b56dd146103ea578063d5abeb011461040a578063e985e9c514610420578063f2fde38b14610440575b600080fd5b34801561014d57600080fd5b5061016161015c366004612e5c565b610460565b60405190151581526020015b60405180910390f35b34801561018257600080fd5b50610196610191366004612e41565b61048b565b005b3480156101a457600080fd5b506101ad6104d6565b60405161016d919061350e565b3480156101c657600080fd5b506101da6101d5366004612e96565b610568565b6040516001600160a01b03909116815260200161016d565b3480156101fe57600080fd5b5061019661020d366004612e17565b6105f0565b34801561021e57600080fd5b50610228600c5481565b60405190815260200161016d565b34801561024257600080fd5b50600854610228565b34801561025757600080fd5b50610196610266366004612cd6565b610701565b34801561027757600080fd5b50610228610286366004612e17565b610732565b6101966107c8565b34801561029f57600080fd5b506101966102ae366004612cd6565b610861565b3480156102bf57600080fd5b506101ad6102ce366004612e96565b61087c565b610196610929565b3480156102e757600080fd5b506102286102f6366004612e96565b610a93565b34801561030757600080fd5b50600d546101619060ff1681565b34801561032157600080fd5b506101da610330366004612e96565b610b26565b34801561034157600080fd5b50610228610350366004612c81565b610b9d565b34801561036157600080fd5b50610196610c24565b34801561037657600080fd5b506101da610c5f565b34801561038b57600080fd5b506101ad610c6e565b3480156103a057600080fd5b50610228600e5481565b3480156103b657600080fd5b506101966103c5366004612ded565b610c7d565b3480156103d657600080fd5b506101966103e5366004612d12565b610d3e565b3480156103f657600080fd5b506101ad610405366004612e96565b610d76565b34801561041657600080fd5b50610228610d0581565b34801561042c57600080fd5b5061016161043b366004612ca3565b610e7f565b34801561044c57600080fd5b5061019661045b366004612c81565b610ead565b60006001600160e01b0319821663780e9d6360e01b1480610485575061048582610f4a565b92915050565b33610494610c5f565b6001600160a01b0316146104c35760405162461bcd60e51b81526004016104ba90613573565b60405180910390fd5b600d805460ff1916911515919091179055565b6060600080546104e5906136aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610511906136aa565b801561055e5780601f106105335761010080835404028352916020019161055e565b820191906000526020600020905b81548152906001019060200180831161054157829003601f168201915b5050505050905090565b600061057382610f9a565b6105d45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016104ba565b506000908152600460205260409020546001600160a01b031690565b60006105fb82610b26565b9050806001600160a01b0316836001600160a01b031614156106695760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016104ba565b336001600160a01b038216148061068557506106858133610e7f565b6106f25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776044820152771b995c881b9bdc88185c1c1c9bdd995908199bdc88185b1b60421b60648201526084016104ba565b6106fc8383610fb7565b505050565b61070b3382611025565b6107275760405162461bcd60e51b81526004016104ba906135a8565b6106fc8383836110ef565b600061073d83610b9d565b821061079f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016104ba565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b336107d1610c5f565b6001600160a01b0316146107f75760405162461bcd60e51b81526004016104ba90613573565b6000610801610c5f565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461084b576040519150601f19603f3d011682016040523d82523d6000602084013e610850565b606091505b505090508061085e57600080fd5b50565b6106fc83838360405180602001604052806000815250610d3e565b6060600061088983611288565b9050600061089d8260a0015160ff16611608565b6108ad836020015160ff16611608565b6040516020016108be929190613305565b6040516020818303038152906040529050806108e0836040015160ff16611608565b6108f0846080015160ff16611608565b84516108fe9060ff16611608565b6040516020016109119493929190613155565b60405160208183030381529060405292505050919050565b6002600a54141561097c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104ba565b6002600a55600d5460ff16156109c85760405162461bcd60e51b81526020600482015260116024820152701b5a5b9d1a5b99c81a5cc81c185d5cd959607a1b60448201526064016104ba565b610d05600e5460016109da91906135f9565b1115610a205760405162461bcd60e51b81526020600482015260156024820152741b585e08139195081b1a5b5a5d081c995858da1959605a1b60448201526064016104ba565b600c54341015610a675760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b60448201526064016104ba565b6001600e6000828254610a7a91906135f9565b90915550610a8c905033600e54611705565b6001600a55565b6000610a9e60085490565b8210610b015760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016104ba565b60088281548110610b1457610b14613776565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806104855760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016104ba565b60006001600160a01b038216610c085760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016104ba565b506001600160a01b031660009081526003602052604090205490565b33610c2d610c5f565b6001600160a01b031614610c535760405162461bcd60e51b81526004016104ba90613573565b610c5d6000611723565b565b600b546001600160a01b031690565b6060600180546104e5906136aa565b6001600160a01b038216331415610cd25760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b60448201526064016104ba565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610d483383611025565b610d645760405162461bcd60e51b81526004016104ba906135a8565b610d7084848484611775565b50505050565b60606000610d8383611288565b60408051808201825260188152777b226e616d65223a20224f6e436861696e2044756465202360401b602080830191909152825180840184526002815261227d60f01b818301528351808501909452601d84527f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000091840191909152929350919080610e5484610e1189611608565b610e1a886117a8565b610e2b610e268a61185b565b611f7d565b87604051602001610e40959493929190612fc0565b604051602081830303815290604052611f7d565b604051602001610e65929190612f91565b604051602081830303815290604052945050505050919050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b33610eb6610c5f565b6001600160a01b031614610edc5760405162461bcd60e51b81526004016104ba90613573565b6001600160a01b038116610f415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ba565b61085e81611723565b60006001600160e01b031982166380ac58cd60e01b1480610f7b57506001600160e01b03198216635b5e139f60e01b145b8061048557506301ffc9a760e01b6001600160e01b0319831614610485565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610fec82610b26565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061103082610f9a565b6110915760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016104ba565b600061109c83610b26565b9050806001600160a01b0316846001600160a01b031614806110d75750836001600160a01b03166110cc84610568565b6001600160a01b0316145b806110e757506110e78185610e7f565b949350505050565b826001600160a01b031661110282610b26565b6001600160a01b03161461116a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016104ba565b6001600160a01b0382166111cc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104ba565b6111d78383836120e2565b6111e2600082610fb7565b6001600160a01b038316600090815260036020526040812080546001929061120b908490613644565b90915550506001600160a01b03821660009081526003602052604081208054600192906112399084906135f9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716916000805160206137f983398151915291a4505050565b611290612c19565b61129c82613227613644565b91506112a6612c19565b60086112f760486000815481106112bf576112bf613776565b906000526020600020016112d286611608565b6040516020016112e392919061334a565b60405160208183030381529060405261219a565b6113019190613720565b60ff1681526012805460408051602080840282018101909252828152611397939092909183018282801561137257602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116113435790505b5050505050610719611388601e6112d288611608565b6113929190613720565b6121cb565b60ff1660208083019190915260148054604080518285028101850190915281815261143f939092919083018282801561140d57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116113de5790505b5050505050610595611388604860018154811061142c5761142c613776565b906000526020600020016112d288611608565b60ff166040808301919091526016805482516020808302820181019094528181526114d493909291908301828280156114b557602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116114865790505b5050505050610458611388604860028154811061142c5761142c613776565b60ff1660608201526018805460408051602080840282018101909252828152611567939092909183018282801561154857602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116115195790505b5050505050610166611388604860038154811061142c5761142c613776565b60ff166080820152601b8054604080516020808402820181019092528281526115fa93909290918301828280156115db57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116115ac5790505b5050505050610457611388604860058154811061142c5761142c613776565b60ff1660a082015292915050565b60608161162c5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156116565780611640816136e5565b915061164f9050600a83613611565b9150611630565b6000816001600160401b038111156116705761167061378c565b6040519080825280601f01601f19166020018201604052801561169a576020820181803683370190505b5090505b84156110e7576116af600183613644565b91506116bc600a86613720565b6116c79060306135f9565b60f81b8183815181106116dc576116dc613776565b60200101906001600160f81b031916908160001a9053506116fe600a86613611565b945061169e565b61171f828260405180602001604052806000815250612243565b5050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6117808484846110ef565b61178c84848484612276565b610d705760405162461bcd60e51b81526004016104ba90613521565b6060600060426117be846000015160ff16611608565b60436117d0866020015160ff16611608565b60446117e2886080015160ff16611608565b6040516020016117f7969594939291906133ba565b604051602081830303815290604052905080604561181b8560a0015160ff16611608565b604661182d876040015160ff16611608565b604760405160200161184496959493929190613233565b604051602081830303815290604052915050919050565b606060006010836020015160ff168154811061187957611879613776565b90600052602060002001805461188e906136aa565b80601f01602080910402602001604051908101604052809291908181526020018280546118ba906136aa565b80156119075780601f106118dc57610100808354040283529160200191611907565b820191906000526020600020905b8154815290600101906020018083116118ea57829003601f168201915b5050505050905060006011846020015160ff168154811061192a5761192a613776565b90600052602060002001805461193f906136aa565b80601f016020809104026020016040519081016040528092919081815260200182805461196b906136aa565b80156119b85780601f1061198d576101008083540402835291602001916119b8565b820191906000526020600020905b81548152906001019060200180831161199b57829003601f168201915b505060408051602080820183526000808352835180830185528181528451808401865291825293519798509196929550909350611a039250601e918791601f918a9160369101613366565b6040516020818303038152906040529150601e8760a0015160ff161115611ab4576020601960018960a00151611a39919061365b565b60ff1681548110611a4c57611a4c613776565b906000526020600020016022601a60018b60a00151611a6b919061365b565b60ff1681548110611a7e57611a7e613776565b906000526020600020016036604051602001611a9e9594939291906134a8565b6040516020818303038152906040529250611bff565b60148760a0015160ff161115611b0b576020601960018960a00151611ad9919061365b565b60ff1681548110611aec57611aec613776565b906000526020600020016023601a60018b60a00151611a6b919061365b565b600a8760a0015160ff161115611b62576020601960018960a00151611b30919061365b565b60ff1681548110611b4357611b43613776565b906000526020600020016021601a60018b60a00151611a6b919061365b565b60a087015160ff1615611bff57602c846036602d876036602e8a6036604051602001611b9699989796959493929190613421565b604051602081830303815290604052905080602f856036603088603660318b6036604051602001611bcf99989796959493929190613421565b60408051601f1981840301815290829052611bed9291602001612f91565b60405160208183030381529060405290505b6000601c600081548110611c1557611c15613776565b90600052602060002001600f896000015160ff1681548110611c3957611c39613776565b90600052602060002001601c600181548110611c5757611c57613776565b9060005260206000200187601c600281548110611c7657611c76613776565b90600052602060002001604051602001611c94959493929190613486565b60405160208183030381529060405290508086601c600381548110611cbb57611cbb613776565b9060005260206000200188601c600481548110611cda57611cda613776565b9060005260206000200189601c600581548110611cf957611cf9613776565b906000526020600020018c601c600681548110611d1857611d18613776565b90600052602060002001604051602001611d3a999897969594939291906130b5565b60405160208183030381529060405290508085601c600781548110611d6157611d61613776565b9060005260206000200188601c600881548110611d8057611d80613776565b9060005260206000200189601c600981548110611d9f57611d9f613776565b906000526020600020018c601c600a81548110611dbe57611dbe613776565b90600052602060002001604051602001611de0999897969594939291906130b5565b6040516020818303038152906040529050806013896040015160ff1681548110611e0c57611e0c613776565b90600052602060002001601c600b81548110611e2a57611e2a613776565b9060005260206000200160138b6040015160ff1681548110611e4e57611e4e613776565b90600052602060002001601c600c81548110611e6c57611e6c613776565b90600052602060002001611e818b8b8f612383565b601c600d81548110611e9557611e95613776565b9060005260206000200160158f6060015160ff1681548110611eb957611eb9613776565b90600052602060002001601c600e81548110611ed757611ed7613776565b90600052602060002001604051602001611ef99998979695949392919061329c565b604051602081830303815290604052905080611f1d89606001518a608001516125a2565b611f2a8a608001516127e3565b868587601c600f81548110611f4157611f41613776565b90600052602060002001604051602001611f61979695949392919061302b565b6040516020818303038152906040529650505050505050919050565b805160609080611f9d575050604080516020810190915260008152919050565b60006003611fac8360026135f9565b611fb69190613611565b611fc1906004613625565b90506000611fd08260206135f9565b6001600160401b03811115611fe757611fe761378c565b6040519080825280601f01601f191660200182016040528015612011576020820181803683370190505b50905060006040518060600160405280604081526020016137b9604091399050600181016020830160005b8681101561209d576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b83526004909201910161203c565b5060038606600181146120b757600281146120c8576120d4565b613d3d60f01b6001198301526120d4565b603d60f81b6000198301525b505050918152949350505050565b6001600160a01b03831661213d5761213881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612160565b816001600160a01b0316836001600160a01b03161461216057612160838261295d565b6001600160a01b038216612177576106fc816129fa565b826001600160a01b0316826001600160a01b0316146106fc576106fc8282612aa9565b6000816040516020016121ad9190612f75565b60408051601f19818403018152919052805160209091012092915050565b600080600090506000846000815181106121e7576121e7613776565b602002602001015160ff1690505b83811161223b578161220681613700565b925050848260ff168151811061221e5761221e613776565b602002602001015160ff168161223491906135f9565b90506121f5565b509392505050565b61224d8383612aed565b61225a6000848484612276565b6106fc5760405162461bcd60e51b81526004016104ba90613521565b60006001600160a01b0384163b1561237857604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906122ba9033908990889088906004016134d1565b602060405180830381600087803b1580156122d457600080fd5b505af1925050508015612304575060408051601f3d908101601f1916820190925261230191810190612e79565b60015b61235e573d808015612332576040519150601f19603f3d011682016040523d82523d6000602084013e612337565b606091505b5080516123565760405162461bcd60e51b81526004016104ba90613521565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506110e7565b506001949350505050565b606060006040518060200160405280600081525090506004836040015160ff1611156123d75760248560258760366040516020016123c5959493929190613366565b60405160208183030381529060405290505b600a836040015160ff1611156124175780602985602a87603660405160200161240596959493929190613233565b60405160208183030381529060405290505b6010836040015160ff1611156124525780602b86603660405160200161244094939291906131eb565b60405160208183030381529060405290505b60078360a0015160ff161180156124705750600c8360a0015160ff16105b80612494575060128360a0015160ff16118015612494575060168360a0015160ff16105b806124b85750601d8360a0015160ff161180156124b85750601e8360a0015160ff16105b156124e3578060346040516020016124d19291906131c4565b60405160208183030381529060405290505b6014836040015160ff161180156125015750601e836040015160ff16105b8015612570575060078360a0015160ff161180156125265750600c8360a0015160ff16105b8061254a575060128360a0015160ff1611801561254a575060168360a0015160ff16105b8061256e5750601d8360a0015160ff1611801561256e5750601e8360a0015160ff16105b155b156110e7578060356040516020016125899291906131c4565b6040516020818303038152906040529050949350505050565b6040805160208101909152600080825260609190601860ff861611806125d9575060088560ff161180156125d9575060108560ff16105b156126cb575060005b60078110156126575781603d61260c6125fc846019613625565b6126079060af6135f9565b611608565b603e61261c6125fc866019613625565b603f60405160200161263396959493929190613233565b6040516020818303038152906040529150808061264f906136e5565b9150506125e2565b5060005b60068110156126cb5781603d612680612675846019613625565b6126079060bb6135f9565b6040612690612675866019613625565b60416040516020016126a796959493929190613233565b604051602081830303815290604052915080806126c3906136e5565b91505061265b565b8360ff16600114156126fd578160286040516020016126eb9291906131c4565b60405160208183030381529060405291505b60058460ff1611156127335781603360405160200161271d9291906131c4565b6040516020818303038152906040529150612759565b8160326040516020016127479291906131c4565b60405160208183030381529060405291505b600f8560ff1611801561276f575060058460ff16115b1561279a578160276040516020016127889291906131c4565b60405160208183030381529060405291505b600f8560ff161180156127b1575060058460ff1611155b1561223b578160266040516020016127ca9291906131c4565b60408051601f1981840301815291905295945050505050565b606060ff821661280157505060408051602081019091526000815290565b60038260ff16101561285f5760018260ff1611156128475760376038603a6040516020016128319392919061346e565b6040516020818303038152906040529050919050565b60376039603a6040516020016128319392919061346e565b60038260ff1611156128cb5760058260ff16111561288f57603b603c60366040516020016128319392919061346e565b60048260ff1611156128b357603b603860366040516020016128319392919061346e565b603b603960366040516020016128319392919061346e565b601d80546128d8906136aa565b80601f0160208091040260200160405190810160405280929190818152602001828054612904906136aa565b80156129515780601f1061292657610100808354040283529160200191612951565b820191906000526020600020905b81548152906001019060200180831161293457829003601f168201915b50505050509050919050565b6000600161296a84610b9d565b6129749190613644565b6000838152600760205260409020549091508082146129c7576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612a0c90600190613644565b60008381526009602052604081205460088054939450909284908110612a3457612a34613776565b906000526020600020015490508060088381548110612a5557612a55613776565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612a8d57612a8d613760565b6001900381819060005260206000200160009055905550505050565b6000612ab483610b9d565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216612b435760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104ba565b612b4c81610f9a565b15612b985760405162461bcd60e51b815260206004820152601c60248201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b60448201526064016104ba565b612ba4600083836120e2565b6001600160a01b0382166000908152600360205260408120805460019290612bcd9084906135f9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392906000805160206137f9833981519152908290a45050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b80356001600160a01b0381168114612c6c57600080fd5b919050565b80358015158114612c6c57600080fd5b600060208284031215612c9357600080fd5b612c9c82612c55565b9392505050565b60008060408385031215612cb657600080fd5b612cbf83612c55565b9150612ccd60208401612c55565b90509250929050565b600080600060608486031215612ceb57600080fd5b612cf484612c55565b9250612d0260208501612c55565b9150604084013590509250925092565b60008060008060808587031215612d2857600080fd5b612d3185612c55565b9350612d3f60208601612c55565b92506040850135915060608501356001600160401b0380821115612d6257600080fd5b818701915087601f830112612d7657600080fd5b813581811115612d8857612d8861378c565b604051601f8201601f19908116603f01168101908382118183101715612db057612db061378c565b816040528281528a6020848701011115612dc957600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215612e0057600080fd5b612e0983612c55565b9150612ccd60208401612c71565b60008060408385031215612e2a57600080fd5b612e3383612c55565b946020939093013593505050565b600060208284031215612e5357600080fd5b612c9c82612c71565b600060208284031215612e6e57600080fd5b8135612c9c816137a2565b600060208284031215612e8b57600080fd5b8151612c9c816137a2565b600060208284031215612ea857600080fd5b5035919050565b60008151808452612ec781602086016020860161367e565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680612ef557607f831692505b6020808410821415612f1757634e487b7160e01b600052602260045260246000fd5b818015612f2b5760018114612f3c57612f69565b60ff19861689528489019650612f69565b60008881526020902060005b86811015612f615781548b820152908501908301612f48565b505084890196505b50505050505092915050565b60008251612f8781846020870161367e565b9190910192915050565b60008351612fa381846020880161367e565b835190830190612fb781836020880161367e565b01949350505050565b60008651612fd2818460208b0161367e565b865190830190612fe6818360208b0161367e565b8651910190612ff9818360208a0161367e565b855191019061300c81836020890161367e565b845191019061301f81836020880161367e565b01979650505050505050565b60008851602061303e8285838e0161367e565b8951918401916130518184848e0161367e565b89519201916130638184848d0161367e565b88519201916130758184848c0161367e565b87519201916130878184848b0161367e565b86519201916130998184848a0161367e565b6130a581840187612edb565b9c9b505050505050505050505050565b60008a516130c7818460208f0161367e565b8a51908301906130db818360208f0161367e565b6130e78183018c612edb565b91505088516130fa818360208d0161367e565b6131068183018a612edb565b9150508651613119818360208b0161367e565b61312581830188612edb565b915050845161313881836020890161367e565b61314481830186612edb565b9d9c50505050505050505050505050565b60008551613167818460208a0161367e565b85519083019061317b818360208a0161367e565b600b60fa1b9101818152855190919061319b816001850160208a0161367e565b600192019182015283516131b681600284016020880161367e565b016002019695505050505050565b600083516131d681846020880161367e565b6131e281840185612edb565b95945050505050565b600085516131fd818460208a0161367e565b61320981840187612edb565b9050845161321b81836020890161367e565b61322781830186612edb565b98975050505050505050565b60008751613245818460208c0161367e565b61325181840189612edb565b90508651613263818360208b0161367e565b61326f81830188612edb565b915050845161328281836020890161367e565b61328e81830186612edb565b9a9950505050505050505050565b60008a516132ae818460208f0161367e565b6132d56132cf6132c96132c38487018f612edb565b8d612edb565b8b612edb565b89612edb565b905086516132e7818360208b0161367e565b6131446132ff6132f98385018a612edb565b88612edb565b86612edb565b6000835161331781846020880161367e565b8083019050600b60fa1b808252845161333781600185016020890161367e565b6001920191820152600201949350505050565b60006133568285612edb565b8351612fb781836020880161367e565b60006133728288612edb565b8651613382818360208b0161367e565b61338e81830188612edb565b91505084516133a181836020890161367e565b6133ad81830186612edb565b9998505050505050505050565b60006133c68289612edb565b87516133d6818360208c0161367e565b6133e281830189612edb565b91505085516133f5818360208a0161367e565b61340181830187612edb565b915050835161341481836020880161367e565b0198975050505050505050565b600061342d828c612edb565b8a5161343d818360208f0161367e565b61344c6132c98284018d612edb565b915050875161345f818360208c0161367e565b6131256132f98284018a612edb565b60006131e26134806132ff8488612edb565b84612edb565b60006134986132ff6132f9848a612edb565b84516133a181836020890161367e565b60006134c66134806132ff6132f96134c0868c612edb565b8a612edb565b979650505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061350490830184612eaf565b9695505050505050565b602081526000612c9c6020830184612eaf565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561360c5761360c613734565b500190565b6000826136205761362061374a565b500490565b600081600019048311821515161561363f5761363f613734565b500290565b60008282101561365657613656613734565b500390565b600060ff821660ff84168082101561367557613675613734565b90039392505050565b60005b83811015613699578181015183820152602001613681565b83811115610d705750506000910152565b600181811c908216806136be57607f821691505b602082108114156136df57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156136f9576136f9613734565b5060010190565b600060ff821660ff81141561371757613717613734565b60010192915050565b60008261372f5761372f61374a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461085e57600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122087992c838e382659b0c1a646259ddc8fc9257a4b09509041dbfdd7519652ad9864736f6c634300080700333c7265637420783d223234302220793d2231303022202077696474683d22313022206865696768743d22343022207374796c653d2266696c6c3a233c7265637420783d223136302220793d22313930222077696474683d2231383022206865696768743d22333022207374796c653d2266696c6c3a23227d5d2c22696d616765223a2022646174613a696d6167652f7376672b786d6c3b6261736536342c3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302035303020353030223e3c72616469616c4772616469656e742069643d226772616431222063783d22353025222063793d223530252220723d22353025222066783d22353025222066793d22353025223e3c73746f70206f66667365743d22312522207374796c653d2273746f702d636f6c6f723a236565653b73746f702d6f7061636974793a3122202f3e3c73746f70206f66667365743d223130302522207374796c653d2273746f702d6f7061636974793a313b73746f702d636f6c6f723a23222c202261747472696275746573223a205b7b2274726169745f74797065223a20224261636b67726f756e64222c2276616c7565223a2022222f3e3c636972636c652063783d22333030222063793d223232302220723d22323022207374796c653d2266696c6c3a23222f3e3c2f72616469616c4772616469656e743e3c7265637420783d22302220793d2230222077696474683d2235303022206865696768743d2235303022207374796c653d2266696c6c3a75726c2823677261643129222f3e3c726563742077696474683d223022206865696768743d22302220783d2239392220793d2234303022207374796c653d2266696c6c3a23222f3e3c636972636c652063783d22323030222063793d223231352220723d22333522207374796c653d2266696c6c3a23666666222f3e3c636972636c652063783d22333035222063793d223232322220723d22333122207374796c653d2266696c6c3a23666666222f3e3c636972636c652063783d22323030222063793d223232302220723d22323022207374796c653d2266696c6c3a23222f3e3c726563742077696474683d2232373022206865696768743d2233332220783d2238302220793d22313036222072793d223522207374796c653d2266696c6c3a233c636972636c652063783d22313335222063793d223239302220723d22313222207374796c653d2266696c6c3a23222f3e3c726563742077696474683d2233303022206865696768743d2233332220783d223130302220793d22313036222072793d223522207374796c653d2266696c6c3a233c7265637420783d223238302220793d2231303022202077696474683d22313022206865696768743d22343022207374796c653d2266696c6c3a233c6c696e652078313d22313935222079313d22333331222078323d22333030222079323d2233353022207374796c653d227374726f6b653a233030303b7374726f6b652d77696474683a38222f3e3c7265637420783d223135302220793d2231373022202077696474683d2232303022206865696768743d223930222072783d223130222072793d22313022207374796c653d2266696c6c3a23303030222f3e3c7265637420783d223136302220793d2231383022202077696474683d2231383022206865696768743d223730222072783d223130222072793d22313022207374796c653d2266696c6c3a23393939222f3e222f3e3c636972636c652063783d22323638222063793d223239352220723d223522207374796c653d2266696c6c3a23303030222f3e3c636972636c652063783d22323332222063793d223239352220723d223522207374796c653d2266696c6c3a23303030222f3e3c636972636c652063783d22313335222063793d223239302220723d22313422207374796c653d2266696c6c3a233c7265637420783d223135302220793d2231373022202077696474683d2232303022206865696768743d22323022207374796c653d2266696c6c3a23303030222f3e3c7265637420783d223136302220793d2231383022202077696474683d22393022206865696768743d223830222072783d223130222072793d22313022207374796c653d2266696c6c3a23303030222f3e3c6c696e652078313d22323837222079313d22333331222078323d22333230222079323d2233363622207374796c653d227374726f6b653a233030303b7374726f6b652d77696474683a35222f3e227d2c7b2274726169745f74797065223a202245796573222c2276616c7565223a20223c7265637420783d223139302220793d2231343022202077696474683d22313022206865696768743d22333022207374796c653d2266696c6c3a23222079323d2233323222207374796c653d227374726f6b653a233030303b7374726f6b652d77696474683a32222f3e222f3e3c636972636c652063783d22323030222063793d223232302220723d223722207374796c653d2266696c6c3a23303030222f3e3c636972636c652063783d22333030222063793d223232302220723d223722207374796c653d2266696c6c3a23303030222f3e3c7265637420783d223138302220793d2231303022202077696474683d22313022206865696768743d22343022207374796c653d2266696c6c3a233c7265637420783d223139352220793d22333330222077696474683d2231313022206865696768743d223822207374796c653d2266696c6c3a23303030222f3e222f3e3c636972636c652063783d22313530222063793d223235302220723d22353022207374796c653d2266696c6c3a233c7265637420783d223132352220793d22323735222077696474683d22313022206865696768743d22343022207374796c653d2266696c6c3a23633839613030222f3e3c7265637420783d223131352220793d22323835222077696474683d22333022206865696768743d22313022207374796c653d2266696c6c3a23633839613030222f3e227d2c7b2274726169745f74797065223a2022536b696e222c2276616c7565223a20223c7265637420783d223239302220793d2231343022202077696474683d22313022206865696768743d22333022207374796c653d2266696c6c3a23222f3e3c726563742077696474683d22363022206865696768743d223132302220783d223232302220793d2234303022207374796c653d2266696c6c3a233c7265637420783d223136302220793d22313930222077696474683d22373522206865696768743d22313522207374796c653d2266696c6c3a23222f3e3c636972636c652063783d22333530222063793d223235302220723d22343022207374796c653d2266696c6c3a23222f3e3c7265637420783d223136302220793d22313730222077696474683d2231383022206865696768743d22353022207374796c653d2266696c6c3a23227d2c7b2274726169745f74797065223a2022486174222c2276616c7565223a20223c656c6c697073652063783d22323530222063793d22333135222072783d2230222072793d223022207374796c653d2266696c6c3a23222f3e3c7265637420783d223237352220793d22313930222077696474683d22363522206865696768743d22313522207374796c653d2266696c6c3a233c726563742077696474683d2232303022206865696768743d2239392220783d223135302220793d223430222072793d22323022207374796c653d2266696c6c3a23222f3e3c636972636c652063783d22313930222063793d223437302220723d223022207374796c653d2266696c6c3a23227d2c7b2274726169745f74797065223a202245617272696e67222c2276616c7565223a2022222f3e3c636972636c652063783d22333130222063793d223437302220723d223022207374796c653d2266696c6c3a23222f3e3c636972636c652063783d22313335222063793d223239302220723d223422207374796c653d2266696c6c3a23303030222f3e222f3e3c7265637420783d223135302220793d2231303022202077696474683d2232303022206865696768743d22333030222072783d223130222072793d22313022207374796c653d2266696c6c3a233c726563742077696474683d22383022206865696768743d223132302220783d223231302220793d2234303022207374796c653d2266696c6c3a233c6c696e652078313d22323837222079313d22333434222078323d22333230222079323d2233373822207374796c653d227374726f6b653a233030303b7374726f6b652d77696474683a35222f3e222079323d2233313222207374796c653d227374726f6b653a233030303b7374726f6b652d77696474683a32222f3e3c726563742077696474683d2232303022206865696768743d2239302220783d223135302220793d22333130222072793d22313022207374796c653d2266696c6c3a23343434222f3e222f3e3c7265637420783d223136302220793d2231313022202077696474683d2231383022206865696768743d22323830222072783d223130222072793d22313022207374796c653d2266696c6c3a233c7265637420783d223233302220793d2231343022202077696474683d22313022206865696768743d22333022207374796c653d2266696c6c3a23222f3e3c636972636c652063783d22313530222063793d223235302220723d22343022207374796c653d2266696c6c3a23222f3e3c726563742077696474683d2232373022206865696768743d2233332220783d223135302220793d22313036222072793d223522207374796c653d2266696c6c3a23222f3e3c636972636c652063783d22333530222063793d223235302220723d22353022207374796c653d2266696c6c3a233c7265637420783d223136302220793d22323335222077696474683d2231383022206865696768743d22353022207374796c653d2266696c6c3a23
Deployed Bytecode
0x60806040526004361061013c5760003560e01c806301ffc9a71461014157806302329a291461017657806306fdde0314610198578063081812fc146101ba578063095ea7b3146101f257806313faede61461021257806318160ddd1461023657806323b872dd1461024b5780632f745c591461026b5780633ccfd60b1461028b57806342842e0e146102935780634378a6e3146102b35780634e71d92d146102d35780634f6ccce7146102db5780635c975abb146102fb5780636352211e1461031557806370a0823114610335578063715018a6146103555780638da5cb5b1461036a57806395d89b411461037f5780639c2f2a4214610394578063a22cb465146103aa578063b88d4fde146103ca578063c87b56dd146103ea578063d5abeb011461040a578063e985e9c514610420578063f2fde38b14610440575b600080fd5b34801561014d57600080fd5b5061016161015c366004612e5c565b610460565b60405190151581526020015b60405180910390f35b34801561018257600080fd5b50610196610191366004612e41565b61048b565b005b3480156101a457600080fd5b506101ad6104d6565b60405161016d919061350e565b3480156101c657600080fd5b506101da6101d5366004612e96565b610568565b6040516001600160a01b03909116815260200161016d565b3480156101fe57600080fd5b5061019661020d366004612e17565b6105f0565b34801561021e57600080fd5b50610228600c5481565b60405190815260200161016d565b34801561024257600080fd5b50600854610228565b34801561025757600080fd5b50610196610266366004612cd6565b610701565b34801561027757600080fd5b50610228610286366004612e17565b610732565b6101966107c8565b34801561029f57600080fd5b506101966102ae366004612cd6565b610861565b3480156102bf57600080fd5b506101ad6102ce366004612e96565b61087c565b610196610929565b3480156102e757600080fd5b506102286102f6366004612e96565b610a93565b34801561030757600080fd5b50600d546101619060ff1681565b34801561032157600080fd5b506101da610330366004612e96565b610b26565b34801561034157600080fd5b50610228610350366004612c81565b610b9d565b34801561036157600080fd5b50610196610c24565b34801561037657600080fd5b506101da610c5f565b34801561038b57600080fd5b506101ad610c6e565b3480156103a057600080fd5b50610228600e5481565b3480156103b657600080fd5b506101966103c5366004612ded565b610c7d565b3480156103d657600080fd5b506101966103e5366004612d12565b610d3e565b3480156103f657600080fd5b506101ad610405366004612e96565b610d76565b34801561041657600080fd5b50610228610d0581565b34801561042c57600080fd5b5061016161043b366004612ca3565b610e7f565b34801561044c57600080fd5b5061019661045b366004612c81565b610ead565b60006001600160e01b0319821663780e9d6360e01b1480610485575061048582610f4a565b92915050565b33610494610c5f565b6001600160a01b0316146104c35760405162461bcd60e51b81526004016104ba90613573565b60405180910390fd5b600d805460ff1916911515919091179055565b6060600080546104e5906136aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610511906136aa565b801561055e5780601f106105335761010080835404028352916020019161055e565b820191906000526020600020905b81548152906001019060200180831161054157829003601f168201915b5050505050905090565b600061057382610f9a565b6105d45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016104ba565b506000908152600460205260409020546001600160a01b031690565b60006105fb82610b26565b9050806001600160a01b0316836001600160a01b031614156106695760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016104ba565b336001600160a01b038216148061068557506106858133610e7f565b6106f25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776044820152771b995c881b9bdc88185c1c1c9bdd995908199bdc88185b1b60421b60648201526084016104ba565b6106fc8383610fb7565b505050565b61070b3382611025565b6107275760405162461bcd60e51b81526004016104ba906135a8565b6106fc8383836110ef565b600061073d83610b9d565b821061079f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016104ba565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b336107d1610c5f565b6001600160a01b0316146107f75760405162461bcd60e51b81526004016104ba90613573565b6000610801610c5f565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461084b576040519150601f19603f3d011682016040523d82523d6000602084013e610850565b606091505b505090508061085e57600080fd5b50565b6106fc83838360405180602001604052806000815250610d3e565b6060600061088983611288565b9050600061089d8260a0015160ff16611608565b6108ad836020015160ff16611608565b6040516020016108be929190613305565b6040516020818303038152906040529050806108e0836040015160ff16611608565b6108f0846080015160ff16611608565b84516108fe9060ff16611608565b6040516020016109119493929190613155565b60405160208183030381529060405292505050919050565b6002600a54141561097c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104ba565b6002600a55600d5460ff16156109c85760405162461bcd60e51b81526020600482015260116024820152701b5a5b9d1a5b99c81a5cc81c185d5cd959607a1b60448201526064016104ba565b610d05600e5460016109da91906135f9565b1115610a205760405162461bcd60e51b81526020600482015260156024820152741b585e08139195081b1a5b5a5d081c995858da1959605a1b60448201526064016104ba565b600c54341015610a675760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b60448201526064016104ba565b6001600e6000828254610a7a91906135f9565b90915550610a8c905033600e54611705565b6001600a55565b6000610a9e60085490565b8210610b015760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016104ba565b60088281548110610b1457610b14613776565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806104855760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016104ba565b60006001600160a01b038216610c085760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016104ba565b506001600160a01b031660009081526003602052604090205490565b33610c2d610c5f565b6001600160a01b031614610c535760405162461bcd60e51b81526004016104ba90613573565b610c5d6000611723565b565b600b546001600160a01b031690565b6060600180546104e5906136aa565b6001600160a01b038216331415610cd25760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b60448201526064016104ba565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610d483383611025565b610d645760405162461bcd60e51b81526004016104ba906135a8565b610d7084848484611775565b50505050565b60606000610d8383611288565b60408051808201825260188152777b226e616d65223a20224f6e436861696e2044756465202360401b602080830191909152825180840184526002815261227d60f01b818301528351808501909452601d84527f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000091840191909152929350919080610e5484610e1189611608565b610e1a886117a8565b610e2b610e268a61185b565b611f7d565b87604051602001610e40959493929190612fc0565b604051602081830303815290604052611f7d565b604051602001610e65929190612f91565b604051602081830303815290604052945050505050919050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b33610eb6610c5f565b6001600160a01b031614610edc5760405162461bcd60e51b81526004016104ba90613573565b6001600160a01b038116610f415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ba565b61085e81611723565b60006001600160e01b031982166380ac58cd60e01b1480610f7b57506001600160e01b03198216635b5e139f60e01b145b8061048557506301ffc9a760e01b6001600160e01b0319831614610485565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610fec82610b26565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061103082610f9a565b6110915760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016104ba565b600061109c83610b26565b9050806001600160a01b0316846001600160a01b031614806110d75750836001600160a01b03166110cc84610568565b6001600160a01b0316145b806110e757506110e78185610e7f565b949350505050565b826001600160a01b031661110282610b26565b6001600160a01b03161461116a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016104ba565b6001600160a01b0382166111cc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104ba565b6111d78383836120e2565b6111e2600082610fb7565b6001600160a01b038316600090815260036020526040812080546001929061120b908490613644565b90915550506001600160a01b03821660009081526003602052604081208054600192906112399084906135f9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716916000805160206137f983398151915291a4505050565b611290612c19565b61129c82613227613644565b91506112a6612c19565b60086112f760486000815481106112bf576112bf613776565b906000526020600020016112d286611608565b6040516020016112e392919061334a565b60405160208183030381529060405261219a565b6113019190613720565b60ff1681526012805460408051602080840282018101909252828152611397939092909183018282801561137257602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116113435790505b5050505050610719611388601e6112d288611608565b6113929190613720565b6121cb565b60ff1660208083019190915260148054604080518285028101850190915281815261143f939092919083018282801561140d57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116113de5790505b5050505050610595611388604860018154811061142c5761142c613776565b906000526020600020016112d288611608565b60ff166040808301919091526016805482516020808302820181019094528181526114d493909291908301828280156114b557602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116114865790505b5050505050610458611388604860028154811061142c5761142c613776565b60ff1660608201526018805460408051602080840282018101909252828152611567939092909183018282801561154857602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116115195790505b5050505050610166611388604860038154811061142c5761142c613776565b60ff166080820152601b8054604080516020808402820181019092528281526115fa93909290918301828280156115db57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116115ac5790505b5050505050610457611388604860058154811061142c5761142c613776565b60ff1660a082015292915050565b60608161162c5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156116565780611640816136e5565b915061164f9050600a83613611565b9150611630565b6000816001600160401b038111156116705761167061378c565b6040519080825280601f01601f19166020018201604052801561169a576020820181803683370190505b5090505b84156110e7576116af600183613644565b91506116bc600a86613720565b6116c79060306135f9565b60f81b8183815181106116dc576116dc613776565b60200101906001600160f81b031916908160001a9053506116fe600a86613611565b945061169e565b61171f828260405180602001604052806000815250612243565b5050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6117808484846110ef565b61178c84848484612276565b610d705760405162461bcd60e51b81526004016104ba90613521565b6060600060426117be846000015160ff16611608565b60436117d0866020015160ff16611608565b60446117e2886080015160ff16611608565b6040516020016117f7969594939291906133ba565b604051602081830303815290604052905080604561181b8560a0015160ff16611608565b604661182d876040015160ff16611608565b604760405160200161184496959493929190613233565b604051602081830303815290604052915050919050565b606060006010836020015160ff168154811061187957611879613776565b90600052602060002001805461188e906136aa565b80601f01602080910402602001604051908101604052809291908181526020018280546118ba906136aa565b80156119075780601f106118dc57610100808354040283529160200191611907565b820191906000526020600020905b8154815290600101906020018083116118ea57829003601f168201915b5050505050905060006011846020015160ff168154811061192a5761192a613776565b90600052602060002001805461193f906136aa565b80601f016020809104026020016040519081016040528092919081815260200182805461196b906136aa565b80156119b85780601f1061198d576101008083540402835291602001916119b8565b820191906000526020600020905b81548152906001019060200180831161199b57829003601f168201915b505060408051602080820183526000808352835180830185528181528451808401865291825293519798509196929550909350611a039250601e918791601f918a9160369101613366565b6040516020818303038152906040529150601e8760a0015160ff161115611ab4576020601960018960a00151611a39919061365b565b60ff1681548110611a4c57611a4c613776565b906000526020600020016022601a60018b60a00151611a6b919061365b565b60ff1681548110611a7e57611a7e613776565b906000526020600020016036604051602001611a9e9594939291906134a8565b6040516020818303038152906040529250611bff565b60148760a0015160ff161115611b0b576020601960018960a00151611ad9919061365b565b60ff1681548110611aec57611aec613776565b906000526020600020016023601a60018b60a00151611a6b919061365b565b600a8760a0015160ff161115611b62576020601960018960a00151611b30919061365b565b60ff1681548110611b4357611b43613776565b906000526020600020016021601a60018b60a00151611a6b919061365b565b60a087015160ff1615611bff57602c846036602d876036602e8a6036604051602001611b9699989796959493929190613421565b604051602081830303815290604052905080602f856036603088603660318b6036604051602001611bcf99989796959493929190613421565b60408051601f1981840301815290829052611bed9291602001612f91565b60405160208183030381529060405290505b6000601c600081548110611c1557611c15613776565b90600052602060002001600f896000015160ff1681548110611c3957611c39613776565b90600052602060002001601c600181548110611c5757611c57613776565b9060005260206000200187601c600281548110611c7657611c76613776565b90600052602060002001604051602001611c94959493929190613486565b60405160208183030381529060405290508086601c600381548110611cbb57611cbb613776565b9060005260206000200188601c600481548110611cda57611cda613776565b9060005260206000200189601c600581548110611cf957611cf9613776565b906000526020600020018c601c600681548110611d1857611d18613776565b90600052602060002001604051602001611d3a999897969594939291906130b5565b60405160208183030381529060405290508085601c600781548110611d6157611d61613776565b9060005260206000200188601c600881548110611d8057611d80613776565b9060005260206000200189601c600981548110611d9f57611d9f613776565b906000526020600020018c601c600a81548110611dbe57611dbe613776565b90600052602060002001604051602001611de0999897969594939291906130b5565b6040516020818303038152906040529050806013896040015160ff1681548110611e0c57611e0c613776565b90600052602060002001601c600b81548110611e2a57611e2a613776565b9060005260206000200160138b6040015160ff1681548110611e4e57611e4e613776565b90600052602060002001601c600c81548110611e6c57611e6c613776565b90600052602060002001611e818b8b8f612383565b601c600d81548110611e9557611e95613776565b9060005260206000200160158f6060015160ff1681548110611eb957611eb9613776565b90600052602060002001601c600e81548110611ed757611ed7613776565b90600052602060002001604051602001611ef99998979695949392919061329c565b604051602081830303815290604052905080611f1d89606001518a608001516125a2565b611f2a8a608001516127e3565b868587601c600f81548110611f4157611f41613776565b90600052602060002001604051602001611f61979695949392919061302b565b6040516020818303038152906040529650505050505050919050565b805160609080611f9d575050604080516020810190915260008152919050565b60006003611fac8360026135f9565b611fb69190613611565b611fc1906004613625565b90506000611fd08260206135f9565b6001600160401b03811115611fe757611fe761378c565b6040519080825280601f01601f191660200182016040528015612011576020820181803683370190505b50905060006040518060600160405280604081526020016137b9604091399050600181016020830160005b8681101561209d576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b83526004909201910161203c565b5060038606600181146120b757600281146120c8576120d4565b613d3d60f01b6001198301526120d4565b603d60f81b6000198301525b505050918152949350505050565b6001600160a01b03831661213d5761213881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612160565b816001600160a01b0316836001600160a01b03161461216057612160838261295d565b6001600160a01b038216612177576106fc816129fa565b826001600160a01b0316826001600160a01b0316146106fc576106fc8282612aa9565b6000816040516020016121ad9190612f75565b60408051601f19818403018152919052805160209091012092915050565b600080600090506000846000815181106121e7576121e7613776565b602002602001015160ff1690505b83811161223b578161220681613700565b925050848260ff168151811061221e5761221e613776565b602002602001015160ff168161223491906135f9565b90506121f5565b509392505050565b61224d8383612aed565b61225a6000848484612276565b6106fc5760405162461bcd60e51b81526004016104ba90613521565b60006001600160a01b0384163b1561237857604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906122ba9033908990889088906004016134d1565b602060405180830381600087803b1580156122d457600080fd5b505af1925050508015612304575060408051601f3d908101601f1916820190925261230191810190612e79565b60015b61235e573d808015612332576040519150601f19603f3d011682016040523d82523d6000602084013e612337565b606091505b5080516123565760405162461bcd60e51b81526004016104ba90613521565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506110e7565b506001949350505050565b606060006040518060200160405280600081525090506004836040015160ff1611156123d75760248560258760366040516020016123c5959493929190613366565b60405160208183030381529060405290505b600a836040015160ff1611156124175780602985602a87603660405160200161240596959493929190613233565b60405160208183030381529060405290505b6010836040015160ff1611156124525780602b86603660405160200161244094939291906131eb565b60405160208183030381529060405290505b60078360a0015160ff161180156124705750600c8360a0015160ff16105b80612494575060128360a0015160ff16118015612494575060168360a0015160ff16105b806124b85750601d8360a0015160ff161180156124b85750601e8360a0015160ff16105b156124e3578060346040516020016124d19291906131c4565b60405160208183030381529060405290505b6014836040015160ff161180156125015750601e836040015160ff16105b8015612570575060078360a0015160ff161180156125265750600c8360a0015160ff16105b8061254a575060128360a0015160ff1611801561254a575060168360a0015160ff16105b8061256e5750601d8360a0015160ff1611801561256e5750601e8360a0015160ff16105b155b156110e7578060356040516020016125899291906131c4565b6040516020818303038152906040529050949350505050565b6040805160208101909152600080825260609190601860ff861611806125d9575060088560ff161180156125d9575060108560ff16105b156126cb575060005b60078110156126575781603d61260c6125fc846019613625565b6126079060af6135f9565b611608565b603e61261c6125fc866019613625565b603f60405160200161263396959493929190613233565b6040516020818303038152906040529150808061264f906136e5565b9150506125e2565b5060005b60068110156126cb5781603d612680612675846019613625565b6126079060bb6135f9565b6040612690612675866019613625565b60416040516020016126a796959493929190613233565b604051602081830303815290604052915080806126c3906136e5565b91505061265b565b8360ff16600114156126fd578160286040516020016126eb9291906131c4565b60405160208183030381529060405291505b60058460ff1611156127335781603360405160200161271d9291906131c4565b6040516020818303038152906040529150612759565b8160326040516020016127479291906131c4565b60405160208183030381529060405291505b600f8560ff1611801561276f575060058460ff16115b1561279a578160276040516020016127889291906131c4565b60405160208183030381529060405291505b600f8560ff161180156127b1575060058460ff1611155b1561223b578160266040516020016127ca9291906131c4565b60408051601f1981840301815291905295945050505050565b606060ff821661280157505060408051602081019091526000815290565b60038260ff16101561285f5760018260ff1611156128475760376038603a6040516020016128319392919061346e565b6040516020818303038152906040529050919050565b60376039603a6040516020016128319392919061346e565b60038260ff1611156128cb5760058260ff16111561288f57603b603c60366040516020016128319392919061346e565b60048260ff1611156128b357603b603860366040516020016128319392919061346e565b603b603960366040516020016128319392919061346e565b601d80546128d8906136aa565b80601f0160208091040260200160405190810160405280929190818152602001828054612904906136aa565b80156129515780601f1061292657610100808354040283529160200191612951565b820191906000526020600020905b81548152906001019060200180831161293457829003601f168201915b50505050509050919050565b6000600161296a84610b9d565b6129749190613644565b6000838152600760205260409020549091508082146129c7576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612a0c90600190613644565b60008381526009602052604081205460088054939450909284908110612a3457612a34613776565b906000526020600020015490508060088381548110612a5557612a55613776565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612a8d57612a8d613760565b6001900381819060005260206000200160009055905550505050565b6000612ab483610b9d565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216612b435760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104ba565b612b4c81610f9a565b15612b985760405162461bcd60e51b815260206004820152601c60248201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b60448201526064016104ba565b612ba4600083836120e2565b6001600160a01b0382166000908152600360205260408120805460019290612bcd9084906135f9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392906000805160206137f9833981519152908290a45050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b80356001600160a01b0381168114612c6c57600080fd5b919050565b80358015158114612c6c57600080fd5b600060208284031215612c9357600080fd5b612c9c82612c55565b9392505050565b60008060408385031215612cb657600080fd5b612cbf83612c55565b9150612ccd60208401612c55565b90509250929050565b600080600060608486031215612ceb57600080fd5b612cf484612c55565b9250612d0260208501612c55565b9150604084013590509250925092565b60008060008060808587031215612d2857600080fd5b612d3185612c55565b9350612d3f60208601612c55565b92506040850135915060608501356001600160401b0380821115612d6257600080fd5b818701915087601f830112612d7657600080fd5b813581811115612d8857612d8861378c565b604051601f8201601f19908116603f01168101908382118183101715612db057612db061378c565b816040528281528a6020848701011115612dc957600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215612e0057600080fd5b612e0983612c55565b9150612ccd60208401612c71565b60008060408385031215612e2a57600080fd5b612e3383612c55565b946020939093013593505050565b600060208284031215612e5357600080fd5b612c9c82612c71565b600060208284031215612e6e57600080fd5b8135612c9c816137a2565b600060208284031215612e8b57600080fd5b8151612c9c816137a2565b600060208284031215612ea857600080fd5b5035919050565b60008151808452612ec781602086016020860161367e565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680612ef557607f831692505b6020808410821415612f1757634e487b7160e01b600052602260045260246000fd5b818015612f2b5760018114612f3c57612f69565b60ff19861689528489019650612f69565b60008881526020902060005b86811015612f615781548b820152908501908301612f48565b505084890196505b50505050505092915050565b60008251612f8781846020870161367e565b9190910192915050565b60008351612fa381846020880161367e565b835190830190612fb781836020880161367e565b01949350505050565b60008651612fd2818460208b0161367e565b865190830190612fe6818360208b0161367e565b8651910190612ff9818360208a0161367e565b855191019061300c81836020890161367e565b845191019061301f81836020880161367e565b01979650505050505050565b60008851602061303e8285838e0161367e565b8951918401916130518184848e0161367e565b89519201916130638184848d0161367e565b88519201916130758184848c0161367e565b87519201916130878184848b0161367e565b86519201916130998184848a0161367e565b6130a581840187612edb565b9c9b505050505050505050505050565b60008a516130c7818460208f0161367e565b8a51908301906130db818360208f0161367e565b6130e78183018c612edb565b91505088516130fa818360208d0161367e565b6131068183018a612edb565b9150508651613119818360208b0161367e565b61312581830188612edb565b915050845161313881836020890161367e565b61314481830186612edb565b9d9c50505050505050505050505050565b60008551613167818460208a0161367e565b85519083019061317b818360208a0161367e565b600b60fa1b9101818152855190919061319b816001850160208a0161367e565b600192019182015283516131b681600284016020880161367e565b016002019695505050505050565b600083516131d681846020880161367e565b6131e281840185612edb565b95945050505050565b600085516131fd818460208a0161367e565b61320981840187612edb565b9050845161321b81836020890161367e565b61322781830186612edb565b98975050505050505050565b60008751613245818460208c0161367e565b61325181840189612edb565b90508651613263818360208b0161367e565b61326f81830188612edb565b915050845161328281836020890161367e565b61328e81830186612edb565b9a9950505050505050505050565b60008a516132ae818460208f0161367e565b6132d56132cf6132c96132c38487018f612edb565b8d612edb565b8b612edb565b89612edb565b905086516132e7818360208b0161367e565b6131446132ff6132f98385018a612edb565b88612edb565b86612edb565b6000835161331781846020880161367e565b8083019050600b60fa1b808252845161333781600185016020890161367e565b6001920191820152600201949350505050565b60006133568285612edb565b8351612fb781836020880161367e565b60006133728288612edb565b8651613382818360208b0161367e565b61338e81830188612edb565b91505084516133a181836020890161367e565b6133ad81830186612edb565b9998505050505050505050565b60006133c68289612edb565b87516133d6818360208c0161367e565b6133e281830189612edb565b91505085516133f5818360208a0161367e565b61340181830187612edb565b915050835161341481836020880161367e565b0198975050505050505050565b600061342d828c612edb565b8a5161343d818360208f0161367e565b61344c6132c98284018d612edb565b915050875161345f818360208c0161367e565b6131256132f98284018a612edb565b60006131e26134806132ff8488612edb565b84612edb565b60006134986132ff6132f9848a612edb565b84516133a181836020890161367e565b60006134c66134806132ff6132f96134c0868c612edb565b8a612edb565b979650505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061350490830184612eaf565b9695505050505050565b602081526000612c9c6020830184612eaf565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561360c5761360c613734565b500190565b6000826136205761362061374a565b500490565b600081600019048311821515161561363f5761363f613734565b500290565b60008282101561365657613656613734565b500390565b600060ff821660ff84168082101561367557613675613734565b90039392505050565b60005b83811015613699578181015183820152602001613681565b83811115610d705750506000910152565b600181811c908216806136be57607f821691505b602082108114156136df57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156136f9576136f9613734565b5060010190565b600060ff821660ff81141561371757613717613734565b60010192915050565b60008261372f5761372f61374a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461085e57600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122087992c838e382659b0c1a646259ddc8fc9257a4b09509041dbfdd7519652ad9864736f6c63430008070033
Deployed Bytecode Sourcemap
46423:14085:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40275:224;;;;;;;;;;-1:-1:-1;40275:224:0;;;;;:::i;:::-;;:::i;:::-;;;20505:14:1;;20498:22;20480:41;;20468:2;20453:18;40275:224:0;;;;;;;;60185:73;;;;;;;;;;-1:-1:-1;60185:73:0;;;;;:::i;:::-;;:::i;:::-;;27403:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28962:221::-;;;;;;;;;;-1:-1:-1;28962:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;19803:32:1;;;19785:51;;19773:2;19758:18;28962:221:0;19639:203:1;28485:411:0;;;;;;;;;;-1:-1:-1;28485:411:0;;;;;:::i;:::-;;:::i;46528:29::-;;;;;;;;;;;;;;;;;;;29096:25:1;;;29084:2;29069:18;46528:29:0;28950:177:1;40915:113:0;;;;;;;;;;-1:-1:-1;41003:10:0;:17;40915:113;;29852:339;;;;;;;;;;-1:-1:-1;29852:339:0;;;;;:::i;:::-;;:::i;40583:256::-;;;;;;;;;;-1:-1:-1;40583:256:0;;;;;:::i;:::-;;:::i;60266:145::-;;;:::i;30262:185::-;;;;;;;;;;-1:-1:-1;30262:185:0;;;;;:::i;:::-;;:::i;55588:380::-;;;;;;;;;;-1:-1:-1;55588:380:0;;;;;:::i;:::-;;:::i;59904:275::-;;;:::i;41105:233::-;;;;;;;;;;-1:-1:-1;41105:233:0;;;;;:::i;:::-;;:::i;46562:26::-;;;;;;;;;;-1:-1:-1;46562:26:0;;;;;;;;27097:239;;;;;;;;;;-1:-1:-1;27097:239:0;;;;;:::i;:::-;;:::i;26827:208::-;;;;;;;;;;-1:-1:-1;26827:208:0;;;;;:::i;:::-;;:::i;11867:94::-;;;;;;;;;;;;;:::i;11216:87::-;;;;;;;;;;;;;:::i;27572:104::-;;;;;;;;;;;;;:::i;46638:29::-;;;;;;;;;;;;;;;;29255:295;;;;;;;;;;-1:-1:-1;29255:295:0;;;;;:::i;:::-;;:::i;30518:328::-;;;;;;;;;;-1:-1:-1;30518:328:0;;;;;:::i;:::-;;:::i;59442:456::-;;;;;;;;;;-1:-1:-1;59442:456:0;;;;;:::i;:::-;;:::i;46593:40::-;;;;;;;;;;;;46629:4;46593:40;;29621:164;;;;;;;;;;-1:-1:-1;29621:164:0;;;;;:::i;:::-;;:::i;12116:192::-;;;;;;;;;;-1:-1:-1;12116:192:0;;;;;:::i;:::-;;:::i;40275:224::-;40377:4;-1:-1:-1;;;;;;40401:50:0;;-1:-1:-1;;;40401:50:0;;:90;;;40455:36;40479:11;40455:23;:36::i;:::-;40394:97;40275:224;-1:-1:-1;;40275:224:0:o;60185:73::-;10172:10;11436:7;:5;:7::i;:::-;-1:-1:-1;;;;;11436:23:0;;11428:68;;;;-1:-1:-1;;;11428:68:0;;;;;;;:::i;:::-;;;;;;;;;60237:6:::1;:15:::0;;-1:-1:-1;;60237:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;60185:73::o;27403:100::-;27457:13;27490:5;27483:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27403:100;:::o;28962:221::-;29038:7;29066:16;29074:7;29066;:16::i;:::-;29058:73;;;;-1:-1:-1;;;29058:73:0;;25682:2:1;29058:73:0;;;25664:21:1;25721:2;25701:18;;;25694:30;25760:34;25740:18;;;25733:62;-1:-1:-1;;;25811:18:1;;;25804:42;25863:19;;29058:73:0;25480:408:1;29058:73:0;-1:-1:-1;29151:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;29151:24:0;;28962:221::o;28485:411::-;28566:13;28582:23;28597:7;28582:14;:23::i;:::-;28566:39;;28630:5;-1:-1:-1;;;;;28624:11:0;:2;-1:-1:-1;;;;;28624:11:0;;;28616:57;;;;-1:-1:-1;;;28616:57:0;;26866:2:1;28616:57:0;;;26848:21:1;26905:2;26885:18;;;26878:30;26944:34;26924:18;;;26917:62;-1:-1:-1;;;26995:18:1;;;26988:31;27036:19;;28616:57:0;26664:397:1;28616:57:0;10172:10;-1:-1:-1;;;;;28708:21:0;;;;:62;;-1:-1:-1;28733:37:0;28750:5;10172:10;29621:164;:::i;28733:37::-;28686:168;;;;-1:-1:-1;;;28686:168:0;;24075:2:1;28686:168:0;;;24057:21:1;24114:2;24094:18;;;24087:30;24153:34;24133:18;;;24126:62;-1:-1:-1;;;24204:18:1;;;24197:54;24268:19;;28686:168:0;23873:420:1;28686:168:0;28867:21;28876:2;28880:7;28867:8;:21::i;:::-;28555:341;28485:411;;:::o;29852:339::-;30047:41;10172:10;30080:7;30047:18;:41::i;:::-;30039:103;;;;-1:-1:-1;;;30039:103:0;;;;;;;:::i;:::-;30155:28;30165:4;30171:2;30175:7;30155:9;:28::i;40583:256::-;40680:7;40716:23;40733:5;40716:16;:23::i;:::-;40708:5;:31;40700:87;;;;-1:-1:-1;;;40700:87:0;;20958:2:1;40700:87:0;;;20940:21:1;20997:2;20977:18;;;20970:30;21036:34;21016:18;;;21009:62;-1:-1:-1;;;21087:18:1;;;21080:41;21138:19;;40700:87:0;20756:407:1;40700:87:0;-1:-1:-1;;;;;;40805:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;40583:256::o;60266:145::-;10172:10;11436:7;:5;:7::i;:::-;-1:-1:-1;;;;;11436:23:0;;11428:68;;;;-1:-1:-1;;;11428:68:0;;;;;;;:::i;:::-;60319:7:::1;60340;:5;:7::i;:::-;-1:-1:-1::0;;;;;60332:21:0::1;60361;60332:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60318:69;;;60402:2;60394:11;;;::::0;::::1;;60311:100;60266:145::o:0;30262:185::-;30400:39;30417:4;30423:2;30427:7;30400:39;;;;;;;;;;;;:16;:39::i;55588:380::-;55649:13;55671:16;55690:18;55700:7;55690:9;:18::i;:::-;55671:37;;55715:15;55755:28;55763:4;:8;;;55755:17;;:26;:28::i;:::-;55788;55796:4;:8;;;55788:17;;:26;:28::i;:::-;55738:83;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55715:107;;55860:1;55862:29;55870:4;:9;;;55862:18;;:27;:29::i;:::-;55896:32;55904:4;:12;;;55896:21;;:30;:32::i;:::-;55941:7;;55933:27;;:16;;:25;:27::i;:::-;55843:118;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55829:133;;;;55588:380;;;:::o;59904:275::-;14147:1;14743:7;;:19;;14735:63;;;;-1:-1:-1;;;14735:63:0;;28792:2:1;14735:63:0;;;28774:21:1;28831:2;28811:18;;;28804:30;28870:33;28850:18;;;28843:61;28921:18;;14735:63:0;28590:355:1;14735:63:0;14147:1;14876:7;:18;59962:6:::1;::::0;::::1;;59961:7;59953:37;;;::::0;-1:-1:-1;;;59953:37:0;;27268:2:1;59953:37:0::1;::::0;::::1;27250:21:1::0;27307:2;27287:18;;;27280:30;-1:-1:-1;;;27326:18:1;;;27319:47;27383:18;;59953:37:0::1;27066:341:1::0;59953:37:0::1;46629:4;60005:10;;60018:1;60005:14;;;;:::i;:::-;:27;;59997:61;;;::::0;-1:-1:-1;;;59997:61:0;;23312:2:1;59997:61:0::1;::::0;::::1;23294:21:1::0;23351:2;23331:18;;;23324:30;-1:-1:-1;;;23370:18:1;;;23363:51;23431:18;;59997:61:0::1;23110:345:1::0;59997:61:0::1;60083:4;;60070:9;:17;;60062:48;;;::::0;-1:-1:-1;;;60062:48:0;;27614:2:1;60062:48:0::1;::::0;::::1;27596:21:1::0;27653:2;27633:18;;;27626:30;-1:-1:-1;;;27672:18:1;;;27665:48;27730:18;;60062:48:0::1;27412:342:1::0;60062:48:0::1;60128:1;60114:10;;:15;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;60136:35:0::1;::::0;-1:-1:-1;10172:10:0;60160::::1;;60136:9;:35::i;:::-;14103:1:::0;15055:7;:22;59904:275::o;41105:233::-;41180:7;41216:30;41003:10;:17;;40915:113;41216:30;41208:5;:38;41200:95;;;;-1:-1:-1;;;41200:95:0;;28379:2:1;41200:95:0;;;28361:21:1;28418:2;28398:18;;;28391:30;28457:34;28437:18;;;28430:62;-1:-1:-1;;;28508:18:1;;;28501:42;28560:19;;41200:95:0;28177:408:1;41200:95:0;41313:10;41324:5;41313:17;;;;;;;;:::i;:::-;;;;;;;;;41306:24;;41105:233;;;:::o;27097:239::-;27169:7;27205:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27205:16:0;27240:19;27232:73;;;;-1:-1:-1;;;27232:73:0;;24911:2:1;27232:73:0;;;24893:21:1;24950:2;24930:18;;;24923:30;24989:34;24969:18;;;24962:62;-1:-1:-1;;;25040:18:1;;;25033:39;25089:19;;27232:73:0;24709:405:1;26827:208:0;26899:7;-1:-1:-1;;;;;26927:19:0;;26919:74;;;;-1:-1:-1;;;26919:74:0;;24500:2:1;26919:74:0;;;24482:21:1;24539:2;24519:18;;;24512:30;24578:34;24558:18;;;24551:62;-1:-1:-1;;;24629:18:1;;;24622:40;24679:19;;26919:74:0;24298:406:1;26919:74:0;-1:-1:-1;;;;;;27011:16:0;;;;;:9;:16;;;;;;;26827:208::o;11867:94::-;10172:10;11436:7;:5;:7::i;:::-;-1:-1:-1;;;;;11436:23:0;;11428:68;;;;-1:-1:-1;;;11428:68:0;;;;;;;:::i;:::-;11932:21:::1;11950:1;11932:9;:21::i;:::-;11867:94::o:0;11216:87::-;11289:6;;-1:-1:-1;;;;;11289:6:0;;11216:87::o;27572:104::-;27628:13;27661:7;27654:14;;;;;:::i;29255:295::-;-1:-1:-1;;;;;29358:24:0;;10172:10;29358:24;;29350:62;;;;-1:-1:-1;;;29350:62:0;;22958:2:1;29350:62:0;;;22940:21:1;22997:2;22977:18;;;22970:30;-1:-1:-1;;;23016:18:1;;;23009:55;23081:18;;29350:62:0;22756:349:1;29350:62:0;10172:10;29425:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;29425:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;29425:53:0;;;;;;;;;;29494:48;;20480:41:1;;;29425:42:0;;10172:10;29494:48;;20453:18:1;29494:48:0;;;;;;;29255:295;;:::o;30518:328::-;30693:41;10172:10;30726:7;30693:18;:41::i;:::-;30685:103;;;;-1:-1:-1;;;30685:103:0;;;;;;;:::i;:::-;30799:39;30813:4;30819:2;30823:7;30832:5;30799:13;:39::i;:::-;30518:328;;;;:::o;59442:456::-;59507:13;59529:16;59548:18;59558:7;59548:9;:18::i;:::-;59573:52;;;;;;;;;;;-1:-1:-1;;;59573:52:0;;;;;;;;59632:26;;;;;;;;;;-1:-1:-1;;;59632:26:0;;;;59662:49;;;;;;;;;;;;;;;;;;;59529:37;;-1:-1:-1;59573:52:0;59632:26;59662:49;59755:135;59573:52;59809:18;:7;:16;:18::i;:::-;59828:15;59838:4;59828:9;:15::i;:::-;59844:34;59864:12;59871:4;59864:6;:12::i;:::-;59844:13;:34::i;:::-;59879:7;59782:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59755:13;:135::i;:::-;59734:157;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59720:172;;;;;;59442:456;;;:::o;29621:164::-;-1:-1:-1;;;;;29742:25:0;;;29718:4;29742:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29621:164::o;12116:192::-;10172:10;11436:7;:5;:7::i;:::-;-1:-1:-1;;;;;11436:23:0;;11428:68;;;;-1:-1:-1;;;11428:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12205:22:0;::::1;12197:73;;;::::0;-1:-1:-1;;;12197:73:0;;21789:2:1;12197:73:0::1;::::0;::::1;21771:21:1::0;21828:2;21808:18;;;21801:30;21867:34;21847:18;;;21840:62;-1:-1:-1;;;21918:18:1;;;21911:36;21964:19;;12197:73:0::1;21587:402:1::0;12197:73:0::1;12281:19;12291:8;12281:9;:19::i;26458:305::-:0;26560:4;-1:-1:-1;;;;;;26597:40:0;;-1:-1:-1;;;26597:40:0;;:105;;-1:-1:-1;;;;;;;26654:48:0;;-1:-1:-1;;;26654:48:0;26597:105;:158;;;-1:-1:-1;;;;;;;;;;25176:40:0;;;26719:36;25067:157;32356:127;32421:4;32445:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32445:16:0;:30;;;32356:127::o;36338:174::-;36413:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36413:29:0;-1:-1:-1;;;;;36413:29:0;;;;;;;;:24;;36467:23;36413:24;36467:14;:23::i;:::-;-1:-1:-1;;;;;36458:46:0;;;;;;;;;;;36338:174;;:::o;32650:348::-;32743:4;32768:16;32776:7;32768;:16::i;:::-;32760:73;;;;-1:-1:-1;;;32760:73:0;;23662:2:1;32760:73:0;;;23644:21:1;23701:2;23681:18;;;23674:30;23740:34;23720:18;;;23713:62;-1:-1:-1;;;23791:18:1;;;23784:42;23843:19;;32760:73:0;23460:408:1;32760:73:0;32844:13;32860:23;32875:7;32860:14;:23::i;:::-;32844:39;;32913:5;-1:-1:-1;;;;;32902:16:0;:7;-1:-1:-1;;;;;32902:16:0;;:51;;;;32946:7;-1:-1:-1;;;;;32922:31:0;:20;32934:7;32922:11;:20::i;:::-;-1:-1:-1;;;;;32922:31:0;;32902:51;:87;;;;32957:32;32974:5;32981:7;32957:16;:32::i;:::-;32894:96;32650:348;-1:-1:-1;;;;32650:348:0:o;35642:578::-;35801:4;-1:-1:-1;;;;;35774:31:0;:23;35789:7;35774:14;:23::i;:::-;-1:-1:-1;;;;;35774:31:0;;35766:85;;;;-1:-1:-1;;;35766:85:0;;26456:2:1;35766:85:0;;;26438:21:1;26495:2;26475:18;;;26468:30;26534:34;26514:18;;;26507:62;-1:-1:-1;;;26585:18:1;;;26578:39;26634:19;;35766:85:0;26254:405:1;35766:85:0;-1:-1:-1;;;;;35870:16:0;;35862:65;;;;-1:-1:-1;;;35862:65:0;;22553:2:1;35862:65:0;;;22535:21:1;22592:2;22572:18;;;22565:30;22631:34;22611:18;;;22604:62;-1:-1:-1;;;22682:18:1;;;22675:34;22726:19;;35862:65:0;22351:400:1;35862:65:0;35940:39;35961:4;35967:2;35971:7;35940:20;:39::i;:::-;36044:29;36061:1;36065:7;36044:8;:29::i;:::-;-1:-1:-1;;;;;36086:15:0;;;;;;:9;:15;;;;;:20;;36105:1;;36086:15;:20;;36105:1;;36086:20;:::i;:::-;;;;-1:-1:-1;;;;;;;36117:13:0;;;;;;:9;:13;;;;;:18;;36134:1;;36117:13;:18;;36134:1;;36117:18;:::i;:::-;;;;-1:-1:-1;;36146:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;36146:21:0;-1:-1:-1;;;;;36146:21:0;;;;;;;;;36185:27;;36146:16;;36185:27;;;;-1:-1:-1;;;;;;;;;;;36185:27:0;;35642:578;;;:::o;54345:725::-;54404:11;;:::i;:::-;54432:13;54438:7;54432:5;:13;:::i;:::-;54424:21;;54467:16;;:::i;:::-;54567:1;54506:58;54537:2;54540:1;54537:5;;;;;;;;:::i;:::-;;;;;;;;54543:18;:7;:16;:18::i;:::-;54520:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54506:6;:58::i;:::-;:62;;;;:::i;:::-;54490:79;;;;54592:5;54587:74;;;;;;;;;;;;;;;;;;;;;;;54592:5;;54587:74;;54592:5;54587:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54656:4;54598:57;54629:4;54634:18;:7;:16;:18::i;54598:57::-;:62;;;;:::i;:::-;54587:4;:74::i;:::-;54576:85;;:8;;;;:85;;;;54685:6;54680:76;;;;;;;;;;;;;;;;;;;;;;54685:6;54680:76;;;54685:6;54680:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54751:4;54692:58;54723:2;54726:1;54723:5;;;;;;;;:::i;:::-;;;;;;;;54729:18;:7;:16;:18::i;54680:76::-;54668:88;;:9;;;;:88;;;;54781:7;54776:77;;;;;;;;;;;;;;;;;;;;;;54781:7;54776:77;;;54781:7;54776:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54848:4;54789:58;54820:2;54823:1;54820:5;;;;;;;;:::i;54776:77::-;54763:90;;:10;;;:90;54880:9;54875:78;;;;;;;;;;;;;;;;;;;;;;;54880:9;;54875:78;;54880:9;54875:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54949:3;54890:58;54921:2;54924:1;54921:5;;;;;;;;:::i;54875:78::-;54860:93;;:12;;;:93;54976:5;54971:75;;;;;;;;;;;;;;;;;;;;;;;54976:5;;54971:75;;54976:5;54971:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55041:4;54982:58;55013:2;55016:1;55013:5;;;;;;;;:::i;54971:75::-;54960:86;;:8;;;:86;:4;54345:725;-1:-1:-1;;54345:725:0:o;7794:723::-;7850:13;8071:10;8067:53;;-1:-1:-1;;8098:10:0;;;;;;;;;;;;-1:-1:-1;;;8098:10:0;;;;;7794:723::o;8067:53::-;8145:5;8130:12;8186:78;8193:9;;8186:78;;8219:8;;;;:::i;:::-;;-1:-1:-1;8242:10:0;;-1:-1:-1;8250:2:0;8242:10;;:::i;:::-;;;8186:78;;;8274:19;8306:6;-1:-1:-1;;;;;8296:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8296:17:0;;8274:39;;8324:154;8331:10;;8324:154;;8358:11;8368:1;8358:11;;:::i;:::-;;-1:-1:-1;8427:10:0;8435:2;8427:5;:10;:::i;:::-;8414:24;;:2;:24;:::i;:::-;8401:39;;8384:6;8391;8384:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8384:56:0;;;;;;;;-1:-1:-1;8455:11:0;8464:2;8455:11;;:::i;:::-;;;8324:154;;33340:110;33416:26;33426:2;33430:7;33416:26;;;;;;;;;;;;:9;:26::i;:::-;33340:110;;:::o;12316:173::-;12391:6;;;-1:-1:-1;;;;;12408:17:0;;;-1:-1:-1;;;;;;12408:17:0;;;;;;;12441:40;;12391:6;;;12408:17;12391:6;;12441:40;;12372:16;;12441:40;12361:128;12316:173;:::o;31728:315::-;31885:28;31895:4;31901:2;31905:7;31885:9;:28::i;:::-;31932:48;31955:4;31961:2;31965:7;31974:5;31932:22;:48::i;:::-;31924:111;;;;-1:-1:-1;;;31924:111:0;;;;;;;:::i;55141:343::-;55201:13;55223:15;55263:3;55267:27;55275:4;:7;;;55267:16;;:25;:27::i;:::-;55295:3;55299:28;55307:4;:8;;;55299:17;;:26;:28::i;:::-;55328:3;55332:32;55340:4;:12;;;55332:21;;:30;:32::i;:::-;55246:119;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55223:143;;55404:1;55406:3;55410:28;55418:4;:8;;;55410:17;;:26;:28::i;:::-;55439:3;55443:29;55451:4;:9;;;55443:18;;:27;:29::i;:::-;55473:3;55387:90;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55373:105;;;55141:343;;;:::o;58099:1337::-;58156:13;58178:15;58194:4;58199;:8;;;58194:14;;;;;;;;;;:::i;:::-;;;;;;;;58178:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58215:15;58231:4;58236;:8;;;58231:14;;;;;;;;;;:::i;:::-;;;;;;;;58215:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;58252:22:0;;;;;;;;;:19;:22;;;58281;;;;;;;;;;58310:21;;;;;;;;;;58353:34;;58215:30;;-1:-1:-1;58252:22:0;;58281;;-1:-1:-1;58310:21:0;;-1:-1:-1;58353:34:0;;-1:-1:-1;58370:4:0;;58215:30;;58377:4;;58382:1;;58384:2;;58353:34;;:::i;:::-;;;;;;;;;;;;;58340:48;;58407:2;58398:4;:8;;;:11;;;58394:523;;;58445:3;58449:4;58463:1;58454:4;:8;;;:10;;;;:::i;:::-;58449:16;;;;;;;;;;:::i;:::-;;;;;;;;58466:4;58471;58485:1;58476:4;:8;;;:10;;;;:::i;:::-;58471:16;;;;;;;;;;:::i;:::-;;;;;;;;58488:2;58428:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58415:77;;58394:523;;;58518:2;58509:4;:8;;;:11;;;58505:412;;;58556:3;58560:4;58574:1;58565:4;:8;;;:10;;;;:::i;:::-;58560:16;;;;;;;;;;:::i;:::-;;;;;;;;58577:4;58582;58596:1;58587:4;:8;;;:10;;;;:::i;58505:412::-;58632:2;58623:4;:8;;;:11;;;58619:298;;;58675:3;58679:4;58693:1;58684:4;:8;;;:10;;;;:::i;:::-;58679:16;;;;;;;;;;:::i;:::-;;;;;;;;58696:3;58700:4;58714:1;58705:4;:8;;;:10;;;;:::i;58619:298::-;58738:8;;;;:10;;;58734:183;;58789:3;58793:1;58795:2;58798:3;58802:1;58804:2;58807:3;58811:1;58813:2;58772:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58760:57;;58858:4;58880:3;58884:1;58886:2;58889:3;58893:1;58895:2;58898:3;58902:1;58904:2;58863:44;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;58863:44:0;;;;;;;;;;58841:67;;;58863:44;58841:67;;:::i;:::-;;;;;;;;;;;;;58828:81;;58734:183;58925:20;58972:1;58974;58972:4;;;;;;;;:::i;:::-;;;;;;;;58977:10;58988:4;:7;;;58977:19;;;;;;;;;;:::i;:::-;;;;;;;;58997:1;58999;58997:4;;;;;;;;:::i;:::-;;;;;;;;59002:1;59004;59006;59004:4;;;;;;;;:::i;:::-;;;;;;;;58955:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58925:85;;59050:6;59057:1;59059;59061;59059:4;;;;;;;;:::i;:::-;;;;;;;;59064:1;59066;59068;59066:4;;;;;;;;:::i;:::-;;;;;;;;59071:1;59073;59075;59073:4;;;;;;;;:::i;:::-;;;;;;;;59078:1;59080;59082;59080:4;;;;;;;;:::i;:::-;;;;;;;;59033:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59017:69;;59126:6;59133:1;59135;59137;59135:4;;;;;;;;:::i;:::-;;;;;;;;59140:1;59142;59144;59142:4;;;;;;;;:::i;:::-;;;;;;;;59147:1;59149;59151;59149:4;;;;;;;;:::i;:::-;;;;;;;;59154:1;59156;59158:2;59156:5;;;;;;;;:::i;:::-;;;;;;;;59109:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59093:70;;59203:6;59210:4;59215;:9;;;59210:15;;;;;;;;;;:::i;:::-;;;;;;;;59226:1;59228:2;59226:5;;;;;;;;:::i;:::-;;;;;;;;59232:4;59237;:9;;;59232:15;;;;;;;;;;:::i;:::-;;;;;;;;59248:1;59250:2;59248:5;;;;;;;;:::i;:::-;;;;;;;;59254:16;59261:1;59263;59265:4;59254:6;:16::i;:::-;59271:1;59273:2;59271:5;;;;;;;;:::i;:::-;;;;;;;;59277;59283:4;:10;;;59277:17;;;;;;;;;;:::i;:::-;;;;;;;;59295:1;59297:2;59295:5;;;;;;;;:::i;:::-;;;;;;;;59186:115;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59170:132;;59340:6;59347:33;59356:4;:10;;;59367:4;:12;;;59347:8;:33::i;:::-;59381:24;59392:4;:12;;;59381:10;:24::i;:::-;59406:5;59412:4;59417:5;59423:1;59425:2;59423:5;;;;;;;;:::i;:::-;;;;;;;;59323:106;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59309:121;;;;;;;;58099:1337;;;:::o;515:1589::-;613:11;;573:13;;639:8;635:23;;-1:-1:-1;;649:9:0;;;;;;;;;-1:-1:-1;649:9:0;;;515:1589;-1:-1:-1;515:1589:0:o;635:23::-;710:18;748:1;737:7;:3;743:1;737:7;:::i;:::-;736:13;;;;:::i;:::-;731:19;;:1;:19;:::i;:::-;710:40;-1:-1:-1;808:19:0;840:15;710:40;853:2;840:15;:::i;:::-;-1:-1:-1;;;;;830:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;830:26:0;;808:48;;867:18;888:5;;;;;;;;;;;;;;;;;867:26;;957:1;950:5;946:13;1002:2;994:6;990:15;1051:1;1019:769;1074:3;1071:1;1068:10;1019:769;;;1127:1;1170:12;;;;;1164:19;1263:4;1251:2;1247:14;;;;;1229:40;;1223:47;1372:2;1368:14;;;1364:25;;1350:40;;1344:47;1501:1;1497:13;;;1493:24;;1479:39;;1473:46;1621:16;;;;1607:31;;1601:38;1299:1;1295:11;;;1393:4;1340:58;;;1331:68;1424:11;;1469:57;;;1460:67;;;;1552:11;;1597:49;;1588:59;1676:3;1672:13;1703:22;;1771:1;1756:17;;;;1120:9;1019:769;;;1023:44;1818:1;1813:3;1809:11;1839:1;1834:84;;;;1937:1;1932:82;;;;1802:212;;1834:84;-1:-1:-1;;;;;1867:17:0;;1860:43;1834:84;;1932:82;-1:-1:-1;;;;;1965:17:0;;1958:41;1802:212;-1:-1:-1;;;2028:26:0;;;2035:6;515:1589;-1:-1:-1;;;;515:1589:0:o;41951:589::-;-1:-1:-1;;;;;42157:18:0;;42153:187;;42192:40;42224:7;43367:10;:17;;43340:24;;;;:15;:24;;;;;:44;;;43395:24;;;;;;;;;;;;43263:164;42192:40;42153:187;;;42262:2;-1:-1:-1;;;;;42254:10:0;:4;-1:-1:-1;;;;;42254:10:0;;42250:90;;42281:47;42314:4;42320:7;42281:32;:47::i;:::-;-1:-1:-1;;;;;42354:16:0;;42350:183;;42387:45;42424:7;42387:36;:45::i;42350:183::-;42460:4;-1:-1:-1;;;;;42454:10:0;:2;-1:-1:-1;;;;;42454:10:0;;42450:83;;42481:40;42509:2;42513:7;42481:27;:40::i;53990:132::-;54050:7;54108:5;54091:23;;;;;;;;:::i;:::-;;;;-1:-1:-1;;54091:23:0;;;;;;;;;54081:34;;54091:23;54081:34;;;;;53990:132;-1:-1:-1;;53990:132:0:o;54128:211::-;54193:5;54207:9;54217:1;54207:11;;54225:9;54243:1;54245;54243:4;;;;;;;;:::i;:::-;;;;;;;54235:13;;54225:23;;54255:62;54265:1;54262;:4;54255:62;;54277:5;;;;:::i;:::-;;;;54302:1;54304:3;54302:6;;;;;;;;;;:::i;:::-;;;;;;;54294:15;;54291:18;;;;;:::i;:::-;;;54255:62;;;-1:-1:-1;54330:3:0;54128:211;-1:-1:-1;;;54128:211:0:o;33677:321::-;33807:18;33813:2;33817:7;33807:5;:18::i;:::-;33858:54;33889:1;33893:2;33897:7;33906:5;33858:22;:54::i;:::-;33836:154;;;;-1:-1:-1;;;33836:154:0;;;;;;;:::i;37077:803::-;37232:4;-1:-1:-1;;;;;37253:13:0;;17578:20;17626:8;37249:624;;37289:72;;-1:-1:-1;;;37289:72:0;;-1:-1:-1;;;;;37289:36:0;;;;;:72;;10172:10;;37340:4;;37346:7;;37355:5;;37289:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37289:72:0;;;;;;;;-1:-1:-1;;37289:72:0;;;;;;;;;;;;:::i;:::-;;;37285:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37535:13:0;;37531:272;;37578:60;;-1:-1:-1;;;37578:60:0;;;;;;;:::i;37531:272::-;37753:6;37747:13;37738:6;37734:2;37730:15;37723:38;37285:533;-1:-1:-1;;;;;;37412:55:0;-1:-1:-1;;;37412:55:0;;-1:-1:-1;37405:62:0;;37249:624;-1:-1:-1;37857:4:0;37077:803;;;;;;:::o;55974:718::-;56063:13;56085:17;:22;;;;;;;;;;;;;;56128:1;56118:4;:9;;;:11;;;56114:68;;;56163:3;56167:1;56169:3;56173:1;56175:2;56146:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56133:46;;56114:68;56202:2;56192:4;:9;;;:12;;;56188:73;;;56238:3;56242;56246:1;56248:3;56252:1;56254:2;56221:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56208:50;;56188:73;56281:2;56271:4;:9;;;:12;;;56267:67;;;56317:3;56321;56325:1;56327:2;56300:30;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56287:44;;56267:67;56351:1;56342:4;:8;;;:10;;;:25;;;;;56365:2;56356:4;:8;;;:11;;;56342:25;56341:58;;;;56381:2;56372:4;:8;;;:11;;;:26;;;;;56396:2;56387:4;:8;;;:11;;;56372:26;56341:90;;;;56413:2;56404:4;:8;;;:11;;;:26;;;;;56428:2;56419:4;:8;;;:11;;;56404:26;56337:145;;;56465:3;56469:8;56448:30;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56435:44;;56337:145;56502:2;56492:4;:9;;;:12;;;:28;;;;;56518:2;56508:4;:9;;;:12;;;56492:28;:125;;;;;56536:1;56527:4;:8;;;:10;;;:25;;;;;56550:2;56541:4;:8;;;:11;;;56527:25;56526:58;;;;56566:2;56557:4;:8;;;:11;;;:26;;;;;56581:2;56572:4;:8;;;:11;;;56557:26;56526:90;;;;56598:2;56589:4;:8;;;:11;;;:26;;;;;56613:2;56604:4;:8;;;:11;;;56589:26;56524:93;56492:125;56488:182;;;56651:3;56655:11;56634:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56621:47;;56683:3;55974:718;-1:-1:-1;;;;55974:718:0:o;56698:857::-;56779:22;;;;;;;;;:17;:22;;;56757:13;;56779:22;56828:2;56826:4;;;;;56825:27;;;56839:1;56837;:3;;;56836:15;;;;;56848:2;56846:1;:4;;;56836:15;56821:317;;;-1:-1:-1;56870:1:0;56863:130;56874:1;56872;:3;56863:130;;;56922:3;56926;56930:21;56935:4;:1;56937:2;56935:4;:::i;:::-;56931:8;;:3;:8;:::i;:::-;56930:19;:21::i;:::-;56952:3;56956:21;56961:4;:1;56963:2;56961:4;:::i;56956:21::-;56978:3;56905:77;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56892:91;;56876:3;;;;;:::i;:::-;;;;56863:130;;;-1:-1:-1;57008:1:0;57001:130;57012:1;57010;:3;57001:130;;;57060:3;57064;57068:21;57073:4;:1;57075:2;57073:4;:::i;:::-;57069:8;;:3;:8;:::i;57068:21::-;57090:3;57094:21;57099:4;:1;57101:2;57099:4;:::i;57094:21::-;57116:3;57043:77;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57030:91;;57014:3;;;;;:::i;:::-;;;;57001:130;;;57150:1;:4;;57153:1;57150:4;57146:69;;;57196:3;57200:5;57179:27;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57166:41;;57146:69;57229:1;57227;:3;;;57223:146;;;57274:3;57278:9;57257:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57243:46;;57223:146;;;57345:3;57349:10;57328:32;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57314:47;;57223:146;57383:2;57381:1;:4;;;:11;;;;;57391:1;57389;:3;;;57381:11;57377:74;;;57433:3;57437:4;57416:26;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57403:40;;57377:74;57463:2;57461:1;:4;;;:12;;;;;57472:1;57469;:4;;;;57461:12;57457:74;;;57514:3;57518;57497:25;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;57497:25:0;;;;;;;;;;56698:857;-1:-1:-1;;;;;56698:857:0:o;57561:532::-;57613:13;57639:4;;;57635:36;;-1:-1:-1;;57654:9:0;;;;;;;;;-1:-1:-1;57654:9:0;;;57561:532::o;57635:36::-;57683:1;57681;:3;;;57677:153;;;57701:1;57699;:3;;;57695:74;;;57746:3;57750;57754;57729:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57715:44;;57561:532;;;:::o;57695:74::-;57809:3;57813;57817;57792:29;;;;;;;;;;:::i;57677:153::-;57842:1;57840;:3;;;57836:233;;;57860:1;57858;:3;;;57854:73;;;57905:3;57909;57913:2;57888:28;;;;;;;;;;:::i;57854:73::-;57942:1;57940;:3;;;57936:73;;;57987:3;57991;57995:2;57970:28;;;;;;;;;;:::i;57936:73::-;58049:3;58053;58057:2;58032:28;;;;;;;;;;:::i;57836:233::-;58082:5;58075:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57561:532;;;:::o;44054:988::-;44320:22;44370:1;44345:22;44362:4;44345:16;:22::i;:::-;:26;;;;:::i;:::-;44382:18;44403:26;;;:17;:26;;;;;;44320:51;;-1:-1:-1;44536:28:0;;;44532:328;;-1:-1:-1;;;;;44603:18:0;;44581:19;44603:18;;;:12;:18;;;;;;;;:34;;;;;;;;;44654:30;;;;;;:44;;;44771:30;;:17;:30;;;;;:43;;;44532:328;-1:-1:-1;44956:26:0;;;;:17;:26;;;;;;;;44949:33;;;-1:-1:-1;;;;;45000:18:0;;;;;:12;:18;;;;;:34;;;;;;;44993:41;44054:988::o;45337:1079::-;45615:10;:17;45590:22;;45615:21;;45635:1;;45615:21;:::i;:::-;45647:18;45668:24;;;:15;:24;;;;;;46041:10;:26;;45590:46;;-1:-1:-1;45668:24:0;;45590:46;;46041:26;;;;;;:::i;:::-;;;;;;;;;46019:48;;46105:11;46080:10;46091;46080:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;46185:28;;;:15;:28;;;;;;;:41;;;46357:24;;;;;46350:31;46392:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;45408:1008;;;45337:1079;:::o;42841:221::-;42926:14;42943:20;42960:2;42943:16;:20::i;:::-;-1:-1:-1;;;;;42974:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;43019:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;42841:221:0:o;34334:382::-;-1:-1:-1;;;;;34414:16:0;;34406:61;;;;-1:-1:-1;;;34406:61:0;;25321:2:1;34406:61:0;;;25303:21:1;;;25340:18;;;25333:30;25399:34;25379:18;;;25372:62;25451:18;;34406:61:0;25119:356:1;34406:61:0;34487:16;34495:7;34487;:16::i;:::-;34486:17;34478:58;;;;-1:-1:-1;;;34478:58:0;;22196:2:1;34478:58:0;;;22178:21:1;22235:2;22215:18;;;22208:30;-1:-1:-1;;;22254:18:1;;;22247:58;22322:18;;34478:58:0;21994:352:1;34478:58:0;34549:45;34578:1;34582:2;34586:7;34549:20;:45::i;:::-;-1:-1:-1;;;;;34607:13:0;;;;;;:9;:13;;;;;:18;;34624:1;;34607:13;:18;;34624:1;;34607:18;:::i;:::-;;;;-1:-1:-1;;34636:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34636:21:0;-1:-1:-1;;;;;34636:21:0;;;;;;;;34675:33;;34636:16;;;-1:-1:-1;;;;;;;;;;;34675:33:0;34636:16;;34675:33;34334:382;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:160::-;257:20;;313:13;;306:21;296:32;;286:60;;342:1;339;332:12;357:186;416:6;469:2;457:9;448:7;444:23;440:32;437:52;;;485:1;482;475:12;437:52;508:29;527:9;508:29;:::i;:::-;498:39;357:186;-1:-1:-1;;;357:186:1:o;548:260::-;616:6;624;677:2;665:9;656:7;652:23;648:32;645:52;;;693:1;690;683:12;645:52;716:29;735:9;716:29;:::i;:::-;706:39;;764:38;798:2;787:9;783:18;764:38;:::i;:::-;754:48;;548:260;;;;;:::o;813:328::-;890:6;898;906;959:2;947:9;938:7;934:23;930:32;927:52;;;975:1;972;965:12;927:52;998:29;1017:9;998:29;:::i;:::-;988:39;;1046:38;1080:2;1069:9;1065:18;1046:38;:::i;:::-;1036:48;;1131:2;1120:9;1116:18;1103:32;1093:42;;813:328;;;;;:::o;1146:1138::-;1241:6;1249;1257;1265;1318:3;1306:9;1297:7;1293:23;1289:33;1286:53;;;1335:1;1332;1325:12;1286:53;1358:29;1377:9;1358:29;:::i;:::-;1348:39;;1406:38;1440:2;1429:9;1425:18;1406:38;:::i;:::-;1396:48;-1:-1:-1;1491:2:1;1476:18;;1463:32;;-1:-1:-1;1546:2:1;1531:18;;1518:32;-1:-1:-1;;;;;1599:14:1;;;1596:34;;;1626:1;1623;1616:12;1596:34;1664:6;1653:9;1649:22;1639:32;;1709:7;1702:4;1698:2;1694:13;1690:27;1680:55;;1731:1;1728;1721:12;1680:55;1767:2;1754:16;1789:2;1785;1782:10;1779:36;;;1795:18;;:::i;:::-;1870:2;1864:9;1838:2;1924:13;;-1:-1:-1;;1920:22:1;;;1944:2;1916:31;1912:40;1900:53;;;1968:18;;;1988:22;;;1965:46;1962:72;;;2014:18;;:::i;:::-;2054:10;2050:2;2043:22;2089:2;2081:6;2074:18;2129:7;2124:2;2119;2115;2111:11;2107:20;2104:33;2101:53;;;2150:1;2147;2140:12;2101:53;2206:2;2201;2197;2193:11;2188:2;2180:6;2176:15;2163:46;2251:1;2246:2;2241;2233:6;2229:15;2225:24;2218:35;2272:6;2262:16;;;;;;;1146:1138;;;;;;;:::o;2289:254::-;2354:6;2362;2415:2;2403:9;2394:7;2390:23;2386:32;2383:52;;;2431:1;2428;2421:12;2383:52;2454:29;2473:9;2454:29;:::i;:::-;2444:39;;2502:35;2533:2;2522:9;2518:18;2502:35;:::i;2548:254::-;2616:6;2624;2677:2;2665:9;2656:7;2652:23;2648:32;2645:52;;;2693:1;2690;2683:12;2645:52;2716:29;2735:9;2716:29;:::i;:::-;2706:39;2792:2;2777:18;;;;2764:32;;-1:-1:-1;;;2548:254:1:o;2807:180::-;2863:6;2916:2;2904:9;2895:7;2891:23;2887:32;2884:52;;;2932:1;2929;2922:12;2884:52;2955:26;2971:9;2955:26;:::i;2992:245::-;3050:6;3103:2;3091:9;3082:7;3078:23;3074:32;3071:52;;;3119:1;3116;3109:12;3071:52;3158:9;3145:23;3177:30;3201:5;3177:30;:::i;3242:249::-;3311:6;3364:2;3352:9;3343:7;3339:23;3335:32;3332:52;;;3380:1;3377;3370:12;3332:52;3412:9;3406:16;3431:30;3455:5;3431:30;:::i;3496:180::-;3555:6;3608:2;3596:9;3587:7;3583:23;3579:32;3576:52;;;3624:1;3621;3614:12;3576:52;-1:-1:-1;3647:23:1;;3496:180;-1:-1:-1;3496:180:1:o;3681:257::-;3722:3;3760:5;3754:12;3787:6;3782:3;3775:19;3803:63;3859:6;3852:4;3847:3;3843:14;3836:4;3829:5;3825:16;3803:63;:::i;:::-;3920:2;3899:15;-1:-1:-1;;3895:29:1;3886:39;;;;3927:4;3882:50;;3681:257;-1:-1:-1;;3681:257:1:o;3943:973::-;4028:12;;3993:3;;4083:1;4103:18;;;;4156;;;;4183:61;;4237:4;4229:6;4225:17;4215:27;;4183:61;4263:2;4311;4303:6;4300:14;4280:18;4277:38;4274:161;;;4357:10;4352:3;4348:20;4345:1;4338:31;4392:4;4389:1;4382:15;4420:4;4417:1;4410:15;4274:161;4451:18;4478:104;;;;4596:1;4591:319;;;;4444:466;;4478:104;-1:-1:-1;;4511:24:1;;4499:37;;4556:16;;;;-1:-1:-1;4478:104:1;;4591:319;29205:1;29198:14;;;29242:4;29229:18;;4685:1;4699:165;4713:6;4710:1;4707:13;4699:165;;;4791:14;;4778:11;;;4771:35;4834:16;;;;4728:10;;4699:165;;;4703:3;;4893:6;4888:3;4884:16;4877:23;;4444:466;;;;;;;3943:973;;;;:::o;4921:276::-;5052:3;5090:6;5084:13;5106:53;5152:6;5147:3;5140:4;5132:6;5128:17;5106:53;:::i;:::-;5175:16;;;;;4921:276;-1:-1:-1;;4921:276:1:o;5202:468::-;5379:3;5417:6;5411:13;5433:53;5479:6;5474:3;5467:4;5459:6;5455:17;5433:53;:::i;:::-;5549:13;;5508:16;;;;5571:57;5549:13;5508:16;5605:4;5593:17;;5571:57;:::i;:::-;5644:20;;5202:468;-1:-1:-1;;;;5202:468:1:o;6150:1052::-;6473:3;6511:6;6505:13;6527:53;6573:6;6568:3;6561:4;6553:6;6549:17;6527:53;:::i;:::-;6643:13;;6602:16;;;;6665:57;6643:13;6602:16;6699:4;6687:17;;6665:57;:::i;:::-;6789:13;;6744:20;;;6811:57;6789:13;6744:20;6845:4;6833:17;;6811:57;:::i;:::-;6935:13;;6890:20;;;6957:57;6935:13;6890:20;6991:4;6979:17;;6957:57;:::i;:::-;7081:13;;7036:20;;;7103:57;7081:13;7036:20;7137:4;7125:17;;7103:57;:::i;:::-;7176:20;;6150:1052;-1:-1:-1;;;;;;;6150:1052:1:o;7207:1337::-;7623:3;7661:6;7655:13;7687:4;7700:51;7744:6;7739:3;7734:2;7726:6;7722:15;7700:51;:::i;:::-;7814:13;;7773:16;;;;7836:55;7814:13;7773:16;7858:15;;;7836:55;:::i;:::-;7958:13;;7913:20;;;7980:55;7958:13;7913:20;8002:15;;;7980:55;:::i;:::-;8102:13;;8057:20;;;8124:55;8102:13;8057:20;8146:15;;;8124:55;:::i;:::-;8246:13;;8201:20;;;8268:55;8246:13;8201:20;8290:15;;;8268:55;:::i;:::-;8390:13;;8345:20;;;8412:55;8390:13;8345:20;8434:15;;;8412:55;:::i;:::-;8483;8528:8;8521:5;8517:20;8509:6;8483:55;:::i;:::-;8476:62;7207:1337;-1:-1:-1;;;;;;;;;;;;7207:1337:1:o;8549:1345::-;9052:3;9090:6;9084:13;9106:53;9152:6;9147:3;9140:4;9132:6;9128:17;9106:53;:::i;:::-;9222:13;;9181:16;;;;9244:57;9222:13;9181:16;9278:4;9266:17;;9244:57;:::i;:::-;9320:55;9365:8;9358:5;9354:20;9346:6;9320:55;:::i;:::-;9310:65;;;9406:6;9400:13;9422:54;9467:8;9463:2;9456:4;9448:6;9444:17;9422:54;:::i;:::-;9495:52;9537:8;9533:2;9529:17;9521:6;9495:52;:::i;:::-;9485:62;;;9578:6;9572:13;9594:54;9639:8;9635:2;9628:4;9620:6;9616:17;9594:54;:::i;:::-;9667:52;9709:8;9705:2;9701:17;9693:6;9667:52;:::i;:::-;9657:62;;;9750:6;9744:13;9766:54;9811:8;9807:2;9800:4;9792:6;9788:17;9766:54;:::i;:::-;9836:52;9878:8;9874:2;9870:17;9862:6;9836:52;:::i;:::-;9829:59;8549:1345;-1:-1:-1;;;;;;;;;;;;;8549:1345:1:o;9899:1154::-;10376:3;10414:6;10408:13;10430:53;10476:6;10471:3;10464:4;10456:6;10452:17;10430:53;:::i;:::-;10546:13;;10505:16;;;;10568:57;10546:13;10505:16;10602:4;10590:17;;10568:57;:::i;:::-;-1:-1:-1;;;10647:20:1;;10698:17;;;10740:13;;10647:20;;10686:3;10762:65;10740:13;10814:1;10803:13;;10796:4;10784:17;;10762:65;:::i;:::-;10890:1;10846:20;;10882:10;;;10875:22;10922:13;;10944:62;10922:13;10993:1;10985:10;;10978:4;10966:17;;10944:62;:::i;:::-;11026:17;11045:1;11022:25;;9899:1154;-1:-1:-1;;;;;;9899:1154:1:o;11058:356::-;11234:3;11272:6;11266:13;11288:53;11334:6;11329:3;11322:4;11314:6;11310:17;11288:53;:::i;:::-;11357:51;11400:6;11395:3;11391:16;11383:6;11357:51;:::i;:::-;11350:58;11058:356;-1:-1:-1;;;;;11058:356:1:o;11419:621::-;11688:3;11726:6;11720:13;11742:53;11788:6;11783:3;11776:4;11768:6;11764:17;11742:53;:::i;:::-;11814:51;11857:6;11852:3;11848:16;11840:6;11814:51;:::i;:::-;11804:61;;11896:6;11890:13;11912:54;11957:8;11953:2;11946:4;11938:6;11934:17;11912:54;:::i;:::-;11982:52;12024:8;12020:2;12016:17;12008:6;11982:52;:::i;:::-;11975:59;11419:621;-1:-1:-1;;;;;;;;11419:621:1:o;12045:886::-;12407:3;12445:6;12439:13;12461:53;12507:6;12502:3;12495:4;12487:6;12483:17;12461:53;:::i;:::-;12533:51;12576:6;12571:3;12567:16;12559:6;12533:51;:::i;:::-;12523:61;;12615:6;12609:13;12631:54;12676:8;12672:2;12665:4;12657:6;12653:17;12631:54;:::i;:::-;12704:52;12746:8;12742:2;12738:17;12730:6;12704:52;:::i;:::-;12694:62;;;12787:6;12781:13;12803:54;12848:8;12844:2;12837:4;12829:6;12825:17;12803:54;:::i;:::-;12873:52;12915:8;12911:2;12907:17;12899:6;12873:52;:::i;:::-;12866:59;12045:886;-1:-1:-1;;;;;;;;;;12045:886:1:o;12936:1021::-;13430:3;13468:6;13462:13;13484:53;13530:6;13525:3;13518:4;13510:6;13506:17;13484:53;:::i;:::-;13556:156;13590:121;13624:86;13658:51;13701:6;13696:3;13692:16;13684:6;13658:51;:::i;:::-;13650:6;13624:86;:::i;:::-;13616:6;13590:121;:::i;:::-;13582:6;13556:156;:::i;:::-;13546:166;;13743:6;13737:13;13759:54;13804:8;13800:2;13793:4;13785:6;13781:17;13759:54;:::i;:::-;13829:122;13863:87;13897:52;13939:8;13935:2;13931:17;13923:6;13897:52;:::i;:::-;13889:6;13863:87;:::i;:::-;13855:6;13829:122;:::i;13962:788::-;14343:3;14381:6;14375:13;14397:53;14443:6;14438:3;14431:4;14423:6;14419:17;14397:53;:::i;:::-;14481:6;14476:3;14472:16;14459:29;;-1:-1:-1;;;14533:2:1;14526:5;14519:17;14567:6;14561:13;14583:65;14639:8;14635:1;14628:5;14624:13;14617:4;14609:6;14605:17;14583:65;:::i;:::-;14711:1;14667:20;;14703:10;;;14696:22;14742:1;14734:10;;13962:788;-1:-1:-1;;;;13962:788:1:o;14755:376::-;14931:3;14959:38;14993:3;14985:6;14959:38;:::i;:::-;15026:6;15020:13;15042:52;15087:6;15083:2;15076:4;15068:6;15064:17;15042:52;:::i;15136:721::-;15450:3;15478:38;15512:3;15504:6;15478:38;:::i;:::-;15545:6;15539:13;15561:52;15606:6;15602:2;15595:4;15587:6;15583:17;15561:52;:::i;:::-;15632:50;15674:6;15670:2;15666:15;15658:6;15632:50;:::i;:::-;15622:60;;;15713:6;15707:13;15729:54;15774:8;15770:2;15763:4;15755:6;15751:17;15729:54;:::i;:::-;15799:52;15841:8;15837:2;15833:17;15825:6;15799:52;:::i;:::-;15792:59;15136:721;-1:-1:-1;;;;;;;;;15136:721:1:o;15862:906::-;16224:3;16252:38;16286:3;16278:6;16252:38;:::i;:::-;16319:6;16313:13;16335:52;16380:6;16376:2;16369:4;16361:6;16357:17;16335:52;:::i;:::-;16406:50;16448:6;16444:2;16440:15;16432:6;16406:50;:::i;:::-;16396:60;;;16487:6;16481:13;16503:54;16548:8;16544:2;16537:4;16529:6;16525:17;16503:54;:::i;:::-;16576:52;16618:8;16614:2;16610:17;16602:6;16576:52;:::i;:::-;16566:62;;;16659:6;16653:13;16675:54;16720:8;16716:2;16709:4;16701:6;16697:17;16675:54;:::i;:::-;16745:17;;15862:906;-1:-1:-1;;;;;;;;15862:906:1:o;16773:1146::-;17270:3;17298:38;17332:3;17324:6;17298:38;:::i;:::-;17365:6;17359:13;17381:52;17426:6;17422:2;17415:4;17407:6;17403:17;17381:52;:::i;:::-;17452:85;17486:50;17528:6;17524:2;17520:15;17512:6;17486:50;:::i;17452:85::-;17442:95;;;17568:6;17562:13;17584:54;17629:8;17625:2;17618:4;17610:6;17606:17;17584:54;:::i;:::-;17657:87;17691:52;17733:8;17729:2;17725:17;17717:6;17691:52;:::i;17924:357::-;18142:3;18167:108;18201:73;18235:38;18269:3;18261:6;18235:38;:::i;18201:73::-;18193:6;18167:108;:::i;18286:616::-;18597:3;18625:108;18659:73;18693:38;18727:3;18719:6;18693:38;:::i;18625:108::-;18762:6;18756:13;18778:52;18823:6;18819:2;18812:4;18804:6;18800:17;18778:52;:::i;18907:517::-;19215:3;19240:178;19274:143;19308:108;19342:73;19376:38;19410:3;19402:6;19376:38;:::i;:::-;19368:6;19342:73;:::i;19240:178::-;19233:185;18907:517;-1:-1:-1;;;;;;;18907:517:1:o;19847:488::-;-1:-1:-1;;;;;20116:15:1;;;20098:34;;20168:15;;20163:2;20148:18;;20141:43;20215:2;20200:18;;20193:34;;;20263:3;20258:2;20243:18;;20236:31;;;20041:4;;20284:45;;20309:19;;20301:6;20284:45;:::i;:::-;20276:53;19847:488;-1:-1:-1;;;;;;19847:488:1:o;20532:219::-;20681:2;20670:9;20663:21;20644:4;20701:44;20741:2;20730:9;20726:18;20718:6;20701:44;:::i;21168:414::-;21370:2;21352:21;;;21409:2;21389:18;;;21382:30;21448:34;21443:2;21428:18;;21421:62;-1:-1:-1;;;21514:2:1;21499:18;;21492:48;21572:3;21557:19;;21168:414::o;25893:356::-;26095:2;26077:21;;;26114:18;;;26107:30;26173:34;26168:2;26153:18;;26146:62;26240:2;26225:18;;25893:356::o;27759:413::-;27961:2;27943:21;;;28000:2;27980:18;;;27973:30;28039:34;28034:2;28019:18;;28012:62;-1:-1:-1;;;28105:2:1;28090:18;;28083:47;28162:3;28147:19;;27759:413::o;29258:128::-;29298:3;29329:1;29325:6;29322:1;29319:13;29316:39;;;29335:18;;:::i;:::-;-1:-1:-1;29371:9:1;;29258:128::o;29391:120::-;29431:1;29457;29447:35;;29462:18;;:::i;:::-;-1:-1:-1;29496:9:1;;29391:120::o;29516:168::-;29556:7;29622:1;29618;29614:6;29610:14;29607:1;29604:21;29599:1;29592:9;29585:17;29581:45;29578:71;;;29629:18;;:::i;:::-;-1:-1:-1;29669:9:1;;29516:168::o;29689:125::-;29729:4;29757:1;29754;29751:8;29748:34;;;29762:18;;:::i;:::-;-1:-1:-1;29799:9:1;;29689:125::o;29819:195::-;29857:4;29894;29891:1;29887:12;29926:4;29923:1;29919:12;29951:3;29946;29943:12;29940:38;;;29958:18;;:::i;:::-;29995:13;;;29819:195;-1:-1:-1;;;29819:195:1:o;30019:258::-;30091:1;30101:113;30115:6;30112:1;30109:13;30101:113;;;30191:11;;;30185:18;30172:11;;;30165:39;30137:2;30130:10;30101:113;;;30232:6;30229:1;30226:13;30223:48;;;-1:-1:-1;;30267:1:1;30249:16;;30242:27;30019:258::o;30282:380::-;30361:1;30357:12;;;;30404;;;30425:61;;30479:4;30471:6;30467:17;30457:27;;30425:61;30532:2;30524:6;30521:14;30501:18;30498:38;30495:161;;;30578:10;30573:3;30569:20;30566:1;30559:31;30613:4;30610:1;30603:15;30641:4;30638:1;30631:15;30495:161;;30282:380;;;:::o;30667:135::-;30706:3;-1:-1:-1;;30727:17:1;;30724:43;;;30747:18;;:::i;:::-;-1:-1:-1;30794:1:1;30783:13;;30667:135::o;30807:175::-;30844:3;30888:4;30881:5;30877:16;30917:4;30908:7;30905:17;30902:43;;;30925:18;;:::i;:::-;30974:1;30961:15;;30807:175;-1:-1:-1;;30807:175:1:o;30987:112::-;31019:1;31045;31035:35;;31050:18;;:::i;:::-;-1:-1:-1;31084:9:1;;30987:112::o;31104:127::-;31165:10;31160:3;31156:20;31153:1;31146:31;31196:4;31193:1;31186:15;31220:4;31217:1;31210:15;31236:127;31297:10;31292:3;31288:20;31285:1;31278:31;31328:4;31325:1;31318:15;31352:4;31349:1;31342:15;31368:127;31429:10;31424:3;31420:20;31417:1;31410:31;31460:4;31457:1;31450:15;31484:4;31481:1;31474:15;31500:127;31561:10;31556:3;31552:20;31549:1;31542:31;31592:4;31589:1;31582:15;31616:4;31613:1;31606:15;31632:127;31693:10;31688:3;31684:20;31681:1;31674:31;31724:4;31721:1;31714:15;31748:4;31745:1;31738:15;31764:131;-1:-1:-1;;;;;;31838:32:1;;31828:43;;31818:71;;31885:1;31882;31875:12
Swarm Source
ipfs://87992c838e382659b0c1a646259ddc8fc9257a4b09509041dbfdd7519652ad98
Loading...
Loading
Loading...
Loading
OVERVIEW
OnChain Dudes are the first completely Onchain Generative PFP Collection on Dotsama ecosystem.Multichain Portfolio | 24 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.