[
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_lazyGasStation",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_lazyToken",
                "type": "address"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "tokenAddress",
                "type": "address"
            }
        ],
        "name": "AssociationFailed",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "BadParameters",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "ContractUserAlreadySet",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "int32",
                "name": "responseCode",
                "type": "int32"
            }
        ],
        "name": "CryptoTransferFailed",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "FailedNFTCreate",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "FailedNFTMintAndSend",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "FailedNFTWipe",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            }
        ],
        "name": "FungibleTransferFailed",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            }
        ],
        "name": "FungibleWithdrawalFailed",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "required",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "available",
                "type": "uint256"
            }
        ],
        "name": "InsufficientHbarBalance",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "required",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "available",
                "type": "uint256"
            }
        ],
        "name": "InsufficientTokenBalance",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "LastAdminError",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "int32",
                "name": "responseCode",
                "type": "int32"
            }
        ],
        "name": "NFTBulkTransferFailed",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "internalType": "int32",
                "name": "responseCode",
                "type": "int32"
            }
        ],
        "name": "NFTCollectionTransferFailed",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "NotAdmin",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "NotContractUser",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "from",
                "type": "address"
            }
        ],
        "name": "PullFungibleFailed",
        "type": "error"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "admin",
                "type": "address"
            }
        ],
        "name": "AdminAdded",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "admin",
                "type": "address"
            }
        ],
        "name": "AdminRemoved",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "contractUser",
                "type": "address"
            }
        ],
        "name": "ContractUserSet",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "from",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "requestedAmount",
                "type": "uint256"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "actualAmount",
                "type": "uint256"
            }
        ],
        "name": "FungiblePulled",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "to",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            }
        ],
        "name": "FungibleTransferred",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            }
        ],
        "name": "HbarDeposited",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "to",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            }
        ],
        "name": "HbarTransferred",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "recipient",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            }
        ],
        "name": "HbarWithdrawn",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "from",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "to",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "count",
                "type": "uint256"
            }
        ],
        "name": "NFTCollectionTransferred",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "tokenAddress",
                "type": "address"
            }
        ],
        "name": "TokenAssociated",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "tokenAddress",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "creator",
                "type": "address"
            }
        ],
        "name": "TokenCreated",
        "type": "event"
    },
    {
        "stateMutability": "payable",
        "type": "fallback"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "a",
                "type": "address"
            }
        ],
        "name": "addAdmin",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            }
        ],
        "name": "associateTokenToStorage",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "bool",
                "name": "isStaking",
                "type": "bool"
            },
            {
                "internalType": "address[]",
                "name": "nftTokens",
                "type": "address[]"
            },
            {
                "internalType": "uint256[][]",
                "name": "nftSerials",
                "type": "uint256[][]"
            },
            {
                "internalType": "address",
                "name": "eoaAddress",
                "type": "address"
            }
        ],
        "name": "bulkTransferNFTs",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "string",
                "name": "_name",
                "type": "string"
            },
            {
                "internalType": "string",
                "name": "_symbol",
                "type": "string"
            },
            {
                "internalType": "string",
                "name": "_memo",
                "type": "string"
            },
            {
                "components": [
                    {
                        "internalType": "uint32",
                        "name": "numerator",
                        "type": "uint32"
                    },
                    {
                        "internalType": "uint32",
                        "name": "denominator",
                        "type": "uint32"
                    },
                    {
                        "internalType": "uint32",
                        "name": "fallbackfee",
                        "type": "uint32"
                    },
                    {
                        "internalType": "address",
                        "name": "account",
                        "type": "address"
                    }
                ],
                "internalType": "struct LazyLottoStorage.NFTFeeObject[]",
                "name": "_royalties",
                "type": "tuple[]"
            }
        ],
        "name": "createToken",
        "outputs": [
            {
                "internalType": "address",
                "name": "tokenAddress",
                "type": "address"
            }
        ],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "depositHbar",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "from",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "amountToPull",
                "type": "uint256"
            }
        ],
        "name": "ensureFungibleBalance",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "actualAmount",
                "type": "uint256"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "address",
                                "name": "accountID",
                                "type": "address"
                            },
                            {
                                "internalType": "int64",
                                "name": "amount",
                                "type": "int64"
                            },
                            {
                                "internalType": "bool",
                                "name": "isApproval",
                                "type": "bool"
                            }
                        ],
                        "internalType": "struct IHederaTokenServiceLite.AccountAmount[]",
                        "name": "transfers",
                        "type": "tuple[]"
                    }
                ],
                "internalType": "struct IHederaTokenServiceLite.TransferList",
                "name": "transferList",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "address",
                        "name": "token",
                        "type": "address"
                    },
                    {
                        "components": [
                            {
                                "internalType": "address",
                                "name": "accountID",
                                "type": "address"
                            },
                            {
                                "internalType": "int64",
                                "name": "amount",
                                "type": "int64"
                            },
                            {
                                "internalType": "bool",
                                "name": "isApproval",
                                "type": "bool"
                            }
                        ],
                        "internalType": "struct IHederaTokenServiceLite.AccountAmount[]",
                        "name": "transfers",
                        "type": "tuple[]"
                    },
                    {
                        "components": [
                            {
                                "internalType": "address",
                                "name": "senderAccountID",
                                "type": "address"
                            },
                            {
                                "internalType": "address",
                                "name": "receiverAccountID",
                                "type": "address"
                            },
                            {
                                "internalType": "int64",
                                "name": "serialNumber",
                                "type": "int64"
                            },
                            {
                                "internalType": "bool",
                                "name": "isApproval",
                                "type": "bool"
                            }
                        ],
                        "internalType": "struct IHederaTokenServiceLite.NftTransfer[]",
                        "name": "nftTransfers",
                        "type": "tuple[]"
                    }
                ],
                "internalType": "struct IHederaTokenServiceLite.TokenTransferList[]",
                "name": "tokenTransfers",
                "type": "tuple[]"
            }
        ],
        "name": "executeCryptoTransfer",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "getContractUser",
        "outputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "a",
                "type": "address"
            }
        ],
        "name": "isAdmin",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "lazyGasStation",
        "outputs": [
            {
                "internalType": "contract ILazyGasStation",
                "name": "",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "receiver",
                "type": "address"
            },
            {
                "internalType": "bytes[]",
                "name": "metadata",
                "type": "bytes[]"
            }
        ],
        "name": "mintAndTransferNFT",
        "outputs": [
            {
                "internalType": "int64[]",
                "name": "serialNumbers",
                "type": "int64[]"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "bool",
                "name": "isStaking",
                "type": "bool"
            },
            {
                "internalType": "address",
                "name": "collectionAddress",
                "type": "address"
            },
            {
                "internalType": "uint256[]",
                "name": "serials",
                "type": "uint256[]"
            },
            {
                "internalType": "address",
                "name": "eoaAddress",
                "type": "address"
            }
        ],
        "name": "moveNFTsWithHbar",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "from",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            }
        ],
        "name": "pullFungibleFrom",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "actualAmount",
                "type": "uint256"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "a",
                "type": "address"
            }
        ],
        "name": "removeAdmin",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "contractUser",
                "type": "address"
            }
        ],
        "name": "setContractUser",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "to",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            }
        ],
        "name": "transferFungible",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address payable",
                "name": "to",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            }
        ],
        "name": "transferHbar",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "from",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "to",
                "type": "address"
            },
            {
                "internalType": "int64[]",
                "name": "serialNumbers",
                "type": "int64[]"
            }
        ],
        "name": "transferNFTCollection",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "account",
                "type": "address"
            },
            {
                "internalType": "int64[]",
                "name": "serialNumbers",
                "type": "int64[]"
            }
        ],
        "name": "wipeNFT",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "token",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "recipient",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            }
        ],
        "name": "withdrawFungible",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address payable",
                "name": "recipient",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            }
        ],
        "name": "withdrawHbar",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "stateMutability": "payable",
        "type": "receive"
    }
]