// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.

package sp1verifierplonk

import (
	"errors"
	"math/big"
	"strings"

	ethereum "github.com/ethereum/go-ethereum"
	"github.com/ethereum/go-ethereum/accounts/abi"
	"github.com/ethereum/go-ethereum/accounts/abi/bind"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/core/types"
	"github.com/ethereum/go-ethereum/event"
)

// Reference imports to suppress errors if they are not otherwise used.
var (
	_ = errors.New
	_ = big.NewInt
	_ = strings.NewReader
	_ = ethereum.NotFound
	_ = bind.Bind
	_ = common.Big1
	_ = types.BloomLookup
	_ = event.NewSubscription
	_ = abi.ConvertType
)

// Sp1verifierplonkMetaData contains all meta data concerning the Sp1verifierplonk contract.
var Sp1verifierplonkMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"received\",\"type\":\"bytes4\"},{\"internalType\":\"bytes4\",\"name\":\"expected\",\"type\":\"bytes4\"}],\"name\":\"WrongVerifierSelector\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VERIFIER_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"},{\"internalType\":\"uint256[]\",\"name\":\"public_inputs\",\"type\":\"uint256[]\"}],\"name\":\"Verify\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicValues\",\"type\":\"bytes\"}],\"name\":\"hashPublicValues\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"programVKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"publicValues\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofBytes\",\"type\":\"bytes\"}],\"name\":\"verifyProof\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]",
	Bin: "0x6080604052348015600e575f5ffd5b50612f8e8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610064575f3560e01c80636b61d8e71161004d5780636b61d8e7146100b25780637e4f7a8a146100c5578063ffa1ad74146100e8575f5ffd5b80632a5104361461006857806341493c601461009d575b5f5ffd5b7fd4e8ecd2357dd882209800acd6abb443d231cf287d77ba62b732ce937c8b56e75b6040519081526020015b60405180910390f35b6100b06100ab366004612c15565b610127565b005b61008a6100c0366004612c8e565b610335565b6100d86100d3366004612ccd565b6103b1565b6040519015158152602001610094565b604080518082018252600681527f76352e302e300000000000000000000000000000000000000000000000000000602082015290516100949190612d69565b5f6101356004828486612dbc565b61013e91612de3565b90507fd4e8ecd2357dd882209800acd6abb443d231cf287d77ba62b732ce937c8b56e77fd4e8ecd2000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461020c576040517f988066a10000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000080841660048301528216602482015260440160405180910390fd5b5f6102178787610335565b6040805160028082526060820183529293505f929091602083019080368337019050509050885f1c815f8151811061025157610251612e49565b602002602001018181525050815f1c8160018151811061027357610273612e49565b60209081029190910101525f30637e4f7a8a610292886004818c612dbc565b856040518463ffffffff1660e01b81526004016102b193929190612e76565b602060405180830381865afa1580156102cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102f09190612f0c565b905080610329576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b5f7f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f1b6002848460405161036b929190612f32565b602060405180830381855afa158015610386573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906103a99190612f41565b169392505050565b5f60405161024081016103c384610853565b6103cd8585610866565b6103d6866108b5565b6103df876108cb565b5f6103eb86868a610a65565b90506103f681610d9b565b90506104028189610e01565b905061040e8189610e8f565b5060608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061046584630100000085612b65565b086101c084015250610478818587610efa565b61048382868a61126f565b91507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183086101a0840152506104ba9050611614565b6104c386612759565b6104cc866126aa565b6104d5866122d1565b6104de86611dfd565b6104e786611b63565b6104f086611765565b61020001519050612bc8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f77726f6e67206e756d626572206f66207075626c696320696e707574730000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f72206d6f6420657870000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6572726f72206563206f7065726174696f6e00000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e707574732061726520626967676572207468616e207200000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f77726f6e672070726f6f662073697a65000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f70656e696e677320626967676572207468616e2072000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6572726f722070616972696e67000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f722076657269667900000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6572726f722072616e646f6d2067656e206b7a670000000000000000000000006044820152606481fd5b60028114610863576108636104fc565b50565b5f5b818110156108b0577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000833511156108a1576108a1610619565b60209290920191600101610868565b505050565b6103608181146108c7576108c7610678565b5050565b61018081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000081351115610901576109016106d7565b506101a081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000081351115610938576109386106d7565b506101c081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561096f5761096f6106d7565b506101e081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109a6576109a66106d7565b5061020081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156109dd576109dd6106d7565b5061026081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000081351115610a1457610a146106d7565b5061030081015f5b60018110156108b0577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000082351115610a5657610a566106d7565b60209190910190600101610a1c565b5f60405161024081016467616d6d6181527f239ed22af3191cfccd323949e417667defbcb082d9f31527488e523372ea9e7a60208201527f213da3cb623029a98e0186dc8c1a3a31ee249ab93bfb68abc1103900890eccb960408201527f01fd59b61f15d097ad7701c4dc12b8739eadc1d54664773c3ed5d8104c296c2a60608201527e22ee53909feab41bb47f0e6ddb802bb6096fd2027d89c22d94b4e56e227cd060808201527f14992dea1a6515e3f8a2250e30cb9e3bad58ff44bbfdd1390bc8d0a8f2bddd0f60a08201527f1e82777c7079b474d31f9fedafca8f2d108de5c58a2df629a8af49cd424c8c2960c08201527f060081d04d187d301d4223990acab3c887713358f1705af7f53e07aca0f709dd60e08201527f16911506ad1ccf9b39db250ce7752278c8115127c4f85080c2bd153946b4a5be6101008201527f279df33b57d698efd752579ee90674a7241ecdb21c6cb35cdf8ef7c1af73160a6101208201527f202fa12c1e82de2f49dc4c5bc771b94c8495544bb0055c4c381744cc3d1d332d6101408201527f040315f3fd753e8cca89f353d096fb94fcdf9cd41973954a3dd4ec58cba79d5f6101608201527f18e0b4a84e9429c05d0fd0d304acd0f3cfa93437356c112199d4d7c0162a1c9e6101808201527f2e14e072ab351d1b3838323f75ecf9b6c08043c230423d515febd04e29336b776101a08201527f1553e1a7b6e18ba105733244604cd37d82371c3a7b0503fa4aff460870170bcf6101c08201527f0c203d7594efa49bd977084de30db24ce843e501791176c21b5beda79ceaf1366101e08201527f0c4bddeb52250b0114282b00285f224b812fc581f2b55e5c3a49472069f901f36102008201527f2fb4fbb4677318edec4b80fc8fa22ffcce4a51d5f3771e575e726e790a9f9cbe6102208201527f28518b11376dc02418849d45b1f3b0e00d3f74502d713b002b9d7293a1018d79610240820152610260810160208602808883379081019060c0808784375061030501905060208282601b820160025afa905080610d6557610d65610795565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182066040820152509392505050565b5f60405161024060405101636265746181528360208201526020816024601c840160025afa80610dcd57610dcd610795565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018206602082015250919050565b5f60405161024060405101606564616c7068618252602082018681526020810190506103208601600160400280828437928301929190910190506040610220870182375060208282601b850160025afa905080610e6057610e60610795565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181069091529392505050565b60405161024060405101637a657461815283602082015260c0808401604083013760208160e4601c840160025afa80610eca57610eca610795565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006606091909101525050565b5f60405160608101516101c0820151915085610f1881878585610f93565b5f92505f91505b85821015610f89577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001853582510992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018385086020958601959094506001929092019101610f1f565b5050509392505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c1183096001855f5b86811015611081577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103860882527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b8409925060209190910190600101610fdc565b5061108d818789611145565b5060019050855f5b8681101561113b577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001868551090982526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b84099250600101611095565b5050505050505050565b600183525f5f5b8381101561119a5781850151828401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830990506020840193508084880152505060018101905061114c565b5060208103820191508084019350506111db6020840160027f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001038551612b65565b5f5b838110156112685760208503945082517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018651840984527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909401939250506001016111dd565b5050505050565b5f60405160608101516101c0820151915061032084015f5f611297896020850135853561141b565b91506112aa8962a653508a0187876112e0565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840987089998505050505050505050565b5f61130c85857f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b612b65565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001817f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103840894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c11820990506113c5867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff87612b65565b94507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018482099695505050505050565b5f83525f602084015280604084015250806060830152505f6080820153603060818201535f60828201536042608382015360536084820153604260858201536032608682015360326087820153602d608882015360506089820153606c608a820153606f608b820153606e608c820153606b608d820153600b608e8201535f602082608f8460025afa806114b1576114b1610795565b8251600160208501536042602185015360536022850153604260238501536032602485015360326025850153602d602685015360506027850153606c6028850153606f6029850153606e602a850153606b602b850153600b602c850153602084602d8660025afa91508161152757611527610795565b8351186020840152600260408401536042604184015360536042840153604260438401536032604484015360326045840153602d604684015360506047840153606c6048840153606f6049840153606e604a840153606b604b840153600b604c84015360208301602081602d8360025afa915050806115a8576115a8610795565b507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017001000000000000000000000000000000008351099050602082015160801c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089392505050565b604051610240604051016101c08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010360608501510861169a837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff83612b65565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e427ce32d4886b01bfe313ba1dba6db8b2045d128178a7164500e0a6c11820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282098451935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001905082820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282099050806080840152505050565b60405161024081016101608201518152610180820151602082015261028083013560408201526102a08301356060820152610220830135608082015261024083013560a08201526102c083013560c08201526102e083013560e082015260608201516101008201526101e08201516101208201526020816101408360025afa806117f1576117f16107f4565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182510690508160408101925061028085013581526102a0850135602082015261184183836102c0880184612acc565b61016084016118568484610220890184612acc565b610140850161186a84610260890183612b13565b7f1fa4be93b5e7f7e674d5059b63554fab99638b304ed8310e9fa44c281ac9b03b85527f1a01ae7fac6228e39d3cb5a5e71fd31160f3241e79a5f48ffb3737e6c389b7216020860152805160408087019182529095908160608160075afa9150816118d7576118d7610795565b60208101915081517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703825261190f868285866129c3565b50508360408501945061192c8560608801516102808a0184612a5a565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f0c9fabc7845d50d2852e2a0371c6441f145e0db82e8326961c25f1e3e32b045b60608801510995507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186850993506119ac85856102c08a0184612acc565b6119b8858284856129c3565b50602082810180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470381528251865291810151908501527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408501527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608501527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808501527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a0850152905160c0840152805160e08401527f22f1acbb03c4508760c2430af35865e7cdf9f3eb1224504fdcc3708ddb954a486101008401527f2a344fad01c2ed0ed73142ae1752429eaea515c6f3f6b941103cc21c2308e1cb6101208401527f159f15b842ba9c8449aa3268f981010d4c7142e5193473d80b464e964845c3f86101408401527f0efd30ac7b6f8d0d3ccbc2207587c2acbad1532dc0293f0d034cf8258cd428b361016084015292506108b090508160405160205f6101808460085afa80611b5557611b55610736565b505f51610200919091015250565b6040516102406040510160208101604082016101e084015180610160860160e08701518152610100870151610180880152610120870151610140880152611bae86835f8b0184612acc565b611bc1826101808a016101408a01612b13565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611bf6868360408b0184612acc565b611c09826101a08a016101408a01612b13565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611c3e868360808b0184612acc565b611c51826101c08a016101408a01612b13565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f239ed22af3191cfccd323949e417667defbcb082d9f31527488e523372ea9e7a86527f213da3cb623029a98e0186dc8c1a3a31ee249ab93bfb68abc1103900890eccb98552611cc984838884612a85565b611cdc826101e08a016101408a01612b13565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f01fd59b61f15d097ad7701c4dc12b8739eadc1d54664773c3ed5d8104c296c2a86527e22ee53909feab41bb47f0e6ddb802bb6096fd2027d89c22d94b4e56e227cd08552611d5384838884612a85565b611d66826102008a016101408a01612b13565b61030088017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184840992507f2fb4fbb4677318edec4b80fc8fa22ffcce4a51d5f3771e575e726e790a9f9cbe87527f28518b11376dc02418849d45b1f3b0e00d3f74502d713b002b9d7293a1018d798652611de385848985612a85565b611df283826101408b01612b13565b505050505050505050565b6040516467616d6d616102408201908152606082015161026083015260e08201516102808301526101008201516102a083015260c0836102c08401377f239ed22af3191cfccd323949e417667defbcb082d9f31527488e523372ea9e7a6101408201527f213da3cb623029a98e0186dc8c1a3a31ee249ab93bfb68abc1103900890eccb96101608201527f01fd59b61f15d097ad7701c4dc12b8739eadc1d54664773c3ed5d8104c296c2a610180808301919091527e22ee53909feab41bb47f0e6ddb802bb6096fd2027d89c22d94b4e56e227cd06101a0808401919091527f2fb4fbb4677318edec4b80fc8fa22ffcce4a51d5f3771e575e726e790a9f9cbe6101c0808501919091527f28518b11376dc02418849d45b1f3b0e00d3f74502d713b002b9d7293a1018d796101e0808601919091526101208601516102008087019190915293870135610220860152918601356102408501528501356102608401528401356102808301528301356102a08201526102c081016103008401602081833750610260840135602091820152601b906102e5906101e085018285850160025afa9250505080611fb257611fb2610795565b506101e00180517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006905250565b604051610240604051017f060081d04d187d301d4223990acab3c887713358f1705af7f53e07aca0f709dd81527f16911506ad1ccf9b39db250ce7752278c8115127c4f85080c2bd153946b4a5be602082015261204b604082016101808501358360e08601612a2f565b7f279df33b57d698efd752579ee90674a7241ecdb21c6cb35cdf8ef7c1af73160a81527f202fa12c1e82de2f49dc4c5bc771b94c8495544bb0055c4c381744cc3d1d332d60208201526120ab604082016101a08501358360e08601612a85565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840135610180850135097f040315f3fd753e8cca89f353d096fb94fcdf9cd41973954a3dd4ec58cba79d5f82527f18e0b4a84e9429c05d0fd0d304acd0f3cfa93437356c112199d4d7c0162a1c9e602083015261213460408301828460e08701612a85565b507f2e14e072ab351d1b3838323f75ecf9b6c08043c230423d515febd04e29336b7781527f1553e1a7b6e18ba105733244604cd37d82371c3a7b0503fa4aff460870170bcf6020820152612195604082016101c08501358360e08601612a85565b7f0c203d7594efa49bd977084de30db24ce843e501791176c21b5beda79ceaf13681527f0c4bddeb52250b0114282b00285f224b812fc581f2b55e5c3a49472069f901f360208201526121f0604082018260e08501806129c3565b610300830161032084015f5b600181101561223c5781358452602082013560208501526122266040850184358660e08901612a85565b60209290920191604091909101906001016121fc565b5050507f14992dea1a6515e3f8a2250e30cb9e3bad58ff44bbfdd1390bc8d0a8f2bddd0f81527f1e82777c7079b474d31f9fedafca8f2d108de5c58a2df629a8af49cd424c8c29602082015261229a60408201858360e08601612a85565b610220830135815261024083013560208201526122bf60408201868360e08601612a85565b6112688160a0840160e08501806129c3565b6040516020810151604082015160608301515f8401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184610260880135097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e088013586097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180890135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161020089013587097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08a0135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018284097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600580097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878a0998507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808c01358a0894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160058a0993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08c0135850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818a099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08b0135830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183850997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018289097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103985085890997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160808a01518908975061032988828c611fe1565b6040516002630100000001610240604051016126cb81836060860151612b65565b91506126e08183610140870160a08701612a5a565b6126f381610100860160a08601806129f9565b612702818360a0860180612a2f565b6127148160c0860160a08601806129f9565b61272b816101c085015160a0860160a08701612a2f565b505060c00180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703905250565b6040515f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208301516101e08501350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040830151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180840135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208401516102008601350990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040840151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0850135820890505f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160408501516101c08701350890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f840151830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850135830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840151830860808401519092507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190810391508183087f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001036101209390930192909252505050565b8151845260208201516020850152825160408501526020830151606085015260408160808660065afa80611268576112686105ba565b8151845260208201516020850152823560408501526020830135606085015260408160808660065afa80611268576112686105ba565b815184526020820151602085015282604085015260408160608660075afa80611268576112686105ba565b813584526020820135602085015282604085015260408160608660075afa80611268576112686105ba565b815184526020820151602085015282604085015260408460608660075afa815160408601526020820151606086015260408260808760065afa1680611268576112686105ba565b813584526020820135602085015282604085015260408460608660075afa815160408601526020820151606086015260408260808760065afa1680611268576112686105ba565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001838335097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181835108825250505050565b602083526020808401526020604084015280606084015250806080830152507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a08201525f60208260c08460055afa80612bc257612bc261055b565b50505190565b949350505050565b5f5f83601f840112612be0575f5ffd5b50813567ffffffffffffffff811115612bf7575f5ffd5b602083019150836020828501011115612c0e575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c29575f5ffd5b85359450602086013567ffffffffffffffff811115612c46575f5ffd5b612c5288828901612bd0565b909550935050604086013567ffffffffffffffff811115612c71575f5ffd5b612c7d88828901612bd0565b969995985093965092949392505050565b5f5f60208385031215612c9f575f5ffd5b823567ffffffffffffffff811115612cb5575f5ffd5b612cc185828601612bd0565b90969095509350505050565b5f5f5f5f60408587031215612ce0575f5ffd5b843567ffffffffffffffff811115612cf6575f5ffd5b612d0287828801612bd0565b909550935050602085013567ffffffffffffffff811115612d21575f5ffd5b8501601f81018713612d31575f5ffd5b803567ffffffffffffffff811115612d47575f5ffd5b8760208260051b8401011115612d5b575f5ffd5b949793965060200194505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f5f85851115612dca575f5ffd5b83861115612dd6575f5ffd5b5050820193919092039150565b80357fffffffff000000000000000000000000000000000000000000000000000000008116906004841015612e42577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60408152826040820152828460608301375f606084830101525f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011682016060810160608483030160208501528085518083526080840191506020870193505f92505b80831015612f005783518252602082019150602084019350600183019250612edd565b50979650505050505050565b5f60208284031215612f1c575f5ffd5b81518015158114612f2b575f5ffd5b9392505050565b818382375f9101908152919050565b5f60208284031215612f51575f5ffd5b505191905056fea2646970667358221220c61283bd606b3bca7dfb4e785d83b652571b58bcd11090702098214a703c834164736f6c634300081c0033",
}

