ERC-1155
Overview
Max Total Supply
396 WCASB
Holders
67
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WCAStrongBox
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-26 */ // 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/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // 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/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/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.8.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/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/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] memory accounts, uint256[] memory ids ) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint(address to, uint256 id, uint256 amount, bytes memory data) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn(address from, uint256 id, uint256 amount) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch(address from, uint256[] memory ids, uint256[] memory amounts) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @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, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn(address account, uint256 id, uint256 value) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner or approved" ); _burn(account, id, value); } function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner or approved" ); _burnBatch(account, ids, values); } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC1155 token with storage based token URI management. * Inspired by the ERC721URIStorage extension * * _Available since v4.6._ */ abstract contract ERC1155URIStorage is ERC1155 { using Strings for uint256; // Optional base URI string private _baseURI = ""; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the concatenation of the `_baseURI` * and the token-specific uri if the latter is set * * This enables the following behaviors: * * - if `_tokenURIs[tokenId]` is set, then the result is the concatenation * of `_baseURI` and `_tokenURIs[tokenId]` (keep in mind that `_baseURI` * is empty per default); * * - if `_tokenURIs[tokenId]` is NOT set then we fallback to `super.uri()` * which in most cases will contain `ERC1155._uri`; * * - if `_tokenURIs[tokenId]` is NOT set, and if the parents do not have a * uri value set, then the result is empty. */ function uri(uint256 tokenId) public view virtual override returns (string memory) { string memory tokenURI = _tokenURIs[tokenId]; // If token URI is set, concatenate base URI and tokenURI (via abi.encodePacked). return bytes(tokenURI).length > 0 ? string(abi.encodePacked(_baseURI, tokenURI)) : super.uri(tokenId); } /** * @dev Sets `tokenURI` as the tokenURI of `tokenId`. */ function _setURI(uint256 tokenId, string memory tokenURI) internal virtual { _tokenURIs[tokenId] = tokenURI; emit URI(uri(tokenId), tokenId); } /** * @dev Sets `baseURI` as the `_baseURI` for all tokens */ function _setBaseURI(string memory baseURI) internal virtual { _baseURI = baseURI; } } // 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: contracts/WCAStrongBox.sol pragma solidity ^0.8.19; abstract contract AbstractERC1155Factory is ERC1155Supply, ERC1155Burnable, Ownable { string name_; string symbol_; function setURI(string memory baseURI) external onlyOwner { _setURI(baseURI); } function name() public view returns (string memory) { return name_; } function symbol() public view returns (string memory) { return symbol_; } function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } } contract WCAStrongBox is AbstractERC1155Factory { using SafeERC20 for IERC20; error Unauthorized(); error MintingNotEnabled(); error NotEnoughTokensLeft(); IERC20 public USDT; IWCAStrongBoxManager public WCAStrongBoxManager; mapping(uint256 => uint256) public tokenIdToRemainingTokens; mapping(uint256 => uint256) public tokenIdToPrice; bool public mintingEnabled = true; constructor(address _USDT, string memory uri) ERC1155(uri) { name_ = "WCA Strong Box"; symbol_ = "WCASB"; USDT = IERC20(_USDT); tokenIdToPrice[1] = 100e6; tokenIdToRemainingTokens[1] = 5000; } modifier canMint(uint256 tokenId) { if (!mintingEnabled) { revert MintingNotEnabled(); } if (tokenIdToRemainingTokens[tokenId] == 0) { revert NotEnoughTokensLeft(); } _; } function setManager(address _WCAStrongBoxManager) external onlyOwner { WCAStrongBoxManager = IWCAStrongBoxManager(_WCAStrongBoxManager); } function setBaseTokenURI(string calldata uri) external onlyOwner { _setURI(uri); } function setPrice(uint256 tokenId, uint256 _price) external onlyOwner { tokenIdToPrice[tokenId] = _price; } function setRemainingPacks(uint256 tokenId, uint256 amount) external onlyOwner { tokenIdToRemainingTokens[tokenId] = amount; } function toggleMintingEnabled() external onlyOwner { mintingEnabled = !mintingEnabled; } function mint( address account, uint256 tokenId, uint256 amount, address sponsor ) external canMint(tokenId) { // Transfer USDT from user to contract USDT.safeTransferFrom(msg.sender, address(WCAStrongBoxManager), tokenIdToPrice[tokenId] * amount); // Mint a pack _mint(account, tokenId, amount, ""); // Decrease the amount of packs left tokenIdToRemainingTokens[tokenId] -= amount; // Call the manager WCAStrongBoxManager.onPurchased(account, tokenId, tokenIdToPrice[tokenId], amount, sponsor); } } interface IWCAStrongBoxManager { function onPurchased( address account, uint256 tokenId, uint256 price, uint256 amount, address sponsor ) external; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_USDT","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"MintingNotEnabled","type":"error"},{"inputs":[],"name":"NotEnoughTokensLeft","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WCAStrongBoxManager","outputs":[{"internalType":"contract IWCAStrongBoxManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sponsor","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_WCAStrongBoxManager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRemainingPacks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMintingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToRemainingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526001600b60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051620051dc380380620051dc83398181016040528101906200005291906200046f565b8062000064816200019460201b60201c565b506200008562000079620001a960201b60201c565b620001b160201b60201c565b6040518060400160405280600e81526020017f574341205374726f6e6720426f7800000000000000000000000000000000000081525060059081620000cb919062000720565b506040518060400160405280600581526020017f57434153420000000000000000000000000000000000000000000000000000008152506006908162000112919062000720565b5081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506305f5e100600a60006001815260200190815260200160002081905550611388600960006001815260200190815260200160002081905550505062000807565b8060029081620001a5919062000720565b5050565b600033905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002b8826200028b565b9050919050565b620002ca81620002ab565b8114620002d657600080fd5b50565b600081519050620002ea81620002bf565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200034582620002fa565b810181811067ffffffffffffffff821117156200036757620003666200030b565b5b80604052505050565b60006200037c62000277565b90506200038a82826200033a565b919050565b600067ffffffffffffffff821115620003ad57620003ac6200030b565b5b620003b882620002fa565b9050602081019050919050565b60005b83811015620003e5578082015181840152602081019050620003c8565b60008484015250505050565b60006200040862000402846200038f565b62000370565b905082815260208101848484011115620004275762000426620002f5565b5b62000434848285620003c5565b509392505050565b600082601f830112620004545762000453620002f0565b5b815162000466848260208601620003f1565b91505092915050565b6000806040838503121562000489576200048862000281565b5b60006200049985828601620002d9565b925050602083015167ffffffffffffffff811115620004bd57620004bc62000286565b5b620004cb858286016200043c565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200052857607f821691505b6020821081036200053e576200053d620004e0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000569565b620005b4868362000569565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000601620005fb620005f584620005cc565b620005d6565b620005cc565b9050919050565b6000819050919050565b6200061d83620005e0565b620006356200062c8262000608565b84845462000576565b825550505050565b600090565b6200064c6200063d565b6200065981848462000612565b505050565b5b8181101562000681576200067560008262000642565b6001810190506200065f565b5050565b601f821115620006d0576200069a8162000544565b620006a58462000559565b81016020851015620006b5578190505b620006cd620006c48562000559565b8301826200065e565b50505b505050565b600082821c905092915050565b6000620006f560001984600802620006d5565b1980831691505092915050565b6000620007108383620006e2565b9150826002028217905092915050565b6200072b82620004d5565b67ffffffffffffffff8111156200074757620007466200030b565b5b6200075382546200050f565b6200076082828562000685565b600060209050601f83116001811462000798576000841562000783578287015190505b6200078f858262000702565b865550620007ff565b601f198416620007a88662000544565b60005b82811015620007d257848901518255600182019150602085019450602081019050620007ab565b86831015620007f25784890151620007ee601f891682620006e2565b8355505b6001600288020188555050505b505050505050565b6149c580620008176000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c806395d89b4111610104578063e985e9c5116100a2578063f4812eb911610071578063f4812eb914610517578063f5298aca14610547578063f74bfe8e14610563578063f7d975771461057f576101ce565b8063e985e9c514610493578063e9c85501146104c3578063f242432a146104df578063f2fde38b146104fb576101ce565b8063ba93dece116100de578063ba93dece146103f9578063bd85b03914610429578063c54e44eb14610459578063d0ebdbe714610477576101ce565b806395d89b41146103a15780639fd6db12146103bf578063a22cb465146103dd576101ce565b80634e1273f4116101715780636b20c4541161014b5780636b20c4541461033f578063715018a61461035b5780638da5cb5b146103655780638f376f9914610383576101ce565b80634e1273f4146102d55780634f558e79146103055780635196e06014610335576101ce565b806306fdde03116101ad57806306fdde031461024f5780630e89341c1461026d5780632eb2c2d61461029d57806330176e13146102b9576101ce565b8062fdd58e146101d357806301ffc9a71461020357806302fe530514610233575b600080fd5b6101ed60048036038101906101e89190612b8a565b61059b565b6040516101fa9190612bd9565b60405180910390f35b61021d60048036038101906102189190612c4c565b610663565b60405161022a9190612c94565b60405180910390f35b61024d60048036038101906102489190612df5565b610745565b005b610257610759565b6040516102649190612ebd565b60405180910390f35b61028760048036038101906102829190612edf565b6107eb565b6040516102949190612ebd565b60405180910390f35b6102b760048036038101906102b29190613075565b61087f565b005b6102d360048036038101906102ce919061319f565b610920565b005b6102ef60048036038101906102ea91906132af565b610979565b6040516102fc91906133e5565b60405180910390f35b61031f600480360381019061031a9190612edf565b610a92565b60405161032c9190612c94565b60405180910390f35b61033d610aa6565b005b61035960048036038101906103549190613407565b610ada565b005b610363610b77565b005b61036d610b8b565b60405161037a91906134a1565b60405180910390f35b61038b610bb5565b604051610398919061351b565b60405180910390f35b6103a9610bdb565b6040516103b69190612ebd565b60405180910390f35b6103c7610c6d565b6040516103d49190612c94565b60405180910390f35b6103f760048036038101906103f29190613562565b610c80565b005b610413600480360381019061040e9190612edf565b610c96565b6040516104209190612bd9565b60405180910390f35b610443600480360381019061043e9190612edf565b610cae565b6040516104509190612bd9565b60405180910390f35b610461610ccb565b60405161046e91906135c3565b60405180910390f35b610491600480360381019061048c91906135de565b610cf1565b005b6104ad60048036038101906104a8919061360b565b610d3d565b6040516104ba9190612c94565b60405180910390f35b6104dd60048036038101906104d8919061364b565b610dd1565b005b6104f960048036038101906104f4919061368b565b610df5565b005b610515600480360381019061051091906135de565b610e96565b005b610531600480360381019061052c9190612edf565b610f19565b60405161053e9190612bd9565b60405180910390f35b610561600480360381019061055c9190613722565b610f31565b005b61057d60048036038101906105789190613775565b610fce565b005b6105996004803603810190610594919061364b565b6111e5565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361060b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106029061384e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061073e575061073d82611209565b5b9050919050565b61074d611273565b610756816112f1565b50565b6060600580546107689061389d565b80601f01602080910402602001604051908101604052809291908181526020018280546107949061389d565b80156107e15780601f106107b6576101008083540402835291602001916107e1565b820191906000526020600020905b8154815290600101906020018083116107c457829003601f168201915b5050505050905090565b6060600280546107fa9061389d565b80601f01602080910402602001604051908101604052809291908181526020018280546108269061389d565b80156108735780601f1061084857610100808354040283529160200191610873565b820191906000526020600020905b81548152906001019060200180831161085657829003601f168201915b50505050509050919050565b610887611304565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108cd57506108cc856108c7611304565b610d3d565b5b61090c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090390613940565b60405180910390fd5b610919858585858561130c565b5050505050565b610928611273565b61097582828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506112f1565b5050565b606081518351146109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b6906139d2565b60405180910390fd5b6000835167ffffffffffffffff8111156109dc576109db612cca565b5b604051908082528060200260200182016040528015610a0a5781602001602082028036833780820191505090505b50905060005b8451811015610a8757610a57858281518110610a2f57610a2e6139f2565b5b6020026020010151858381518110610a4a57610a496139f2565b5b602002602001015161059b565b828281518110610a6a57610a696139f2565b5b60200260200101818152505080610a8090613a50565b9050610a10565b508091505092915050565b600080610a9e83610cae565b119050919050565b610aae611273565b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b610ae2611304565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b285750610b2783610b22611304565b610d3d565b5b610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e90613940565b60405180910390fd5b610b7283838361162d565b505050565b610b7f611273565b610b8960006118fb565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060068054610bea9061389d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c169061389d565b8015610c635780601f10610c3857610100808354040283529160200191610c63565b820191906000526020600020905b815481529060010190602001808311610c4657829003601f168201915b5050505050905090565b600b60009054906101000a900460ff1681565b610c92610c8b611304565b83836119c1565b5050565b60096020528060005260406000206000915090505481565b600060036000838152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cf9611273565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610dd9611273565b8060096000848152602001908152602001600020819055505050565b610dfd611304565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e435750610e4285610e3d611304565b610d3d565b5b610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990613940565b60405180910390fd5b610e8f8585858585611b2d565b5050505050565b610e9e611273565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490613b0a565b60405180910390fd5b610f16816118fb565b50565b600a6020528060005260406000206000915090505481565b610f39611304565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610f7f5750610f7e83610f79611304565b610d3d565b5b610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613940565b60405180910390fd5b610fc9838383611dc8565b505050565b82600b60009054906101000a900460ff16611015576040517f3990ac6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600960008381526020019081526020016000205403611062576040517f76592c6f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110f133600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600a6000898152602001908152602001600020546110a89190613b2a565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661200e909392919063ffffffff16565b61110c85858560405180602001604052806000815250612097565b8260096000868152602001908152602001600020600082825461112f9190613b6c565b92505081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c49462998686600a60008981526020019081526020016000205487876040518663ffffffff1660e01b81526004016111ac959493929190613ba0565b600060405180830381600087803b1580156111c657600080fd5b505af11580156111da573d6000803e3d6000fd5b505050505050505050565b6111ed611273565b80600a6000848152602001908152602001600020819055505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61127b611304565b73ffffffffffffffffffffffffffffffffffffffff16611299610b8b565b73ffffffffffffffffffffffffffffffffffffffff16146112ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e690613c3f565b60405180910390fd5b565b80600290816113009190613e01565b5050565b600033905090565b8151835114611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790613f45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690613fd7565b60405180910390fd5b60006113c9611304565b90506113d9818787878787612247565b60005b845181101561158a5760008582815181106113fa576113f96139f2565b5b602002602001015190506000858381518110611419576114186139f2565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190614069565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461156f9190614089565b925050819055505050508061158390613a50565b90506113dc565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116019291906140bd565b60405180910390a461161781878787878761225d565b611625818787878787612265565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390614166565b60405180910390fd5b80518251146116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d790613f45565b60405180910390fd5b60006116ea611304565b905061170a81856000868660405180602001604052806000815250612247565b60005b835181101561185757600084828151811061172b5761172a6139f2565b5b60200260200101519050600084838151811061174a576117496139f2565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e2906141f8565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061184f90613a50565b91505061170d565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516118cf9291906140bd565b60405180910390a46118f58185600086866040518060200160405280600081525061225d565b50505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a269061428a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b209190612c94565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390613fd7565b60405180910390fd5b6000611ba6611304565b90506000611bb38561243c565b90506000611bc08561243c565b9050611bd0838989858589612247565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90614069565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d1c9190614089565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611d999291906142aa565b60405180910390a4611daf848a8a86868a61225d565b611dbd848a8a8a8a8a6124b6565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90614166565b60405180910390fd5b6000611e41611304565b90506000611e4e8461243c565b90506000611e5b8461243c565b9050611e7b83876000858560405180602001604052806000815250612247565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f09906141f8565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611fdf9291906142aa565b60405180910390a46120058488600086866040518060200160405280600081525061225d565b50505050505050565b612091846323b872dd60e01b85858560405160240161202f939291906142d3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061268d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd9061437c565b60405180910390fd5b6000612110611304565b9050600061211d8561243c565b9050600061212a8561243c565b905061213b83600089858589612247565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219a9190614089565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516122189291906142aa565b60405180910390a461222f8360008985858961225d565b61223e836000898989896124b6565b50505050505050565b612255868686868686612754565b505050505050565b505050505050565b6122848473ffffffffffffffffffffffffffffffffffffffff16612924565b15612434578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016122ca9594939291906143f1565b6020604051808303816000875af192505050801561230657506040513d601f19601f82011682018060405250810190612303919061446e565b60015b6123ab576123126144a8565b806308c379a00361236e57506123266144ca565b806123315750612370565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123659190612ebd565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a2906145cc565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124299061465e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561245b5761245a612cca565b5b6040519080825280602002602001820160405280156124895781602001602082028036833780820191505090505b50905082816000815181106124a1576124a06139f2565b5b60200260200101818152505080915050919050565b6124d58473ffffffffffffffffffffffffffffffffffffffff16612924565b15612685578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161251b95949392919061467e565b6020604051808303816000875af192505050801561255757506040513d601f19601f82011682018060405250810190612554919061446e565b60015b6125fc576125636144a8565b806308c379a0036125bf57506125776144ca565b8061258257506125c1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b69190612ebd565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f3906145cc565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a9061465e565b60405180910390fd5b505b505050505050565b60006126ef826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166129479092919063ffffffff16565b905060008151111561274f578080602001905181019061270f91906146ed565b61274e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127459061478c565b60405180910390fd5b5b505050565b61276286868686868661295f565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036128135760005b8351811015612811578281815181106127b5576127b46139f2565b5b6020026020010151600360008684815181106127d4576127d36139f2565b5b6020026020010151815260200190815260200160002060008282546127f99190614089565b925050819055508061280a90613a50565b9050612799565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361291c5760005b835181101561291a576000848281518110612868576128676139f2565b5b602002602001015190506000848381518110612887576128866139f2565b5b60200260200101519050600060036000848152602001908152602001600020549050818110156128ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e39061481e565b60405180910390fd5b81810360036000858152602001908152602001600020819055505050508061291390613a50565b905061284a565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60606129568484600085612967565b90509392505050565b505050505050565b6060824710156129ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a3906148b0565b60405180910390fd5b6129b585612924565b6129f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129eb9061491c565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612a1d9190614978565b60006040518083038185875af1925050503d8060008114612a5a576040519150601f19603f3d011682016040523d82523d6000602084013e612a5f565b606091505b5091509150612a6f828286612a7b565b92505050949350505050565b60608315612a8b57829050612adb565b600083511115612a9e5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad29190612ebd565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2182612af6565b9050919050565b612b3181612b16565b8114612b3c57600080fd5b50565b600081359050612b4e81612b28565b92915050565b6000819050919050565b612b6781612b54565b8114612b7257600080fd5b50565b600081359050612b8481612b5e565b92915050565b60008060408385031215612ba157612ba0612aec565b5b6000612baf85828601612b3f565b9250506020612bc085828601612b75565b9150509250929050565b612bd381612b54565b82525050565b6000602082019050612bee6000830184612bca565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c2981612bf4565b8114612c3457600080fd5b50565b600081359050612c4681612c20565b92915050565b600060208284031215612c6257612c61612aec565b5b6000612c7084828501612c37565b91505092915050565b60008115159050919050565b612c8e81612c79565b82525050565b6000602082019050612ca96000830184612c85565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d0282612cb9565b810181811067ffffffffffffffff82111715612d2157612d20612cca565b5b80604052505050565b6000612d34612ae2565b9050612d408282612cf9565b919050565b600067ffffffffffffffff821115612d6057612d5f612cca565b5b612d6982612cb9565b9050602081019050919050565b82818337600083830152505050565b6000612d98612d9384612d45565b612d2a565b905082815260208101848484011115612db457612db3612cb4565b5b612dbf848285612d76565b509392505050565b600082601f830112612ddc57612ddb612caf565b5b8135612dec848260208601612d85565b91505092915050565b600060208284031215612e0b57612e0a612aec565b5b600082013567ffffffffffffffff811115612e2957612e28612af1565b5b612e3584828501612dc7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e78578082015181840152602081019050612e5d565b60008484015250505050565b6000612e8f82612e3e565b612e998185612e49565b9350612ea9818560208601612e5a565b612eb281612cb9565b840191505092915050565b60006020820190508181036000830152612ed78184612e84565b905092915050565b600060208284031215612ef557612ef4612aec565b5b6000612f0384828501612b75565b91505092915050565b600067ffffffffffffffff821115612f2757612f26612cca565b5b602082029050602081019050919050565b600080fd5b6000612f50612f4b84612f0c565b612d2a565b90508083825260208201905060208402830185811115612f7357612f72612f38565b5b835b81811015612f9c5780612f888882612b75565b845260208401935050602081019050612f75565b5050509392505050565b600082601f830112612fbb57612fba612caf565b5b8135612fcb848260208601612f3d565b91505092915050565b600067ffffffffffffffff821115612fef57612fee612cca565b5b612ff882612cb9565b9050602081019050919050565b600061301861301384612fd4565b612d2a565b90508281526020810184848401111561303457613033612cb4565b5b61303f848285612d76565b509392505050565b600082601f83011261305c5761305b612caf565b5b813561306c848260208601613005565b91505092915050565b600080600080600060a0868803121561309157613090612aec565b5b600061309f88828901612b3f565b95505060206130b088828901612b3f565b945050604086013567ffffffffffffffff8111156130d1576130d0612af1565b5b6130dd88828901612fa6565b935050606086013567ffffffffffffffff8111156130fe576130fd612af1565b5b61310a88828901612fa6565b925050608086013567ffffffffffffffff81111561312b5761312a612af1565b5b61313788828901613047565b9150509295509295909350565b600080fd5b60008083601f84011261315f5761315e612caf565b5b8235905067ffffffffffffffff81111561317c5761317b613144565b5b60208301915083600182028301111561319857613197612f38565b5b9250929050565b600080602083850312156131b6576131b5612aec565b5b600083013567ffffffffffffffff8111156131d4576131d3612af1565b5b6131e085828601613149565b92509250509250929050565b600067ffffffffffffffff82111561320757613206612cca565b5b602082029050602081019050919050565b600061322b613226846131ec565b612d2a565b9050808382526020820190506020840283018581111561324e5761324d612f38565b5b835b8181101561327757806132638882612b3f565b845260208401935050602081019050613250565b5050509392505050565b600082601f83011261329657613295612caf565b5b81356132a6848260208601613218565b91505092915050565b600080604083850312156132c6576132c5612aec565b5b600083013567ffffffffffffffff8111156132e4576132e3612af1565b5b6132f085828601613281565b925050602083013567ffffffffffffffff81111561331157613310612af1565b5b61331d85828601612fa6565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61335c81612b54565b82525050565b600061336e8383613353565b60208301905092915050565b6000602082019050919050565b600061339282613327565b61339c8185613332565b93506133a783613343565b8060005b838110156133d85781516133bf8882613362565b97506133ca8361337a565b9250506001810190506133ab565b5085935050505092915050565b600060208201905081810360008301526133ff8184613387565b905092915050565b6000806000606084860312156134205761341f612aec565b5b600061342e86828701612b3f565b935050602084013567ffffffffffffffff81111561344f5761344e612af1565b5b61345b86828701612fa6565b925050604084013567ffffffffffffffff81111561347c5761347b612af1565b5b61348886828701612fa6565b9150509250925092565b61349b81612b16565b82525050565b60006020820190506134b66000830184613492565b92915050565b6000819050919050565b60006134e16134dc6134d784612af6565b6134bc565b612af6565b9050919050565b60006134f3826134c6565b9050919050565b6000613505826134e8565b9050919050565b613515816134fa565b82525050565b6000602082019050613530600083018461350c565b92915050565b61353f81612c79565b811461354a57600080fd5b50565b60008135905061355c81613536565b92915050565b6000806040838503121561357957613578612aec565b5b600061358785828601612b3f565b92505060206135988582860161354d565b9150509250929050565b60006135ad826134e8565b9050919050565b6135bd816135a2565b82525050565b60006020820190506135d860008301846135b4565b92915050565b6000602082840312156135f4576135f3612aec565b5b600061360284828501612b3f565b91505092915050565b6000806040838503121561362257613621612aec565b5b600061363085828601612b3f565b925050602061364185828601612b3f565b9150509250929050565b6000806040838503121561366257613661612aec565b5b600061367085828601612b75565b925050602061368185828601612b75565b9150509250929050565b600080600080600060a086880312156136a7576136a6612aec565b5b60006136b588828901612b3f565b95505060206136c688828901612b3f565b94505060406136d788828901612b75565b93505060606136e888828901612b75565b925050608086013567ffffffffffffffff81111561370957613708612af1565b5b61371588828901613047565b9150509295509295909350565b60008060006060848603121561373b5761373a612aec565b5b600061374986828701612b3f565b935050602061375a86828701612b75565b925050604061376b86828701612b75565b9150509250925092565b6000806000806080858703121561378f5761378e612aec565b5b600061379d87828801612b3f565b94505060206137ae87828801612b75565b93505060406137bf87828801612b75565b92505060606137d087828801612b3f565b91505092959194509250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000613838602a83612e49565b9150613843826137dc565b604082019050919050565b600060208201905081810360008301526138678161382b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138b557607f821691505b6020821081036138c8576138c761386e565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b600061392a602e83612e49565b9150613935826138ce565b604082019050919050565b600060208201905081810360008301526139598161391d565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006139bc602983612e49565b91506139c782613960565b604082019050919050565b600060208201905081810360008301526139eb816139af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a5b82612b54565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a8d57613a8c613a21565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613af4602683612e49565b9150613aff82613a98565b604082019050919050565b60006020820190508181036000830152613b2381613ae7565b9050919050565b6000613b3582612b54565b9150613b4083612b54565b9250828202613b4e81612b54565b91508282048414831517613b6557613b64613a21565b5b5092915050565b6000613b7782612b54565b9150613b8283612b54565b9250828203905081811115613b9a57613b99613a21565b5b92915050565b600060a082019050613bb56000830188613492565b613bc26020830187612bca565b613bcf6040830186612bca565b613bdc6060830185612bca565b613be96080830184613492565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c29602083612e49565b9150613c3482613bf3565b602082019050919050565b60006020820190508181036000830152613c5881613c1c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613cc17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c84565b613ccb8683613c84565b95508019841693508086168417925050509392505050565b6000613cfe613cf9613cf484612b54565b6134bc565b612b54565b9050919050565b6000819050919050565b613d1883613ce3565b613d2c613d2482613d05565b848454613c91565b825550505050565b600090565b613d41613d34565b613d4c818484613d0f565b505050565b5b81811015613d7057613d65600082613d39565b600181019050613d52565b5050565b601f821115613db557613d8681613c5f565b613d8f84613c74565b81016020851015613d9e578190505b613db2613daa85613c74565b830182613d51565b50505b505050565b600082821c905092915050565b6000613dd860001984600802613dba565b1980831691505092915050565b6000613df18383613dc7565b9150826002028217905092915050565b613e0a82612e3e565b67ffffffffffffffff811115613e2357613e22612cca565b5b613e2d825461389d565b613e38828285613d74565b600060209050601f831160018114613e6b5760008415613e59578287015190505b613e638582613de5565b865550613ecb565b601f198416613e7986613c5f565b60005b82811015613ea157848901518255600182019150602085019450602081019050613e7c565b86831015613ebe5784890151613eba601f891682613dc7565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613f2f602883612e49565b9150613f3a82613ed3565b604082019050919050565b60006020820190508181036000830152613f5e81613f22565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fc1602583612e49565b9150613fcc82613f65565b604082019050919050565b60006020820190508181036000830152613ff081613fb4565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614053602a83612e49565b915061405e82613ff7565b604082019050919050565b6000602082019050818103600083015261408281614046565b9050919050565b600061409482612b54565b915061409f83612b54565b92508282019050808211156140b7576140b6613a21565b5b92915050565b600060408201905081810360008301526140d78185613387565b905081810360208301526140eb8184613387565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614150602383612e49565b915061415b826140f4565b604082019050919050565b6000602082019050818103600083015261417f81614143565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006141e2602483612e49565b91506141ed82614186565b604082019050919050565b60006020820190508181036000830152614211816141d5565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614274602983612e49565b915061427f82614218565b604082019050919050565b600060208201905081810360008301526142a381614267565b9050919050565b60006040820190506142bf6000830185612bca565b6142cc6020830184612bca565b9392505050565b60006060820190506142e86000830186613492565b6142f56020830185613492565b6143026040830184612bca565b949350505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614366602183612e49565b91506143718261430a565b604082019050919050565b6000602082019050818103600083015261439581614359565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006143c38261439c565b6143cd81856143a7565b93506143dd818560208601612e5a565b6143e681612cb9565b840191505092915050565b600060a0820190506144066000830188613492565b6144136020830187613492565b81810360408301526144258186613387565b905081810360608301526144398185613387565b9050818103608083015261444d81846143b8565b90509695505050505050565b60008151905061446881612c20565b92915050565b60006020828403121561448457614483612aec565b5b600061449284828501614459565b91505092915050565b60008160e01c9050919050565b600060033d11156144c75760046000803e6144c460005161449b565b90505b90565b600060443d10614557576144dc612ae2565b60043d036004823e80513d602482011167ffffffffffffffff82111715614504575050614557565b808201805167ffffffffffffffff8111156145225750505050614557565b80602083010160043d03850181111561453f575050505050614557565b61454e82602001850186612cf9565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006145b6603483612e49565b91506145c18261455a565b604082019050919050565b600060208201905081810360008301526145e5816145a9565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614648602883612e49565b9150614653826145ec565b604082019050919050565b600060208201905081810360008301526146778161463b565b9050919050565b600060a0820190506146936000830188613492565b6146a06020830187613492565b6146ad6040830186612bca565b6146ba6060830185612bca565b81810360808301526146cc81846143b8565b90509695505050505050565b6000815190506146e781613536565b92915050565b60006020828403121561470357614702612aec565b5b6000614711848285016146d8565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614776602a83612e49565b91506147818261471a565b604082019050919050565b600060208201905081810360008301526147a581614769565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000614808602883612e49565b9150614813826147ac565b604082019050919050565b60006020820190508181036000830152614837816147fb565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061489a602683612e49565b91506148a58261483e565b604082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614906601d83612e49565b9150614911826148d0565b602082019050919050565b60006020820190508181036000830152614935816148f9565b9050919050565b600081905092915050565b60006149528261439c565b61495c818561493c565b935061496c818560208601612e5a565b80840191505092915050565b60006149848284614947565b91508190509291505056fea264697066735822122090bcb63b0545abc032b353065912da2c2071bd2291ea28788fe0643312f9734864736f6c63430008130033000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000042697066733a2f2f6261666b72656964777273666577346d616a7463613673366c3575746a6f627279726b6f6e346c626e646373676666326c35626776667935336469000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101ce5760003560e01c806395d89b4111610104578063e985e9c5116100a2578063f4812eb911610071578063f4812eb914610517578063f5298aca14610547578063f74bfe8e14610563578063f7d975771461057f576101ce565b8063e985e9c514610493578063e9c85501146104c3578063f242432a146104df578063f2fde38b146104fb576101ce565b8063ba93dece116100de578063ba93dece146103f9578063bd85b03914610429578063c54e44eb14610459578063d0ebdbe714610477576101ce565b806395d89b41146103a15780639fd6db12146103bf578063a22cb465146103dd576101ce565b80634e1273f4116101715780636b20c4541161014b5780636b20c4541461033f578063715018a61461035b5780638da5cb5b146103655780638f376f9914610383576101ce565b80634e1273f4146102d55780634f558e79146103055780635196e06014610335576101ce565b806306fdde03116101ad57806306fdde031461024f5780630e89341c1461026d5780632eb2c2d61461029d57806330176e13146102b9576101ce565b8062fdd58e146101d357806301ffc9a71461020357806302fe530514610233575b600080fd5b6101ed60048036038101906101e89190612b8a565b61059b565b6040516101fa9190612bd9565b60405180910390f35b61021d60048036038101906102189190612c4c565b610663565b60405161022a9190612c94565b60405180910390f35b61024d60048036038101906102489190612df5565b610745565b005b610257610759565b6040516102649190612ebd565b60405180910390f35b61028760048036038101906102829190612edf565b6107eb565b6040516102949190612ebd565b60405180910390f35b6102b760048036038101906102b29190613075565b61087f565b005b6102d360048036038101906102ce919061319f565b610920565b005b6102ef60048036038101906102ea91906132af565b610979565b6040516102fc91906133e5565b60405180910390f35b61031f600480360381019061031a9190612edf565b610a92565b60405161032c9190612c94565b60405180910390f35b61033d610aa6565b005b61035960048036038101906103549190613407565b610ada565b005b610363610b77565b005b61036d610b8b565b60405161037a91906134a1565b60405180910390f35b61038b610bb5565b604051610398919061351b565b60405180910390f35b6103a9610bdb565b6040516103b69190612ebd565b60405180910390f35b6103c7610c6d565b6040516103d49190612c94565b60405180910390f35b6103f760048036038101906103f29190613562565b610c80565b005b610413600480360381019061040e9190612edf565b610c96565b6040516104209190612bd9565b60405180910390f35b610443600480360381019061043e9190612edf565b610cae565b6040516104509190612bd9565b60405180910390f35b610461610ccb565b60405161046e91906135c3565b60405180910390f35b610491600480360381019061048c91906135de565b610cf1565b005b6104ad60048036038101906104a8919061360b565b610d3d565b6040516104ba9190612c94565b60405180910390f35b6104dd60048036038101906104d8919061364b565b610dd1565b005b6104f960048036038101906104f4919061368b565b610df5565b005b610515600480360381019061051091906135de565b610e96565b005b610531600480360381019061052c9190612edf565b610f19565b60405161053e9190612bd9565b60405180910390f35b610561600480360381019061055c9190613722565b610f31565b005b61057d60048036038101906105789190613775565b610fce565b005b6105996004803603810190610594919061364b565b6111e5565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361060b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106029061384e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061073e575061073d82611209565b5b9050919050565b61074d611273565b610756816112f1565b50565b6060600580546107689061389d565b80601f01602080910402602001604051908101604052809291908181526020018280546107949061389d565b80156107e15780601f106107b6576101008083540402835291602001916107e1565b820191906000526020600020905b8154815290600101906020018083116107c457829003601f168201915b5050505050905090565b6060600280546107fa9061389d565b80601f01602080910402602001604051908101604052809291908181526020018280546108269061389d565b80156108735780601f1061084857610100808354040283529160200191610873565b820191906000526020600020905b81548152906001019060200180831161085657829003601f168201915b50505050509050919050565b610887611304565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108cd57506108cc856108c7611304565b610d3d565b5b61090c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090390613940565b60405180910390fd5b610919858585858561130c565b5050505050565b610928611273565b61097582828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506112f1565b5050565b606081518351146109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b6906139d2565b60405180910390fd5b6000835167ffffffffffffffff8111156109dc576109db612cca565b5b604051908082528060200260200182016040528015610a0a5781602001602082028036833780820191505090505b50905060005b8451811015610a8757610a57858281518110610a2f57610a2e6139f2565b5b6020026020010151858381518110610a4a57610a496139f2565b5b602002602001015161059b565b828281518110610a6a57610a696139f2565b5b60200260200101818152505080610a8090613a50565b9050610a10565b508091505092915050565b600080610a9e83610cae565b119050919050565b610aae611273565b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b610ae2611304565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b285750610b2783610b22611304565b610d3d565b5b610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e90613940565b60405180910390fd5b610b7283838361162d565b505050565b610b7f611273565b610b8960006118fb565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060068054610bea9061389d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c169061389d565b8015610c635780601f10610c3857610100808354040283529160200191610c63565b820191906000526020600020905b815481529060010190602001808311610c4657829003601f168201915b5050505050905090565b600b60009054906101000a900460ff1681565b610c92610c8b611304565b83836119c1565b5050565b60096020528060005260406000206000915090505481565b600060036000838152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cf9611273565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610dd9611273565b8060096000848152602001908152602001600020819055505050565b610dfd611304565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e435750610e4285610e3d611304565b610d3d565b5b610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990613940565b60405180910390fd5b610e8f8585858585611b2d565b5050505050565b610e9e611273565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490613b0a565b60405180910390fd5b610f16816118fb565b50565b600a6020528060005260406000206000915090505481565b610f39611304565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610f7f5750610f7e83610f79611304565b610d3d565b5b610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613940565b60405180910390fd5b610fc9838383611dc8565b505050565b82600b60009054906101000a900460ff16611015576040517f3990ac6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600960008381526020019081526020016000205403611062576040517f76592c6f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110f133600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600a6000898152602001908152602001600020546110a89190613b2a565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661200e909392919063ffffffff16565b61110c85858560405180602001604052806000815250612097565b8260096000868152602001908152602001600020600082825461112f9190613b6c565b92505081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c49462998686600a60008981526020019081526020016000205487876040518663ffffffff1660e01b81526004016111ac959493929190613ba0565b600060405180830381600087803b1580156111c657600080fd5b505af11580156111da573d6000803e3d6000fd5b505050505050505050565b6111ed611273565b80600a6000848152602001908152602001600020819055505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61127b611304565b73ffffffffffffffffffffffffffffffffffffffff16611299610b8b565b73ffffffffffffffffffffffffffffffffffffffff16146112ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e690613c3f565b60405180910390fd5b565b80600290816113009190613e01565b5050565b600033905090565b8151835114611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790613f45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690613fd7565b60405180910390fd5b60006113c9611304565b90506113d9818787878787612247565b60005b845181101561158a5760008582815181106113fa576113f96139f2565b5b602002602001015190506000858381518110611419576114186139f2565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190614069565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461156f9190614089565b925050819055505050508061158390613a50565b90506113dc565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116019291906140bd565b60405180910390a461161781878787878761225d565b611625818787878787612265565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390614166565b60405180910390fd5b80518251146116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d790613f45565b60405180910390fd5b60006116ea611304565b905061170a81856000868660405180602001604052806000815250612247565b60005b835181101561185757600084828151811061172b5761172a6139f2565b5b60200260200101519050600084838151811061174a576117496139f2565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e2906141f8565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061184f90613a50565b91505061170d565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516118cf9291906140bd565b60405180910390a46118f58185600086866040518060200160405280600081525061225d565b50505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a269061428a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b209190612c94565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390613fd7565b60405180910390fd5b6000611ba6611304565b90506000611bb38561243c565b90506000611bc08561243c565b9050611bd0838989858589612247565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90614069565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d1c9190614089565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611d999291906142aa565b60405180910390a4611daf848a8a86868a61225d565b611dbd848a8a8a8a8a6124b6565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90614166565b60405180910390fd5b6000611e41611304565b90506000611e4e8461243c565b90506000611e5b8461243c565b9050611e7b83876000858560405180602001604052806000815250612247565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f09906141f8565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611fdf9291906142aa565b60405180910390a46120058488600086866040518060200160405280600081525061225d565b50505050505050565b612091846323b872dd60e01b85858560405160240161202f939291906142d3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061268d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd9061437c565b60405180910390fd5b6000612110611304565b9050600061211d8561243c565b9050600061212a8561243c565b905061213b83600089858589612247565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219a9190614089565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516122189291906142aa565b60405180910390a461222f8360008985858961225d565b61223e836000898989896124b6565b50505050505050565b612255868686868686612754565b505050505050565b505050505050565b6122848473ffffffffffffffffffffffffffffffffffffffff16612924565b15612434578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016122ca9594939291906143f1565b6020604051808303816000875af192505050801561230657506040513d601f19601f82011682018060405250810190612303919061446e565b60015b6123ab576123126144a8565b806308c379a00361236e57506123266144ca565b806123315750612370565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123659190612ebd565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a2906145cc565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124299061465e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561245b5761245a612cca565b5b6040519080825280602002602001820160405280156124895781602001602082028036833780820191505090505b50905082816000815181106124a1576124a06139f2565b5b60200260200101818152505080915050919050565b6124d58473ffffffffffffffffffffffffffffffffffffffff16612924565b15612685578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161251b95949392919061467e565b6020604051808303816000875af192505050801561255757506040513d601f19601f82011682018060405250810190612554919061446e565b60015b6125fc576125636144a8565b806308c379a0036125bf57506125776144ca565b8061258257506125c1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b69190612ebd565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f3906145cc565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a9061465e565b60405180910390fd5b505b505050505050565b60006126ef826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166129479092919063ffffffff16565b905060008151111561274f578080602001905181019061270f91906146ed565b61274e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127459061478c565b60405180910390fd5b5b505050565b61276286868686868661295f565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036128135760005b8351811015612811578281815181106127b5576127b46139f2565b5b6020026020010151600360008684815181106127d4576127d36139f2565b5b6020026020010151815260200190815260200160002060008282546127f99190614089565b925050819055508061280a90613a50565b9050612799565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361291c5760005b835181101561291a576000848281518110612868576128676139f2565b5b602002602001015190506000848381518110612887576128866139f2565b5b60200260200101519050600060036000848152602001908152602001600020549050818110156128ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e39061481e565b60405180910390fd5b81810360036000858152602001908152602001600020819055505050508061291390613a50565b905061284a565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60606129568484600085612967565b90509392505050565b505050505050565b6060824710156129ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a3906148b0565b60405180910390fd5b6129b585612924565b6129f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129eb9061491c565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612a1d9190614978565b60006040518083038185875af1925050503d8060008114612a5a576040519150601f19603f3d011682016040523d82523d6000602084013e612a5f565b606091505b5091509150612a6f828286612a7b565b92505050949350505050565b60608315612a8b57829050612adb565b600083511115612a9e5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad29190612ebd565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2182612af6565b9050919050565b612b3181612b16565b8114612b3c57600080fd5b50565b600081359050612b4e81612b28565b92915050565b6000819050919050565b612b6781612b54565b8114612b7257600080fd5b50565b600081359050612b8481612b5e565b92915050565b60008060408385031215612ba157612ba0612aec565b5b6000612baf85828601612b3f565b9250506020612bc085828601612b75565b9150509250929050565b612bd381612b54565b82525050565b6000602082019050612bee6000830184612bca565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c2981612bf4565b8114612c3457600080fd5b50565b600081359050612c4681612c20565b92915050565b600060208284031215612c6257612c61612aec565b5b6000612c7084828501612c37565b91505092915050565b60008115159050919050565b612c8e81612c79565b82525050565b6000602082019050612ca96000830184612c85565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d0282612cb9565b810181811067ffffffffffffffff82111715612d2157612d20612cca565b5b80604052505050565b6000612d34612ae2565b9050612d408282612cf9565b919050565b600067ffffffffffffffff821115612d6057612d5f612cca565b5b612d6982612cb9565b9050602081019050919050565b82818337600083830152505050565b6000612d98612d9384612d45565b612d2a565b905082815260208101848484011115612db457612db3612cb4565b5b612dbf848285612d76565b509392505050565b600082601f830112612ddc57612ddb612caf565b5b8135612dec848260208601612d85565b91505092915050565b600060208284031215612e0b57612e0a612aec565b5b600082013567ffffffffffffffff811115612e2957612e28612af1565b5b612e3584828501612dc7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e78578082015181840152602081019050612e5d565b60008484015250505050565b6000612e8f82612e3e565b612e998185612e49565b9350612ea9818560208601612e5a565b612eb281612cb9565b840191505092915050565b60006020820190508181036000830152612ed78184612e84565b905092915050565b600060208284031215612ef557612ef4612aec565b5b6000612f0384828501612b75565b91505092915050565b600067ffffffffffffffff821115612f2757612f26612cca565b5b602082029050602081019050919050565b600080fd5b6000612f50612f4b84612f0c565b612d2a565b90508083825260208201905060208402830185811115612f7357612f72612f38565b5b835b81811015612f9c5780612f888882612b75565b845260208401935050602081019050612f75565b5050509392505050565b600082601f830112612fbb57612fba612caf565b5b8135612fcb848260208601612f3d565b91505092915050565b600067ffffffffffffffff821115612fef57612fee612cca565b5b612ff882612cb9565b9050602081019050919050565b600061301861301384612fd4565b612d2a565b90508281526020810184848401111561303457613033612cb4565b5b61303f848285612d76565b509392505050565b600082601f83011261305c5761305b612caf565b5b813561306c848260208601613005565b91505092915050565b600080600080600060a0868803121561309157613090612aec565b5b600061309f88828901612b3f565b95505060206130b088828901612b3f565b945050604086013567ffffffffffffffff8111156130d1576130d0612af1565b5b6130dd88828901612fa6565b935050606086013567ffffffffffffffff8111156130fe576130fd612af1565b5b61310a88828901612fa6565b925050608086013567ffffffffffffffff81111561312b5761312a612af1565b5b61313788828901613047565b9150509295509295909350565b600080fd5b60008083601f84011261315f5761315e612caf565b5b8235905067ffffffffffffffff81111561317c5761317b613144565b5b60208301915083600182028301111561319857613197612f38565b5b9250929050565b600080602083850312156131b6576131b5612aec565b5b600083013567ffffffffffffffff8111156131d4576131d3612af1565b5b6131e085828601613149565b92509250509250929050565b600067ffffffffffffffff82111561320757613206612cca565b5b602082029050602081019050919050565b600061322b613226846131ec565b612d2a565b9050808382526020820190506020840283018581111561324e5761324d612f38565b5b835b8181101561327757806132638882612b3f565b845260208401935050602081019050613250565b5050509392505050565b600082601f83011261329657613295612caf565b5b81356132a6848260208601613218565b91505092915050565b600080604083850312156132c6576132c5612aec565b5b600083013567ffffffffffffffff8111156132e4576132e3612af1565b5b6132f085828601613281565b925050602083013567ffffffffffffffff81111561331157613310612af1565b5b61331d85828601612fa6565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61335c81612b54565b82525050565b600061336e8383613353565b60208301905092915050565b6000602082019050919050565b600061339282613327565b61339c8185613332565b93506133a783613343565b8060005b838110156133d85781516133bf8882613362565b97506133ca8361337a565b9250506001810190506133ab565b5085935050505092915050565b600060208201905081810360008301526133ff8184613387565b905092915050565b6000806000606084860312156134205761341f612aec565b5b600061342e86828701612b3f565b935050602084013567ffffffffffffffff81111561344f5761344e612af1565b5b61345b86828701612fa6565b925050604084013567ffffffffffffffff81111561347c5761347b612af1565b5b61348886828701612fa6565b9150509250925092565b61349b81612b16565b82525050565b60006020820190506134b66000830184613492565b92915050565b6000819050919050565b60006134e16134dc6134d784612af6565b6134bc565b612af6565b9050919050565b60006134f3826134c6565b9050919050565b6000613505826134e8565b9050919050565b613515816134fa565b82525050565b6000602082019050613530600083018461350c565b92915050565b61353f81612c79565b811461354a57600080fd5b50565b60008135905061355c81613536565b92915050565b6000806040838503121561357957613578612aec565b5b600061358785828601612b3f565b92505060206135988582860161354d565b9150509250929050565b60006135ad826134e8565b9050919050565b6135bd816135a2565b82525050565b60006020820190506135d860008301846135b4565b92915050565b6000602082840312156135f4576135f3612aec565b5b600061360284828501612b3f565b91505092915050565b6000806040838503121561362257613621612aec565b5b600061363085828601612b3f565b925050602061364185828601612b3f565b9150509250929050565b6000806040838503121561366257613661612aec565b5b600061367085828601612b75565b925050602061368185828601612b75565b9150509250929050565b600080600080600060a086880312156136a7576136a6612aec565b5b60006136b588828901612b3f565b95505060206136c688828901612b3f565b94505060406136d788828901612b75565b93505060606136e888828901612b75565b925050608086013567ffffffffffffffff81111561370957613708612af1565b5b61371588828901613047565b9150509295509295909350565b60008060006060848603121561373b5761373a612aec565b5b600061374986828701612b3f565b935050602061375a86828701612b75565b925050604061376b86828701612b75565b9150509250925092565b6000806000806080858703121561378f5761378e612aec565b5b600061379d87828801612b3f565b94505060206137ae87828801612b75565b93505060406137bf87828801612b75565b92505060606137d087828801612b3f565b91505092959194509250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000613838602a83612e49565b9150613843826137dc565b604082019050919050565b600060208201905081810360008301526138678161382b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138b557607f821691505b6020821081036138c8576138c761386e565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b600061392a602e83612e49565b9150613935826138ce565b604082019050919050565b600060208201905081810360008301526139598161391d565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006139bc602983612e49565b91506139c782613960565b604082019050919050565b600060208201905081810360008301526139eb816139af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a5b82612b54565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a8d57613a8c613a21565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613af4602683612e49565b9150613aff82613a98565b604082019050919050565b60006020820190508181036000830152613b2381613ae7565b9050919050565b6000613b3582612b54565b9150613b4083612b54565b9250828202613b4e81612b54565b91508282048414831517613b6557613b64613a21565b5b5092915050565b6000613b7782612b54565b9150613b8283612b54565b9250828203905081811115613b9a57613b99613a21565b5b92915050565b600060a082019050613bb56000830188613492565b613bc26020830187612bca565b613bcf6040830186612bca565b613bdc6060830185612bca565b613be96080830184613492565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c29602083612e49565b9150613c3482613bf3565b602082019050919050565b60006020820190508181036000830152613c5881613c1c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613cc17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c84565b613ccb8683613c84565b95508019841693508086168417925050509392505050565b6000613cfe613cf9613cf484612b54565b6134bc565b612b54565b9050919050565b6000819050919050565b613d1883613ce3565b613d2c613d2482613d05565b848454613c91565b825550505050565b600090565b613d41613d34565b613d4c818484613d0f565b505050565b5b81811015613d7057613d65600082613d39565b600181019050613d52565b5050565b601f821115613db557613d8681613c5f565b613d8f84613c74565b81016020851015613d9e578190505b613db2613daa85613c74565b830182613d51565b50505b505050565b600082821c905092915050565b6000613dd860001984600802613dba565b1980831691505092915050565b6000613df18383613dc7565b9150826002028217905092915050565b613e0a82612e3e565b67ffffffffffffffff811115613e2357613e22612cca565b5b613e2d825461389d565b613e38828285613d74565b600060209050601f831160018114613e6b5760008415613e59578287015190505b613e638582613de5565b865550613ecb565b601f198416613e7986613c5f565b60005b82811015613ea157848901518255600182019150602085019450602081019050613e7c565b86831015613ebe5784890151613eba601f891682613dc7565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613f2f602883612e49565b9150613f3a82613ed3565b604082019050919050565b60006020820190508181036000830152613f5e81613f22565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fc1602583612e49565b9150613fcc82613f65565b604082019050919050565b60006020820190508181036000830152613ff081613fb4565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614053602a83612e49565b915061405e82613ff7565b604082019050919050565b6000602082019050818103600083015261408281614046565b9050919050565b600061409482612b54565b915061409f83612b54565b92508282019050808211156140b7576140b6613a21565b5b92915050565b600060408201905081810360008301526140d78185613387565b905081810360208301526140eb8184613387565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614150602383612e49565b915061415b826140f4565b604082019050919050565b6000602082019050818103600083015261417f81614143565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006141e2602483612e49565b91506141ed82614186565b604082019050919050565b60006020820190508181036000830152614211816141d5565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614274602983612e49565b915061427f82614218565b604082019050919050565b600060208201905081810360008301526142a381614267565b9050919050565b60006040820190506142bf6000830185612bca565b6142cc6020830184612bca565b9392505050565b60006060820190506142e86000830186613492565b6142f56020830185613492565b6143026040830184612bca565b949350505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614366602183612e49565b91506143718261430a565b604082019050919050565b6000602082019050818103600083015261439581614359565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006143c38261439c565b6143cd81856143a7565b93506143dd818560208601612e5a565b6143e681612cb9565b840191505092915050565b600060a0820190506144066000830188613492565b6144136020830187613492565b81810360408301526144258186613387565b905081810360608301526144398185613387565b9050818103608083015261444d81846143b8565b90509695505050505050565b60008151905061446881612c20565b92915050565b60006020828403121561448457614483612aec565b5b600061449284828501614459565b91505092915050565b60008160e01c9050919050565b600060033d11156144c75760046000803e6144c460005161449b565b90505b90565b600060443d10614557576144dc612ae2565b60043d036004823e80513d602482011167ffffffffffffffff82111715614504575050614557565b808201805167ffffffffffffffff8111156145225750505050614557565b80602083010160043d03850181111561453f575050505050614557565b61454e82602001850186612cf9565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006145b6603483612e49565b91506145c18261455a565b604082019050919050565b600060208201905081810360008301526145e5816145a9565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614648602883612e49565b9150614653826145ec565b604082019050919050565b600060208201905081810360008301526146778161463b565b9050919050565b600060a0820190506146936000830188613492565b6146a06020830187613492565b6146ad6040830186612bca565b6146ba6060830185612bca565b81810360808301526146cc81846143b8565b90509695505050505050565b6000815190506146e781613536565b92915050565b60006020828403121561470357614702612aec565b5b6000614711848285016146d8565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614776602a83612e49565b91506147818261471a565b604082019050919050565b600060208201905081810360008301526147a581614769565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000614808602883612e49565b9150614813826147ac565b604082019050919050565b60006020820190508181036000830152614837816147fb565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061489a602683612e49565b91506148a58261483e565b604082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614906601d83612e49565b9150614911826148d0565b602082019050919050565b60006020820190508181036000830152614935816148f9565b9050919050565b600081905092915050565b60006149528261439c565b61495c818561493c565b935061496c818560208601612e5a565b80840191505092915050565b60006149848284614947565b91508190509291505056fea264697066735822122090bcb63b0545abc032b353065912da2c2071bd2291ea28788fe0643312f9734864736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000042697066733a2f2f6261666b72656964777273666577346d616a7463613673366c3575746a6f627279726b6f6e346c626e646373676666326c35626776667935336469000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _USDT (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [1] : uri (string): ipfs://bafkreidwrsfew4majtca6s6l5utjobryrkon4lbndcsgff2l5bgvfy53di
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000042
Arg [3] : 697066733a2f2f6261666b72656964777273666577346d616a7463613673366c
Arg [4] : 3575746a6f627279726b6f6e346c626e646373676666326c3562677666793533
Arg [5] : 6469000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
57230:1956:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33115:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32138:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56683:84;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56772:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32859:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35033:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58197:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33511:499;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50498:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58542:93;;;:::i;:::-;;49216:324;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55663:103;;;:::i;:::-;;55015:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57422:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56851:78;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57593:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34083:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57475:59;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50287:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57400:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58049:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34310:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58406:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34550:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55921:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57538:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48916:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58640:543;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58289:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33115:230;33201:7;33248:1;33229:21;;:7;:21;;;33221:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33315:9;:13;33325:2;33315:13;;;;;;;;;;;:22;33329:7;33315:22;;;;;;;;;;;;;;;;33308:29;;33115:230;;;;:::o;32138:310::-;32240:4;32292:26;32277:41;;;:11;:41;;;;:110;;;;32350:37;32335:52;;;:11;:52;;;;32277:110;:163;;;;32404:36;32428:11;32404:23;:36::i;:::-;32277:163;32257:183;;32138:310;;;:::o;56683:84::-;54901:13;:11;:13::i;:::-;56746:16:::1;56754:7;56746;:16::i;:::-;56683:84:::0;:::o;56772:74::-;56809:13;56836:5;56829:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56772:74;:::o;32859:105::-;32919:13;32952:4;32945:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32859:105;;;:::o;35033:438::-;35274:12;:10;:12::i;:::-;35266:20;;:4;:20;;;:60;;;;35290:36;35307:4;35313:12;:10;:12::i;:::-;35290:16;:36::i;:::-;35266:60;35244:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;35411:52;35434:4;35440:2;35444:3;35449:7;35458:4;35411:22;:52::i;:::-;35033:438;;;;;:::o;58197:87::-;54901:13;:11;:13::i;:::-;58267:12:::1;58275:3;;58267:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:12::i;:::-;58197:87:::0;;:::o;33511:499::-;33647:16;33703:3;:10;33684:8;:15;:29;33676:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;33772:30;33819:8;:15;33805:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33772:63;;33853:9;33848:122;33872:8;:15;33868:1;:19;33848:122;;;33928:30;33938:8;33947:1;33938:11;;;;;;;;:::i;:::-;;;;;;;;33951:3;33955:1;33951:6;;;;;;;;:::i;:::-;;;;;;;;33928:9;:30::i;:::-;33909:13;33923:1;33909:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;33889:3;;;;:::i;:::-;;;33848:122;;;;33989:13;33982:20;;;33511:499;;;;:::o;50498:122::-;50555:4;50611:1;50579:29;50605:2;50579:25;:29::i;:::-;:33;50572:40;;50498:122;;;:::o;58542:93::-;54901:13;:11;:13::i;:::-;58616:14:::1;;;;;;;;;;;58615:15;58598:14;;:32;;;;;;;;;;;;;;;;;;58542:93::o:0;49216:324::-;49358:12;:10;:12::i;:::-;49347:23;;:7;:23;;;:66;;;;49374:39;49391:7;49400:12;:10;:12::i;:::-;49374:16;:39::i;:::-;49347:66;49325:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;49500:32;49511:7;49520:3;49525:6;49500:10;:32::i;:::-;49216:324;;;:::o;55663:103::-;54901:13;:11;:13::i;:::-;55728:30:::1;55755:1;55728:18;:30::i;:::-;55663:103::o:0;55015:87::-;55061:7;55088:6;;;;;;;;;;;55081:13;;55015:87;:::o;57422:47::-;;;;;;;;;;;;;:::o;56851:78::-;56890:13;56917:7;56910:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56851:78;:::o;57593:33::-;;;;;;;;;;;;;:::o;34083:155::-;34178:52;34197:12;:10;:12::i;:::-;34211:8;34221;34178:18;:52::i;:::-;34083:155;;:::o;57475:59::-;;;;;;;;;;;;;;;;;:::o;50287:113::-;50349:7;50376:12;:16;50389:2;50376:16;;;;;;;;;;;;50369:23;;50287:113;;;:::o;57400:18::-;;;;;;;;;;;;;:::o;58049:143::-;54901:13;:11;:13::i;:::-;58166:20:::1;58123:19;;:64;;;;;;;;;;;;;;;;;;58049:143:::0;:::o;34310:168::-;34409:4;34433:18;:27;34452:7;34433:27;;;;;;;;;;;;;;;:37;34461:8;34433:37;;;;;;;;;;;;;;;;;;;;;;;;;34426:44;;34310:168;;;;:::o;58406:131::-;54901:13;:11;:13::i;:::-;58526:6:::1;58490:24;:33;58515:7;58490:33;;;;;;;;;;;:42;;;;58406:131:::0;;:::o;34550:406::-;34766:12;:10;:12::i;:::-;34758:20;;:4;:20;;;:60;;;;34782:36;34799:4;34805:12;:10;:12::i;:::-;34782:16;:36::i;:::-;34758:60;34736:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;34903:45;34921:4;34927:2;34931;34935:6;34943:4;34903:17;:45::i;:::-;34550:406;;;;;:::o;55921:201::-;54901:13;:11;:13::i;:::-;56030:1:::1;56010:22;;:8;:22;;::::0;56002:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;56086:28;56105:8;56086:18;:28::i;:::-;55921:201:::0;:::o;57538:49::-;;;;;;;;;;;;;;;;;:::o;48916:292::-;49033:12;:10;:12::i;:::-;49022:23;;:7;:23;;;:66;;;;49049:39;49066:7;49075:12;:10;:12::i;:::-;49049:16;:39::i;:::-;49022:66;49000:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;49175:25;49181:7;49190:2;49194:5;49175;:25::i;:::-;48916:292;;;:::o;58640:543::-;58754:7;57892:14;;;;;;;;;;;57887:59;;57921:19;;;;;;;;;;;;;;57887:59;57991:1;57954:24;:33;57979:7;57954:33;;;;;;;;;;;;:38;57950:84;;58007:21;;;;;;;;;;;;;;57950:84;58810:97:::1;58832:10;58852:19;;;;;;;;;;;58900:6;58874:14;:23;58889:7;58874:23;;;;;;;;;;;;:32;;;;:::i;:::-;58810:4;;;;;;;;;;;:21;;;;:97;;;;;;:::i;:::-;58932:35;58938:7;58947;58956:6;58932:35;;;;;;;;;;;::::0;:5:::1;:35::i;:::-;59051:6;59014:24;:33;59039:7;59014:33;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;59087:19;;;;;;;;;;;:31;;;59119:7;59128;59137:14;:23;59152:7;59137:23;;;;;;;;;;;;59162:6;59170:7;59087:91;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;58640:543:::0;;;;;:::o;58289:112::-;54901:13;:11;:13::i;:::-;58390:6:::1;58364:14;:23;58379:7;58364:23;;;;;;;;;;;:32;;;;58289:112:::0;;:::o;1782:157::-;1867:4;1906:25;1891:40;;;:11;:40;;;;1884:47;;1782:157;;;:::o;55180:132::-;55255:12;:10;:12::i;:::-;55244:23;;:7;:5;:7::i;:::-;:23;;;55236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55180:132::o;39257:88::-;39331:6;39324:4;:13;;;;;;:::i;:::-;;39257:88;:::o;30832:98::-;30885:7;30912:10;30905:17;;30832:98;:::o;37267:1146::-;37494:7;:14;37480:3;:10;:28;37472:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37586:1;37572:16;;:2;:16;;;37564:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37643:16;37662:12;:10;:12::i;:::-;37643:31;;37687:60;37708:8;37718:4;37724:2;37728:3;37733:7;37742:4;37687:20;:60::i;:::-;37765:9;37760:421;37784:3;:10;37780:1;:14;37760:421;;;37816:10;37829:3;37833:1;37829:6;;;;;;;;:::i;:::-;;;;;;;;37816:19;;37850:14;37867:7;37875:1;37867:10;;;;;;;;:::i;:::-;;;;;;;;37850:27;;37894:19;37916:9;:13;37926:2;37916:13;;;;;;;;;;;:19;37930:4;37916:19;;;;;;;;;;;;;;;;37894:41;;37973:6;37958:11;:21;;37950:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38106:6;38092:11;:20;38070:9;:13;38080:2;38070:13;;;;;;;;;;;:19;38084:4;38070:19;;;;;;;;;;;;;;;:42;;;;38163:6;38142:9;:13;38152:2;38142:13;;;;;;;;;;;:17;38156:2;38142:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;37801:380;;;37796:3;;;;:::i;:::-;;;37760:421;;;;38228:2;38198:47;;38222:4;38198:47;;38212:8;38198:47;;;38232:3;38237:7;38198:47;;;;;;;:::i;:::-;;;;;;;;38258:59;38278:8;38288:4;38294:2;38298:3;38303:7;38312:4;38258:19;:59::i;:::-;38330:75;38366:8;38376:4;38382:2;38386:3;38391:7;38400:4;38330:35;:75::i;:::-;37461:952;37267:1146;;;;;:::o;42955:935::-;43089:1;43073:18;;:4;:18;;;43065:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43164:7;:14;43150:3;:10;:28;43142:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43236:16;43255:12;:10;:12::i;:::-;43236:31;;43280:66;43301:8;43311:4;43325:1;43329:3;43334:7;43280:66;;;;;;;;;;;;:20;:66::i;:::-;43364:9;43359:373;43383:3;:10;43379:1;:14;43359:373;;;43415:10;43428:3;43432:1;43428:6;;;;;;;;:::i;:::-;;;;;;;;43415:19;;43449:14;43466:7;43474:1;43466:10;;;;;;;;:::i;:::-;;;;;;;;43449:27;;43493:19;43515:9;:13;43525:2;43515:13;;;;;;;;;;;:19;43529:4;43515:19;;;;;;;;;;;;;;;;43493:41;;43572:6;43557:11;:21;;43549:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43699:6;43685:11;:20;43663:9;:13;43673:2;43663:13;;;;;;;;;;;:19;43677:4;43663:19;;;;;;;;;;;;;;;:42;;;;43400:332;;;43395:3;;;;;:::i;:::-;;;;43359:373;;;;43787:1;43749:55;;43773:4;43749:55;;43763:8;43749:55;;;43791:3;43796:7;43749:55;;;;;;;:::i;:::-;;;;;;;;43817:65;43837:8;43847:4;43861:1;43865:3;43870:7;43817:65;;;;;;;;;;;;:19;:65::i;:::-;43054:836;42955:935;;;:::o;56282:191::-;56356:16;56375:6;;;;;;;;;;;56356:25;;56401:8;56392:6;;:17;;;;;;;;;;;;;;;;;;56456:8;56425:40;;56446:8;56425:40;;;;;;;;;;;;56345:128;56282:191;:::o;44033:297::-;44154:8;44145:17;;:5;:17;;;44137:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44257:8;44219:18;:25;44238:5;44219:25;;;;;;;;;;;;;;;:35;44245:8;44219:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;44303:8;44281:41;;44296:5;44281:41;;;44313:8;44281:41;;;;;;:::i;:::-;;;;;;;;44033:297;;;:::o;35935:974::-;36137:1;36123:16;;:2;:16;;;36115:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36194:16;36213:12;:10;:12::i;:::-;36194:31;;36236:20;36259:21;36277:2;36259:17;:21::i;:::-;36236:44;;36291:24;36318:25;36336:6;36318:17;:25::i;:::-;36291:52;;36356:60;36377:8;36387:4;36393:2;36397:3;36402:7;36411:4;36356:20;:60::i;:::-;36429:19;36451:9;:13;36461:2;36451:13;;;;;;;;;;;:19;36465:4;36451:19;;;;;;;;;;;;;;;;36429:41;;36504:6;36489:11;:21;;36481:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;36629:6;36615:11;:20;36593:9;:13;36603:2;36593:13;;;;;;;;;;;:19;36607:4;36593:19;;;;;;;;;;;;;;;:42;;;;36678:6;36657:9;:13;36667:2;36657:13;;;;;;;;;;;:17;36671:2;36657:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;36733:2;36702:46;;36727:4;36702:46;;36717:8;36702:46;;;36737:2;36741:6;36702:46;;;;;;;:::i;:::-;;;;;;;;36761:59;36781:8;36791:4;36797:2;36801:3;36806:7;36815:4;36761:19;:59::i;:::-;36833:68;36864:8;36874:4;36880:2;36884;36888:6;36896:4;36833:30;:68::i;:::-;36104:805;;;;35935:974;;;;;:::o;41931:774::-;42040:1;42024:18;;:4;:18;;;42016:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42095:16;42114:12;:10;:12::i;:::-;42095:31;;42137:20;42160:21;42178:2;42160:17;:21::i;:::-;42137:44;;42192:24;42219:25;42237:6;42219:17;:25::i;:::-;42192:52;;42257:66;42278:8;42288:4;42302:1;42306:3;42311:7;42257:66;;;;;;;;;;;;:20;:66::i;:::-;42336:19;42358:9;:13;42368:2;42358:13;;;;;;;;;;;:19;42372:4;42358:19;;;;;;;;;;;;;;;;42336:41;;42411:6;42396:11;:21;;42388:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42530:6;42516:11;:20;42494:9;:13;42504:2;42494:13;;;;;;;;;;;:19;42508:4;42494:19;;;;;;;;;;;;;;;:42;;;;42604:1;42565:54;;42590:4;42565:54;;42580:8;42565:54;;;42608:2;42612:6;42565:54;;;;;;;:::i;:::-;;;;;;;;42632:65;42652:8;42662:4;42676:1;42680:3;42685:7;42632:65;;;;;;;;;;;;:19;:65::i;:::-;42005:700;;;;41931:774;;;:::o;26582:248::-;26726:96;26746:5;26776:27;;;26805:4;26811:2;26815:5;26753:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26726:19;:96::i;:::-;26582:248;;;;:::o;39731:686::-;39855:1;39841:16;;:2;:16;;;39833:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39908:16;39927:12;:10;:12::i;:::-;39908:31;;39950:20;39973:21;39991:2;39973:17;:21::i;:::-;39950:44;;40005:24;40032:25;40050:6;40032:17;:25::i;:::-;40005:52;;40070:66;40091:8;40109:1;40113:2;40117:3;40122:7;40131:4;40070:20;:66::i;:::-;40170:6;40149:9;:13;40159:2;40149:13;;;;;;;;;;;:17;40163:2;40149:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;40229:2;40192:52;;40225:1;40192:52;;40207:8;40192:52;;;40233:2;40237:6;40192:52;;;;;;;:::i;:::-;;;;;;;;40257:65;40277:8;40295:1;40299:2;40303:3;40308:7;40317:4;40257:19;:65::i;:::-;40335:74;40366:8;40384:1;40388:2;40392;40396:6;40404:4;40335:30;:74::i;:::-;39822:595;;;39731:686;;;;:::o;56934:289::-;57152:66;57179:8;57189:4;57195:2;57199:3;57204:7;57213:4;57152:26;:66::i;:::-;56934:289;;;;;;:::o;46464:220::-;;;;;;;:::o;47444:813::-;47684:15;:2;:13;;;:15::i;:::-;47680:570;;;47737:2;47720:43;;;47764:8;47774:4;47780:3;47785:7;47794:4;47720:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47716:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;48112:6;48105:14;;;;;;;;;;;:::i;:::-;;;;;;;;47716:523;;;48161:62;;;;;;;;;;:::i;:::-;;;;;;;;47716:523;47893:48;;;47881:60;;;:8;:60;;;;47877:159;;47966:50;;;;;;;;;;:::i;:::-;;;;;;;;47877:159;47800:251;47680:570;47444:813;;;;;;:::o;48265:198::-;48331:16;48360:22;48399:1;48385:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48360:41;;48423:7;48412:5;48418:1;48412:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;48450:5;48443:12;;;48265:198;;;:::o;46692:744::-;46907:15;:2;:13;;;:15::i;:::-;46903:526;;;46960:2;46943:38;;;46982:8;46992:4;46998:2;47002:6;47010:4;46943:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46939:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;47291:6;47284:14;;;;;;;;;;;:::i;:::-;;;;;;;;46939:479;;;47340:62;;;;;;;;;;:::i;:::-;;;;;;;;46939:479;47077:43;;;47065:55;;;:8;:55;;;;47061:154;;47145:50;;;;;;;;;;:::i;:::-;;;;;;;;47061:154;47016:214;46903:526;46692:744;;;;;;:::o;29430:716::-;29854:23;29880:69;29908:4;29880:69;;;;;;;;;;;;;;;;;29888:5;29880:27;;;;:69;;;;;:::i;:::-;29854:95;;29984:1;29964:10;:17;:21;29960:179;;;30061:10;30050:30;;;;;;;;;;;;:::i;:::-;30042:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29960:179;29500:646;29430:716;;:::o;50695:931::-;50934:66;50961:8;50971:4;50977:2;50981:3;50986:7;50995:4;50934:26;:66::i;:::-;51033:1;51017:18;;:4;:18;;;51013:160;;51057:9;51052:110;51076:3;:10;51072:1;:14;51052:110;;;51136:7;51144:1;51136:10;;;;;;;;:::i;:::-;;;;;;;;51112:12;:20;51125:3;51129:1;51125:6;;;;;;;;:::i;:::-;;;;;;;;51112:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;51088:3;;;;:::i;:::-;;;51052:110;;;;51013:160;51203:1;51189:16;;:2;:16;;;51185:434;;51227:9;51222:386;51246:3;:10;51242:1;:14;51222:386;;;51282:10;51295:3;51299:1;51295:6;;;;;;;;:::i;:::-;;;;;;;;51282:19;;51320:14;51337:7;51345:1;51337:10;;;;;;;;:::i;:::-;;;;;;;;51320:27;;51366:14;51383:12;:16;51396:2;51383:16;;;;;;;;;;;;51366:33;;51436:6;51426;:16;;51418:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;51567:6;51558;:15;51539:12;:16;51552:2;51539:16;;;;;;;;;;;:34;;;;51263:345;;;51258:3;;;;:::i;:::-;;;51222:386;;;;51185:434;50695:931;;;;;;:::o;13085:326::-;13145:4;13402:1;13380:7;:19;;;:23;13373:30;;13085:326;;;:::o;15830:229::-;15967:12;15999:52;16021:6;16029:4;16035:1;16038:12;15999:21;:52::i;:::-;15992:59;;15830:229;;;;;:::o;45288:221::-;;;;;;;:::o;16950:510::-;17120:12;17178:5;17153:21;:30;;17145:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;17245:18;17256:6;17245:10;:18::i;:::-;17237:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;17311:12;17325:23;17352:6;:11;;17371:5;17378:4;17352:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17310:73;;;;17401:51;17418:7;17427:10;17439:12;17401:16;:51::i;:::-;17394:58;;;;16950:510;;;;;;:::o;19636:762::-;19786:12;19815:7;19811:580;;;19846:10;19839:17;;;;19811:580;19980:1;19960:10;:17;:21;19956:424;;;20208:10;20202:17;20269:15;20256:10;20252:2;20248:19;20241:44;19956:424;20351:12;20344:20;;;;;;;;;;;:::i;:::-;;;;;;;;19636:762;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:146::-;4586:6;4581:3;4576;4563:30;4627:1;4618:6;4613:3;4609:16;4602:27;4489:146;;;:::o;4641:425::-;4719:5;4744:66;4760:49;4802:6;4760:49;:::i;:::-;4744:66;:::i;:::-;4735:75;;4833:6;4826:5;4819:21;4871:4;4864:5;4860:16;4909:3;4900:6;4895:3;4891:16;4888:25;4885:112;;;4916:79;;:::i;:::-;4885:112;5006:54;5053:6;5048:3;5043;5006:54;:::i;:::-;4725:341;4641:425;;;;;:::o;5086:340::-;5142:5;5191:3;5184:4;5176:6;5172:17;5168:27;5158:122;;5199:79;;:::i;:::-;5158:122;5316:6;5303:20;5341:79;5416:3;5408:6;5401:4;5393:6;5389:17;5341:79;:::i;:::-;5332:88;;5148:278;5086:340;;;;:::o;5432:509::-;5501:6;5550:2;5538:9;5529:7;5525:23;5521:32;5518:119;;;5556:79;;:::i;:::-;5518:119;5704:1;5693:9;5689:17;5676:31;5734:18;5726:6;5723:30;5720:117;;;5756:79;;:::i;:::-;5720:117;5861:63;5916:7;5907:6;5896:9;5892:22;5861:63;:::i;:::-;5851:73;;5647:287;5432:509;;;;:::o;5947:99::-;5999:6;6033:5;6027:12;6017:22;;5947:99;;;:::o;6052:169::-;6136:11;6170:6;6165:3;6158:19;6210:4;6205:3;6201:14;6186:29;;6052:169;;;;:::o;6227:246::-;6308:1;6318:113;6332:6;6329:1;6326:13;6318:113;;;6417:1;6412:3;6408:11;6402:18;6398:1;6393:3;6389:11;6382:39;6354:2;6351:1;6347:10;6342:15;;6318:113;;;6465:1;6456:6;6451:3;6447:16;6440:27;6289:184;6227:246;;;:::o;6479:377::-;6567:3;6595:39;6628:5;6595:39;:::i;:::-;6650:71;6714:6;6709:3;6650:71;:::i;:::-;6643:78;;6730:65;6788:6;6783:3;6776:4;6769:5;6765:16;6730:65;:::i;:::-;6820:29;6842:6;6820:29;:::i;:::-;6815:3;6811:39;6804:46;;6571:285;6479:377;;;;:::o;6862:313::-;6975:4;7013:2;7002:9;6998:18;6990:26;;7062:9;7056:4;7052:20;7048:1;7037:9;7033:17;7026:47;7090:78;7163:4;7154:6;7090:78;:::i;:::-;7082:86;;6862:313;;;;:::o;7181:329::-;7240:6;7289:2;7277:9;7268:7;7264:23;7260:32;7257:119;;;7295:79;;:::i;:::-;7257:119;7415:1;7440:53;7485:7;7476:6;7465:9;7461:22;7440:53;:::i;:::-;7430:63;;7386:117;7181:329;;;;:::o;7516:311::-;7593:4;7683:18;7675:6;7672:30;7669:56;;;7705:18;;:::i;:::-;7669:56;7755:4;7747:6;7743:17;7735:25;;7815:4;7809;7805:15;7797:23;;7516:311;;;:::o;7833:117::-;7942:1;7939;7932:12;7973:710;8069:5;8094:81;8110:64;8167:6;8110:64;:::i;:::-;8094:81;:::i;:::-;8085:90;;8195:5;8224:6;8217:5;8210:21;8258:4;8251:5;8247:16;8240:23;;8311:4;8303:6;8299:17;8291:6;8287:30;8340:3;8332:6;8329:15;8326:122;;;8359:79;;:::i;:::-;8326:122;8474:6;8457:220;8491:6;8486:3;8483:15;8457:220;;;8566:3;8595:37;8628:3;8616:10;8595:37;:::i;:::-;8590:3;8583:50;8662:4;8657:3;8653:14;8646:21;;8533:144;8517:4;8512:3;8508:14;8501:21;;8457:220;;;8461:21;8075:608;;7973:710;;;;;:::o;8706:370::-;8777:5;8826:3;8819:4;8811:6;8807:17;8803:27;8793:122;;8834:79;;:::i;:::-;8793:122;8951:6;8938:20;8976:94;9066:3;9058:6;9051:4;9043:6;9039:17;8976:94;:::i;:::-;8967:103;;8783:293;8706:370;;;;:::o;9082:307::-;9143:4;9233:18;9225:6;9222:30;9219:56;;;9255:18;;:::i;:::-;9219:56;9293:29;9315:6;9293:29;:::i;:::-;9285:37;;9377:4;9371;9367:15;9359:23;;9082:307;;;:::o;9395:423::-;9472:5;9497:65;9513:48;9554:6;9513:48;:::i;:::-;9497:65;:::i;:::-;9488:74;;9585:6;9578:5;9571:21;9623:4;9616:5;9612:16;9661:3;9652:6;9647:3;9643:16;9640:25;9637:112;;;9668:79;;:::i;:::-;9637:112;9758:54;9805:6;9800:3;9795;9758:54;:::i;:::-;9478:340;9395:423;;;;;:::o;9837:338::-;9892:5;9941:3;9934:4;9926:6;9922:17;9918:27;9908:122;;9949:79;;:::i;:::-;9908:122;10066:6;10053:20;10091:78;10165:3;10157:6;10150:4;10142:6;10138:17;10091:78;:::i;:::-;10082:87;;9898:277;9837:338;;;;:::o;10181:1509::-;10335:6;10343;10351;10359;10367;10416:3;10404:9;10395:7;10391:23;10387:33;10384:120;;;10423:79;;:::i;:::-;10384:120;10543:1;10568:53;10613:7;10604:6;10593:9;10589:22;10568:53;:::i;:::-;10558:63;;10514:117;10670:2;10696:53;10741:7;10732:6;10721:9;10717:22;10696:53;:::i;:::-;10686:63;;10641:118;10826:2;10815:9;10811:18;10798:32;10857:18;10849:6;10846:30;10843:117;;;10879:79;;:::i;:::-;10843:117;10984:78;11054:7;11045:6;11034:9;11030:22;10984:78;:::i;:::-;10974:88;;10769:303;11139:2;11128:9;11124:18;11111:32;11170:18;11162:6;11159:30;11156:117;;;11192:79;;:::i;:::-;11156:117;11297:78;11367:7;11358:6;11347:9;11343:22;11297:78;:::i;:::-;11287:88;;11082:303;11452:3;11441:9;11437:19;11424:33;11484:18;11476:6;11473:30;11470:117;;;11506:79;;:::i;:::-;11470:117;11611:62;11665:7;11656:6;11645:9;11641:22;11611:62;:::i;:::-;11601:72;;11395:288;10181:1509;;;;;;;;:::o;11696:117::-;11805:1;11802;11795:12;11833:553;11891:8;11901:6;11951:3;11944:4;11936:6;11932:17;11928:27;11918:122;;11959:79;;:::i;:::-;11918:122;12072:6;12059:20;12049:30;;12102:18;12094:6;12091:30;12088:117;;;12124:79;;:::i;:::-;12088:117;12238:4;12230:6;12226:17;12214:29;;12292:3;12284:4;12276:6;12272:17;12262:8;12258:32;12255:41;12252:128;;;12299:79;;:::i;:::-;12252:128;11833:553;;;;;:::o;12392:529::-;12463:6;12471;12520:2;12508:9;12499:7;12495:23;12491:32;12488:119;;;12526:79;;:::i;:::-;12488:119;12674:1;12663:9;12659:17;12646:31;12704:18;12696:6;12693:30;12690:117;;;12726:79;;:::i;:::-;12690:117;12839:65;12896:7;12887:6;12876:9;12872:22;12839:65;:::i;:::-;12821:83;;;;12617:297;12392:529;;;;;:::o;12927:311::-;13004:4;13094:18;13086:6;13083:30;13080:56;;;13116:18;;:::i;:::-;13080:56;13166:4;13158:6;13154:17;13146:25;;13226:4;13220;13216:15;13208:23;;12927:311;;;:::o;13261:710::-;13357:5;13382:81;13398:64;13455:6;13398:64;:::i;:::-;13382:81;:::i;:::-;13373:90;;13483:5;13512:6;13505:5;13498:21;13546:4;13539:5;13535:16;13528:23;;13599:4;13591:6;13587:17;13579:6;13575:30;13628:3;13620:6;13617:15;13614:122;;;13647:79;;:::i;:::-;13614:122;13762:6;13745:220;13779:6;13774:3;13771:15;13745:220;;;13854:3;13883:37;13916:3;13904:10;13883:37;:::i;:::-;13878:3;13871:50;13950:4;13945:3;13941:14;13934:21;;13821:144;13805:4;13800:3;13796:14;13789:21;;13745:220;;;13749:21;13363:608;;13261:710;;;;;:::o;13994:370::-;14065:5;14114:3;14107:4;14099:6;14095:17;14091:27;14081:122;;14122:79;;:::i;:::-;14081:122;14239:6;14226:20;14264:94;14354:3;14346:6;14339:4;14331:6;14327:17;14264:94;:::i;:::-;14255:103;;14071:293;13994:370;;;;:::o;14370:894::-;14488:6;14496;14545:2;14533:9;14524:7;14520:23;14516:32;14513:119;;;14551:79;;:::i;:::-;14513:119;14699:1;14688:9;14684:17;14671:31;14729:18;14721:6;14718:30;14715:117;;;14751:79;;:::i;:::-;14715:117;14856:78;14926:7;14917:6;14906:9;14902:22;14856:78;:::i;:::-;14846:88;;14642:302;15011:2;15000:9;14996:18;14983:32;15042:18;15034:6;15031:30;15028:117;;;15064:79;;:::i;:::-;15028:117;15169:78;15239:7;15230:6;15219:9;15215:22;15169:78;:::i;:::-;15159:88;;14954:303;14370:894;;;;;:::o;15270:114::-;15337:6;15371:5;15365:12;15355:22;;15270:114;;;:::o;15390:184::-;15489:11;15523:6;15518:3;15511:19;15563:4;15558:3;15554:14;15539:29;;15390:184;;;;:::o;15580:132::-;15647:4;15670:3;15662:11;;15700:4;15695:3;15691:14;15683:22;;15580:132;;;:::o;15718:108::-;15795:24;15813:5;15795:24;:::i;:::-;15790:3;15783:37;15718:108;;:::o;15832:179::-;15901:10;15922:46;15964:3;15956:6;15922:46;:::i;:::-;16000:4;15995:3;15991:14;15977:28;;15832:179;;;;:::o;16017:113::-;16087:4;16119;16114:3;16110:14;16102:22;;16017:113;;;:::o;16166:732::-;16285:3;16314:54;16362:5;16314:54;:::i;:::-;16384:86;16463:6;16458:3;16384:86;:::i;:::-;16377:93;;16494:56;16544:5;16494:56;:::i;:::-;16573:7;16604:1;16589:284;16614:6;16611:1;16608:13;16589:284;;;16690:6;16684:13;16717:63;16776:3;16761:13;16717:63;:::i;:::-;16710:70;;16803:60;16856:6;16803:60;:::i;:::-;16793:70;;16649:224;16636:1;16633;16629:9;16624:14;;16589:284;;;16593:14;16889:3;16882:10;;16290:608;;;16166:732;;;;:::o;16904:373::-;17047:4;17085:2;17074:9;17070:18;17062:26;;17134:9;17128:4;17124:20;17120:1;17109:9;17105:17;17098:47;17162:108;17265:4;17256:6;17162:108;:::i;:::-;17154:116;;16904:373;;;;:::o;17283:1039::-;17410:6;17418;17426;17475:2;17463:9;17454:7;17450:23;17446:32;17443:119;;;17481:79;;:::i;:::-;17443:119;17601:1;17626:53;17671:7;17662:6;17651:9;17647:22;17626:53;:::i;:::-;17616:63;;17572:117;17756:2;17745:9;17741:18;17728:32;17787:18;17779:6;17776:30;17773:117;;;17809:79;;:::i;:::-;17773:117;17914:78;17984:7;17975:6;17964:9;17960:22;17914:78;:::i;:::-;17904:88;;17699:303;18069:2;18058:9;18054:18;18041:32;18100:18;18092:6;18089:30;18086:117;;;18122:79;;:::i;:::-;18086:117;18227:78;18297:7;18288:6;18277:9;18273:22;18227:78;:::i;:::-;18217:88;;18012:303;17283:1039;;;;;:::o;18328:118::-;18415:24;18433:5;18415:24;:::i;:::-;18410:3;18403:37;18328:118;;:::o;18452:222::-;18545:4;18583:2;18572:9;18568:18;18560:26;;18596:71;18664:1;18653:9;18649:17;18640:6;18596:71;:::i;:::-;18452:222;;;;:::o;18680:60::-;18708:3;18729:5;18722:12;;18680:60;;;:::o;18746:142::-;18796:9;18829:53;18847:34;18856:24;18874:5;18856:24;:::i;:::-;18847:34;:::i;:::-;18829:53;:::i;:::-;18816:66;;18746:142;;;:::o;18894:126::-;18944:9;18977:37;19008:5;18977:37;:::i;:::-;18964:50;;18894:126;;;:::o;19026:155::-;19105:9;19138:37;19169:5;19138:37;:::i;:::-;19125:50;;19026:155;;;:::o;19187:189::-;19303:66;19363:5;19303:66;:::i;:::-;19298:3;19291:79;19187:189;;:::o;19382:280::-;19504:4;19542:2;19531:9;19527:18;19519:26;;19555:100;19652:1;19641:9;19637:17;19628:6;19555:100;:::i;:::-;19382:280;;;;:::o;19668:116::-;19738:21;19753:5;19738:21;:::i;:::-;19731:5;19728:32;19718:60;;19774:1;19771;19764:12;19718:60;19668:116;:::o;19790:133::-;19833:5;19871:6;19858:20;19849:29;;19887:30;19911:5;19887:30;:::i;:::-;19790:133;;;;:::o;19929:468::-;19994:6;20002;20051:2;20039:9;20030:7;20026:23;20022:32;20019:119;;;20057:79;;:::i;:::-;20019:119;20177:1;20202:53;20247:7;20238:6;20227:9;20223:22;20202:53;:::i;:::-;20192:63;;20148:117;20304:2;20330:50;20372:7;20363:6;20352:9;20348:22;20330:50;:::i;:::-;20320:60;;20275:115;19929:468;;;;;:::o;20403:140::-;20467:9;20500:37;20531:5;20500:37;:::i;:::-;20487:50;;20403:140;;;:::o;20549:159::-;20650:51;20695:5;20650:51;:::i;:::-;20645:3;20638:64;20549:159;;:::o;20714:250::-;20821:4;20859:2;20848:9;20844:18;20836:26;;20872:85;20954:1;20943:9;20939:17;20930:6;20872:85;:::i;:::-;20714:250;;;;:::o;20970:329::-;21029:6;21078:2;21066:9;21057:7;21053:23;21049:32;21046:119;;;21084:79;;:::i;:::-;21046:119;21204:1;21229:53;21274:7;21265:6;21254:9;21250:22;21229:53;:::i;:::-;21219:63;;21175:117;20970:329;;;;:::o;21305:474::-;21373:6;21381;21430:2;21418:9;21409:7;21405:23;21401:32;21398:119;;;21436:79;;:::i;:::-;21398:119;21556:1;21581:53;21626:7;21617:6;21606:9;21602:22;21581:53;:::i;:::-;21571:63;;21527:117;21683:2;21709:53;21754:7;21745:6;21734:9;21730:22;21709:53;:::i;:::-;21699:63;;21654:118;21305:474;;;;;:::o;21785:::-;21853:6;21861;21910:2;21898:9;21889:7;21885:23;21881:32;21878:119;;;21916:79;;:::i;:::-;21878:119;22036:1;22061:53;22106:7;22097:6;22086:9;22082:22;22061:53;:::i;:::-;22051:63;;22007:117;22163:2;22189:53;22234:7;22225:6;22214:9;22210:22;22189:53;:::i;:::-;22179:63;;22134:118;21785:474;;;;;:::o;22265:1089::-;22369:6;22377;22385;22393;22401;22450:3;22438:9;22429:7;22425:23;22421:33;22418:120;;;22457:79;;:::i;:::-;22418:120;22577:1;22602:53;22647:7;22638:6;22627:9;22623:22;22602:53;:::i;:::-;22592:63;;22548:117;22704:2;22730:53;22775:7;22766:6;22755:9;22751:22;22730:53;:::i;:::-;22720:63;;22675:118;22832:2;22858:53;22903:7;22894:6;22883:9;22879:22;22858:53;:::i;:::-;22848:63;;22803:118;22960:2;22986:53;23031:7;23022:6;23011:9;23007:22;22986:53;:::i;:::-;22976:63;;22931:118;23116:3;23105:9;23101:19;23088:33;23148:18;23140:6;23137:30;23134:117;;;23170:79;;:::i;:::-;23134:117;23275:62;23329:7;23320:6;23309:9;23305:22;23275:62;:::i;:::-;23265:72;;23059:288;22265:1089;;;;;;;;:::o;23360:619::-;23437:6;23445;23453;23502:2;23490:9;23481:7;23477:23;23473:32;23470:119;;;23508:79;;:::i;:::-;23470:119;23628:1;23653:53;23698:7;23689:6;23678:9;23674:22;23653:53;:::i;:::-;23643:63;;23599:117;23755:2;23781:53;23826:7;23817:6;23806:9;23802:22;23781:53;:::i;:::-;23771:63;;23726:118;23883:2;23909:53;23954:7;23945:6;23934:9;23930:22;23909:53;:::i;:::-;23899:63;;23854:118;23360:619;;;;;:::o;23985:765::-;24071:6;24079;24087;24095;24144:3;24132:9;24123:7;24119:23;24115:33;24112:120;;;24151:79;;:::i;:::-;24112:120;24271:1;24296:53;24341:7;24332:6;24321:9;24317:22;24296:53;:::i;:::-;24286:63;;24242:117;24398:2;24424:53;24469:7;24460:6;24449:9;24445:22;24424:53;:::i;:::-;24414:63;;24369:118;24526:2;24552:53;24597:7;24588:6;24577:9;24573:22;24552:53;:::i;:::-;24542:63;;24497:118;24654:2;24680:53;24725:7;24716:6;24705:9;24701:22;24680:53;:::i;:::-;24670:63;;24625:118;23985:765;;;;;;;:::o;24756:229::-;24896:34;24892:1;24884:6;24880:14;24873:58;24965:12;24960:2;24952:6;24948:15;24941:37;24756:229;:::o;24991:366::-;25133:3;25154:67;25218:2;25213:3;25154:67;:::i;:::-;25147:74;;25230:93;25319:3;25230:93;:::i;:::-;25348:2;25343:3;25339:12;25332:19;;24991:366;;;:::o;25363:419::-;25529:4;25567:2;25556:9;25552:18;25544:26;;25616:9;25610:4;25606:20;25602:1;25591:9;25587:17;25580:47;25644:131;25770:4;25644:131;:::i;:::-;25636:139;;25363:419;;;:::o;25788:180::-;25836:77;25833:1;25826:88;25933:4;25930:1;25923:15;25957:4;25954:1;25947:15;25974:320;26018:6;26055:1;26049:4;26045:12;26035:22;;26102:1;26096:4;26092:12;26123:18;26113:81;;26179:4;26171:6;26167:17;26157:27;;26113:81;26241:2;26233:6;26230:14;26210:18;26207:38;26204:84;;26260:18;;:::i;:::-;26204:84;26025:269;25974:320;;;:::o;26300:233::-;26440:34;26436:1;26428:6;26424:14;26417:58;26509:16;26504:2;26496:6;26492:15;26485:41;26300:233;:::o;26539:366::-;26681:3;26702:67;26766:2;26761:3;26702:67;:::i;:::-;26695:74;;26778:93;26867:3;26778:93;:::i;:::-;26896:2;26891:3;26887:12;26880:19;;26539:366;;;:::o;26911:419::-;27077:4;27115:2;27104:9;27100:18;27092:26;;27164:9;27158:4;27154:20;27150:1;27139:9;27135:17;27128:47;27192:131;27318:4;27192:131;:::i;:::-;27184:139;;26911:419;;;:::o;27336:228::-;27476:34;27472:1;27464:6;27460:14;27453:58;27545:11;27540:2;27532:6;27528:15;27521:36;27336:228;:::o;27570:366::-;27712:3;27733:67;27797:2;27792:3;27733:67;:::i;:::-;27726:74;;27809:93;27898:3;27809:93;:::i;:::-;27927:2;27922:3;27918:12;27911:19;;27570:366;;;:::o;27942:419::-;28108:4;28146:2;28135:9;28131:18;28123:26;;28195:9;28189:4;28185:20;28181:1;28170:9;28166:17;28159:47;28223:131;28349:4;28223:131;:::i;:::-;28215:139;;27942:419;;;:::o;28367:180::-;28415:77;28412:1;28405:88;28512:4;28509:1;28502:15;28536:4;28533:1;28526:15;28553:180;28601:77;28598:1;28591:88;28698:4;28695:1;28688:15;28722:4;28719:1;28712:15;28739:233;28778:3;28801:24;28819:5;28801:24;:::i;:::-;28792:33;;28847:66;28840:5;28837:77;28834:103;;28917:18;;:::i;:::-;28834:103;28964:1;28957:5;28953:13;28946:20;;28739:233;;;:::o;28978:225::-;29118:34;29114:1;29106:6;29102:14;29095:58;29187:8;29182:2;29174:6;29170:15;29163:33;28978:225;:::o;29209:366::-;29351:3;29372:67;29436:2;29431:3;29372:67;:::i;:::-;29365:74;;29448:93;29537:3;29448:93;:::i;:::-;29566:2;29561:3;29557:12;29550:19;;29209:366;;;:::o;29581:419::-;29747:4;29785:2;29774:9;29770:18;29762:26;;29834:9;29828:4;29824:20;29820:1;29809:9;29805:17;29798:47;29862:131;29988:4;29862:131;:::i;:::-;29854:139;;29581:419;;;:::o;30006:410::-;30046:7;30069:20;30087:1;30069:20;:::i;:::-;30064:25;;30103:20;30121:1;30103:20;:::i;:::-;30098:25;;30158:1;30155;30151:9;30180:30;30198:11;30180:30;:::i;:::-;30169:41;;30359:1;30350:7;30346:15;30343:1;30340:22;30320:1;30313:9;30293:83;30270:139;;30389:18;;:::i;:::-;30270:139;30054:362;30006:410;;;;:::o;30422:194::-;30462:4;30482:20;30500:1;30482:20;:::i;:::-;30477:25;;30516:20;30534:1;30516:20;:::i;:::-;30511:25;;30560:1;30557;30553:9;30545:17;;30584:1;30578:4;30575:11;30572:37;;;30589:18;;:::i;:::-;30572:37;30422:194;;;;:::o;30622:664::-;30827:4;30865:3;30854:9;30850:19;30842:27;;30879:71;30947:1;30936:9;30932:17;30923:6;30879:71;:::i;:::-;30960:72;31028:2;31017:9;31013:18;31004:6;30960:72;:::i;:::-;31042;31110:2;31099:9;31095:18;31086:6;31042:72;:::i;:::-;31124;31192:2;31181:9;31177:18;31168:6;31124:72;:::i;:::-;31206:73;31274:3;31263:9;31259:19;31250:6;31206:73;:::i;:::-;30622:664;;;;;;;;:::o;31292:182::-;31432:34;31428:1;31420:6;31416:14;31409:58;31292:182;:::o;31480:366::-;31622:3;31643:67;31707:2;31702:3;31643:67;:::i;:::-;31636:74;;31719:93;31808:3;31719:93;:::i;:::-;31837:2;31832:3;31828:12;31821:19;;31480:366;;;:::o;31852:419::-;32018:4;32056:2;32045:9;32041:18;32033:26;;32105:9;32099:4;32095:20;32091:1;32080:9;32076:17;32069:47;32133:131;32259:4;32133:131;:::i;:::-;32125:139;;31852:419;;;:::o;32277:141::-;32326:4;32349:3;32341:11;;32372:3;32369:1;32362:14;32406:4;32403:1;32393:18;32385:26;;32277:141;;;:::o;32424:93::-;32461:6;32508:2;32503;32496:5;32492:14;32488:23;32478:33;;32424:93;;;:::o;32523:107::-;32567:8;32617:5;32611:4;32607:16;32586:37;;32523:107;;;;:::o;32636:393::-;32705:6;32755:1;32743:10;32739:18;32778:97;32808:66;32797:9;32778:97;:::i;:::-;32896:39;32926:8;32915:9;32896:39;:::i;:::-;32884:51;;32968:4;32964:9;32957:5;32953:21;32944:30;;33017:4;33007:8;33003:19;32996:5;32993:30;32983:40;;32712:317;;32636:393;;;;;:::o;33035:142::-;33085:9;33118:53;33136:34;33145:24;33163:5;33145:24;:::i;:::-;33136:34;:::i;:::-;33118:53;:::i;:::-;33105:66;;33035:142;;;:::o;33183:75::-;33226:3;33247:5;33240:12;;33183:75;;;:::o;33264:269::-;33374:39;33405:7;33374:39;:::i;:::-;33435:91;33484:41;33508:16;33484:41;:::i;:::-;33476:6;33469:4;33463:11;33435:91;:::i;:::-;33429:4;33422:105;33340:193;33264:269;;;:::o;33539:73::-;33584:3;33539:73;:::o;33618:189::-;33695:32;;:::i;:::-;33736:65;33794:6;33786;33780:4;33736:65;:::i;:::-;33671:136;33618:189;;:::o;33813:186::-;33873:120;33890:3;33883:5;33880:14;33873:120;;;33944:39;33981:1;33974:5;33944:39;:::i;:::-;33917:1;33910:5;33906:13;33897:22;;33873:120;;;33813:186;;:::o;34005:543::-;34106:2;34101:3;34098:11;34095:446;;;34140:38;34172:5;34140:38;:::i;:::-;34224:29;34242:10;34224:29;:::i;:::-;34214:8;34210:44;34407:2;34395:10;34392:18;34389:49;;;34428:8;34413:23;;34389:49;34451:80;34507:22;34525:3;34507:22;:::i;:::-;34497:8;34493:37;34480:11;34451:80;:::i;:::-;34110:431;;34095:446;34005:543;;;:::o;34554:117::-;34608:8;34658:5;34652:4;34648:16;34627:37;;34554:117;;;;:::o;34677:169::-;34721:6;34754:51;34802:1;34798:6;34790:5;34787:1;34783:13;34754:51;:::i;:::-;34750:56;34835:4;34829;34825:15;34815:25;;34728:118;34677:169;;;;:::o;34851:295::-;34927:4;35073:29;35098:3;35092:4;35073:29;:::i;:::-;35065:37;;35135:3;35132:1;35128:11;35122:4;35119:21;35111:29;;34851:295;;;;:::o;35151:1395::-;35268:37;35301:3;35268:37;:::i;:::-;35370:18;35362:6;35359:30;35356:56;;;35392:18;;:::i;:::-;35356:56;35436:38;35468:4;35462:11;35436:38;:::i;:::-;35521:67;35581:6;35573;35567:4;35521:67;:::i;:::-;35615:1;35639:4;35626:17;;35671:2;35663:6;35660:14;35688:1;35683:618;;;;36345:1;36362:6;36359:77;;;36411:9;36406:3;36402:19;36396:26;36387:35;;36359:77;36462:67;36522:6;36515:5;36462:67;:::i;:::-;36456:4;36449:81;36318:222;35653:887;;35683:618;35735:4;35731:9;35723:6;35719:22;35769:37;35801:4;35769:37;:::i;:::-;35828:1;35842:208;35856:7;35853:1;35850:14;35842:208;;;35935:9;35930:3;35926:19;35920:26;35912:6;35905:42;35986:1;35978:6;35974:14;35964:24;;36033:2;36022:9;36018:18;36005:31;;35879:4;35876:1;35872:12;35867:17;;35842:208;;;36078:6;36069:7;36066:19;36063:179;;;36136:9;36131:3;36127:19;36121:26;36179:48;36221:4;36213:6;36209:17;36198:9;36179:48;:::i;:::-;36171:6;36164:64;36086:156;36063:179;36288:1;36284;36276:6;36272:14;36268:22;36262:4;36255:36;35690:611;;;35653:887;;35243:1303;;;35151:1395;;:::o;36552:227::-;36692:34;36688:1;36680:6;36676:14;36669:58;36761:10;36756:2;36748:6;36744:15;36737:35;36552:227;:::o;36785:366::-;36927:3;36948:67;37012:2;37007:3;36948:67;:::i;:::-;36941:74;;37024:93;37113:3;37024:93;:::i;:::-;37142:2;37137:3;37133:12;37126:19;;36785:366;;;:::o;37157:419::-;37323:4;37361:2;37350:9;37346:18;37338:26;;37410:9;37404:4;37400:20;37396:1;37385:9;37381:17;37374:47;37438:131;37564:4;37438:131;:::i;:::-;37430:139;;37157:419;;;:::o;37582:224::-;37722:34;37718:1;37710:6;37706:14;37699:58;37791:7;37786:2;37778:6;37774:15;37767:32;37582:224;:::o;37812:366::-;37954:3;37975:67;38039:2;38034:3;37975:67;:::i;:::-;37968:74;;38051:93;38140:3;38051:93;:::i;:::-;38169:2;38164:3;38160:12;38153:19;;37812:366;;;:::o;38184:419::-;38350:4;38388:2;38377:9;38373:18;38365:26;;38437:9;38431:4;38427:20;38423:1;38412:9;38408:17;38401:47;38465:131;38591:4;38465:131;:::i;:::-;38457:139;;38184:419;;;:::o;38609:229::-;38749:34;38745:1;38737:6;38733:14;38726:58;38818:12;38813:2;38805:6;38801:15;38794:37;38609:229;:::o;38844:366::-;38986:3;39007:67;39071:2;39066:3;39007:67;:::i;:::-;39000:74;;39083:93;39172:3;39083:93;:::i;:::-;39201:2;39196:3;39192:12;39185:19;;38844:366;;;:::o;39216:419::-;39382:4;39420:2;39409:9;39405:18;39397:26;;39469:9;39463:4;39459:20;39455:1;39444:9;39440:17;39433:47;39497:131;39623:4;39497:131;:::i;:::-;39489:139;;39216:419;;;:::o;39641:191::-;39681:3;39700:20;39718:1;39700:20;:::i;:::-;39695:25;;39734:20;39752:1;39734:20;:::i;:::-;39729:25;;39777:1;39774;39770:9;39763:16;;39798:3;39795:1;39792:10;39789:36;;;39805:18;;:::i;:::-;39789:36;39641:191;;;;:::o;39838:634::-;40059:4;40097:2;40086:9;40082:18;40074:26;;40146:9;40140:4;40136:20;40132:1;40121:9;40117:17;40110:47;40174:108;40277:4;40268:6;40174:108;:::i;:::-;40166:116;;40329:9;40323:4;40319:20;40314:2;40303:9;40299:18;40292:48;40357:108;40460:4;40451:6;40357:108;:::i;:::-;40349:116;;39838:634;;;;;:::o;40478:222::-;40618:34;40614:1;40606:6;40602:14;40595:58;40687:5;40682:2;40674:6;40670:15;40663:30;40478:222;:::o;40706:366::-;40848:3;40869:67;40933:2;40928:3;40869:67;:::i;:::-;40862:74;;40945:93;41034:3;40945:93;:::i;:::-;41063:2;41058:3;41054:12;41047:19;;40706:366;;;:::o;41078:419::-;41244:4;41282:2;41271:9;41267:18;41259:26;;41331:9;41325:4;41321:20;41317:1;41306:9;41302:17;41295:47;41359:131;41485:4;41359:131;:::i;:::-;41351:139;;41078:419;;;:::o;41503:223::-;41643:34;41639:1;41631:6;41627:14;41620:58;41712:6;41707:2;41699:6;41695:15;41688:31;41503:223;:::o;41732:366::-;41874:3;41895:67;41959:2;41954:3;41895:67;:::i;:::-;41888:74;;41971:93;42060:3;41971:93;:::i;:::-;42089:2;42084:3;42080:12;42073:19;;41732:366;;;:::o;42104:419::-;42270:4;42308:2;42297:9;42293:18;42285:26;;42357:9;42351:4;42347:20;42343:1;42332:9;42328:17;42321:47;42385:131;42511:4;42385:131;:::i;:::-;42377:139;;42104:419;;;:::o;42529:228::-;42669:34;42665:1;42657:6;42653:14;42646:58;42738:11;42733:2;42725:6;42721:15;42714:36;42529:228;:::o;42763:366::-;42905:3;42926:67;42990:2;42985:3;42926:67;:::i;:::-;42919:74;;43002:93;43091:3;43002:93;:::i;:::-;43120:2;43115:3;43111:12;43104:19;;42763:366;;;:::o;43135:419::-;43301:4;43339:2;43328:9;43324:18;43316:26;;43388:9;43382:4;43378:20;43374:1;43363:9;43359:17;43352:47;43416:131;43542:4;43416:131;:::i;:::-;43408:139;;43135:419;;;:::o;43560:332::-;43681:4;43719:2;43708:9;43704:18;43696:26;;43732:71;43800:1;43789:9;43785:17;43776:6;43732:71;:::i;:::-;43813:72;43881:2;43870:9;43866:18;43857:6;43813:72;:::i;:::-;43560:332;;;;;:::o;43898:442::-;44047:4;44085:2;44074:9;44070:18;44062:26;;44098:71;44166:1;44155:9;44151:17;44142:6;44098:71;:::i;:::-;44179:72;44247:2;44236:9;44232:18;44223:6;44179:72;:::i;:::-;44261;44329:2;44318:9;44314:18;44305:6;44261:72;:::i;:::-;43898:442;;;;;;:::o;44346:220::-;44486:34;44482:1;44474:6;44470:14;44463:58;44555:3;44550:2;44542:6;44538:15;44531:28;44346:220;:::o;44572:366::-;44714:3;44735:67;44799:2;44794:3;44735:67;:::i;:::-;44728:74;;44811:93;44900:3;44811:93;:::i;:::-;44929:2;44924:3;44920:12;44913:19;;44572:366;;;:::o;44944:419::-;45110:4;45148:2;45137:9;45133:18;45125:26;;45197:9;45191:4;45187:20;45183:1;45172:9;45168:17;45161:47;45225:131;45351:4;45225:131;:::i;:::-;45217:139;;44944:419;;;:::o;45369:98::-;45420:6;45454:5;45448:12;45438:22;;45369:98;;;:::o;45473:168::-;45556:11;45590:6;45585:3;45578:19;45630:4;45625:3;45621:14;45606:29;;45473:168;;;;:::o;45647:373::-;45733:3;45761:38;45793:5;45761:38;:::i;:::-;45815:70;45878:6;45873:3;45815:70;:::i;:::-;45808:77;;45894:65;45952:6;45947:3;45940:4;45933:5;45929:16;45894:65;:::i;:::-;45984:29;46006:6;45984:29;:::i;:::-;45979:3;45975:39;45968:46;;45737:283;45647:373;;;;:::o;46026:1053::-;46349:4;46387:3;46376:9;46372:19;46364:27;;46401:71;46469:1;46458:9;46454:17;46445:6;46401:71;:::i;:::-;46482:72;46550:2;46539:9;46535:18;46526:6;46482:72;:::i;:::-;46601:9;46595:4;46591:20;46586:2;46575:9;46571:18;46564:48;46629:108;46732:4;46723:6;46629:108;:::i;:::-;46621:116;;46784:9;46778:4;46774:20;46769:2;46758:9;46754:18;46747:48;46812:108;46915:4;46906:6;46812:108;:::i;:::-;46804:116;;46968:9;46962:4;46958:20;46952:3;46941:9;46937:19;46930:49;46996:76;47067:4;47058:6;46996:76;:::i;:::-;46988:84;;46026:1053;;;;;;;;:::o;47085:141::-;47141:5;47172:6;47166:13;47157:22;;47188:32;47214:5;47188:32;:::i;:::-;47085:141;;;;:::o;47232:349::-;47301:6;47350:2;47338:9;47329:7;47325:23;47321:32;47318:119;;;47356:79;;:::i;:::-;47318:119;47476:1;47501:63;47556:7;47547:6;47536:9;47532:22;47501:63;:::i;:::-;47491:73;;47447:127;47232:349;;;;:::o;47587:106::-;47631:8;47680:5;47675:3;47671:15;47650:36;;47587:106;;;:::o;47699:183::-;47734:3;47772:1;47754:16;47751:23;47748:128;;;47810:1;47807;47804;47789:23;47832:34;47863:1;47857:8;47832:34;:::i;:::-;47825:41;;47748:128;47699:183;:::o;47888:711::-;47927:3;47965:4;47947:16;47944:26;47973:5;47941:39;48002:20;;:::i;:::-;48077:1;48059:16;48055:24;48052:1;48046:4;48031:49;48110:4;48104:11;48209:16;48202:4;48194:6;48190:17;48187:39;48154:18;48146:6;48143:30;48127:113;48124:146;;;48255:5;;;;48124:146;48301:6;48295:4;48291:17;48337:3;48331:10;48364:18;48356:6;48353:30;48350:43;;;48386:5;;;;;;48350:43;48434:6;48427:4;48422:3;48418:14;48414:27;48493:1;48475:16;48471:24;48465:4;48461:35;48456:3;48453:44;48450:57;;;48500:5;;;;;;;48450:57;48517;48565:6;48559:4;48555:17;48547:6;48543:30;48537:4;48517:57;:::i;:::-;48590:3;48583:10;;47931:668;;;;;47888:711;;:::o;48605:239::-;48745:34;48741:1;48733:6;48729:14;48722:58;48814:22;48809:2;48801:6;48797:15;48790:47;48605:239;:::o;48850:366::-;48992:3;49013:67;49077:2;49072:3;49013:67;:::i;:::-;49006:74;;49089:93;49178:3;49089:93;:::i;:::-;49207:2;49202:3;49198:12;49191:19;;48850:366;;;:::o;49222:419::-;49388:4;49426:2;49415:9;49411:18;49403:26;;49475:9;49469:4;49465:20;49461:1;49450:9;49446:17;49439:47;49503:131;49629:4;49503:131;:::i;:::-;49495:139;;49222:419;;;:::o;49647:227::-;49787:34;49783:1;49775:6;49771:14;49764:58;49856:10;49851:2;49843:6;49839:15;49832:35;49647:227;:::o;49880:366::-;50022:3;50043:67;50107:2;50102:3;50043:67;:::i;:::-;50036:74;;50119:93;50208:3;50119:93;:::i;:::-;50237:2;50232:3;50228:12;50221:19;;49880:366;;;:::o;50252:419::-;50418:4;50456:2;50445:9;50441:18;50433:26;;50505:9;50499:4;50495:20;50491:1;50480:9;50476:17;50469:47;50533:131;50659:4;50533:131;:::i;:::-;50525:139;;50252:419;;;:::o;50677:751::-;50900:4;50938:3;50927:9;50923:19;50915:27;;50952:71;51020:1;51009:9;51005:17;50996:6;50952:71;:::i;:::-;51033:72;51101:2;51090:9;51086:18;51077:6;51033:72;:::i;:::-;51115;51183:2;51172:9;51168:18;51159:6;51115:72;:::i;:::-;51197;51265:2;51254:9;51250:18;51241:6;51197:72;:::i;:::-;51317:9;51311:4;51307:20;51301:3;51290:9;51286:19;51279:49;51345:76;51416:4;51407:6;51345:76;:::i;:::-;51337:84;;50677:751;;;;;;;;:::o;51434:137::-;51488:5;51519:6;51513:13;51504:22;;51535:30;51559:5;51535:30;:::i;:::-;51434:137;;;;:::o;51577:345::-;51644:6;51693:2;51681:9;51672:7;51668:23;51664:32;51661:119;;;51699:79;;:::i;:::-;51661:119;51819:1;51844:61;51897:7;51888:6;51877:9;51873:22;51844:61;:::i;:::-;51834:71;;51790:125;51577:345;;;;:::o;51928:229::-;52068:34;52064:1;52056:6;52052:14;52045:58;52137:12;52132:2;52124:6;52120:15;52113:37;51928:229;:::o;52163:366::-;52305:3;52326:67;52390:2;52385:3;52326:67;:::i;:::-;52319:74;;52402:93;52491:3;52402:93;:::i;:::-;52520:2;52515:3;52511:12;52504:19;;52163:366;;;:::o;52535:419::-;52701:4;52739:2;52728:9;52724:18;52716:26;;52788:9;52782:4;52778:20;52774:1;52763:9;52759:17;52752:47;52816:131;52942:4;52816:131;:::i;:::-;52808:139;;52535:419;;;:::o;52960:227::-;53100:34;53096:1;53088:6;53084:14;53077:58;53169:10;53164:2;53156:6;53152:15;53145:35;52960:227;:::o;53193:366::-;53335:3;53356:67;53420:2;53415:3;53356:67;:::i;:::-;53349:74;;53432:93;53521:3;53432:93;:::i;:::-;53550:2;53545:3;53541:12;53534:19;;53193:366;;;:::o;53565:419::-;53731:4;53769:2;53758:9;53754:18;53746:26;;53818:9;53812:4;53808:20;53804:1;53793:9;53789:17;53782:47;53846:131;53972:4;53846:131;:::i;:::-;53838:139;;53565:419;;;:::o;53990:225::-;54130:34;54126:1;54118:6;54114:14;54107:58;54199:8;54194:2;54186:6;54182:15;54175:33;53990:225;:::o;54221:366::-;54363:3;54384:67;54448:2;54443:3;54384:67;:::i;:::-;54377:74;;54460:93;54549:3;54460:93;:::i;:::-;54578:2;54573:3;54569:12;54562:19;;54221:366;;;:::o;54593:419::-;54759:4;54797:2;54786:9;54782:18;54774:26;;54846:9;54840:4;54836:20;54832:1;54821:9;54817:17;54810:47;54874:131;55000:4;54874:131;:::i;:::-;54866:139;;54593:419;;;:::o;55018:179::-;55158:31;55154:1;55146:6;55142:14;55135:55;55018:179;:::o;55203:366::-;55345:3;55366:67;55430:2;55425:3;55366:67;:::i;:::-;55359:74;;55442:93;55531:3;55442:93;:::i;:::-;55560:2;55555:3;55551:12;55544:19;;55203:366;;;:::o;55575:419::-;55741:4;55779:2;55768:9;55764:18;55756:26;;55828:9;55822:4;55818:20;55814:1;55803:9;55799:17;55792:47;55856:131;55982:4;55856:131;:::i;:::-;55848:139;;55575:419;;;:::o;56000:147::-;56101:11;56138:3;56123:18;;56000:147;;;;:::o;56153:386::-;56257:3;56285:38;56317:5;56285:38;:::i;:::-;56339:88;56420:6;56415:3;56339:88;:::i;:::-;56332:95;;56436:65;56494:6;56489:3;56482:4;56475:5;56471:16;56436:65;:::i;:::-;56526:6;56521:3;56517:16;56510:23;;56261:278;56153:386;;;;:::o;56545:271::-;56675:3;56697:93;56786:3;56777:6;56697:93;:::i;:::-;56690:100;;56807:3;56800:10;;56545:271;;;;:::o
Swarm Source
ipfs://90bcb63b0545abc032b353065912da2c2071bd2291ea28788fe0643312f97348
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.