Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 632 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 15688714 | 764 days ago | IN | 0 ETH | 0.00025199 | ||||
Set Approval For... | 15678442 | 766 days ago | IN | 0 ETH | 0.00044315 | ||||
Release | 15661812 | 768 days ago | IN | 0 ETH | 0.00043771 | ||||
Set Approval For... | 15653766 | 769 days ago | IN | 0 ETH | 0.00046675 | ||||
Set Approval For... | 15653762 | 769 days ago | IN | 0 ETH | 0.00046675 | ||||
Mint | 15653690 | 769 days ago | IN | 0.01 ETH | 0.00091892 | ||||
Set Approval For... | 15653648 | 769 days ago | IN | 0 ETH | 0.00064473 | ||||
Mint | 15653549 | 769 days ago | IN | 0.01 ETH | 0.00036359 | ||||
Mint | 15653549 | 769 days ago | IN | 0.01 ETH | 0.00036359 | ||||
Mint | 15653427 | 769 days ago | IN | 0.03 ETH | 0.00081328 | ||||
Mint | 15653427 | 769 days ago | IN | 0.03 ETH | 0.00081328 | ||||
Mint | 15653417 | 769 days ago | IN | 0.03 ETH | 0.00084 | ||||
Mint | 15653417 | 769 days ago | IN | 0.03 ETH | 0.00084 | ||||
Mint | 15653414 | 769 days ago | IN | 0.03 ETH | 0.00072 | ||||
Mint | 15653414 | 769 days ago | IN | 0.03 ETH | 0.00072 | ||||
Set Approval For... | 15653348 | 769 days ago | IN | 0 ETH | 0.00025687 | ||||
Set Approval For... | 15653346 | 769 days ago | IN | 0 ETH | 0.00026917 | ||||
Set Approval For... | 15653344 | 769 days ago | IN | 0 ETH | 0.00029414 | ||||
Set Approval For... | 15653343 | 769 days ago | IN | 0 ETH | 0.00026977 | ||||
Mint | 15653324 | 769 days ago | IN | 0.03 ETH | 0.0007455 | ||||
Mint | 15653315 | 769 days ago | IN | 0.03 ETH | 0.0007455 | ||||
Mint | 15653309 | 769 days ago | IN | 0.03 ETH | 0.0007455 | ||||
Mint | 15653303 | 769 days ago | IN | 0.03 ETH | 0.00081328 | ||||
Mint | 15653302 | 769 days ago | IN | 0.03 ETH | 0.0007455 | ||||
Mint | 15653295 | 769 days ago | IN | 0.03 ETH | 0.0007455 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15661812 | 768 days ago | 18.19 ETH |
Loading...
Loading
Contract Name:
MagicBabyMonster
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-30 */ // File: code-sample/MagicBabyMonsters/interfaces/IToken.sol /// @title IToken interface pragma solidity ^0.8.6; interface IToken { function mintAdmin(uint256 quantity, address to) external; } // File: code-sample/MagicBabyMonsters/interfaces/IDescriptor.sol /// @title IDescriptor interface pragma solidity ^0.8.6; interface IDescriptor { function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/finance/PaymentSplitter.sol // OpenZeppelin Contracts (last updated v4.7.0) (finance/PaymentSplitter.sol) pragma solidity ^0.8.0; /** * @title PaymentSplitter * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware * that the Ether will be split in this way, since it is handled transparently by the contract. * * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim * an amount proportional to the percentage of total shares they were assigned. The distribution of shares is set at the * time of contract deployment and can't be updated thereafter. * * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} * function. * * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you * to run tests before sending real value to this contract. */ contract PaymentSplitter is Context { event PayeeAdded(address account, uint256 shares); event PaymentReleased(address to, uint256 amount); event ERC20PaymentReleased(IERC20 indexed token, address to, uint256 amount); event PaymentReceived(address from, uint256 amount); uint256 private _totalShares; uint256 private _totalReleased; mapping(address => uint256) private _shares; mapping(address => uint256) private _released; address[] private _payees; mapping(IERC20 => uint256) private _erc20TotalReleased; mapping(IERC20 => mapping(address => uint256)) private _erc20Released; /** * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at * the matching position in the `shares` array. * * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no * duplicates in `payees`. */ constructor(address[] memory payees, uint256[] memory shares_) payable { require(payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch"); require(payees.length > 0, "PaymentSplitter: no payees"); for (uint256 i = 0; i < payees.length; i++) { _addPayee(payees[i], shares_[i]); } } /** * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the * reliability of the events, and not the actual splitting of Ether. * * To learn more about this see the Solidity documentation for * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback * functions]. */ receive() external payable virtual { emit PaymentReceived(_msgSender(), msg.value); } /** * @dev Getter for the total shares held by payees. */ function totalShares() public view returns (uint256) { return _totalShares; } /** * @dev Getter for the total amount of Ether already released. */ function totalReleased() public view returns (uint256) { return _totalReleased; } /** * @dev Getter for the total amount of `token` already released. `token` should be the address of an IERC20 * contract. */ function totalReleased(IERC20 token) public view returns (uint256) { return _erc20TotalReleased[token]; } /** * @dev Getter for the amount of shares held by an account. */ function shares(address account) public view returns (uint256) { return _shares[account]; } /** * @dev Getter for the amount of Ether already released to a payee. */ function released(address account) public view returns (uint256) { return _released[account]; } /** * @dev Getter for the amount of `token` tokens already released to a payee. `token` should be the address of an * IERC20 contract. */ function released(IERC20 token, address account) public view returns (uint256) { return _erc20Released[token][account]; } /** * @dev Getter for the address of the payee number `index`. */ function payee(uint256 index) public view returns (address) { return _payees[index]; } /** * @dev Getter for the amount of payee's releasable Ether. */ function releasable(address account) public view returns (uint256) { uint256 totalReceived = address(this).balance + totalReleased(); return _pendingPayment(account, totalReceived, released(account)); } /** * @dev Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an * IERC20 contract. */ function releasable(IERC20 token, address account) public view returns (uint256) { uint256 totalReceived = token.balanceOf(address(this)) + totalReleased(token); return _pendingPayment(account, totalReceived, released(token, account)); } /** * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the * total shares and their previous withdrawals. */ function release(address payable account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 payment = releasable(account); require(payment != 0, "PaymentSplitter: account is not due payment"); _released[account] += payment; _totalReleased += payment; Address.sendValue(account, payment); emit PaymentReleased(account, payment); } /** * @dev Triggers a transfer to `account` of the amount of `token` tokens they are owed, according to their * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 * contract. */ function release(IERC20 token, address account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 payment = releasable(token, account); require(payment != 0, "PaymentSplitter: account is not due payment"); _erc20Released[token][account] += payment; _erc20TotalReleased[token] += payment; SafeERC20.safeTransfer(token, account, payment); emit ERC20PaymentReleased(token, account, payment); } /** * @dev internal logic for computing the pending payment of an `account` given the token historical balances and * already released amounts. */ function _pendingPayment( address account, uint256 totalReceived, uint256 alreadyReleased ) private view returns (uint256) { return (totalReceived * _shares[account]) / _totalShares - alreadyReleased; } /** * @dev Add a new payee to the contract. * @param account The address of the payee to add. * @param shares_ The number of shares owned by the payee. */ function _addPayee(address account, uint256 shares_) private { require(account != address(0), "PaymentSplitter: account is the zero address"); require(shares_ > 0, "PaymentSplitter: shares are 0"); require(_shares[account] == 0, "PaymentSplitter: account already has shares"); _payees.push(account); _shares[account] = shares_; _totalShares = _totalShares + shares_; emit PayeeAdded(account, shares_); } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: code-sample/MagicBabyMonsters/MagicBabyMonsters.sol pragma solidity ^0.8.6; contract MagicBabyMonster is Ownable, ERC721, PaymentSplitter,IToken { using Strings for uint256; // Sale details uint256 public maxTokens = 5000; uint256 public maxMintsPerTx = 3; uint256 public price = .01 ether; bool public saleActive; // When set, diverts tokenURI calls to external contract address public descriptor; // Only used when `descriptor` is 0x0 string public baseURI; uint256 private nowTokenId = 0; // Admin access for privileged contracts mapping(address => bool) public admins; /** * @notice Caller must be owner or privileged admin contract. */ modifier onlyAdmin() { require(owner() == _msgSender() || admins[msg.sender], "Not admin"); _; } constructor(address[] memory payees, uint256[] memory shares) ERC721("Magic Baby Monster", "MBM") PaymentSplitter(payees, shares) {} /** * @dev Public mint. */ function mint(uint256 quantity) external payable { require(saleActive, "Sale inactive"); require(quantity <= maxMintsPerTx, "Too many mints per txn"); require(nowTokenId + quantity <= maxTokens , "Exceeds max supply"); require(msg.value >= price * quantity, "Not enough ether"); require(msg.sender == tx.origin, "No contract mints"); for (uint256 i = 0; i < quantity; i++) { _safeMint(msg.sender, ++nowTokenId); } } /** * @dev Return tokenURI directly or via alternative `descriptor` contract */ function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "URI query for nonexistent token"); if (descriptor == address(0)) { return string(abi.encodePacked(baseURI, tokenId.toString())); } else { return IDescriptor(descriptor).tokenURI(tokenId); } } /** * @dev Simplified version of ERC721Enumberable's `totalSupply` */ function totalSupply() external view returns (uint256) { return nowTokenId; } /** * @dev Set `descriptor` contract address to route `tokenURI` */ function setDescriptor(address _descriptor) external onlyOwner { descriptor = _descriptor; } /** * @dev Set the `baseURI` used to construct `tokenURI`. */ function setBaseURI(string memory _baseURI) external onlyOwner { baseURI = _baseURI; } /** * @dev Enable adjusting max mints per transaction. */ function setMaxMintsPerTxn(uint256 newMax) external onlyOwner { maxMintsPerTx = newMax; } /** * @dev Enable adjusting price. */ function setPrice(uint256 newPriceWei) external onlyOwner { price = newPriceWei; } /** * @dev Toggle sale status. */ function toggleSale() external onlyOwner { saleActive = !saleActive; } /** * @dev Toggle admin status for an address. */ function setAdmin(address _address) external onlyOwner { admins[_address] = !admins[_address]; } /** * @dev Admin mint. */ function mintAdmin(uint256 quantity, address to) external override onlyAdmin { require(nowTokenId + quantity <= maxTokens , "Exceeds max supply"); for (uint256 i = 0; i < quantity; i++) { _safeMint(to, ++nowTokenId); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"payees","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"admins","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"descriptor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"mintAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_descriptor","type":"address"}],"name":"setDescriptor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxMintsPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPriceWei","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052611388600e556003600f55662386f26fc1000060105560006013553480156200002c57600080fd5b5060405162005ee538038062005ee5833981810160405281019062000052919062000812565b81816040518060400160405280601281526020017f4d616769632042616279204d6f6e7374657200000000000000000000000000008152506040518060400160405280600381526020017f4d424d0000000000000000000000000000000000000000000000000000000000815250620000e0620000d46200020e60201b60201c565b6200021660201b60201c565b8160019081620000f1919062000ad8565b50806002908162000103919062000ad8565b50505080518251146200014d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001449062000c46565b60405180910390fd5b600082511162000194576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018b9062000cb8565b60405180910390fd5b60005b82518110156200020357620001ed838281518110620001bb57620001ba62000cda565b5b6020026020010151838381518110620001d957620001d862000cda565b5b6020026020010151620002da60201b60201c565b8080620001fa9062000d38565b91505062000197565b505050505062000fb1565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200034c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003439062000dfb565b60405180910390fd5b6000811162000392576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003899062000e6d565b60405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541462000417576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040e9062000f05565b60405180910390fd5b600b829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600754620004ce919062000f27565b6007819055507f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac82826040516200050792919062000f84565b60405180910390a15050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000577826200052c565b810181811067ffffffffffffffff821117156200059957620005986200053d565b5b80604052505050565b6000620005ae62000513565b9050620005bc82826200056c565b919050565b600067ffffffffffffffff821115620005df57620005de6200053d565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200062282620005f5565b9050919050565b620006348162000615565b81146200064057600080fd5b50565b600081519050620006548162000629565b92915050565b6000620006716200066b84620005c1565b620005a2565b90508083825260208201905060208402830185811115620006975762000696620005f0565b5b835b81811015620006c45780620006af888262000643565b84526020840193505060208101905062000699565b5050509392505050565b600082601f830112620006e657620006e562000527565b5b8151620006f88482602086016200065a565b91505092915050565b600067ffffffffffffffff8211156200071f576200071e6200053d565b5b602082029050602081019050919050565b6000819050919050565b620007458162000730565b81146200075157600080fd5b50565b60008151905062000765816200073a565b92915050565b6000620007826200077c8462000701565b620005a2565b90508083825260208201905060208402830185811115620007a857620007a7620005f0565b5b835b81811015620007d55780620007c0888262000754565b845260208401935050602081019050620007aa565b5050509392505050565b600082601f830112620007f757620007f662000527565b5b8151620008098482602086016200076b565b91505092915050565b600080604083850312156200082c576200082b6200051d565b5b600083015167ffffffffffffffff8111156200084d576200084c62000522565b5b6200085b85828601620006ce565b925050602083015167ffffffffffffffff8111156200087f576200087e62000522565b5b6200088d85828601620007df565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008ea57607f821691505b6020821081036200090057620008ff620008a2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200096a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200092b565b6200097686836200092b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620009b9620009b3620009ad8462000730565b6200098e565b62000730565b9050919050565b6000819050919050565b620009d58362000998565b620009ed620009e482620009c0565b84845462000938565b825550505050565b600090565b62000a04620009f5565b62000a11818484620009ca565b505050565b5b8181101562000a395762000a2d600082620009fa565b60018101905062000a17565b5050565b601f82111562000a885762000a528162000906565b62000a5d846200091b565b8101602085101562000a6d578190505b62000a8562000a7c856200091b565b83018262000a16565b50505b505050565b600082821c905092915050565b600062000aad6000198460080262000a8d565b1980831691505092915050565b600062000ac8838362000a9a565b9150826002028217905092915050565b62000ae38262000897565b67ffffffffffffffff81111562000aff5762000afe6200053d565b5b62000b0b8254620008d1565b62000b1882828562000a3d565b600060209050601f83116001811462000b50576000841562000b3b578287015190505b62000b47858262000aba565b86555062000bb7565b601f19841662000b608662000906565b60005b8281101562000b8a5784890151825560018201915060208501945060208101905062000b63565b8683101562000baa578489015162000ba6601f89168262000a9a565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f5061796d656e7453706c69747465723a2070617965657320616e64207368617260008201527f6573206c656e677468206d69736d617463680000000000000000000000000000602082015250565b600062000c2e60328362000bbf565b915062000c3b8262000bd0565b604082019050919050565b6000602082019050818103600083015262000c618162000c1f565b9050919050565b7f5061796d656e7453706c69747465723a206e6f20706179656573000000000000600082015250565b600062000ca0601a8362000bbf565b915062000cad8262000c68565b602082019050919050565b6000602082019050818103600083015262000cd38162000c91565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d458262000730565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000d7a5762000d7962000d09565b5b600182019050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b600062000de3602c8362000bbf565b915062000df08262000d85565b604082019050919050565b6000602082019050818103600083015262000e168162000dd4565b9050919050565b7f5061796d656e7453706c69747465723a20736861726573206172652030000000600082015250565b600062000e55601d8362000bbf565b915062000e628262000e1d565b602082019050919050565b6000602082019050818103600083015262000e888162000e46565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960008201527f2068617320736861726573000000000000000000000000000000000000000000602082015250565b600062000eed602b8362000bbf565b915062000efa8262000e8f565b604082019050919050565b6000602082019050818103600083015262000f208162000ede565b9050919050565b600062000f348262000730565b915062000f418362000730565b925082820190508082111562000f5c5762000f5b62000d09565b5b92915050565b62000f6d8162000615565b82525050565b62000f7e8162000730565b82525050565b600060408201905062000f9b600083018562000f62565b62000faa602083018462000f73565b9392505050565b614f248062000fc16000396000f3fe6080604052600436106102605760003560e01c80637d8966e411610144578063b88d4fde116100b6578063dc30158b1161007a578063dc30158b1461097e578063e33b7de3146109a9578063e8315742146109d4578063e985e9c5146109ff578063f2fde38b14610a3c578063f7c64f9e14610a65576102a7565b8063b88d4fde14610861578063c45ac0501461088a578063c87b56dd146108c7578063ce7c2ac214610904578063d79779b214610941576102a7565b80639852595c116101085780639852595c1461074e5780639d034fe91461078b578063a035b1fe146107b4578063a0712d68146107df578063a22cb465146107fb578063a3f8eace14610824576102a7565b80637d8966e41461067b5780638b83209b146106925780638da5cb5b146106cf57806391b7f5ed146106fa57806395d89b4114610723576102a7565b8063406072a9116101dd5780636352211e116101a15780636352211e1461056b57806368428a1b146105a85780636c0360eb146105d3578063704b6c02146105fe57806370a0823114610627578063715018a614610664576102a7565b8063406072a91461047657806342842e0e146104b3578063429b62e5146104dc57806348b750441461051957806355f804b314610542576102a7565b806318160ddd1161022457806318160ddd146103a357806319165587146103ce57806323b872dd146103f7578063303e74df146104205780633a98ef391461044b576102a7565b806301b9a397146102ac57806301ffc9a7146102d557806306fdde0314610312578063081812fc1461033d578063095ea7b31461037a576102a7565b366102a7577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77061028e610a8e565b3460405161029d929190613105565b60405180910390a1005b600080fd5b3480156102b857600080fd5b506102d360048036038101906102ce919061316e565b610a96565b005b3480156102e157600080fd5b506102fc60048036038101906102f791906131f3565b610ae2565b604051610309919061323b565b60405180910390f35b34801561031e57600080fd5b50610327610bc4565b60405161033491906132e6565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190613334565b610c56565b6040516103719190613361565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c919061337c565b610c9c565b005b3480156103af57600080fd5b506103b8610db3565b6040516103c591906133bc565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613415565b610dbd565b005b34801561040357600080fd5b5061041e60048036038101906104199190613442565b610f45565b005b34801561042c57600080fd5b50610435610fa5565b6040516104429190613361565b60405180910390f35b34801561045757600080fd5b50610460610fcb565b60405161046d91906133bc565b60405180910390f35b34801561048257600080fd5b5061049d600480360381019061049891906134d3565b610fd5565b6040516104aa91906133bc565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190613442565b61105c565b005b3480156104e857600080fd5b5061050360048036038101906104fe919061316e565b61107c565b604051610510919061323b565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b91906134d3565b61109c565b005b34801561054e57600080fd5b5061056960048036038101906105649190613648565b6112b8565b005b34801561057757600080fd5b50610592600480360381019061058d9190613334565b6112d3565b60405161059f9190613361565b60405180910390f35b3480156105b457600080fd5b506105bd611384565b6040516105ca919061323b565b60405180910390f35b3480156105df57600080fd5b506105e8611397565b6040516105f591906132e6565b60405180910390f35b34801561060a57600080fd5b506106256004803603810190610620919061316e565b611425565b005b34801561063357600080fd5b5061064e6004803603810190610649919061316e565b6114d4565b60405161065b91906133bc565b60405180910390f35b34801561067057600080fd5b5061067961158b565b005b34801561068757600080fd5b5061069061159f565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613334565b6115d3565b6040516106c69190613361565b60405180910390f35b3480156106db57600080fd5b506106e461161b565b6040516106f19190613361565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190613334565b611644565b005b34801561072f57600080fd5b50610738611656565b60405161074591906132e6565b60405180910390f35b34801561075a57600080fd5b506107756004803603810190610770919061316e565b6116e8565b60405161078291906133bc565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad9190613691565b611731565b005b3480156107c057600080fd5b506107c9611894565b6040516107d691906133bc565b60405180910390f35b6107f960048036038101906107f49190613334565b61189a565b005b34801561080757600080fd5b50610822600480360381019061081d91906136fd565b611a7e565b005b34801561083057600080fd5b5061084b6004803603810190610846919061316e565b611a94565b60405161085891906133bc565b60405180910390f35b34801561086d57600080fd5b50610888600480360381019061088391906137de565b611ac7565b005b34801561089657600080fd5b506108b160048036038101906108ac91906134d3565b611b29565b6040516108be91906133bc565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e99190613334565b611bd8565b6040516108fb91906132e6565b60405180910390f35b34801561091057600080fd5b5061092b6004803603810190610926919061316e565b611d53565b60405161093891906133bc565b60405180910390f35b34801561094d57600080fd5b5061096860048036038101906109639190613861565b611d9c565b60405161097591906133bc565b60405180910390f35b34801561098a57600080fd5b50610993611de5565b6040516109a091906133bc565b60405180910390f35b3480156109b557600080fd5b506109be611deb565b6040516109cb91906133bc565b60405180910390f35b3480156109e057600080fd5b506109e9611df5565b6040516109f691906133bc565b60405180910390f35b348015610a0b57600080fd5b50610a266004803603810190610a21919061388e565b611dfb565b604051610a33919061323b565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e919061316e565b611e8f565b005b348015610a7157600080fd5b50610a8c6004803603810190610a879190613334565b611f12565b005b600033905090565b610a9e611f24565b80601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bad57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bbd5750610bbc82611fa2565b5b9050919050565b606060018054610bd3906138fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff906138fd565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b5050505050905090565b6000610c618261200c565b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ca7826112d3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e906139a0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d36610a8e565b73ffffffffffffffffffffffffffffffffffffffff161480610d655750610d6481610d5f610a8e565b611dfb565b5b610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90613a32565b60405180910390fd5b610dae8383612057565b505050565b6000601354905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3690613ac4565b60405180910390fd5b6000610e4a82611a94565b905060008103610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690613b56565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ede9190613ba5565b925050819055508060086000828254610ef79190613ba5565b92505081905550610f088282612110565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b0568282604051610f39929190613c38565b60405180910390a15050565b610f56610f50610a8e565b82612204565b610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90613cd3565b60405180910390fd5b610fa0838383612299565b505050565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61107783838360405180602001604052806000815250611ac7565b505050565b60146020528060005260406000206000915054906101000a900460ff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111590613ac4565b60405180910390fd5b600061112a8383611b29565b90506000810361116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690613b56565b60405180910390fd5b80600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111fb9190613ba5565b9250508190555080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112519190613ba5565b925050819055506112638383836124ff565b8273ffffffffffffffffffffffffffffffffffffffff167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a83836040516112ab929190613105565b60405180910390a2505050565b6112c0611f24565b80601290816112cf9190613e95565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290613fb3565b60405180910390fd5b80915050919050565b601160009054906101000a900460ff1681565b601280546113a4906138fd565b80601f01602080910402602001604051908101604052809291908181526020018280546113d0906138fd565b801561141d5780601f106113f25761010080835404028352916020019161141d565b820191906000526020600020905b81548152906001019060200180831161140057829003601f168201915b505050505081565b61142d611f24565b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90614045565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611593611f24565b61159d6000612585565b565b6115a7611f24565b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6000600b82815481106115e9576115e8614065565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61164c611f24565b8060108190555050565b606060028054611665906138fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611691906138fd565b80156116de5780601f106116b3576101008083540402835291602001916116de565b820191906000526020600020905b8154815290600101906020018083116116c157829003601f168201915b5050505050905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611739610a8e565b73ffffffffffffffffffffffffffffffffffffffff1661175761161b565b73ffffffffffffffffffffffffffffffffffffffff1614806117c25750601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f8906140e0565b60405180910390fd5b600e54826013546118129190613ba5565b1115611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a9061414c565b60405180910390fd5b60005b8281101561188f5761187c826013600081546118719061416c565b919050819055612649565b80806118879061416c565b915050611856565b505050565b60105481565b601160009054906101000a900460ff166118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090614200565b60405180910390fd5b600f5481111561192e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119259061426c565b60405180910390fd5b600e548160135461193f9190613ba5565b1115611980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119779061414c565b60405180910390fd5b8060105461198e919061428c565b3410156119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c79061431a565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3590614386565b60405180910390fd5b60005b81811015611a7a57611a6733601360008154611a5c9061416c565b919050819055612649565b8080611a729061416c565b915050611a41565b5050565b611a90611a89610a8e565b8383612667565b5050565b600080611a9f611deb565b47611aaa9190613ba5565b9050611abf8382611aba866116e8565b6127d3565b915050919050565b611ad8611ad2610a8e565b83612204565b611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90613cd3565b60405180910390fd5b611b2384848484612841565b50505050565b600080611b3584611d9c565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b6e9190613361565b602060405180830381865afa158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf91906143bb565b611bb99190613ba5565b9050611bcf8382611bca8787610fd5565b6127d3565b91505092915050565b6060611be38261289d565b611c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1990614434565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611caa576012611c8383612909565b604051602001611c94929190614513565b6040516020818303038152906040529050611d4e565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b8152600401611d0591906133bc565b600060405180830381865afa158015611d22573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611d4b91906145a7565b90505b919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600f5481565b6000600854905090565b600e5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e97611f24565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd90614662565b60405180910390fd5b611f0f81612585565b50565b611f1a611f24565b80600f8190555050565b611f2c610a8e565b73ffffffffffffffffffffffffffffffffffffffff16611f4a61161b565b73ffffffffffffffffffffffffffffffffffffffff1614611fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f97906146ce565b60405180910390fd5b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6120158161289d565b612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b90613fb3565b60405180910390fd5b50565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120ca836112d3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b80471015612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a9061473a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516121799061478b565b60006040518083038185875af1925050503d80600081146121b6576040519150601f19603f3d011682016040523d82523d6000602084013e6121bb565b606091505b50509050806121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f690614812565b60405180910390fd5b505050565b600080612210836112d3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061225257506122518185611dfb565b5b8061229057508373ffffffffffffffffffffffffffffffffffffffff1661227884610c56565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122b9826112d3565b73ffffffffffffffffffffffffffffffffffffffff161461230f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612306906148a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361237e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237590614936565b60405180910390fd5b612389838383612a69565b612394600082612057565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123e49190614956565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461243b9190613ba5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124fa838383612a6e565b505050565b6125808363a9059cbb60e01b848460405160240161251e929190613105565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612a73565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612663828260405180602001604052806000815250612b3a565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cc906149d6565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127c6919061323b565b60405180910390a3505050565b600081600754600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485612824919061428c565b61282e9190614a25565b6128389190614956565b90509392505050565b61284c848484612299565b61285884848484612b95565b612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e90614ac8565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060008203612950576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a64565b600082905060005b6000821461298257808061296b9061416c565b915050600a8261297b9190614a25565b9150612958565b60008167ffffffffffffffff81111561299e5761299d61351d565b5b6040519080825280601f01601f1916602001820160405280156129d05781602001600182028036833780820191505090505b5090505b60008514612a5d576001826129e99190614956565b9150600a856129f89190614ae8565b6030612a049190613ba5565b60f81b818381518110612a1a57612a19614065565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a569190614a25565b94506129d4565b8093505050505b919050565b505050565b505050565b6000612ad5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612d1c9092919063ffffffff16565b9050600081511115612b355780806020019051810190612af59190614b2e565b612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90614bcd565b60405180910390fd5b5b505050565b612b448383612d34565b612b516000848484612b95565b612b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8790614ac8565b60405180910390fd5b505050565b6000612bb68473ffffffffffffffffffffffffffffffffffffffff16612f0d565b15612d0f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612bdf610a8e565b8786866040518563ffffffff1660e01b8152600401612c019493929190614c42565b6020604051808303816000875af1925050508015612c3d57506040513d601f19601f82011682018060405250810190612c3a9190614ca3565b60015b612cbf573d8060008114612c6d576040519150601f19603f3d011682016040523d82523d6000602084013e612c72565b606091505b506000815103612cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cae90614ac8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d14565b600190505b949350505050565b6060612d2b8484600085612f30565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9a90614d1c565b60405180910390fd5b612dac8161289d565b15612dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de390614d88565b60405180910390fd5b612df860008383612a69565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e489190613ba5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f0960008383612a6e565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606082471015612f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6c90614e1a565b60405180910390fd5b612f7e85612f0d565b612fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb490614e86565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612fe69190614ed7565b60006040518083038185875af1925050503d8060008114613023576040519150601f19603f3d011682016040523d82523d6000602084013e613028565b606091505b5091509150613038828286613044565b92505050949350505050565b60608315613054578290506130a4565b6000835111156130675782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309b91906132e6565b60405180910390fd5b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130d6826130ab565b9050919050565b6130e6816130cb565b82525050565b6000819050919050565b6130ff816130ec565b82525050565b600060408201905061311a60008301856130dd565b61312760208301846130f6565b9392505050565b6000604051905090565b600080fd5b600080fd5b61314b816130cb565b811461315657600080fd5b50565b60008135905061316881613142565b92915050565b60006020828403121561318457613183613138565b5b600061319284828501613159565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131d08161319b565b81146131db57600080fd5b50565b6000813590506131ed816131c7565b92915050565b60006020828403121561320957613208613138565b5b6000613217848285016131de565b91505092915050565b60008115159050919050565b61323581613220565b82525050565b6000602082019050613250600083018461322c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613290578082015181840152602081019050613275565b60008484015250505050565b6000601f19601f8301169050919050565b60006132b882613256565b6132c28185613261565b93506132d2818560208601613272565b6132db8161329c565b840191505092915050565b6000602082019050818103600083015261330081846132ad565b905092915050565b613311816130ec565b811461331c57600080fd5b50565b60008135905061332e81613308565b92915050565b60006020828403121561334a57613349613138565b5b60006133588482850161331f565b91505092915050565b600060208201905061337660008301846130dd565b92915050565b6000806040838503121561339357613392613138565b5b60006133a185828601613159565b92505060206133b28582860161331f565b9150509250929050565b60006020820190506133d160008301846130f6565b92915050565b60006133e2826130ab565b9050919050565b6133f2816133d7565b81146133fd57600080fd5b50565b60008135905061340f816133e9565b92915050565b60006020828403121561342b5761342a613138565b5b600061343984828501613400565b91505092915050565b60008060006060848603121561345b5761345a613138565b5b600061346986828701613159565b935050602061347a86828701613159565b925050604061348b8682870161331f565b9150509250925092565b60006134a0826130cb565b9050919050565b6134b081613495565b81146134bb57600080fd5b50565b6000813590506134cd816134a7565b92915050565b600080604083850312156134ea576134e9613138565b5b60006134f8858286016134be565b925050602061350985828601613159565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135558261329c565b810181811067ffffffffffffffff821117156135745761357361351d565b5b80604052505050565b600061358761312e565b9050613593828261354c565b919050565b600067ffffffffffffffff8211156135b3576135b261351d565b5b6135bc8261329c565b9050602081019050919050565b82818337600083830152505050565b60006135eb6135e684613598565b61357d565b90508281526020810184848401111561360757613606613518565b5b6136128482856135c9565b509392505050565b600082601f83011261362f5761362e613513565b5b813561363f8482602086016135d8565b91505092915050565b60006020828403121561365e5761365d613138565b5b600082013567ffffffffffffffff81111561367c5761367b61313d565b5b6136888482850161361a565b91505092915050565b600080604083850312156136a8576136a7613138565b5b60006136b68582860161331f565b92505060206136c785828601613159565b9150509250929050565b6136da81613220565b81146136e557600080fd5b50565b6000813590506136f7816136d1565b92915050565b6000806040838503121561371457613713613138565b5b600061372285828601613159565b9250506020613733858286016136e8565b9150509250929050565b600067ffffffffffffffff8211156137585761375761351d565b5b6137618261329c565b9050602081019050919050565b600061378161377c8461373d565b61357d565b90508281526020810184848401111561379d5761379c613518565b5b6137a88482856135c9565b509392505050565b600082601f8301126137c5576137c4613513565b5b81356137d584826020860161376e565b91505092915050565b600080600080608085870312156137f8576137f7613138565b5b600061380687828801613159565b945050602061381787828801613159565b93505060406138288782880161331f565b925050606085013567ffffffffffffffff8111156138495761384861313d565b5b613855878288016137b0565b91505092959194509250565b60006020828403121561387757613876613138565b5b6000613885848285016134be565b91505092915050565b600080604083850312156138a5576138a4613138565b5b60006138b385828601613159565b92505060206138c485828601613159565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061391557607f821691505b602082108103613928576139276138ce565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061398a602183613261565b91506139958261392e565b604082019050919050565b600060208201905081810360008301526139b98161397d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613a1c603e83613261565b9150613a27826139c0565b604082019050919050565b60006020820190508181036000830152613a4b81613a0f565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060008201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b6000613aae602683613261565b9150613ab982613a52565b604082019050919050565b60006020820190508181036000830152613add81613aa1565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060008201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b6000613b40602b83613261565b9150613b4b82613ae4565b604082019050919050565b60006020820190508181036000830152613b6f81613b33565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bb0826130ec565b9150613bbb836130ec565b9250828201905080821115613bd357613bd2613b76565b5b92915050565b6000819050919050565b6000613bfe613bf9613bf4846130ab565b613bd9565b6130ab565b9050919050565b6000613c1082613be3565b9050919050565b6000613c2282613c05565b9050919050565b613c3281613c17565b82525050565b6000604082019050613c4d6000830185613c29565b613c5a60208301846130f6565b9392505050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613cbd602e83613261565b9150613cc882613c61565b604082019050919050565b60006020820190508181036000830152613cec81613cb0565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613d557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613d18565b613d5f8683613d18565b95508019841693508086168417925050509392505050565b6000613d92613d8d613d88846130ec565b613bd9565b6130ec565b9050919050565b6000819050919050565b613dac83613d77565b613dc0613db882613d99565b848454613d25565b825550505050565b600090565b613dd5613dc8565b613de0818484613da3565b505050565b5b81811015613e0457613df9600082613dcd565b600181019050613de6565b5050565b601f821115613e4957613e1a81613cf3565b613e2384613d08565b81016020851015613e32578190505b613e46613e3e85613d08565b830182613de5565b50505b505050565b600082821c905092915050565b6000613e6c60001984600802613e4e565b1980831691505092915050565b6000613e858383613e5b565b9150826002028217905092915050565b613e9e82613256565b67ffffffffffffffff811115613eb757613eb661351d565b5b613ec182546138fd565b613ecc828285613e08565b600060209050601f831160018114613eff5760008415613eed578287015190505b613ef78582613e79565b865550613f5f565b601f198416613f0d86613cf3565b60005b82811015613f3557848901518255600182019150602085019450602081019050613f10565b86831015613f525784890151613f4e601f891682613e5b565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613f9d601883613261565b9150613fa882613f67565b602082019050919050565b60006020820190508181036000830152613fcc81613f90565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061402f602983613261565b915061403a82613fd3565b604082019050919050565b6000602082019050818103600083015261405e81614022565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e6f742061646d696e0000000000000000000000000000000000000000000000600082015250565b60006140ca600983613261565b91506140d582614094565b602082019050919050565b600060208201905081810360008301526140f9816140bd565b9050919050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000614136601283613261565b915061414182614100565b602082019050919050565b6000602082019050818103600083015261416581614129565b9050919050565b6000614177826130ec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141a9576141a8613b76565b5b600182019050919050565b7f53616c6520696e61637469766500000000000000000000000000000000000000600082015250565b60006141ea600d83613261565b91506141f5826141b4565b602082019050919050565b60006020820190508181036000830152614219816141dd565b9050919050565b7f546f6f206d616e79206d696e7473207065722074786e00000000000000000000600082015250565b6000614256601683613261565b915061426182614220565b602082019050919050565b6000602082019050818103600083015261428581614249565b9050919050565b6000614297826130ec565b91506142a2836130ec565b92508282026142b0816130ec565b915082820484148315176142c7576142c6613b76565b5b5092915050565b7f4e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b6000614304601083613261565b915061430f826142ce565b602082019050919050565b60006020820190508181036000830152614333816142f7565b9050919050565b7f4e6f20636f6e7472616374206d696e7473000000000000000000000000000000600082015250565b6000614370601183613261565b915061437b8261433a565b602082019050919050565b6000602082019050818103600083015261439f81614363565b9050919050565b6000815190506143b581613308565b92915050565b6000602082840312156143d1576143d0613138565b5b60006143df848285016143a6565b91505092915050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b600061441e601f83613261565b9150614429826143e8565b602082019050919050565b6000602082019050818103600083015261444d81614411565b9050919050565b600081905092915050565b6000815461446c816138fd565b6144768186614454565b9450600182166000811461449157600181146144a6576144d9565b60ff19831686528115158202860193506144d9565b6144af85613cf3565b60005b838110156144d1578154818901526001820191506020810190506144b2565b838801955050505b50505092915050565b60006144ed82613256565b6144f78185614454565b9350614507818560208601613272565b80840191505092915050565b600061451f828561445f565b915061452b82846144e2565b91508190509392505050565b600061454a61454584613598565b61357d565b90508281526020810184848401111561456657614565613518565b5b614571848285613272565b509392505050565b600082601f83011261458e5761458d613513565b5b815161459e848260208601614537565b91505092915050565b6000602082840312156145bd576145bc613138565b5b600082015167ffffffffffffffff8111156145db576145da61313d565b5b6145e784828501614579565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061464c602683613261565b9150614657826145f0565b604082019050919050565b6000602082019050818103600083015261467b8161463f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146b8602083613261565b91506146c382614682565b602082019050919050565b600060208201905081810360008301526146e7816146ab565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614724601d83613261565b915061472f826146ee565b602082019050919050565b6000602082019050818103600083015261475381614717565b9050919050565b600081905092915050565b50565b600061477560008361475a565b915061478082614765565b600082019050919050565b600061479682614768565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006147fc603a83613261565b9150614807826147a0565b604082019050919050565b6000602082019050818103600083015261482b816147ef565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061488e602583613261565b915061489982614832565b604082019050919050565b600060208201905081810360008301526148bd81614881565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614920602483613261565b915061492b826148c4565b604082019050919050565b6000602082019050818103600083015261494f81614913565b9050919050565b6000614961826130ec565b915061496c836130ec565b925082820390508181111561498457614983613b76565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006149c0601983613261565b91506149cb8261498a565b602082019050919050565b600060208201905081810360008301526149ef816149b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a30826130ec565b9150614a3b836130ec565b925082614a4b57614a4a6149f6565b5b828204905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614ab2603283613261565b9150614abd82614a56565b604082019050919050565b60006020820190508181036000830152614ae181614aa5565b9050919050565b6000614af3826130ec565b9150614afe836130ec565b925082614b0e57614b0d6149f6565b5b828206905092915050565b600081519050614b28816136d1565b92915050565b600060208284031215614b4457614b43613138565b5b6000614b5284828501614b19565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614bb7602a83613261565b9150614bc282614b5b565b604082019050919050565b60006020820190508181036000830152614be681614baa565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614c1482614bed565b614c1e8185614bf8565b9350614c2e818560208601613272565b614c378161329c565b840191505092915050565b6000608082019050614c5760008301876130dd565b614c6460208301866130dd565b614c7160408301856130f6565b8181036060830152614c838184614c09565b905095945050505050565b600081519050614c9d816131c7565b92915050565b600060208284031215614cb957614cb8613138565b5b6000614cc784828501614c8e565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614d06602083613261565b9150614d1182614cd0565b602082019050919050565b60006020820190508181036000830152614d3581614cf9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614d72601c83613261565b9150614d7d82614d3c565b602082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614e04602683613261565b9150614e0f82614da8565b604082019050919050565b60006020820190508181036000830152614e3381614df7565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614e70601d83613261565b9150614e7b82614e3a565b602082019050919050565b60006020820190508181036000830152614e9f81614e63565b9050919050565b6000614eb182614bed565b614ebb818561475a565b9350614ecb818560208601613272565b80840191505092915050565b6000614ee38284614ea6565b91508190509291505056fea26469706673582212206b0c70446d96c86ce3a34faa5d5392083ea82882be2e6cadde9af17e06f5f2de64736f6c63430008110033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d9fc82341bdd5387c4c6c8c487e054778c41b72e00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x6080604052600436106102605760003560e01c80637d8966e411610144578063b88d4fde116100b6578063dc30158b1161007a578063dc30158b1461097e578063e33b7de3146109a9578063e8315742146109d4578063e985e9c5146109ff578063f2fde38b14610a3c578063f7c64f9e14610a65576102a7565b8063b88d4fde14610861578063c45ac0501461088a578063c87b56dd146108c7578063ce7c2ac214610904578063d79779b214610941576102a7565b80639852595c116101085780639852595c1461074e5780639d034fe91461078b578063a035b1fe146107b4578063a0712d68146107df578063a22cb465146107fb578063a3f8eace14610824576102a7565b80637d8966e41461067b5780638b83209b146106925780638da5cb5b146106cf57806391b7f5ed146106fa57806395d89b4114610723576102a7565b8063406072a9116101dd5780636352211e116101a15780636352211e1461056b57806368428a1b146105a85780636c0360eb146105d3578063704b6c02146105fe57806370a0823114610627578063715018a614610664576102a7565b8063406072a91461047657806342842e0e146104b3578063429b62e5146104dc57806348b750441461051957806355f804b314610542576102a7565b806318160ddd1161022457806318160ddd146103a357806319165587146103ce57806323b872dd146103f7578063303e74df146104205780633a98ef391461044b576102a7565b806301b9a397146102ac57806301ffc9a7146102d557806306fdde0314610312578063081812fc1461033d578063095ea7b31461037a576102a7565b366102a7577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77061028e610a8e565b3460405161029d929190613105565b60405180910390a1005b600080fd5b3480156102b857600080fd5b506102d360048036038101906102ce919061316e565b610a96565b005b3480156102e157600080fd5b506102fc60048036038101906102f791906131f3565b610ae2565b604051610309919061323b565b60405180910390f35b34801561031e57600080fd5b50610327610bc4565b60405161033491906132e6565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190613334565b610c56565b6040516103719190613361565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c919061337c565b610c9c565b005b3480156103af57600080fd5b506103b8610db3565b6040516103c591906133bc565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613415565b610dbd565b005b34801561040357600080fd5b5061041e60048036038101906104199190613442565b610f45565b005b34801561042c57600080fd5b50610435610fa5565b6040516104429190613361565b60405180910390f35b34801561045757600080fd5b50610460610fcb565b60405161046d91906133bc565b60405180910390f35b34801561048257600080fd5b5061049d600480360381019061049891906134d3565b610fd5565b6040516104aa91906133bc565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190613442565b61105c565b005b3480156104e857600080fd5b5061050360048036038101906104fe919061316e565b61107c565b604051610510919061323b565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b91906134d3565b61109c565b005b34801561054e57600080fd5b5061056960048036038101906105649190613648565b6112b8565b005b34801561057757600080fd5b50610592600480360381019061058d9190613334565b6112d3565b60405161059f9190613361565b60405180910390f35b3480156105b457600080fd5b506105bd611384565b6040516105ca919061323b565b60405180910390f35b3480156105df57600080fd5b506105e8611397565b6040516105f591906132e6565b60405180910390f35b34801561060a57600080fd5b506106256004803603810190610620919061316e565b611425565b005b34801561063357600080fd5b5061064e6004803603810190610649919061316e565b6114d4565b60405161065b91906133bc565b60405180910390f35b34801561067057600080fd5b5061067961158b565b005b34801561068757600080fd5b5061069061159f565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613334565b6115d3565b6040516106c69190613361565b60405180910390f35b3480156106db57600080fd5b506106e461161b565b6040516106f19190613361565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190613334565b611644565b005b34801561072f57600080fd5b50610738611656565b60405161074591906132e6565b60405180910390f35b34801561075a57600080fd5b506107756004803603810190610770919061316e565b6116e8565b60405161078291906133bc565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad9190613691565b611731565b005b3480156107c057600080fd5b506107c9611894565b6040516107d691906133bc565b60405180910390f35b6107f960048036038101906107f49190613334565b61189a565b005b34801561080757600080fd5b50610822600480360381019061081d91906136fd565b611a7e565b005b34801561083057600080fd5b5061084b6004803603810190610846919061316e565b611a94565b60405161085891906133bc565b60405180910390f35b34801561086d57600080fd5b50610888600480360381019061088391906137de565b611ac7565b005b34801561089657600080fd5b506108b160048036038101906108ac91906134d3565b611b29565b6040516108be91906133bc565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e99190613334565b611bd8565b6040516108fb91906132e6565b60405180910390f35b34801561091057600080fd5b5061092b6004803603810190610926919061316e565b611d53565b60405161093891906133bc565b60405180910390f35b34801561094d57600080fd5b5061096860048036038101906109639190613861565b611d9c565b60405161097591906133bc565b60405180910390f35b34801561098a57600080fd5b50610993611de5565b6040516109a091906133bc565b60405180910390f35b3480156109b557600080fd5b506109be611deb565b6040516109cb91906133bc565b60405180910390f35b3480156109e057600080fd5b506109e9611df5565b6040516109f691906133bc565b60405180910390f35b348015610a0b57600080fd5b50610a266004803603810190610a21919061388e565b611dfb565b604051610a33919061323b565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e919061316e565b611e8f565b005b348015610a7157600080fd5b50610a8c6004803603810190610a879190613334565b611f12565b005b600033905090565b610a9e611f24565b80601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bad57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bbd5750610bbc82611fa2565b5b9050919050565b606060018054610bd3906138fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff906138fd565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b5050505050905090565b6000610c618261200c565b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ca7826112d3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e906139a0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d36610a8e565b73ffffffffffffffffffffffffffffffffffffffff161480610d655750610d6481610d5f610a8e565b611dfb565b5b610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90613a32565b60405180910390fd5b610dae8383612057565b505050565b6000601354905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3690613ac4565b60405180910390fd5b6000610e4a82611a94565b905060008103610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690613b56565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ede9190613ba5565b925050819055508060086000828254610ef79190613ba5565b92505081905550610f088282612110565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b0568282604051610f39929190613c38565b60405180910390a15050565b610f56610f50610a8e565b82612204565b610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90613cd3565b60405180910390fd5b610fa0838383612299565b505050565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61107783838360405180602001604052806000815250611ac7565b505050565b60146020528060005260406000206000915054906101000a900460ff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111590613ac4565b60405180910390fd5b600061112a8383611b29565b90506000810361116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690613b56565b60405180910390fd5b80600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111fb9190613ba5565b9250508190555080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112519190613ba5565b925050819055506112638383836124ff565b8273ffffffffffffffffffffffffffffffffffffffff167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a83836040516112ab929190613105565b60405180910390a2505050565b6112c0611f24565b80601290816112cf9190613e95565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290613fb3565b60405180910390fd5b80915050919050565b601160009054906101000a900460ff1681565b601280546113a4906138fd565b80601f01602080910402602001604051908101604052809291908181526020018280546113d0906138fd565b801561141d5780601f106113f25761010080835404028352916020019161141d565b820191906000526020600020905b81548152906001019060200180831161140057829003601f168201915b505050505081565b61142d611f24565b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90614045565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611593611f24565b61159d6000612585565b565b6115a7611f24565b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6000600b82815481106115e9576115e8614065565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61164c611f24565b8060108190555050565b606060028054611665906138fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611691906138fd565b80156116de5780601f106116b3576101008083540402835291602001916116de565b820191906000526020600020905b8154815290600101906020018083116116c157829003601f168201915b5050505050905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611739610a8e565b73ffffffffffffffffffffffffffffffffffffffff1661175761161b565b73ffffffffffffffffffffffffffffffffffffffff1614806117c25750601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f8906140e0565b60405180910390fd5b600e54826013546118129190613ba5565b1115611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a9061414c565b60405180910390fd5b60005b8281101561188f5761187c826013600081546118719061416c565b919050819055612649565b80806118879061416c565b915050611856565b505050565b60105481565b601160009054906101000a900460ff166118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090614200565b60405180910390fd5b600f5481111561192e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119259061426c565b60405180910390fd5b600e548160135461193f9190613ba5565b1115611980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119779061414c565b60405180910390fd5b8060105461198e919061428c565b3410156119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c79061431a565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3590614386565b60405180910390fd5b60005b81811015611a7a57611a6733601360008154611a5c9061416c565b919050819055612649565b8080611a729061416c565b915050611a41565b5050565b611a90611a89610a8e565b8383612667565b5050565b600080611a9f611deb565b47611aaa9190613ba5565b9050611abf8382611aba866116e8565b6127d3565b915050919050565b611ad8611ad2610a8e565b83612204565b611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90613cd3565b60405180910390fd5b611b2384848484612841565b50505050565b600080611b3584611d9c565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b6e9190613361565b602060405180830381865afa158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf91906143bb565b611bb99190613ba5565b9050611bcf8382611bca8787610fd5565b6127d3565b91505092915050565b6060611be38261289d565b611c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1990614434565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611caa576012611c8383612909565b604051602001611c94929190614513565b6040516020818303038152906040529050611d4e565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b8152600401611d0591906133bc565b600060405180830381865afa158015611d22573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611d4b91906145a7565b90505b919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600f5481565b6000600854905090565b600e5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e97611f24565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd90614662565b60405180910390fd5b611f0f81612585565b50565b611f1a611f24565b80600f8190555050565b611f2c610a8e565b73ffffffffffffffffffffffffffffffffffffffff16611f4a61161b565b73ffffffffffffffffffffffffffffffffffffffff1614611fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f97906146ce565b60405180910390fd5b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6120158161289d565b612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b90613fb3565b60405180910390fd5b50565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120ca836112d3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b80471015612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a9061473a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516121799061478b565b60006040518083038185875af1925050503d80600081146121b6576040519150601f19603f3d011682016040523d82523d6000602084013e6121bb565b606091505b50509050806121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f690614812565b60405180910390fd5b505050565b600080612210836112d3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061225257506122518185611dfb565b5b8061229057508373ffffffffffffffffffffffffffffffffffffffff1661227884610c56565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122b9826112d3565b73ffffffffffffffffffffffffffffffffffffffff161461230f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612306906148a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361237e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237590614936565b60405180910390fd5b612389838383612a69565b612394600082612057565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123e49190614956565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461243b9190613ba5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124fa838383612a6e565b505050565b6125808363a9059cbb60e01b848460405160240161251e929190613105565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612a73565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612663828260405180602001604052806000815250612b3a565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cc906149d6565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127c6919061323b565b60405180910390a3505050565b600081600754600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485612824919061428c565b61282e9190614a25565b6128389190614956565b90509392505050565b61284c848484612299565b61285884848484612b95565b612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e90614ac8565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060008203612950576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a64565b600082905060005b6000821461298257808061296b9061416c565b915050600a8261297b9190614a25565b9150612958565b60008167ffffffffffffffff81111561299e5761299d61351d565b5b6040519080825280601f01601f1916602001820160405280156129d05781602001600182028036833780820191505090505b5090505b60008514612a5d576001826129e99190614956565b9150600a856129f89190614ae8565b6030612a049190613ba5565b60f81b818381518110612a1a57612a19614065565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a569190614a25565b94506129d4565b8093505050505b919050565b505050565b505050565b6000612ad5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612d1c9092919063ffffffff16565b9050600081511115612b355780806020019051810190612af59190614b2e565b612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90614bcd565b60405180910390fd5b5b505050565b612b448383612d34565b612b516000848484612b95565b612b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8790614ac8565b60405180910390fd5b505050565b6000612bb68473ffffffffffffffffffffffffffffffffffffffff16612f0d565b15612d0f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612bdf610a8e565b8786866040518563ffffffff1660e01b8152600401612c019493929190614c42565b6020604051808303816000875af1925050508015612c3d57506040513d601f19601f82011682018060405250810190612c3a9190614ca3565b60015b612cbf573d8060008114612c6d576040519150601f19603f3d011682016040523d82523d6000602084013e612c72565b606091505b506000815103612cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cae90614ac8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d14565b600190505b949350505050565b6060612d2b8484600085612f30565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9a90614d1c565b60405180910390fd5b612dac8161289d565b15612dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de390614d88565b60405180910390fd5b612df860008383612a69565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e489190613ba5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f0960008383612a6e565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606082471015612f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6c90614e1a565b60405180910390fd5b612f7e85612f0d565b612fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb490614e86565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612fe69190614ed7565b60006040518083038185875af1925050503d8060008114613023576040519150601f19603f3d011682016040523d82523d6000602084013e613028565b606091505b5091509150613038828286613044565b92505050949350505050565b60608315613054578290506130a4565b6000835111156130675782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309b91906132e6565b60405180910390fd5b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130d6826130ab565b9050919050565b6130e6816130cb565b82525050565b6000819050919050565b6130ff816130ec565b82525050565b600060408201905061311a60008301856130dd565b61312760208301846130f6565b9392505050565b6000604051905090565b600080fd5b600080fd5b61314b816130cb565b811461315657600080fd5b50565b60008135905061316881613142565b92915050565b60006020828403121561318457613183613138565b5b600061319284828501613159565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131d08161319b565b81146131db57600080fd5b50565b6000813590506131ed816131c7565b92915050565b60006020828403121561320957613208613138565b5b6000613217848285016131de565b91505092915050565b60008115159050919050565b61323581613220565b82525050565b6000602082019050613250600083018461322c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613290578082015181840152602081019050613275565b60008484015250505050565b6000601f19601f8301169050919050565b60006132b882613256565b6132c28185613261565b93506132d2818560208601613272565b6132db8161329c565b840191505092915050565b6000602082019050818103600083015261330081846132ad565b905092915050565b613311816130ec565b811461331c57600080fd5b50565b60008135905061332e81613308565b92915050565b60006020828403121561334a57613349613138565b5b60006133588482850161331f565b91505092915050565b600060208201905061337660008301846130dd565b92915050565b6000806040838503121561339357613392613138565b5b60006133a185828601613159565b92505060206133b28582860161331f565b9150509250929050565b60006020820190506133d160008301846130f6565b92915050565b60006133e2826130ab565b9050919050565b6133f2816133d7565b81146133fd57600080fd5b50565b60008135905061340f816133e9565b92915050565b60006020828403121561342b5761342a613138565b5b600061343984828501613400565b91505092915050565b60008060006060848603121561345b5761345a613138565b5b600061346986828701613159565b935050602061347a86828701613159565b925050604061348b8682870161331f565b9150509250925092565b60006134a0826130cb565b9050919050565b6134b081613495565b81146134bb57600080fd5b50565b6000813590506134cd816134a7565b92915050565b600080604083850312156134ea576134e9613138565b5b60006134f8858286016134be565b925050602061350985828601613159565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135558261329c565b810181811067ffffffffffffffff821117156135745761357361351d565b5b80604052505050565b600061358761312e565b9050613593828261354c565b919050565b600067ffffffffffffffff8211156135b3576135b261351d565b5b6135bc8261329c565b9050602081019050919050565b82818337600083830152505050565b60006135eb6135e684613598565b61357d565b90508281526020810184848401111561360757613606613518565b5b6136128482856135c9565b509392505050565b600082601f83011261362f5761362e613513565b5b813561363f8482602086016135d8565b91505092915050565b60006020828403121561365e5761365d613138565b5b600082013567ffffffffffffffff81111561367c5761367b61313d565b5b6136888482850161361a565b91505092915050565b600080604083850312156136a8576136a7613138565b5b60006136b68582860161331f565b92505060206136c785828601613159565b9150509250929050565b6136da81613220565b81146136e557600080fd5b50565b6000813590506136f7816136d1565b92915050565b6000806040838503121561371457613713613138565b5b600061372285828601613159565b9250506020613733858286016136e8565b9150509250929050565b600067ffffffffffffffff8211156137585761375761351d565b5b6137618261329c565b9050602081019050919050565b600061378161377c8461373d565b61357d565b90508281526020810184848401111561379d5761379c613518565b5b6137a88482856135c9565b509392505050565b600082601f8301126137c5576137c4613513565b5b81356137d584826020860161376e565b91505092915050565b600080600080608085870312156137f8576137f7613138565b5b600061380687828801613159565b945050602061381787828801613159565b93505060406138288782880161331f565b925050606085013567ffffffffffffffff8111156138495761384861313d565b5b613855878288016137b0565b91505092959194509250565b60006020828403121561387757613876613138565b5b6000613885848285016134be565b91505092915050565b600080604083850312156138a5576138a4613138565b5b60006138b385828601613159565b92505060206138c485828601613159565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061391557607f821691505b602082108103613928576139276138ce565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061398a602183613261565b91506139958261392e565b604082019050919050565b600060208201905081810360008301526139b98161397d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613a1c603e83613261565b9150613a27826139c0565b604082019050919050565b60006020820190508181036000830152613a4b81613a0f565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060008201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b6000613aae602683613261565b9150613ab982613a52565b604082019050919050565b60006020820190508181036000830152613add81613aa1565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060008201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b6000613b40602b83613261565b9150613b4b82613ae4565b604082019050919050565b60006020820190508181036000830152613b6f81613b33565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bb0826130ec565b9150613bbb836130ec565b9250828201905080821115613bd357613bd2613b76565b5b92915050565b6000819050919050565b6000613bfe613bf9613bf4846130ab565b613bd9565b6130ab565b9050919050565b6000613c1082613be3565b9050919050565b6000613c2282613c05565b9050919050565b613c3281613c17565b82525050565b6000604082019050613c4d6000830185613c29565b613c5a60208301846130f6565b9392505050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613cbd602e83613261565b9150613cc882613c61565b604082019050919050565b60006020820190508181036000830152613cec81613cb0565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613d557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613d18565b613d5f8683613d18565b95508019841693508086168417925050509392505050565b6000613d92613d8d613d88846130ec565b613bd9565b6130ec565b9050919050565b6000819050919050565b613dac83613d77565b613dc0613db882613d99565b848454613d25565b825550505050565b600090565b613dd5613dc8565b613de0818484613da3565b505050565b5b81811015613e0457613df9600082613dcd565b600181019050613de6565b5050565b601f821115613e4957613e1a81613cf3565b613e2384613d08565b81016020851015613e32578190505b613e46613e3e85613d08565b830182613de5565b50505b505050565b600082821c905092915050565b6000613e6c60001984600802613e4e565b1980831691505092915050565b6000613e858383613e5b565b9150826002028217905092915050565b613e9e82613256565b67ffffffffffffffff811115613eb757613eb661351d565b5b613ec182546138fd565b613ecc828285613e08565b600060209050601f831160018114613eff5760008415613eed578287015190505b613ef78582613e79565b865550613f5f565b601f198416613f0d86613cf3565b60005b82811015613f3557848901518255600182019150602085019450602081019050613f10565b86831015613f525784890151613f4e601f891682613e5b565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613f9d601883613261565b9150613fa882613f67565b602082019050919050565b60006020820190508181036000830152613fcc81613f90565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061402f602983613261565b915061403a82613fd3565b604082019050919050565b6000602082019050818103600083015261405e81614022565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e6f742061646d696e0000000000000000000000000000000000000000000000600082015250565b60006140ca600983613261565b91506140d582614094565b602082019050919050565b600060208201905081810360008301526140f9816140bd565b9050919050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000614136601283613261565b915061414182614100565b602082019050919050565b6000602082019050818103600083015261416581614129565b9050919050565b6000614177826130ec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141a9576141a8613b76565b5b600182019050919050565b7f53616c6520696e61637469766500000000000000000000000000000000000000600082015250565b60006141ea600d83613261565b91506141f5826141b4565b602082019050919050565b60006020820190508181036000830152614219816141dd565b9050919050565b7f546f6f206d616e79206d696e7473207065722074786e00000000000000000000600082015250565b6000614256601683613261565b915061426182614220565b602082019050919050565b6000602082019050818103600083015261428581614249565b9050919050565b6000614297826130ec565b91506142a2836130ec565b92508282026142b0816130ec565b915082820484148315176142c7576142c6613b76565b5b5092915050565b7f4e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b6000614304601083613261565b915061430f826142ce565b602082019050919050565b60006020820190508181036000830152614333816142f7565b9050919050565b7f4e6f20636f6e7472616374206d696e7473000000000000000000000000000000600082015250565b6000614370601183613261565b915061437b8261433a565b602082019050919050565b6000602082019050818103600083015261439f81614363565b9050919050565b6000815190506143b581613308565b92915050565b6000602082840312156143d1576143d0613138565b5b60006143df848285016143a6565b91505092915050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b600061441e601f83613261565b9150614429826143e8565b602082019050919050565b6000602082019050818103600083015261444d81614411565b9050919050565b600081905092915050565b6000815461446c816138fd565b6144768186614454565b9450600182166000811461449157600181146144a6576144d9565b60ff19831686528115158202860193506144d9565b6144af85613cf3565b60005b838110156144d1578154818901526001820191506020810190506144b2565b838801955050505b50505092915050565b60006144ed82613256565b6144f78185614454565b9350614507818560208601613272565b80840191505092915050565b600061451f828561445f565b915061452b82846144e2565b91508190509392505050565b600061454a61454584613598565b61357d565b90508281526020810184848401111561456657614565613518565b5b614571848285613272565b509392505050565b600082601f83011261458e5761458d613513565b5b815161459e848260208601614537565b91505092915050565b6000602082840312156145bd576145bc613138565b5b600082015167ffffffffffffffff8111156145db576145da61313d565b5b6145e784828501614579565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061464c602683613261565b9150614657826145f0565b604082019050919050565b6000602082019050818103600083015261467b8161463f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146b8602083613261565b91506146c382614682565b602082019050919050565b600060208201905081810360008301526146e7816146ab565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614724601d83613261565b915061472f826146ee565b602082019050919050565b6000602082019050818103600083015261475381614717565b9050919050565b600081905092915050565b50565b600061477560008361475a565b915061478082614765565b600082019050919050565b600061479682614768565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006147fc603a83613261565b9150614807826147a0565b604082019050919050565b6000602082019050818103600083015261482b816147ef565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061488e602583613261565b915061489982614832565b604082019050919050565b600060208201905081810360008301526148bd81614881565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614920602483613261565b915061492b826148c4565b604082019050919050565b6000602082019050818103600083015261494f81614913565b9050919050565b6000614961826130ec565b915061496c836130ec565b925082820390508181111561498457614983613b76565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006149c0601983613261565b91506149cb8261498a565b602082019050919050565b600060208201905081810360008301526149ef816149b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a30826130ec565b9150614a3b836130ec565b925082614a4b57614a4a6149f6565b5b828204905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614ab2603283613261565b9150614abd82614a56565b604082019050919050565b60006020820190508181036000830152614ae181614aa5565b9050919050565b6000614af3826130ec565b9150614afe836130ec565b925082614b0e57614b0d6149f6565b5b828206905092915050565b600081519050614b28816136d1565b92915050565b600060208284031215614b4457614b43613138565b5b6000614b5284828501614b19565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614bb7602a83613261565b9150614bc282614b5b565b604082019050919050565b60006020820190508181036000830152614be681614baa565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614c1482614bed565b614c1e8185614bf8565b9350614c2e818560208601613272565b614c378161329c565b840191505092915050565b6000608082019050614c5760008301876130dd565b614c6460208301866130dd565b614c7160408301856130f6565b8181036060830152614c838184614c09565b905095945050505050565b600081519050614c9d816131c7565b92915050565b600060208284031215614cb957614cb8613138565b5b6000614cc784828501614c8e565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614d06602083613261565b9150614d1182614cd0565b602082019050919050565b60006020820190508181036000830152614d3581614cf9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614d72601c83613261565b9150614d7d82614d3c565b602082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614e04602683613261565b9150614e0f82614da8565b604082019050919050565b60006020820190508181036000830152614e3381614df7565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614e70601d83613261565b9150614e7b82614e3a565b602082019050919050565b60006020820190508181036000830152614e9f81614e63565b9050919050565b6000614eb182614bed565b614ebb818561475a565b9350614ecb818560208601613272565b80840191505092915050565b6000614ee38284614ea6565b91508190509291505056fea26469706673582212206b0c70446d96c86ce3a34faa5d5392083ea82882be2e6cadde9af17e06f5f2de64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d9fc82341bdd5387c4c6c8c487e054778c41b72e00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : payees (address[]): 0xD9FC82341bDD5387c4c6c8C487e054778C41b72E
Arg [1] : shares (uint256[]): 1
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 000000000000000000000000d9fc82341bdd5387c4c6c8c487e054778c41b72e
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode Sourcemap
56449:3546:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34199:40;34215:12;:10;:12::i;:::-;34229:9;34199:40;;;;;;;:::i;:::-;;;;;;;;56449:3546;;;;;58705:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40460:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41387:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42900:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42417:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58521:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36720:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43600:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56792:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34330:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35459:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44007:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56982:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37441:514;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58898:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41098:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56699:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56867:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59561:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40829:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55525:103;;;;;;;;;;;;;:::i;:::-;;59402:84;;;;;;;;;;;;;:::i;:::-;;35685:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54877:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59247:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41556:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35181:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59723:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56659:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57444:498;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43143:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35875:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44263:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36260:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58047:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34977:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34767:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56620:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34515:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56581:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43369:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55783:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59081:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30620:98;30673:7;30700:10;30693:17;;30620:98;:::o;58705:106::-;54763:13;:11;:13::i;:::-;58792:11:::1;58779:10;;:24;;;;;;;;;;;;;;;;;;58705:106:::0;:::o;40460:305::-;40562:4;40614:25;40599:40;;;:11;:40;;;;:105;;;;40671:33;40656:48;;;:11;:48;;;;40599:105;:158;;;;40721:36;40745:11;40721:23;:36::i;:::-;40599:158;40579:178;;40460:305;;;:::o;41387:100::-;41441:13;41474:5;41467:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41387:100;:::o;42900:171::-;42976:7;42996:23;43011:7;42996:14;:23::i;:::-;43039:15;:24;43055:7;43039:24;;;;;;;;;;;;;;;;;;;;;43032:31;;42900:171;;;:::o;42417:417::-;42498:13;42514:23;42529:7;42514:14;:23::i;:::-;42498:39;;42562:5;42556:11;;:2;:11;;;42548:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;42656:5;42640:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;42665:37;42682:5;42689:12;:10;:12::i;:::-;42665:16;:37::i;:::-;42640:62;42618:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;42805:21;42814:2;42818:7;42805:8;:21::i;:::-;42487:347;42417:417;;:::o;58521:91::-;58567:7;58594:10;;58587:17;;58521:91;:::o;36720:453::-;36815:1;36796:7;:16;36804:7;36796:16;;;;;;;;;;;;;;;;:20;36788:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36872:15;36890:19;36901:7;36890:10;:19::i;:::-;36872:37;;36941:1;36930:7;:12;36922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37025:7;37003:9;:18;37013:7;37003:18;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;37061:7;37043:14;;:25;;;;;;;:::i;:::-;;;;;;;;37081:35;37099:7;37108;37081:17;:35::i;:::-;37132:33;37148:7;37157;37132:33;;;;;;;:::i;:::-;;;;;;;;36777:396;36720:453;:::o;43600:336::-;43795:41;43814:12;:10;:12::i;:::-;43828:7;43795:18;:41::i;:::-;43787:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;43900:28;43910:4;43916:2;43920:7;43900:9;:28::i;:::-;43600:336;;;:::o;56792:25::-;;;;;;;;;;;;;:::o;34330:91::-;34374:7;34401:12;;34394:19;;34330:91;:::o;35459:135::-;35529:7;35556:14;:21;35571:5;35556:21;;;;;;;;;;;;;;;:30;35578:7;35556:30;;;;;;;;;;;;;;;;35549:37;;35459:135;;;;:::o;44007:185::-;44145:39;44162:4;44168:2;44172:7;44145:39;;;;;;;;;;;;:16;:39::i;:::-;44007:185;;;:::o;56982:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;37441:514::-;37542:1;37523:7;:16;37531:7;37523:16;;;;;;;;;;;;;;;;:20;37515:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37599:15;37617:26;37628:5;37635:7;37617:10;:26::i;:::-;37599:44;;37675:1;37664:7;:12;37656:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37771:7;37737:14;:21;37752:5;37737:21;;;;;;;;;;;;;;;:30;37759:7;37737:30;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;37819:7;37789:19;:26;37809:5;37789:26;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;37839:47;37862:5;37869:7;37878;37839:22;:47::i;:::-;37923:5;37902:45;;;37930:7;37939;37902:45;;;;;;;:::i;:::-;;;;;;;;37504:451;37441:514;;:::o;58898:100::-;54763:13;:11;:13::i;:::-;58982:8:::1;58972:7;:18;;;;;;:::i;:::-;;58898:100:::0;:::o;41098:222::-;41170:7;41190:13;41206:7;:16;41214:7;41206:16;;;;;;;;;;;;;;;;;;;;;41190:32;;41258:1;41241:19;;:5;:19;;;41233:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41307:5;41300:12;;;41098:222;;;:::o;56699:22::-;;;;;;;;;;;;;:::o;56867:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;59561:110::-;54763:13;:11;:13::i;:::-;59647:6:::1;:16;59654:8;59647:16;;;;;;;;;;;;;;;;;;;;;;;;;59646:17;59627:6;:16;59634:8;59627:16;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;59561:110:::0;:::o;40829:207::-;40901:7;40946:1;40929:19;;:5;:19;;;40921:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41012:9;:16;41022:5;41012:16;;;;;;;;;;;;;;;;41005:23;;40829:207;;;:::o;55525:103::-;54763:13;:11;:13::i;:::-;55590:30:::1;55617:1;55590:18;:30::i;:::-;55525:103::o:0;59402:84::-;54763:13;:11;:13::i;:::-;59468:10:::1;;;;;;;;;;;59467:11;59454:10;;:24;;;;;;;;;;;;;;;;;;59402:84::o:0;35685:100::-;35736:7;35763;35771:5;35763:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35756:21;;35685:100;;;:::o;54877:87::-;54923:7;54950:6;;;;;;;;;;;54943:13;;54877:87;:::o;59247:96::-;54763:13;:11;:13::i;:::-;59324:11:::1;59316:5;:19;;;;59247:96:::0;:::o;41556:104::-;41612:13;41645:7;41638:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41556:104;:::o;35181:109::-;35237:7;35264:9;:18;35274:7;35264:18;;;;;;;;;;;;;;;;35257:25;;35181:109;;;:::o;59723:267::-;57165:12;:10;:12::i;:::-;57154:23;;:7;:5;:7::i;:::-;:23;;;:45;;;;57181:6;:18;57188:10;57181:18;;;;;;;;;;;;;;;;;;;;;;;;;57154:45;57146:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;59844:9:::1;;59832:8;59819:10;;:21;;;;:::i;:::-;:34;;59811:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;59895:9;59890:93;59914:8;59910:1;:12;59890:93;;;59944:27;59954:2;59960:10;;59958:12;;;;;:::i;:::-;;;;;;;59944:9;:27::i;:::-;59924:3;;;;;:::i;:::-;;;;59890:93;;;;59723:267:::0;;:::o;56659:32::-;;;;:::o;57444:498::-;57512:10;;;;;;;;;;;57504:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;57571:13;;57559:8;:25;;57551:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;57655:9;;57643:8;57630:10;;:21;;;;:::i;:::-;:34;;57622:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;57728:8;57720:5;;:16;;;;:::i;:::-;57707:9;:29;;57699:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;57790:9;57776:23;;:10;:23;;;57768:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;57839:9;57834:101;57858:8;57854:1;:12;57834:101;;;57888:35;57898:10;57912;;57910:12;;;;;:::i;:::-;;;;;;;57888:9;:35::i;:::-;57868:3;;;;;:::i;:::-;;;;57834:101;;;;57444:498;:::o;43143:155::-;43238:52;43257:12;:10;:12::i;:::-;43271:8;43281;43238:18;:52::i;:::-;43143:155;;:::o;35875:225::-;35933:7;35953:21;36001:15;:13;:15::i;:::-;35977:21;:39;;;;:::i;:::-;35953:63;;36034:58;36050:7;36059:13;36074:17;36083:7;36074:8;:17::i;:::-;36034:15;:58::i;:::-;36027:65;;;35875:225;;;:::o;44263:323::-;44437:41;44456:12;:10;:12::i;:::-;44470:7;44437:18;:41::i;:::-;44429:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;44540:38;44554:4;44560:2;44564:7;44573:4;44540:13;:38::i;:::-;44263:323;;;;:::o;36260:260::-;36332:7;36352:21;36409:20;36423:5;36409:13;:20::i;:::-;36376:5;:15;;;36400:4;36376:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;36352:77;;36447:65;36463:7;36472:13;36487:24;36496:5;36503:7;36487:8;:24::i;:::-;36447:15;:65::i;:::-;36440:72;;;36260:260;;;;:::o;58047:379::-;58112:13;58146:16;58154:7;58146;:16::i;:::-;58138:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;58237:1;58215:24;;:10;;;;;;;;;;;:24;;;58211:198;;58287:7;58296:18;:7;:16;:18::i;:::-;58270:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58256:60;;;;58211:198;58368:10;;;;;;;;;;;58356:32;;;58389:7;58356:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58349:48;;58047:379;;;;:::o;34977:105::-;35031:7;35058;:16;35066:7;35058:16;;;;;;;;;;;;;;;;35051:23;;34977:105;;;:::o;34767:119::-;34825:7;34852:19;:26;34872:5;34852:26;;;;;;;;;;;;;;;;34845:33;;34767:119;;;:::o;56620:32::-;;;;:::o;34515:95::-;34561:7;34588:14;;34581:21;;34515:95;:::o;56581:31::-;;;;:::o;43369:164::-;43466:4;43490:18;:25;43509:5;43490:25;;;;;;;;;;;;;;;:35;43516:8;43490:35;;;;;;;;;;;;;;;;;;;;;;;;;43483:42;;43369:164;;;;:::o;55783:201::-;54763:13;:11;:13::i;:::-;55892:1:::1;55872:22;;:8;:22;;::::0;55864:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;55948:28;55967:8;55948:18;:28::i;:::-;55783:201:::0;:::o;59081:103::-;54763:13;:11;:13::i;:::-;59170:6:::1;59154:13;:22;;;;59081:103:::0;:::o;55042:132::-;55117:12;:10;:12::i;:::-;55106:23;;:7;:5;:7::i;:::-;:23;;;55098:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55042:132::o;24090:157::-;24175:4;24214:25;24199:40;;;:11;:40;;;;24192:47;;24090:157;;;:::o;50875:135::-;50957:16;50965:7;50957;:16::i;:::-;50949:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;50875:135;:::o;50154:174::-;50256:2;50229:15;:24;50245:7;50229:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;50312:7;50308:2;50274:46;;50283:23;50298:7;50283:14;:23::i;:::-;50274:46;;;;;;;;;;;;50154:174;;:::o;10691:317::-;10806:6;10781:21;:31;;10773:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10860:12;10878:9;:14;;10900:6;10878:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10859:52;;;10930:7;10922:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10762:246;10691:317;;:::o;46387:264::-;46480:4;46497:13;46513:23;46528:7;46513:14;:23::i;:::-;46497:39;;46566:5;46555:16;;:7;:16;;;:52;;;;46575:32;46592:5;46599:7;46575:16;:32::i;:::-;46555:52;:87;;;;46635:7;46611:31;;:20;46623:7;46611:11;:20::i;:::-;:31;;;46555:87;46547:96;;;46387:264;;;;:::o;49410:625::-;49569:4;49542:31;;:23;49557:7;49542:14;:23::i;:::-;:31;;;49534:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;49648:1;49634:16;;:2;:16;;;49626:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;49704:39;49725:4;49731:2;49735:7;49704:20;:39::i;:::-;49808:29;49825:1;49829:7;49808:8;:29::i;:::-;49869:1;49850:9;:15;49860:4;49850:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;49898:1;49881:9;:13;49891:2;49881:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;49929:2;49910:7;:16;49918:7;49910:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;49968:7;49964:2;49949:27;;49958:4;49949:27;;;;;;;;;;;;49989:38;50009:4;50015:2;50019:7;49989:19;:38::i;:::-;49410:625;;;:::o;17464:211::-;17581:86;17601:5;17631:23;;;17656:2;17660:5;17608:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17581:19;:86::i;:::-;17464:211;;;:::o;56144:191::-;56218:16;56237:6;;;;;;;;;;;56218:25;;56263:8;56254:6;;:17;;;;;;;;;;;;;;;;;;56318:8;56287:40;;56308:8;56287:40;;;;;;;;;;;;56207:128;56144:191;:::o;46993:110::-;47069:26;47079:2;47083:7;47069:26;;;;;;;;;;;;:9;:26::i;:::-;46993:110;;:::o;50471:315::-;50626:8;50617:17;;:5;:17;;;50609:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50713:8;50675:18;:25;50694:5;50675:25;;;;;;;;;;;;;;;:35;50701:8;50675:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;50759:8;50737:41;;50752:5;50737:41;;;50769:8;50737:41;;;;;;:::i;:::-;;;;;;;;50471:315;;;:::o;38133:248::-;38279:7;38358:15;38343:12;;38323:7;:16;38331:7;38323:16;;;;;;;;;;;;;;;;38307:13;:32;;;;:::i;:::-;38306:49;;;;:::i;:::-;:67;;;;:::i;:::-;38299:74;;38133:248;;;;;:::o;45467:313::-;45623:28;45633:4;45639:2;45643:7;45623:9;:28::i;:::-;45670:47;45693:4;45699:2;45703:7;45712:4;45670:22;:47::i;:::-;45662:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;45467:313;;;;:::o;46093:127::-;46158:4;46210:1;46182:30;;:7;:16;46190:7;46182:16;;;;;;;;;;;;;;;;;;;;;:30;;;;46175:37;;46093:127;;;:::o;6130:723::-;6186:13;6416:1;6407:5;:10;6403:53;;6434:10;;;;;;;;;;;;;;;;;;;;;6403:53;6466:12;6481:5;6466:20;;6497:14;6522:78;6537:1;6529:4;:9;6522:78;;6555:8;;;;;:::i;:::-;;;;6586:2;6578:10;;;;;:::i;:::-;;;6522:78;;;6610:19;6642:6;6632:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6610:39;;6660:154;6676:1;6667:5;:10;6660:154;;6704:1;6694:11;;;;;:::i;:::-;;;6771:2;6763:5;:10;;;;:::i;:::-;6750:2;:24;;;;:::i;:::-;6737:39;;6720:6;6727;6720:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6800:2;6791:11;;;;;:::i;:::-;;;6660:154;;;6838:6;6824:21;;;;;6130:723;;;;:::o;52999:126::-;;;;:::o;53510:125::-;;;;:::o;20531:716::-;20955:23;20981:69;21009:4;20981:69;;;;;;;;;;;;;;;;;20989:5;20981:27;;;;:69;;;;;:::i;:::-;20955:95;;21085:1;21065:10;:17;:21;21061:179;;;21162:10;21151:30;;;;;;;;;;;;:::i;:::-;21143:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21061:179;20601:646;20531:716;;:::o;47330:319::-;47459:18;47465:2;47469:7;47459:5;:18::i;:::-;47510:53;47541:1;47545:2;47549:7;47558:4;47510:22;:53::i;:::-;47488:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;47330:319;;;:::o;51574:853::-;51728:4;51749:15;:2;:13;;;:15::i;:::-;51745:675;;;51801:2;51785:36;;;51822:12;:10;:12::i;:::-;51836:4;51842:7;51851:4;51785:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;51781:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52043:1;52026:6;:13;:18;52022:328;;52069:60;;;;;;;;;;:::i;:::-;;;;;;;;52022:328;52300:6;52294:13;52285:6;52281:2;52277:15;52270:38;51781:584;51917:41;;;51907:51;;;:6;:51;;;;51900:58;;;;;51745:675;52404:4;52397:11;;51574:853;;;;;;;:::o;12175:229::-;12312:12;12344:52;12366:6;12374:4;12380:1;12383:12;12344:21;:52::i;:::-;12337:59;;12175:229;;;;;:::o;47985:439::-;48079:1;48065:16;;:2;:16;;;48057:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48138:16;48146:7;48138;:16::i;:::-;48137:17;48129:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48200:45;48229:1;48233:2;48237:7;48200:20;:45::i;:::-;48275:1;48258:9;:13;48268:2;48258:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;48306:2;48287:7;:16;48295:7;48287:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;48351:7;48347:2;48326:33;;48343:1;48326:33;;;;;;;;;;;;48372:44;48400:1;48404:2;48408:7;48372:19;:44::i;:::-;47985:439;;:::o;9430:326::-;9490:4;9747:1;9725:7;:19;;;:23;9718:30;;9430:326;;;:::o;13295:510::-;13465:12;13523:5;13498:21;:30;;13490:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;13590:18;13601:6;13590:10;:18::i;:::-;13582:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;13656:12;13670:23;13697:6;:11;;13716:5;13723:4;13697:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13655:73;;;;13746:51;13763:7;13772:10;13784:12;13746:16;:51::i;:::-;13739:58;;;;13295:510;;;;;;:::o;15981:762::-;16131:12;16160:7;16156:580;;;16191:10;16184:17;;;;16156:580;16325:1;16305:10;:17;:21;16301:424;;;16553:10;16547:17;16614:15;16601:10;16597:2;16593:19;16586:44;16301:424;16696:12;16689:20;;;;;;;;;;;:::i;:::-;;;;;;;;15981:762;;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:77::-;402:7;431:5;420:16;;365:77;;;:::o;448:118::-;535:24;553:5;535:24;:::i;:::-;530:3;523:37;448:118;;:::o;572:332::-;693:4;731:2;720:9;716:18;708:26;;744:71;812:1;801:9;797:17;788:6;744:71;:::i;:::-;825:72;893:2;882:9;878:18;869:6;825:72;:::i;:::-;572:332;;;;;:::o;910:75::-;943:6;976:2;970:9;960:19;;910:75;:::o;991:117::-;1100:1;1097;1090:12;1114:117;1223:1;1220;1213:12;1237:122;1310:24;1328:5;1310:24;:::i;:::-;1303:5;1300:35;1290:63;;1349:1;1346;1339:12;1290:63;1237:122;:::o;1365:139::-;1411:5;1449:6;1436:20;1427:29;;1465:33;1492:5;1465:33;:::i;:::-;1365:139;;;;:::o;1510:329::-;1569:6;1618:2;1606:9;1597:7;1593:23;1589:32;1586:119;;;1624:79;;:::i;:::-;1586:119;1744:1;1769:53;1814:7;1805:6;1794:9;1790:22;1769:53;:::i;:::-;1759:63;;1715:117;1510:329;;;;:::o;1845:149::-;1881:7;1921:66;1914:5;1910:78;1899:89;;1845:149;;;:::o;2000:120::-;2072:23;2089:5;2072:23;:::i;:::-;2065:5;2062:34;2052:62;;2110:1;2107;2100:12;2052:62;2000:120;:::o;2126:137::-;2171:5;2209:6;2196:20;2187:29;;2225:32;2251:5;2225:32;:::i;:::-;2126:137;;;;:::o;2269:327::-;2327:6;2376:2;2364:9;2355:7;2351:23;2347:32;2344:119;;;2382:79;;:::i;:::-;2344:119;2502:1;2527:52;2571:7;2562:6;2551:9;2547:22;2527:52;:::i;:::-;2517:62;;2473:116;2269:327;;;;:::o;2602:90::-;2636:7;2679:5;2672:13;2665:21;2654:32;;2602:90;;;:::o;2698:109::-;2779:21;2794:5;2779:21;:::i;:::-;2774:3;2767:34;2698:109;;:::o;2813:210::-;2900:4;2938:2;2927:9;2923:18;2915:26;;2951:65;3013:1;3002:9;2998:17;2989:6;2951:65;:::i;:::-;2813:210;;;;:::o;3029:99::-;3081:6;3115:5;3109:12;3099:22;;3029:99;;;:::o;3134:169::-;3218:11;3252:6;3247:3;3240:19;3292:4;3287:3;3283:14;3268:29;;3134:169;;;;:::o;3309:246::-;3390:1;3400:113;3414:6;3411:1;3408:13;3400:113;;;3499:1;3494:3;3490:11;3484:18;3480:1;3475:3;3471:11;3464:39;3436:2;3433:1;3429:10;3424:15;;3400:113;;;3547:1;3538:6;3533:3;3529:16;3522:27;3371:184;3309:246;;;:::o;3561:102::-;3602:6;3653:2;3649:7;3644:2;3637:5;3633:14;3629:28;3619:38;;3561:102;;;:::o;3669:377::-;3757:3;3785:39;3818:5;3785:39;:::i;:::-;3840:71;3904:6;3899:3;3840:71;:::i;:::-;3833:78;;3920:65;3978:6;3973:3;3966:4;3959:5;3955:16;3920:65;:::i;:::-;4010:29;4032:6;4010:29;:::i;:::-;4005:3;4001:39;3994:46;;3761:285;3669:377;;;;:::o;4052:313::-;4165:4;4203:2;4192:9;4188:18;4180:26;;4252:9;4246:4;4242:20;4238:1;4227:9;4223:17;4216:47;4280:78;4353:4;4344:6;4280:78;:::i;:::-;4272:86;;4052:313;;;;:::o;4371:122::-;4444:24;4462:5;4444:24;:::i;:::-;4437:5;4434:35;4424:63;;4483:1;4480;4473:12;4424:63;4371:122;:::o;4499:139::-;4545:5;4583:6;4570:20;4561:29;;4599:33;4626:5;4599:33;:::i;:::-;4499:139;;;;:::o;4644:329::-;4703:6;4752:2;4740:9;4731:7;4727:23;4723:32;4720:119;;;4758:79;;:::i;:::-;4720:119;4878:1;4903:53;4948:7;4939:6;4928:9;4924:22;4903:53;:::i;:::-;4893:63;;4849:117;4644:329;;;;:::o;4979:222::-;5072:4;5110:2;5099:9;5095:18;5087:26;;5123:71;5191:1;5180:9;5176:17;5167:6;5123:71;:::i;:::-;4979:222;;;;:::o;5207:474::-;5275:6;5283;5332:2;5320:9;5311:7;5307:23;5303:32;5300:119;;;5338:79;;:::i;:::-;5300:119;5458:1;5483:53;5528:7;5519:6;5508:9;5504:22;5483:53;:::i;:::-;5473:63;;5429:117;5585:2;5611:53;5656:7;5647:6;5636:9;5632:22;5611:53;:::i;:::-;5601:63;;5556:118;5207:474;;;;;:::o;5687:222::-;5780:4;5818:2;5807:9;5803:18;5795:26;;5831:71;5899:1;5888:9;5884:17;5875:6;5831:71;:::i;:::-;5687:222;;;;:::o;5915:104::-;5960:7;5989:24;6007:5;5989:24;:::i;:::-;5978:35;;5915:104;;;:::o;6025:138::-;6106:32;6132:5;6106:32;:::i;:::-;6099:5;6096:43;6086:71;;6153:1;6150;6143:12;6086:71;6025:138;:::o;6169:155::-;6223:5;6261:6;6248:20;6239:29;;6277:41;6312:5;6277:41;:::i;:::-;6169:155;;;;:::o;6330:345::-;6397:6;6446:2;6434:9;6425:7;6421:23;6417:32;6414:119;;;6452:79;;:::i;:::-;6414:119;6572:1;6597:61;6650:7;6641:6;6630:9;6626:22;6597:61;:::i;:::-;6587:71;;6543:125;6330:345;;;;:::o;6681:619::-;6758:6;6766;6774;6823:2;6811:9;6802:7;6798:23;6794:32;6791:119;;;6829:79;;:::i;:::-;6791:119;6949:1;6974:53;7019:7;7010:6;6999:9;6995:22;6974:53;:::i;:::-;6964:63;;6920:117;7076:2;7102:53;7147:7;7138:6;7127:9;7123:22;7102:53;:::i;:::-;7092:63;;7047:118;7204:2;7230:53;7275:7;7266:6;7255:9;7251:22;7230:53;:::i;:::-;7220:63;;7175:118;6681:619;;;;;:::o;7306:110::-;7357:7;7386:24;7404:5;7386:24;:::i;:::-;7375:35;;7306:110;;;:::o;7422:150::-;7509:38;7541:5;7509:38;:::i;:::-;7502:5;7499:49;7489:77;;7562:1;7559;7552:12;7489:77;7422:150;:::o;7578:167::-;7638:5;7676:6;7663:20;7654:29;;7692:47;7733:5;7692:47;:::i;:::-;7578:167;;;;:::o;7751:502::-;7833:6;7841;7890:2;7878:9;7869:7;7865:23;7861:32;7858:119;;;7896:79;;:::i;:::-;7858:119;8016:1;8041:67;8100:7;8091:6;8080:9;8076:22;8041:67;:::i;:::-;8031:77;;7987:131;8157:2;8183:53;8228:7;8219:6;8208:9;8204:22;8183:53;:::i;:::-;8173:63;;8128:118;7751:502;;;;;:::o;8259:117::-;8368:1;8365;8358:12;8382:117;8491:1;8488;8481:12;8505:180;8553:77;8550:1;8543:88;8650:4;8647:1;8640:15;8674:4;8671:1;8664:15;8691:281;8774:27;8796:4;8774:27;:::i;:::-;8766:6;8762:40;8904:6;8892:10;8889:22;8868:18;8856:10;8853:34;8850:62;8847:88;;;8915:18;;:::i;:::-;8847:88;8955:10;8951:2;8944:22;8734:238;8691:281;;:::o;8978:129::-;9012:6;9039:20;;:::i;:::-;9029:30;;9068:33;9096:4;9088:6;9068:33;:::i;:::-;8978:129;;;:::o;9113:308::-;9175:4;9265:18;9257:6;9254:30;9251:56;;;9287:18;;:::i;:::-;9251:56;9325:29;9347:6;9325:29;:::i;:::-;9317:37;;9409:4;9403;9399:15;9391:23;;9113:308;;;:::o;9427:146::-;9524:6;9519:3;9514;9501:30;9565:1;9556:6;9551:3;9547:16;9540:27;9427:146;;;:::o;9579:425::-;9657:5;9682:66;9698:49;9740:6;9698:49;:::i;:::-;9682:66;:::i;:::-;9673:75;;9771:6;9764:5;9757:21;9809:4;9802:5;9798:16;9847:3;9838:6;9833:3;9829:16;9826:25;9823:112;;;9854:79;;:::i;:::-;9823:112;9944:54;9991:6;9986:3;9981;9944:54;:::i;:::-;9663:341;9579:425;;;;;:::o;10024:340::-;10080:5;10129:3;10122:4;10114:6;10110:17;10106:27;10096:122;;10137:79;;:::i;:::-;10096:122;10254:6;10241:20;10279:79;10354:3;10346:6;10339:4;10331:6;10327:17;10279:79;:::i;:::-;10270:88;;10086:278;10024:340;;;;:::o;10370:509::-;10439:6;10488:2;10476:9;10467:7;10463:23;10459:32;10456:119;;;10494:79;;:::i;:::-;10456:119;10642:1;10631:9;10627:17;10614:31;10672:18;10664:6;10661:30;10658:117;;;10694:79;;:::i;:::-;10658:117;10799:63;10854:7;10845:6;10834:9;10830:22;10799:63;:::i;:::-;10789:73;;10585:287;10370:509;;;;:::o;10885:474::-;10953:6;10961;11010:2;10998:9;10989:7;10985:23;10981:32;10978:119;;;11016:79;;:::i;:::-;10978:119;11136:1;11161:53;11206:7;11197:6;11186:9;11182:22;11161:53;:::i;:::-;11151:63;;11107:117;11263:2;11289:53;11334:7;11325:6;11314:9;11310:22;11289:53;:::i;:::-;11279:63;;11234:118;10885:474;;;;;:::o;11365:116::-;11435:21;11450:5;11435:21;:::i;:::-;11428:5;11425:32;11415:60;;11471:1;11468;11461:12;11415:60;11365:116;:::o;11487:133::-;11530:5;11568:6;11555:20;11546:29;;11584:30;11608:5;11584:30;:::i;:::-;11487:133;;;;:::o;11626:468::-;11691:6;11699;11748:2;11736:9;11727:7;11723:23;11719:32;11716:119;;;11754:79;;:::i;:::-;11716:119;11874:1;11899:53;11944:7;11935:6;11924:9;11920:22;11899:53;:::i;:::-;11889:63;;11845:117;12001:2;12027:50;12069:7;12060:6;12049:9;12045:22;12027:50;:::i;:::-;12017:60;;11972:115;11626:468;;;;;:::o;12100:307::-;12161:4;12251:18;12243:6;12240:30;12237:56;;;12273:18;;:::i;:::-;12237:56;12311:29;12333:6;12311:29;:::i;:::-;12303:37;;12395:4;12389;12385:15;12377:23;;12100:307;;;:::o;12413:423::-;12490:5;12515:65;12531:48;12572:6;12531:48;:::i;:::-;12515:65;:::i;:::-;12506:74;;12603:6;12596:5;12589:21;12641:4;12634:5;12630:16;12679:3;12670:6;12665:3;12661:16;12658:25;12655:112;;;12686:79;;:::i;:::-;12655:112;12776:54;12823:6;12818:3;12813;12776:54;:::i;:::-;12496:340;12413:423;;;;;:::o;12855:338::-;12910:5;12959:3;12952:4;12944:6;12940:17;12936:27;12926:122;;12967:79;;:::i;:::-;12926:122;13084:6;13071:20;13109:78;13183:3;13175:6;13168:4;13160:6;13156:17;13109:78;:::i;:::-;13100:87;;12916:277;12855:338;;;;:::o;13199:943::-;13294:6;13302;13310;13318;13367:3;13355:9;13346:7;13342:23;13338:33;13335:120;;;13374:79;;:::i;:::-;13335:120;13494:1;13519:53;13564:7;13555:6;13544:9;13540:22;13519:53;:::i;:::-;13509:63;;13465:117;13621:2;13647:53;13692:7;13683:6;13672:9;13668:22;13647:53;:::i;:::-;13637:63;;13592:118;13749:2;13775:53;13820:7;13811:6;13800:9;13796:22;13775:53;:::i;:::-;13765:63;;13720:118;13905:2;13894:9;13890:18;13877:32;13936:18;13928:6;13925:30;13922:117;;;13958:79;;:::i;:::-;13922:117;14063:62;14117:7;14108:6;14097:9;14093:22;14063:62;:::i;:::-;14053:72;;13848:287;13199:943;;;;;;;:::o;14148:357::-;14221:6;14270:2;14258:9;14249:7;14245:23;14241:32;14238:119;;;14276:79;;:::i;:::-;14238:119;14396:1;14421:67;14480:7;14471:6;14460:9;14456:22;14421:67;:::i;:::-;14411:77;;14367:131;14148:357;;;;:::o;14511:474::-;14579:6;14587;14636:2;14624:9;14615:7;14611:23;14607:32;14604:119;;;14642:79;;:::i;:::-;14604:119;14762:1;14787:53;14832:7;14823:6;14812:9;14808:22;14787:53;:::i;:::-;14777:63;;14733:117;14889:2;14915:53;14960:7;14951:6;14940:9;14936:22;14915:53;:::i;:::-;14905:63;;14860:118;14511:474;;;;;:::o;14991:180::-;15039:77;15036:1;15029:88;15136:4;15133:1;15126:15;15160:4;15157:1;15150:15;15177:320;15221:6;15258:1;15252:4;15248:12;15238:22;;15305:1;15299:4;15295:12;15326:18;15316:81;;15382:4;15374:6;15370:17;15360:27;;15316:81;15444:2;15436:6;15433:14;15413:18;15410:38;15407:84;;15463:18;;:::i;:::-;15407:84;15228:269;15177:320;;;:::o;15503:220::-;15643:34;15639:1;15631:6;15627:14;15620:58;15712:3;15707:2;15699:6;15695:15;15688:28;15503:220;:::o;15729:366::-;15871:3;15892:67;15956:2;15951:3;15892:67;:::i;:::-;15885:74;;15968:93;16057:3;15968:93;:::i;:::-;16086:2;16081:3;16077:12;16070:19;;15729:366;;;:::o;16101:419::-;16267:4;16305:2;16294:9;16290:18;16282:26;;16354:9;16348:4;16344:20;16340:1;16329:9;16325:17;16318:47;16382:131;16508:4;16382:131;:::i;:::-;16374:139;;16101:419;;;:::o;16526:249::-;16666:34;16662:1;16654:6;16650:14;16643:58;16735:32;16730:2;16722:6;16718:15;16711:57;16526:249;:::o;16781:366::-;16923:3;16944:67;17008:2;17003:3;16944:67;:::i;:::-;16937:74;;17020:93;17109:3;17020:93;:::i;:::-;17138:2;17133:3;17129:12;17122:19;;16781:366;;;:::o;17153:419::-;17319:4;17357:2;17346:9;17342:18;17334:26;;17406:9;17400:4;17396:20;17392:1;17381:9;17377:17;17370:47;17434:131;17560:4;17434:131;:::i;:::-;17426:139;;17153:419;;;:::o;17578:225::-;17718:34;17714:1;17706:6;17702:14;17695:58;17787:8;17782:2;17774:6;17770:15;17763:33;17578:225;:::o;17809:366::-;17951:3;17972:67;18036:2;18031:3;17972:67;:::i;:::-;17965:74;;18048:93;18137:3;18048:93;:::i;:::-;18166:2;18161:3;18157:12;18150:19;;17809:366;;;:::o;18181:419::-;18347:4;18385:2;18374:9;18370:18;18362:26;;18434:9;18428:4;18424:20;18420:1;18409:9;18405:17;18398:47;18462:131;18588:4;18462:131;:::i;:::-;18454:139;;18181:419;;;:::o;18606:230::-;18746:34;18742:1;18734:6;18730:14;18723:58;18815:13;18810:2;18802:6;18798:15;18791:38;18606:230;:::o;18842:366::-;18984:3;19005:67;19069:2;19064:3;19005:67;:::i;:::-;18998:74;;19081:93;19170:3;19081:93;:::i;:::-;19199:2;19194:3;19190:12;19183:19;;18842:366;;;:::o;19214:419::-;19380:4;19418:2;19407:9;19403:18;19395:26;;19467:9;19461:4;19457:20;19453:1;19442:9;19438:17;19431:47;19495:131;19621:4;19495:131;:::i;:::-;19487:139;;19214:419;;;:::o;19639:180::-;19687:77;19684:1;19677:88;19784:4;19781:1;19774:15;19808:4;19805:1;19798:15;19825:191;19865:3;19884:20;19902:1;19884:20;:::i;:::-;19879:25;;19918:20;19936:1;19918:20;:::i;:::-;19913:25;;19961:1;19958;19954:9;19947:16;;19982:3;19979:1;19976:10;19973:36;;;19989:18;;:::i;:::-;19973:36;19825:191;;;;:::o;20022:60::-;20050:3;20071:5;20064:12;;20022:60;;;:::o;20088:142::-;20138:9;20171:53;20189:34;20198:24;20216:5;20198:24;:::i;:::-;20189:34;:::i;:::-;20171:53;:::i;:::-;20158:66;;20088:142;;;:::o;20236:126::-;20286:9;20319:37;20350:5;20319:37;:::i;:::-;20306:50;;20236:126;;;:::o;20368:134::-;20426:9;20459:37;20490:5;20459:37;:::i;:::-;20446:50;;20368:134;;;:::o;20508:147::-;20603:45;20642:5;20603:45;:::i;:::-;20598:3;20591:58;20508:147;;:::o;20661:348::-;20790:4;20828:2;20817:9;20813:18;20805:26;;20841:79;20917:1;20906:9;20902:17;20893:6;20841:79;:::i;:::-;20930:72;20998:2;20987:9;20983:18;20974:6;20930:72;:::i;:::-;20661:348;;;;;:::o;21015:233::-;21155:34;21151:1;21143:6;21139:14;21132:58;21224:16;21219:2;21211:6;21207:15;21200:41;21015:233;:::o;21254:366::-;21396:3;21417:67;21481:2;21476:3;21417:67;:::i;:::-;21410:74;;21493:93;21582:3;21493:93;:::i;:::-;21611:2;21606:3;21602:12;21595:19;;21254:366;;;:::o;21626:419::-;21792:4;21830:2;21819:9;21815:18;21807:26;;21879:9;21873:4;21869:20;21865:1;21854:9;21850:17;21843:47;21907:131;22033:4;21907:131;:::i;:::-;21899:139;;21626:419;;;:::o;22051:141::-;22100:4;22123:3;22115:11;;22146:3;22143:1;22136:14;22180:4;22177:1;22167:18;22159:26;;22051:141;;;:::o;22198:93::-;22235:6;22282:2;22277;22270:5;22266:14;22262:23;22252:33;;22198:93;;;:::o;22297:107::-;22341:8;22391:5;22385:4;22381:16;22360:37;;22297:107;;;;:::o;22410:393::-;22479:6;22529:1;22517:10;22513:18;22552:97;22582:66;22571:9;22552:97;:::i;:::-;22670:39;22700:8;22689:9;22670:39;:::i;:::-;22658:51;;22742:4;22738:9;22731:5;22727:21;22718:30;;22791:4;22781:8;22777:19;22770:5;22767:30;22757:40;;22486:317;;22410:393;;;;;:::o;22809:142::-;22859:9;22892:53;22910:34;22919:24;22937:5;22919:24;:::i;:::-;22910:34;:::i;:::-;22892:53;:::i;:::-;22879:66;;22809:142;;;:::o;22957:75::-;23000:3;23021:5;23014:12;;22957:75;;;:::o;23038:269::-;23148:39;23179:7;23148:39;:::i;:::-;23209:91;23258:41;23282:16;23258:41;:::i;:::-;23250:6;23243:4;23237:11;23209:91;:::i;:::-;23203:4;23196:105;23114:193;23038:269;;;:::o;23313:73::-;23358:3;23313:73;:::o;23392:189::-;23469:32;;:::i;:::-;23510:65;23568:6;23560;23554:4;23510:65;:::i;:::-;23445:136;23392:189;;:::o;23587:186::-;23647:120;23664:3;23657:5;23654:14;23647:120;;;23718:39;23755:1;23748:5;23718:39;:::i;:::-;23691:1;23684:5;23680:13;23671:22;;23647:120;;;23587:186;;:::o;23779:543::-;23880:2;23875:3;23872:11;23869:446;;;23914:38;23946:5;23914:38;:::i;:::-;23998:29;24016:10;23998:29;:::i;:::-;23988:8;23984:44;24181:2;24169:10;24166:18;24163:49;;;24202:8;24187:23;;24163:49;24225:80;24281:22;24299:3;24281:22;:::i;:::-;24271:8;24267:37;24254:11;24225:80;:::i;:::-;23884:431;;23869:446;23779:543;;;:::o;24328:117::-;24382:8;24432:5;24426:4;24422:16;24401:37;;24328:117;;;;:::o;24451:169::-;24495:6;24528:51;24576:1;24572:6;24564:5;24561:1;24557:13;24528:51;:::i;:::-;24524:56;24609:4;24603;24599:15;24589:25;;24502:118;24451:169;;;;:::o;24625:295::-;24701:4;24847:29;24872:3;24866:4;24847:29;:::i;:::-;24839:37;;24909:3;24906:1;24902:11;24896:4;24893:21;24885:29;;24625:295;;;;:::o;24925:1395::-;25042:37;25075:3;25042:37;:::i;:::-;25144:18;25136:6;25133:30;25130:56;;;25166:18;;:::i;:::-;25130:56;25210:38;25242:4;25236:11;25210:38;:::i;:::-;25295:67;25355:6;25347;25341:4;25295:67;:::i;:::-;25389:1;25413:4;25400:17;;25445:2;25437:6;25434:14;25462:1;25457:618;;;;26119:1;26136:6;26133:77;;;26185:9;26180:3;26176:19;26170:26;26161:35;;26133:77;26236:67;26296:6;26289:5;26236:67;:::i;:::-;26230:4;26223:81;26092:222;25427:887;;25457:618;25509:4;25505:9;25497:6;25493:22;25543:37;25575:4;25543:37;:::i;:::-;25602:1;25616:208;25630:7;25627:1;25624:14;25616:208;;;25709:9;25704:3;25700:19;25694:26;25686:6;25679:42;25760:1;25752:6;25748:14;25738:24;;25807:2;25796:9;25792:18;25779:31;;25653:4;25650:1;25646:12;25641:17;;25616:208;;;25852:6;25843:7;25840:19;25837:179;;;25910:9;25905:3;25901:19;25895:26;25953:48;25995:4;25987:6;25983:17;25972:9;25953:48;:::i;:::-;25945:6;25938:64;25860:156;25837:179;26062:1;26058;26050:6;26046:14;26042:22;26036:4;26029:36;25464:611;;;25427:887;;25017:1303;;;24925:1395;;:::o;26326:174::-;26466:26;26462:1;26454:6;26450:14;26443:50;26326:174;:::o;26506:366::-;26648:3;26669:67;26733:2;26728:3;26669:67;:::i;:::-;26662:74;;26745:93;26834:3;26745:93;:::i;:::-;26863:2;26858:3;26854:12;26847:19;;26506:366;;;:::o;26878:419::-;27044:4;27082:2;27071:9;27067:18;27059:26;;27131:9;27125:4;27121:20;27117:1;27106:9;27102:17;27095:47;27159:131;27285:4;27159:131;:::i;:::-;27151:139;;26878:419;;;:::o;27303:228::-;27443:34;27439:1;27431:6;27427:14;27420:58;27512:11;27507:2;27499:6;27495:15;27488:36;27303:228;:::o;27537:366::-;27679:3;27700:67;27764:2;27759:3;27700:67;:::i;:::-;27693:74;;27776:93;27865:3;27776:93;:::i;:::-;27894:2;27889:3;27885:12;27878:19;;27537:366;;;:::o;27909:419::-;28075:4;28113:2;28102:9;28098:18;28090:26;;28162:9;28156:4;28152:20;28148:1;28137:9;28133:17;28126:47;28190:131;28316:4;28190:131;:::i;:::-;28182:139;;27909:419;;;:::o;28334:180::-;28382:77;28379:1;28372:88;28479:4;28476:1;28469:15;28503:4;28500:1;28493:15;28520:159;28660:11;28656:1;28648:6;28644:14;28637:35;28520:159;:::o;28685:365::-;28827:3;28848:66;28912:1;28907:3;28848:66;:::i;:::-;28841:73;;28923:93;29012:3;28923:93;:::i;:::-;29041:2;29036:3;29032:12;29025:19;;28685:365;;;:::o;29056:419::-;29222:4;29260:2;29249:9;29245:18;29237:26;;29309:9;29303:4;29299:20;29295:1;29284:9;29280:17;29273:47;29337:131;29463:4;29337:131;:::i;:::-;29329:139;;29056:419;;;:::o;29481:168::-;29621:20;29617:1;29609:6;29605:14;29598:44;29481:168;:::o;29655:366::-;29797:3;29818:67;29882:2;29877:3;29818:67;:::i;:::-;29811:74;;29894:93;29983:3;29894:93;:::i;:::-;30012:2;30007:3;30003:12;29996:19;;29655:366;;;:::o;30027:419::-;30193:4;30231:2;30220:9;30216:18;30208:26;;30280:9;30274:4;30270:20;30266:1;30255:9;30251:17;30244:47;30308:131;30434:4;30308:131;:::i;:::-;30300:139;;30027:419;;;:::o;30452:233::-;30491:3;30514:24;30532:5;30514:24;:::i;:::-;30505:33;;30560:66;30553:5;30550:77;30547:103;;30630:18;;:::i;:::-;30547:103;30677:1;30670:5;30666:13;30659:20;;30452:233;;;:::o;30691:163::-;30831:15;30827:1;30819:6;30815:14;30808:39;30691:163;:::o;30860:366::-;31002:3;31023:67;31087:2;31082:3;31023:67;:::i;:::-;31016:74;;31099:93;31188:3;31099:93;:::i;:::-;31217:2;31212:3;31208:12;31201:19;;30860:366;;;:::o;31232:419::-;31398:4;31436:2;31425:9;31421:18;31413:26;;31485:9;31479:4;31475:20;31471:1;31460:9;31456:17;31449:47;31513:131;31639:4;31513:131;:::i;:::-;31505:139;;31232:419;;;:::o;31657:172::-;31797:24;31793:1;31785:6;31781:14;31774:48;31657:172;:::o;31835:366::-;31977:3;31998:67;32062:2;32057:3;31998:67;:::i;:::-;31991:74;;32074:93;32163:3;32074:93;:::i;:::-;32192:2;32187:3;32183:12;32176:19;;31835:366;;;:::o;32207:419::-;32373:4;32411:2;32400:9;32396:18;32388:26;;32460:9;32454:4;32450:20;32446:1;32435:9;32431:17;32424:47;32488:131;32614:4;32488:131;:::i;:::-;32480:139;;32207:419;;;:::o;32632:410::-;32672:7;32695:20;32713:1;32695:20;:::i;:::-;32690:25;;32729:20;32747:1;32729:20;:::i;:::-;32724:25;;32784:1;32781;32777:9;32806:30;32824:11;32806:30;:::i;:::-;32795:41;;32985:1;32976:7;32972:15;32969:1;32966:22;32946:1;32939:9;32919:83;32896:139;;33015:18;;:::i;:::-;32896:139;32680:362;32632:410;;;;:::o;33048:166::-;33188:18;33184:1;33176:6;33172:14;33165:42;33048:166;:::o;33220:366::-;33362:3;33383:67;33447:2;33442:3;33383:67;:::i;:::-;33376:74;;33459:93;33548:3;33459:93;:::i;:::-;33577:2;33572:3;33568:12;33561:19;;33220:366;;;:::o;33592:419::-;33758:4;33796:2;33785:9;33781:18;33773:26;;33845:9;33839:4;33835:20;33831:1;33820:9;33816:17;33809:47;33873:131;33999:4;33873:131;:::i;:::-;33865:139;;33592:419;;;:::o;34017:167::-;34157:19;34153:1;34145:6;34141:14;34134:43;34017:167;:::o;34190:366::-;34332:3;34353:67;34417:2;34412:3;34353:67;:::i;:::-;34346:74;;34429:93;34518:3;34429:93;:::i;:::-;34547:2;34542:3;34538:12;34531:19;;34190:366;;;:::o;34562:419::-;34728:4;34766:2;34755:9;34751:18;34743:26;;34815:9;34809:4;34805:20;34801:1;34790:9;34786:17;34779:47;34843:131;34969:4;34843:131;:::i;:::-;34835:139;;34562:419;;;:::o;34987:143::-;35044:5;35075:6;35069:13;35060:22;;35091:33;35118:5;35091:33;:::i;:::-;34987:143;;;;:::o;35136:351::-;35206:6;35255:2;35243:9;35234:7;35230:23;35226:32;35223:119;;;35261:79;;:::i;:::-;35223:119;35381:1;35406:64;35462:7;35453:6;35442:9;35438:22;35406:64;:::i;:::-;35396:74;;35352:128;35136:351;;;;:::o;35493:181::-;35633:33;35629:1;35621:6;35617:14;35610:57;35493:181;:::o;35680:366::-;35822:3;35843:67;35907:2;35902:3;35843:67;:::i;:::-;35836:74;;35919:93;36008:3;35919:93;:::i;:::-;36037:2;36032:3;36028:12;36021:19;;35680:366;;;:::o;36052:419::-;36218:4;36256:2;36245:9;36241:18;36233:26;;36305:9;36299:4;36295:20;36291:1;36280:9;36276:17;36269:47;36333:131;36459:4;36333:131;:::i;:::-;36325:139;;36052:419;;;:::o;36477:148::-;36579:11;36616:3;36601:18;;36477:148;;;;:::o;36655:874::-;36758:3;36795:5;36789:12;36824:36;36850:9;36824:36;:::i;:::-;36876:89;36958:6;36953:3;36876:89;:::i;:::-;36869:96;;36996:1;36985:9;36981:17;37012:1;37007:166;;;;37187:1;37182:341;;;;36974:549;;37007:166;37091:4;37087:9;37076;37072:25;37067:3;37060:38;37153:6;37146:14;37139:22;37131:6;37127:35;37122:3;37118:45;37111:52;;37007:166;;37182:341;37249:38;37281:5;37249:38;:::i;:::-;37309:1;37323:154;37337:6;37334:1;37331:13;37323:154;;;37411:7;37405:14;37401:1;37396:3;37392:11;37385:35;37461:1;37452:7;37448:15;37437:26;;37359:4;37356:1;37352:12;37347:17;;37323:154;;;37506:6;37501:3;37497:16;37490:23;;37189:334;;36974:549;;36762:767;;36655:874;;;;:::o;37535:390::-;37641:3;37669:39;37702:5;37669:39;:::i;:::-;37724:89;37806:6;37801:3;37724:89;:::i;:::-;37717:96;;37822:65;37880:6;37875:3;37868:4;37861:5;37857:16;37822:65;:::i;:::-;37912:6;37907:3;37903:16;37896:23;;37645:280;37535:390;;;;:::o;37931:429::-;38108:3;38130:92;38218:3;38209:6;38130:92;:::i;:::-;38123:99;;38239:95;38330:3;38321:6;38239:95;:::i;:::-;38232:102;;38351:3;38344:10;;37931:429;;;;;:::o;38366:434::-;38455:5;38480:66;38496:49;38538:6;38496:49;:::i;:::-;38480:66;:::i;:::-;38471:75;;38569:6;38562:5;38555:21;38607:4;38600:5;38596:16;38645:3;38636:6;38631:3;38627:16;38624:25;38621:112;;;38652:79;;:::i;:::-;38621:112;38742:52;38787:6;38782:3;38777;38742:52;:::i;:::-;38461:339;38366:434;;;;;:::o;38820:355::-;38887:5;38936:3;38929:4;38921:6;38917:17;38913:27;38903:122;;38944:79;;:::i;:::-;38903:122;39054:6;39048:13;39079:90;39165:3;39157:6;39150:4;39142:6;39138:17;39079:90;:::i;:::-;39070:99;;38893:282;38820:355;;;;:::o;39181:524::-;39261:6;39310:2;39298:9;39289:7;39285:23;39281:32;39278:119;;;39316:79;;:::i;:::-;39278:119;39457:1;39446:9;39442:17;39436:24;39487:18;39479:6;39476:30;39473:117;;;39509:79;;:::i;:::-;39473:117;39614:74;39680:7;39671:6;39660:9;39656:22;39614:74;:::i;:::-;39604:84;;39407:291;39181:524;;;;:::o;39711:225::-;39851:34;39847:1;39839:6;39835:14;39828:58;39920:8;39915:2;39907:6;39903:15;39896:33;39711:225;:::o;39942:366::-;40084:3;40105:67;40169:2;40164:3;40105:67;:::i;:::-;40098:74;;40181:93;40270:3;40181:93;:::i;:::-;40299:2;40294:3;40290:12;40283:19;;39942:366;;;:::o;40314:419::-;40480:4;40518:2;40507:9;40503:18;40495:26;;40567:9;40561:4;40557:20;40553:1;40542:9;40538:17;40531:47;40595:131;40721:4;40595:131;:::i;:::-;40587:139;;40314:419;;;:::o;40739:182::-;40879:34;40875:1;40867:6;40863:14;40856:58;40739:182;:::o;40927:366::-;41069:3;41090:67;41154:2;41149:3;41090:67;:::i;:::-;41083:74;;41166:93;41255:3;41166:93;:::i;:::-;41284:2;41279:3;41275:12;41268:19;;40927:366;;;:::o;41299:419::-;41465:4;41503:2;41492:9;41488:18;41480:26;;41552:9;41546:4;41542:20;41538:1;41527:9;41523:17;41516:47;41580:131;41706:4;41580:131;:::i;:::-;41572:139;;41299:419;;;:::o;41724:179::-;41864:31;41860:1;41852:6;41848:14;41841:55;41724:179;:::o;41909:366::-;42051:3;42072:67;42136:2;42131:3;42072:67;:::i;:::-;42065:74;;42148:93;42237:3;42148:93;:::i;:::-;42266:2;42261:3;42257:12;42250:19;;41909:366;;;:::o;42281:419::-;42447:4;42485:2;42474:9;42470:18;42462:26;;42534:9;42528:4;42524:20;42520:1;42509:9;42505:17;42498:47;42562:131;42688:4;42562:131;:::i;:::-;42554:139;;42281:419;;;:::o;42706:147::-;42807:11;42844:3;42829:18;;42706:147;;;;:::o;42859:114::-;;:::o;42979:398::-;43138:3;43159:83;43240:1;43235:3;43159:83;:::i;:::-;43152:90;;43251:93;43340:3;43251:93;:::i;:::-;43369:1;43364:3;43360:11;43353:18;;42979:398;;;:::o;43383:379::-;43567:3;43589:147;43732:3;43589:147;:::i;:::-;43582:154;;43753:3;43746:10;;43383:379;;;:::o;43768:245::-;43908:34;43904:1;43896:6;43892:14;43885:58;43977:28;43972:2;43964:6;43960:15;43953:53;43768:245;:::o;44019:366::-;44161:3;44182:67;44246:2;44241:3;44182:67;:::i;:::-;44175:74;;44258:93;44347:3;44258:93;:::i;:::-;44376:2;44371:3;44367:12;44360:19;;44019:366;;;:::o;44391:419::-;44557:4;44595:2;44584:9;44580:18;44572:26;;44644:9;44638:4;44634:20;44630:1;44619:9;44615:17;44608:47;44672:131;44798:4;44672:131;:::i;:::-;44664:139;;44391:419;;;:::o;44816:224::-;44956:34;44952:1;44944:6;44940:14;44933:58;45025:7;45020:2;45012:6;45008:15;45001:32;44816:224;:::o;45046:366::-;45188:3;45209:67;45273:2;45268:3;45209:67;:::i;:::-;45202:74;;45285:93;45374:3;45285:93;:::i;:::-;45403:2;45398:3;45394:12;45387:19;;45046:366;;;:::o;45418:419::-;45584:4;45622:2;45611:9;45607:18;45599:26;;45671:9;45665:4;45661:20;45657:1;45646:9;45642:17;45635:47;45699:131;45825:4;45699:131;:::i;:::-;45691:139;;45418:419;;;:::o;45843:223::-;45983:34;45979:1;45971:6;45967:14;45960:58;46052:6;46047:2;46039:6;46035:15;46028:31;45843:223;:::o;46072:366::-;46214:3;46235:67;46299:2;46294:3;46235:67;:::i;:::-;46228:74;;46311:93;46400:3;46311:93;:::i;:::-;46429:2;46424:3;46420:12;46413:19;;46072:366;;;:::o;46444:419::-;46610:4;46648:2;46637:9;46633:18;46625:26;;46697:9;46691:4;46687:20;46683:1;46672:9;46668:17;46661:47;46725:131;46851:4;46725:131;:::i;:::-;46717:139;;46444:419;;;:::o;46869:194::-;46909:4;46929:20;46947:1;46929:20;:::i;:::-;46924:25;;46963:20;46981:1;46963:20;:::i;:::-;46958:25;;47007:1;47004;47000:9;46992:17;;47031:1;47025:4;47022:11;47019:37;;;47036:18;;:::i;:::-;47019:37;46869:194;;;;:::o;47069:175::-;47209:27;47205:1;47197:6;47193:14;47186:51;47069:175;:::o;47250:366::-;47392:3;47413:67;47477:2;47472:3;47413:67;:::i;:::-;47406:74;;47489:93;47578:3;47489:93;:::i;:::-;47607:2;47602:3;47598:12;47591:19;;47250:366;;;:::o;47622:419::-;47788:4;47826:2;47815:9;47811:18;47803:26;;47875:9;47869:4;47865:20;47861:1;47850:9;47846:17;47839:47;47903:131;48029:4;47903:131;:::i;:::-;47895:139;;47622:419;;;:::o;48047:180::-;48095:77;48092:1;48085:88;48192:4;48189:1;48182:15;48216:4;48213:1;48206:15;48233:185;48273:1;48290:20;48308:1;48290:20;:::i;:::-;48285:25;;48324:20;48342:1;48324:20;:::i;:::-;48319:25;;48363:1;48353:35;;48368:18;;:::i;:::-;48353:35;48410:1;48407;48403:9;48398:14;;48233:185;;;;:::o;48424:237::-;48564:34;48560:1;48552:6;48548:14;48541:58;48633:20;48628:2;48620:6;48616:15;48609:45;48424:237;:::o;48667:366::-;48809:3;48830:67;48894:2;48889:3;48830:67;:::i;:::-;48823:74;;48906:93;48995:3;48906:93;:::i;:::-;49024:2;49019:3;49015:12;49008:19;;48667:366;;;:::o;49039:419::-;49205:4;49243:2;49232:9;49228:18;49220:26;;49292:9;49286:4;49282:20;49278:1;49267:9;49263:17;49256:47;49320:131;49446:4;49320:131;:::i;:::-;49312:139;;49039:419;;;:::o;49464:176::-;49496:1;49513:20;49531:1;49513:20;:::i;:::-;49508:25;;49547:20;49565:1;49547:20;:::i;:::-;49542:25;;49586:1;49576:35;;49591:18;;:::i;:::-;49576:35;49632:1;49629;49625:9;49620:14;;49464:176;;;;:::o;49646:137::-;49700:5;49731:6;49725:13;49716:22;;49747:30;49771:5;49747:30;:::i;:::-;49646:137;;;;:::o;49789:345::-;49856:6;49905:2;49893:9;49884:7;49880:23;49876:32;49873:119;;;49911:79;;:::i;:::-;49873:119;50031:1;50056:61;50109:7;50100:6;50089:9;50085:22;50056:61;:::i;:::-;50046:71;;50002:125;49789:345;;;;:::o;50140:229::-;50280:34;50276:1;50268:6;50264:14;50257:58;50349:12;50344:2;50336:6;50332:15;50325:37;50140:229;:::o;50375:366::-;50517:3;50538:67;50602:2;50597:3;50538:67;:::i;:::-;50531:74;;50614:93;50703:3;50614:93;:::i;:::-;50732:2;50727:3;50723:12;50716:19;;50375:366;;;:::o;50747:419::-;50913:4;50951:2;50940:9;50936:18;50928:26;;51000:9;50994:4;50990:20;50986:1;50975:9;50971:17;50964:47;51028:131;51154:4;51028:131;:::i;:::-;51020:139;;50747:419;;;:::o;51172:98::-;51223:6;51257:5;51251:12;51241:22;;51172:98;;;:::o;51276:168::-;51359:11;51393:6;51388:3;51381:19;51433:4;51428:3;51424:14;51409:29;;51276:168;;;;:::o;51450:373::-;51536:3;51564:38;51596:5;51564:38;:::i;:::-;51618:70;51681:6;51676:3;51618:70;:::i;:::-;51611:77;;51697:65;51755:6;51750:3;51743:4;51736:5;51732:16;51697:65;:::i;:::-;51787:29;51809:6;51787:29;:::i;:::-;51782:3;51778:39;51771:46;;51540:283;51450:373;;;;:::o;51829:640::-;52024:4;52062:3;52051:9;52047:19;52039:27;;52076:71;52144:1;52133:9;52129:17;52120:6;52076:71;:::i;:::-;52157:72;52225:2;52214:9;52210:18;52201:6;52157:72;:::i;:::-;52239;52307:2;52296:9;52292:18;52283:6;52239:72;:::i;:::-;52358:9;52352:4;52348:20;52343:2;52332:9;52328:18;52321:48;52386:76;52457:4;52448:6;52386:76;:::i;:::-;52378:84;;51829:640;;;;;;;:::o;52475:141::-;52531:5;52562:6;52556:13;52547:22;;52578:32;52604:5;52578:32;:::i;:::-;52475:141;;;;:::o;52622:349::-;52691:6;52740:2;52728:9;52719:7;52715:23;52711:32;52708:119;;;52746:79;;:::i;:::-;52708:119;52866:1;52891:63;52946:7;52937:6;52926:9;52922:22;52891:63;:::i;:::-;52881:73;;52837:127;52622:349;;;;:::o;52977:182::-;53117:34;53113:1;53105:6;53101:14;53094:58;52977:182;:::o;53165:366::-;53307:3;53328:67;53392:2;53387:3;53328:67;:::i;:::-;53321:74;;53404:93;53493:3;53404:93;:::i;:::-;53522:2;53517:3;53513:12;53506:19;;53165:366;;;:::o;53537:419::-;53703:4;53741:2;53730:9;53726:18;53718:26;;53790:9;53784:4;53780:20;53776:1;53765:9;53761:17;53754:47;53818:131;53944:4;53818:131;:::i;:::-;53810:139;;53537:419;;;:::o;53962:178::-;54102:30;54098:1;54090:6;54086:14;54079:54;53962:178;:::o;54146:366::-;54288:3;54309:67;54373:2;54368:3;54309:67;:::i;:::-;54302:74;;54385:93;54474:3;54385:93;:::i;:::-;54503:2;54498:3;54494:12;54487:19;;54146:366;;;:::o;54518:419::-;54684:4;54722:2;54711:9;54707:18;54699:26;;54771:9;54765:4;54761:20;54757:1;54746:9;54742:17;54735:47;54799:131;54925:4;54799:131;:::i;:::-;54791:139;;54518:419;;;:::o;54943:225::-;55083:34;55079:1;55071:6;55067:14;55060:58;55152:8;55147:2;55139:6;55135:15;55128:33;54943:225;:::o;55174:366::-;55316:3;55337:67;55401:2;55396:3;55337:67;:::i;:::-;55330:74;;55413:93;55502:3;55413:93;:::i;:::-;55531:2;55526:3;55522:12;55515:19;;55174:366;;;:::o;55546:419::-;55712:4;55750:2;55739:9;55735:18;55727:26;;55799:9;55793:4;55789:20;55785:1;55774:9;55770:17;55763:47;55827:131;55953:4;55827:131;:::i;:::-;55819:139;;55546:419;;;:::o;55971:179::-;56111:31;56107:1;56099:6;56095:14;56088:55;55971:179;:::o;56156:366::-;56298:3;56319:67;56383:2;56378:3;56319:67;:::i;:::-;56312:74;;56395:93;56484:3;56395:93;:::i;:::-;56513:2;56508:3;56504:12;56497:19;;56156:366;;;:::o;56528:419::-;56694:4;56732:2;56721:9;56717:18;56709:26;;56781:9;56775:4;56771:20;56767:1;56756:9;56752:17;56745:47;56809:131;56935:4;56809:131;:::i;:::-;56801:139;;56528:419;;;:::o;56953:386::-;57057:3;57085:38;57117:5;57085:38;:::i;:::-;57139:88;57220:6;57215:3;57139:88;:::i;:::-;57132:95;;57236:65;57294:6;57289:3;57282:4;57275:5;57271:16;57236:65;:::i;:::-;57326:6;57321:3;57317:16;57310:23;;57061:278;56953:386;;;;:::o;57345:271::-;57475:3;57497:93;57586:3;57577:6;57497:93;:::i;:::-;57490:100;;57607:3;57600:10;;57345:271;;;;:::o
Swarm Source
ipfs://6b0c70446d96c86ce3a34faa5d5392083ea82882be2e6cadde9af17e06f5f2de
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
OP | 100.00% | $3,027.03 | 0.01 | $30.27 |
Loading...
Loading
[ 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.