// Sp1verifierplonkABI is the input ABI used to generate the binding from.
// Deprecated: Use Sp1verifierplonkMetaData.ABI instead.
var Sp1verifierplonkABI = Sp1verifierplonkMetaData.ABI

// Sp1verifierplonkBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use Sp1verifierplonkMetaData.Bin instead.
var Sp1verifierplonkBin = Sp1verifierplonkMetaData.Bin

// DeploySp1verifierplonk deploys a new Ethereum contract, binding an instance of Sp1verifierplonk to it.
func DeploySp1verifierplonk(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Sp1verifierplonk, error) {
	parsed, err := Sp1verifierplonkMetaData.GetAbi()
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	if parsed == nil {
		return common.Address{}, nil, nil, errors.New("GetABI returned nil")
	}

	address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(Sp1verifierplonkBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Sp1verifierplonk{Sp1verifierplonkCaller: Sp1verifierplonkCaller{contract: contract}, Sp1verifierplonkTransactor: Sp1verifierplonkTransactor{contract: contract}, Sp1verifierplonkFilterer: Sp1verifierplonkFilterer{contract: contract}}, nil
}

// Sp1verifierplonk is an auto generated Go binding around an Ethereum contract.
type Sp1verifierplonk struct {
	Sp1verifierplonkCaller     // Read-only binding to the contract
	Sp1verifierplonkTransactor // Write-only binding to the contract
	Sp1verifierplonkFilterer   // Log filterer for contract events
}

// Sp1verifierplonkCaller is an auto generated read-only Go binding around an Ethereum contract.
type Sp1verifierplonkCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// Sp1verifierplonkTransactor is an auto generated write-only Go binding around an Ethereum contract.
type Sp1verifierplonkTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// Sp1verifierplonkFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type Sp1verifierplonkFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// Sp1verifierplonkSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type Sp1verifierplonkSession struct {
	Contract     *Sp1verifierplonk // Generic contract binding to set the session for
	CallOpts     bind.CallOpts     // Call options to use throughout this session
	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}

// Sp1verifierplonkCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type Sp1verifierplonkCallerSession struct {
	Contract *Sp1verifierplonkCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts           // Call options to use throughout this session
}

// Sp1verifierplonkTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type Sp1verifierplonkTransactorSession struct {
	Contract     *Sp1verifierplonkTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts           // Transaction auth options to use throughout this session
}

// Sp1verifierplonkRaw is an auto generated low-level Go binding around an Ethereum contract.
type Sp1verifierplonkRaw struct {
	Contract *Sp1verifierplonk // Generic contract binding to access the raw methods on
}

// Sp1verifierplonkCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type Sp1verifierplonkCallerRaw struct {
	Contract *Sp1verifierplonkCaller // Generic read-only contract binding to access the raw methods on
}

// Sp1verifierplonkTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type Sp1verifierplonkTransactorRaw struct {
	Contract *Sp1verifierplonkTransactor // Generic write-only contract binding to access the raw methods on
}

// NewSp1verifierplonk creates a new instance of Sp1verifierplonk, bound to a specific deployed contract.
func NewSp1verifierplonk(address common.Address, backend bind.ContractBackend) (*Sp1verifierplonk, error) {
	contract, err := bindSp1verifierplonk(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Sp1verifierplonk{Sp1verifierplonkCaller: Sp1verifierplonkCaller{contract: contract}, Sp1verifierplonkTransactor: Sp1verifierplonkTransactor{contract: contract}, Sp1verifierplonkFilterer: Sp1verifierplonkFilterer{contract: contract}}, nil
}

// NewSp1verifierplonkCaller creates a new read-only instance of Sp1verifierplonk, bound to a specific deployed contract.
func NewSp1verifierplonkCaller(address common.Address, caller bind.ContractCaller) (*Sp1verifierplonkCaller, error) {
	contract, err := bindSp1verifierplonk(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &Sp1verifierplonkCaller{contract: contract}, nil
}

// NewSp1verifierplonkTransactor creates a new write-only instance of Sp1verifierplonk, bound to a specific deployed contract.
func NewSp1verifierplonkTransactor(address common.Address, transactor bind.ContractTransactor) (*Sp1verifierplonkTransactor, error) {
	contract, err := bindSp1verifierplonk(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &Sp1verifierplonkTransactor{contract: contract}, nil
}

// NewSp1verifierplonkFilterer creates a new log filterer instance of Sp1verifierplonk, bound to a specific deployed contract.
func NewSp1verifierplonkFilterer(address common.Address, filterer bind.ContractFilterer) (*Sp1verifierplonkFilterer, error) {
	contract, err := bindSp1verifierplonk(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &Sp1verifierplonkFilterer{contract: contract}, nil
}

// bindSp1verifierplonk binds a generic wrapper to an already deployed contract.
func bindSp1verifierplonk(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := Sp1verifierplonkMetaData.GetAbi()
	if err != nil {
		return nil, err
	}
	return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_Sp1verifierplonk *Sp1verifierplonkRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Sp1verifierplonk.Contract.Sp1verifierplonkCaller.contract.Call(opts, result, method, params...)
}

// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_Sp1verifierplonk *Sp1verifierplonkRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Sp1verifierplonk.Contract.Sp1verifierplonkTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Sp1verifierplonk *Sp1verifierplonkRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Sp1verifierplonk.Contract.Sp1verifierplonkTransactor.contract.Transact(opts, method, params...)
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_Sp1verifierplonk *Sp1verifierplonkCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Sp1verifierplonk.Contract.contract.Call(opts, result, method, params...)
}

// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_Sp1verifierplonk *Sp1verifierplonkTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Sp1verifierplonk.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Sp1verifierplonk *Sp1verifierplonkTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Sp1verifierplonk.Contract.contract.Transact(opts, method, params...)
}

// VERIFIERHASH is a free data retrieval call binding the contract method 0x2a510436.
//
// Solidity: function VERIFIER_HASH() pure returns(bytes32)
func (_Sp1verifierplonk *Sp1verifierplonkCaller) VERIFIERHASH(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _Sp1verifierplonk.contract.Call(opts, &out, "VERIFIER_HASH")

	if err != nil {
		return *new([32]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)

	return out0, err

}

// VERIFIERHASH is a free data retrieval call binding the contract method 0x2a510436.
//
// Solidity: function VERIFIER_HASH() pure returns(bytes32)
func (_Sp1verifierplonk *Sp1verifierplonkSession) VERIFIERHASH() ([32]byte, error) {
	return _Sp1verifierplonk.Contract.VERIFIERHASH(&_Sp1verifierplonk.CallOpts)
}

// VERIFIERHASH is a free data retrieval call binding the contract method 0x2a510436.
//
// Solidity: function VERIFIER_HASH() pure returns(bytes32)
func (_Sp1verifierplonk *Sp1verifierplonkCallerSession) VERIFIERHASH() ([32]byte, error) {
	return _Sp1verifierplonk.Contract.VERIFIERHASH(&_Sp1verifierplonk.CallOpts)
}

// VERSION is a free data retrieval call binding the contract method 0xffa1ad74.
//
// Solidity: function VERSION() pure returns(string)
func (_Sp1verifierplonk *Sp1verifierplonkCaller) VERSION(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _Sp1verifierplonk.contract.Call(opts, &out, "VERSION")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// VERSION is a free data retrieval call binding the contract method 0xffa1ad74.
//
// Solidity: function VERSION() pure returns(string)
func (_Sp1verifierplonk *Sp1verifierplonkSession) VERSION() (string, error) {
	return _Sp1verifierplonk.Contract.VERSION(&_Sp1verifierplonk.CallOpts)
}

// VERSION is a free data retrieval call binding the contract method 0xffa1ad74.
//
// Solidity: function VERSION() pure returns(string)
func (_Sp1verifierplonk *Sp1verifierplonkCallerSession) VERSION() (string, error) {
	return _Sp1verifierplonk.Contract.VERSION(&_Sp1verifierplonk.CallOpts)
}

// Verify is a free data retrieval call binding the contract method 0x7e4f7a8a.
//
// Solidity: function Verify(bytes proof, uint256[] public_inputs) view returns(bool success)
func (_Sp1verifierplonk *Sp1verifierplonkCaller) Verify(opts *bind.CallOpts, proof []byte, public_inputs []*big.Int) (bool, error) {
	var out []interface{}
	err := _Sp1verifierplonk.contract.Call(opts, &out, "Verify", proof, public_inputs)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// Verify is a free data retrieval call binding the contract method 0x7e4f7a8a.
//
// Solidity: function Verify(bytes proof, uint256[] public_inputs) view returns(bool success)
func (_Sp1verifierplonk *Sp1verifierplonkSession) Verify(proof []byte, public_inputs []*big.Int) (bool, error) {
	return _Sp1verifierplonk.Contract.Verify(&_Sp1verifierplonk.CallOpts, proof, public_inputs)
}

// Verify is a free data retrieval call binding the contract method 0x7e4f7a8a.
//
// Solidity: function Verify(bytes proof, uint256[] public_inputs) view returns(bool success)
func (_Sp1verifierplonk *Sp1verifierplonkCallerSession) Verify(proof []byte, public_inputs []*big.Int) (bool, error) {
	return _Sp1verifierplonk.Contract.Verify(&_Sp1verifierplonk.CallOpts, proof, public_inputs)
}

// HashPublicValues is a free data retrieval call binding the contract method 0x6b61d8e7.
//
// Solidity: function hashPublicValues(bytes publicValues) pure returns(bytes32)
func (_Sp1verifierplonk *Sp1verifierplonkCaller) HashPublicValues(opts *bind.CallOpts, publicValues []byte) ([32]byte, error) {
	var out []interface{}
	err := _Sp1verifierplonk.contract.Call(opts, &out, "hashPublicValues", publicValues)

	if err != nil {
		return *new([32]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)

	return out0, err

}

// HashPublicValues is a free data retrieval call binding the contract method 0x6b61d8e7.
//
// Solidity: function hashPublicValues(bytes publicValues) pure returns(bytes32)
func (_Sp1verifierplonk *Sp1verifierplonkSession) HashPublicValues(publicValues []byte) ([32]byte, error) {
	return _Sp1verifierplonk.Contract.HashPublicValues(&_Sp1verifierplonk.CallOpts, publicValues)
}

// HashPublicValues is a free data retrieval call binding the contract method 0x6b61d8e7.
//
// Solidity: function hashPublicValues(bytes publicValues) pure returns(bytes32)
func (_Sp1verifierplonk *Sp1verifierplonkCallerSession) HashPublicValues(publicValues []byte) ([32]byte, error) {
	return _Sp1verifierplonk.Contract.HashPublicValues(&_Sp1verifierplonk.CallOpts, publicValues)
}

// VerifyProof is a free data retrieval call binding the contract method 0x41493c60.
//
// Solidity: function verifyProof(bytes32 programVKey, bytes publicValues, bytes proofBytes) view returns()
func (_Sp1verifierplonk *Sp1verifierplonkCaller) VerifyProof(opts *bind.CallOpts, programVKey [32]byte, publicValues []byte, proofBytes []byte) error {
	var out []interface{}
	err := _Sp1verifierplonk.contract.Call(opts, &out, "verifyProof", programVKey, publicValues, proofBytes)

	if err != nil {
		return err
	}

	return err

}

// VerifyProof is a free data retrieval call binding the contract method 0x41493c60.
//
// Solidity: function verifyProof(bytes32 programVKey, bytes publicValues, bytes proofBytes) view returns()
func (_Sp1verifierplonk *Sp1verifierplonkSession) VerifyProof(programVKey [32]byte, publicValues []byte, proofBytes []byte) error {
	return _Sp1verifierplonk.Contract.VerifyProof(&_Sp1verifierplonk.CallOpts, programVKey, publicValues, proofBytes)
}

// VerifyProof is a free data retrieval call binding the contract method 0x41493c60.
//
// Solidity: function verifyProof(bytes32 programVKey, bytes publicValues, bytes proofBytes) view returns()
func (_Sp1verifierplonk *Sp1verifierplonkCallerSession) VerifyProof(programVKey [32]byte, publicValues []byte, proofBytes []byte) error {
	return _Sp1verifierplonk.Contract.VerifyProof(&_Sp1verifierplonk.CallOpts, programVKey, publicValues, proofBytes)
}
