Commit 10c981b0 authored by clabby's avatar clabby Committed by GitHub

feat(ctb): Keccak dispute DA gas estimation (#8986)

* init keccak proposals

* merklelization

* merk fixes

* Preimage parts, challenge tests

* Tests

* bindings + snapshots

* lint

* tests

* bind

* :broom:, checks, tests

* Contiguous state tests

* :broom:, r4r

* review

* rabbit

* @refcell review

* bindings

* bindings

* @tynes review

* @inphi review

* Keccak dispute DA gas estimation

* worst-case, all bits set

* bindings

* bindings

* Add challenger indexing

* slither

* Add append-only array of proposal keys

* rebase

* rebase
parent 81955146
......@@ -31,7 +31,7 @@ var (
// AlphabetVMMetaData contains all meta data concerning the AlphabetVM contract.
var AlphabetVMMetaData = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_absolutePrestate\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"oracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPreimageOracle\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"step\",\"inputs\":[{\"name\":\"_stateData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_localContext\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"postState_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"}]",
Bin: "0x60a060405234801561001057600080fd5b506040516132f03803806132f083398101604081905261002f91610090565b608081905260405161004090610083565b604051809103906000f08015801561005c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100a9565b612d29806105c783390190565b6000602082840312156100a257600080fd5b5051919050565b6080516105046100c3600039600060af01526105046000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063e14ced3214610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610098610093366004610395565b6100a6565b60405190815260200161007c565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b600889896040516100e2929190610409565b6040518091039020901b036101d9576000805473ffffffffffffffffffffffffffffffffffffffff1663e03110e161011b60048861029f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152600060248201526044016040805180830381865afa158015610175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101999190610419565b50640ffffffff0607c82901c169350905063ffffffff608082901c1660006101c38a8c018c61043d565b90506101cf8582610485565b9350505050610206565b6101e58789018961049d565b9092509050816101f4816104bf565b9250508080610202906104bf565b9150505b6040805160208101849052908101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001798975050505050505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617610345818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b60008083601f84011261035e57600080fd5b50813567ffffffffffffffff81111561037657600080fd5b60208301915083602082850101111561038e57600080fd5b9250929050565b6000806000806000606086880312156103ad57600080fd5b853567ffffffffffffffff808211156103c557600080fd5b6103d189838a0161034c565b909750955060208801359150808211156103ea57600080fd5b506103f78882890161034c565b96999598509660400135949350505050565b8183823760009101908152919050565b6000806040838503121561042c57600080fd5b505080516020909101519092909150565b60006020828403121561044f57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561049857610498610456565b500190565b600080604083850312156104b057600080fd5b50508035926020909101359150565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036104f0576104f0610456565b506001019056fea164736f6c634300080f000a60806040523480156200001157600080fd5b5060005b6200002360016010620000db565b811015620000be5760038160108110620000415762000041620000f5565b015460038260108110620000595762000059620000f5565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060038260016200009491906200010b565b60108110620000a757620000a7620000f5565b015580620000b58162000126565b91505062000015565b5062000142565b634e487b7160e01b600052601160045260246000fd5b600082821015620000f057620000f0620000c5565b500390565b634e487b7160e01b600052603260045260246000fd5b60008219821115620001215762000121620000c5565b500190565b6000600182016200013b576200013b620000c5565b5060010190565b612bd780620001526000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639f99ef82116100cd578063e03110e111610081578063ec5efcbc11610066578063ec5efcbc14610304578063faf37bc714610317578063fef2b4ed1461032a57600080fd5b8063e03110e1146102c9578063e1592611146102f157600080fd5b8063b4801e61116100b2578063b4801e6114610299578063c3a079ed146102ac578063d18534b5146102b657600080fd5b80639f99ef821461025b578063b2e67ba81461026e57600080fd5b806352f0f3ad116101245780636551927b116101095780636551927b146101df5780637ac547671461020a5780638542cf501461021d57600080fd5b806352f0f3ad146101a157806361238bde146101b457600080fd5b80630359a563146101565780632055b36b1461017c5780633909af5c146101845780634d52b4c914610199575b600080fd5b61016961016436600461224e565b61034a565b6040519081526020015b60405180910390f35b610169601081565b610197610192366004612449565b610482565b005b6101696106d0565b6101696101af366004612535565b6106eb565b6101696101c2366004612570565b600160209081526000928352604080842090915290825290205481565b6101696101ed36600461224e565b601460209081526000928352604080842090915290825290205481565b610169610218366004612592565b6107c0565b61024b61022b366004612570565b600260209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610173565b6101976102693660046125ed565b6107d7565b61016961027c36600461224e565b601560209081526000928352604080842090915290825290205481565b6101696102a736600461267e565b610cc5565b6101696201518081565b6101976102c4366004612449565b610cf7565b6102dc6102d7366004612570565b6110a5565b60408051928352602083019190915201610173565b6101976102ff3660046126b1565b611196565b6101976103123660046126fd565b61129f565b610197610325366004612796565b611419565b610169610338366004612592565b60006020819052908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601460209081526040808320848452909152812054819061038d9060601c63ffffffff1690565b63ffffffff16905060005b601081101561047a57816001166001036104205773ffffffffffffffffffffffffffffffffffffffff85166000908152601360209081526040808320878452909152902081601081106103ed576103ed6127d2565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610461565b8260038260108110610434576104346127d2565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061047281612830565b915050610398565b505092915050565b600061048e8a8a61034a565b90506104b186868360208b01356104ac6104a78d612868565b6114e2565b611522565b80156104cf57506104cf83838360208801356104ac6104a78a612868565b610505576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86604001358860405160200161051b9190612937565b6040516020818303038152906040528051906020012014610568576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161057e9190612975565b146105b5576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105fd886105c3868061298d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061158392505050565b610606886116de565b83604001358860405160200161061c9190612937565b6040516020818303038152906040528051906020012003610669576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526014602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b60016106de60106002612b14565b6106e89190612b20565b81565b60006106f78686611f7a565b9050610704836008612975565b8211806107115750602083115b15610748576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b600381601081106107d057600080fd5b0154905081565b606081156107f0576107e98686612027565b905061082a565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526013602090815260408083208a845290915280822081516102008101928390529160109082845b8154815260200190600101908083116108575750503360009081526014602090815260408083208f845290915290205493945061089992508391506120b09050565b63ffffffff166000036108d8576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108e28160c01c90565b67ffffffffffffffff1615610923576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109358260a01c63ffffffff1690565b67ffffffffffffffff16905060006109538360401c63ffffffff1690565b63ffffffff169050600882108015610969575080155b156109f05760006109808460801c63ffffffff1690565b905060008160c01b6000528b356008528351905080601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008f8152602001908152602001600020819055505050610aa5565b60088210158015610a0e575080610a08600884612b20565b92508210155b8015610a225750610a1f8982612975565b82105b15610aa5576000610a338284612b20565b905089610a41826020612975565b10158015610a4d575086155b15610a84576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526015602090815260408083208f84529091529020908b013590555b6000610ab78460601c63ffffffff1690565b63ffffffff169050855160208701608882048a1415608883061715610ae4576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610b94578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8d013560a883015260c882206001860195508560005b610200811015610b89576001821615610b695782818d0152610b89565b8b81015160009081526020938452604090209260019290921c9101610b4c565b505050608801610af1565b50505050600160106002610ba89190612b14565b610bb29190612b20565b811115610beb576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526013602090815260408083208f84529091529020610c119086601061219b565b50610c71610c1f838c612975565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8716171790565b93508615610c9c5777ffffffffffffffffffffffffffffffffffffffffffffffff84164260c01b1793505b50503360009081526014602090815260408083209c83529b905299909920555050505050505050565b60136020528260005260406000206020528160005260406000208160108110610ced57600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526014602090815260408083208b845290915290205467ffffffffffffffff811615610d6a576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62015180610d788260c01c90565b610d8c9067ffffffffffffffff1642612b20565b11610dc3576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dcf8b8b61034a565b9050610de887878360208c01356104ac6104a78e612868565b8015610e065750610e0684848360208901356104ac6104a78b612868565b610e3c576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876040013589604051602001610e529190612937565b6040516020818303038152906040528051906020012014610e9f576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846020013588602001356001610eb59190612975565b141580610ee757506001610ecf8360601c63ffffffff1690565b610ed99190612b37565b63ffffffff16856020013514155b15610f1e576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f308360801c63ffffffff1690565b63ffffffff16905080610f498460401c63ffffffff1690565b63ffffffff1614610f86576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f948a6105c3888061298d565b610f9d8a6116de565b6000610fa88b6120bc565b90506000610fbc8560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff1661112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461114a816008612975565b611155856020612975565b106111735783611166826008612975565b6111709190612b20565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156111b55763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b60006112ab868661034a565b90506112c483838360208801356104ac6104a78a612868565b6112fa576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611336576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61133e6121d9565b61134c816105c3878061298d565b611355816116de565b84604001358160405160200161136b9190612937565b60405160208183030381529060405280519060200120036113b8576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526014602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b611424816008612b5c565b63ffffffff168263ffffffff1610611468576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083209583529490529290922080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09290921b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169190911760809290921b919091179055565b600081600001518260200151836040015160405160200161150593929190612b84565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611576578060051b880135600186831c166001811461155b576000848152602083905260409020935061156c565b600082815260208590526040902093505b5050600101611528565b5090931495945050505050565b608881511461159157600080fd5b6020810160208301611612565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b171717905061160c816115f7868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61161e6000838361159e565b61162a6001838361159e565b6116366002838361159e565b6116426003838361159e565b61164e6004838361159e565b61165a6005838361159e565b6116666006838361159e565b6116726007838361159e565b61167e6008838361159e565b61168a6009838361159e565b611696600a838361159e565b6116a2600b838361159e565b6116ae600c838361159e565b6116ba600d838361159e565b6116c6600e838361159e565b6116d2600f838361159e565b61160c6010838361159e565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201611e5a565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c6118918660011b67ffffffffffffffff1690565b18188584603f1c6118ac8660011b67ffffffffffffffff1690565b18188584603f1c6118c78660011b67ffffffffffffffff1690565b181895508483603f1c6118e48560011b67ffffffffffffffff1690565b181894508387603f1c6119018960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b611c81816117d4565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c908118909116825261160c565b611e6660008284611c78565b611e7260018284611c78565b611e7e60028284611c78565b611e8a60038284611c78565b611e9660048284611c78565b611ea260058284611c78565b611eae60068284611c78565b611eba60078284611c78565b611ec660088284611c78565b611ed260098284611c78565b611ede600a8284611c78565b611eea600b8284611c78565b611ef6600c8284611c78565b611f02600d8284611c78565b611f0e600e8284611c78565b611f1a600f8284611c78565b611f2660108284611c78565b611f3260118284611c78565b611f3e60128284611c78565b611f4a60138284611c78565b611f5660148284611c78565b611f6260158284611c78565b611f6e60168284611c78565b61160c60178284611c78565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617612020818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612085576088829003850160808582017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01536001845160001a1784538652612097565b60018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60801c63ffffffff1690565b600061213f565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006120ed8360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff000061211a8360101b67ffffffffffffffff1690565b1617905060008160201c6121388360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612157906120c3565b6120c3565b6040820151612165906120c3565b60401b1761217d61215260018460059190911b015190565b825160809190911b9061218f906120c3565b60c01b17179392505050565b82601081019282156121c9579160200282015b828111156121c95782518255916020019190600101906121ae565b506121d59291506121f1565b5090565b60405180602001604052806121ec612206565b905290565b5b808211156121d557600081556001016121f2565b6040518061032001604052806019906020820280368337509192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461224957600080fd5b919050565b6000806040838503121561226157600080fd5b61226a83612225565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff811182821017156122cb576122cb612278565b60405290565b6040516060810167ffffffffffffffff811182821017156122cb576122cb612278565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561233b5761233b612278565b604052919050565b600061032080838503121561235757600080fd5b604051602080820167ffffffffffffffff838210818311171561237c5761237c612278565b8160405283955087601f88011261239257600080fd5b61239a6122a7565b94870194915081888611156123ae57600080fd5b875b868110156123d657803583811681146123c95760008081fd5b84529284019284016123b0565b50909352509295945050505050565b6000606082840312156123f757600080fd5b50919050565b60008083601f84011261240f57600080fd5b50813567ffffffffffffffff81111561242757600080fd5b6020830191508360208260051b850101111561244257600080fd5b9250929050565b60008060008060008060008060006103e08a8c03121561246857600080fd5b6124718a612225565b985060208a013597506124878b60408c01612343565b96506103608a013567ffffffffffffffff808211156124a557600080fd5b6124b18d838e016123e5565b97506103808c01359150808211156124c857600080fd5b6124d48d838e016123fd565b90975095506103a08c01359150808211156124ee57600080fd5b6124fa8d838e016123e5565b94506103c08c013591508082111561251157600080fd5b5061251e8c828d016123fd565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561254d57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561258357600080fd5b50508035926020909101359150565b6000602082840312156125a457600080fd5b5035919050565b60008083601f8401126125bd57600080fd5b50813567ffffffffffffffff8111156125d557600080fd5b60208301915083602082850101111561244257600080fd5b6000806000806000806080878903121561260657600080fd5b86359550602087013567ffffffffffffffff8082111561262557600080fd5b6126318a838b016125ab565b9097509550604089013591508082111561264a57600080fd5b5061265789828a016123fd565b9094509250506060870135801515811461267057600080fd5b809150509295509295509295565b60008060006060848603121561269357600080fd5b61269c84612225565b95602085013595506040909401359392505050565b6000806000604084860312156126c657600080fd5b83359250602084013567ffffffffffffffff8111156126e457600080fd5b6126f0868287016125ab565b9497909650939450505050565b60008060008060006080868803121561271557600080fd5b61271e86612225565b945060208601359350604086013567ffffffffffffffff8082111561274257600080fd5b61274e89838a016123e5565b9450606088013591508082111561276457600080fd5b50612771888289016123fd565b969995985093965092949392505050565b803563ffffffff8116811461224957600080fd5b6000806000606084860312156127ab57600080fd5b833592506127bb60208501612782565b91506127c960408501612782565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361286157612861612801565b5060010190565b60006060823603121561287a57600080fd5b6128826122d1565b823567ffffffffffffffff8082111561289a57600080fd5b9084019036601f8301126128ad57600080fd5b81356020828211156128c1576128c1612278565b6128f1817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016122f4565b9250818352368183860101111561290757600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561296c57825167ffffffffffffffff16825260209283019290910190600101612943565b50505092915050565b6000821982111561298857612988612801565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129c257600080fd5b83018035915067ffffffffffffffff8211156129dd57600080fd5b60200191503681900382131561244257600080fd5b600181815b80851115612a4b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612a3157612a31612801565b80851615612a3e57918102915b93841c93908002906129f7565b509250929050565b600082612a6257506001612b0e565b81612a6f57506000612b0e565b8160018114612a855760028114612a8f57612aab565b6001915050612b0e565b60ff841115612aa057612aa0612801565b50506001821b612b0e565b5060208310610133831016604e8410600b8410161715612ace575081810a612b0e565b612ad883836129f2565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612b0a57612b0a612801565b0290505b92915050565b60006120208383612a53565b600082821015612b3257612b32612801565b500390565b600063ffffffff83811690831681811015612b5457612b54612801565b039392505050565b600063ffffffff808316818516808303821115612b7b57612b7b612801565b01949350505050565b6000845160005b81811015612ba55760208188018101518583015201612b8b565b81811115612bb4576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a",
Bin: "0x60a060405234801561001057600080fd5b5060405161358538038061358583398101604081905261002f91610090565b608081905260405161004090610083565b604051809103906000f08015801561005c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100a9565b612fbe806105c783390190565b6000602082840312156100a257600080fd5b5051919050565b6080516105046100c3600039600060af01526105046000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063e14ced3214610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610098610093366004610395565b6100a6565b60405190815260200161007c565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b600889896040516100e2929190610409565b6040518091039020901b036101d9576000805473ffffffffffffffffffffffffffffffffffffffff1663e03110e161011b60048861029f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152600060248201526044016040805180830381865afa158015610175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101999190610419565b50640ffffffff0607c82901c169350905063ffffffff608082901c1660006101c38a8c018c61043d565b90506101cf8582610485565b9350505050610206565b6101e58789018961049d565b9092509050816101f4816104bf565b9250508080610202906104bf565b9150505b6040805160208101849052908101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001798975050505050505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617610345818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b60008083601f84011261035e57600080fd5b50813567ffffffffffffffff81111561037657600080fd5b60208301915083602082850101111561038e57600080fd5b9250929050565b6000806000806000606086880312156103ad57600080fd5b853567ffffffffffffffff808211156103c557600080fd5b6103d189838a0161034c565b909750955060208801359150808211156103ea57600080fd5b506103f78882890161034c565b96999598509660400135949350505050565b8183823760009101908152919050565b6000806040838503121561042c57600080fd5b505080516020909101519092909150565b60006020828403121561044f57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561049857610498610456565b500190565b600080604083850312156104b057600080fd5b50508035926020909101359150565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036104f0576104f0610456565b506001019056fea164736f6c634300080f000a60806040523480156200001157600080fd5b5060005b6200002360016010620000db565b811015620000be5760038160108110620000415762000041620000f5565b015460038260108110620000595762000059620000f5565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060038260016200009491906200010b565b60108110620000a757620000a7620000f5565b015580620000b58162000126565b91505062000015565b5062000142565b634e487b7160e01b600052601160045260246000fd5b600082821015620000f057620000f0620000c5565b500390565b634e487b7160e01b600052603260045260246000fd5b60008219821115620001215762000121620000c5565b500190565b6000600182016200013b576200013b620000c5565b5060010190565b612e6c80620001526000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80639d53a648116100e3578063da35c6641161008c578063ec5efcbc11610066578063ec5efcbc146103f5578063faf37bc714610408578063fef2b4ed1461041b57600080fd5b8063da35c664146103b2578063e03110e1146103ba578063e1592611146103e257600080fd5b8063b4801e61116100bd578063b4801e6114610382578063c3a079ed14610395578063d18534b51461039f57600080fd5b80639d53a648146103025780639f99ef8214610344578063b2e67ba81461035757600080fd5b806352f0f3ad116101455780637ac547671161011f5780637ac54767146102855780638542cf5014610298578063882856ef146102d657600080fd5b806352f0f3ad1461021c57806361238bde1461022f5780636551927b1461025a57600080fd5b80632055b36b116101765780632055b36b146101f75780633909af5c146101ff5780634d52b4c91461021457600080fd5b8063013cf08b146101925780630359a563146101d6575b600080fd5b6101a56101a03660046124ba565b61043b565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b6101e96101e43660046124fc565b610480565b6040519081526020016101cd565b6101e9601081565b61021261020d3660046126f7565b6105b8565b005b6101e9610806565b6101e961022a3660046127e3565b610821565b6101e961023d36600461281e565b600160209081526000928352604080842090915290825290205481565b6101e96102683660046124fc565b601560209081526000928352604080842090915290825290205481565b6101e96102933660046124ba565b6108f6565b6102c66102a636600461281e565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101cd565b6102e96102e4366004612840565b61090d565b60405167ffffffffffffffff90911681526020016101cd565b6101e96103103660046124fc565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b6102126103523660046128b5565b610967565b6101e96103653660046124fc565b601660209081526000928352604080842090915290825290205481565b6101e9610390366004612840565b610ea9565b6101e96201518081565b6102126103ad3660046126f7565b610edb565b6013546101e9565b6103cd6103c836600461281e565b611289565b604080519283526020830191909152016101cd565b6102126103f0366004612946565b61137a565b610212610403366004612992565b611483565b610212610416366004612a2b565b6115fd565b6101e96104293660046124ba565b60006020819052908152604090205481565b6013818154811061044b57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260156020908152604080832084845290915281205481906104c39060601c63ffffffff1690565b63ffffffff16905060005b60108110156105b057816001166001036105565773ffffffffffffffffffffffffffffffffffffffff851660009081526014602090815260408083208784529091529020816010811061052357610523612a67565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610597565b826003826010811061056a5761056a612a67565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c90806105a881612ac5565b9150506104ce565b505092915050565b60006105c48a8a610480565b90506105e786868360208b01356105e26105dd8d612afd565b611777565b6117b7565b8015610605575061060583838360208801356105e26105dd8a612afd565b61063b576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106519190612bcc565b604051602081830303815290604052805190602001201461069e576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360200135876020013560016106b49190612c0a565b146106eb576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610733886106f98680612c22565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061181892505050565b61073c88611973565b8360400135886040516020016107529190612bcc565b604051602081830303815290604052805190602001200361079f576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161081460106002612da9565b61081e9190612db5565b81565b600061082d868661220f565b905061083a836008612c0a565b8211806108475750602083115b1561087e576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b6003816010811061090657600080fd5b0154905081565b6017602052826000526040600020602052816000526040600020818154811061093557600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b606081156109805761097986866122bc565b90506109ba565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208a845290915280822081516102008101928390529160109082845b8154815260200190600101908083116109e75750503360009081526015602090815260408083208f8452909152902054939450610a2992508391506123459050565b63ffffffff16600003610a68576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a728160c01c90565b67ffffffffffffffff1615610ab3576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ac58260a01c63ffffffff1690565b67ffffffffffffffff1690506000610ae38360401c63ffffffff1690565b63ffffffff169050600882108015610af9575080155b15610b80576000610b108460801c63ffffffff1690565b905060008160c01b6000528b356008528351905080601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008f8152602001908152602001600020819055505050610c35565b60088210158015610b9e575080610b98600884612db5565b92508210155b8015610bb25750610baf8982612c0a565b82105b15610c35576000610bc38284612db5565b905089610bd1826020612c0a565b10158015610bdd575086155b15610c14576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208f84529091529020908b013590555b6000610c478460601c63ffffffff1690565b63ffffffff169050855160208701608882048a1415608883061715610c74576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610d24578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8d013560a883015260c882206001860195508560005b610200811015610d19576001821615610cf95782818d0152610d19565b8b81015160009081526020938452604090209260019290921c9101610cdc565b505050608801610c81565b50505050600160106002610d389190612da9565b610d429190612db5565b811115610d7b576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208f84529091529020610da190866010612430565b503360009081526017602090815260408083208f845282528220805460018101825590835291206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055610e55610e03838c612c0a565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8716171790565b93508615610e805777ffffffffffffffffffffffffffffffffffffffffffffffff84164260c01b1793505b50503360009081526015602090815260408083209c83529b905299909920555050505050505050565b60146020528260005260406000206020528160005260406000208160108110610ed157600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff811615610f4e576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62015180610f5c8260c01c90565b610f709067ffffffffffffffff1642612db5565b11610fa7576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610fb38b8b610480565b9050610fcc87878360208c01356105e26105dd8e612afd565b8015610fea5750610fea84848360208901356105e26105dd8b612afd565b611020576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016110369190612bcc565b6040516020818303038152906040528051906020012014611083576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016110999190612c0a565b1415806110cb575060016110b38360601c63ffffffff1690565b6110bd9190612dcc565b63ffffffff16856020013514155b15611102576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111148360801c63ffffffff1690565b63ffffffff1690508061112d8460401c63ffffffff1690565b63ffffffff161461116a576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111788a6106f98880612c22565b6111818a611973565b600061118c8b612351565b905060006111a08560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff16611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461132e816008612c0a565b611339856020612c0a565b10611357578361134a826008612c0a565b6113549190612db5565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156113995763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061148f8686610480565b90506114a883838360208801356105e26105dd8a612afd565b6114de576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208401351561151a576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152261246e565b611530816106f98780612c22565b61153981611973565b84604001358160405160200161154f9190612bcc565b604051602081830303815290604052805190602001200361159c576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b611608816008612df1565b63ffffffff168263ffffffff161061164c576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b600081600001518260200151836040015160405160200161179a93929190612e19565b604051602081830303815290604052805190602001209050919050565b60008160005b601081101561180b578060051b880135600186831c16600181146117f05760008481526020839052604090209350611801565b600082815260208590526040902093505b50506001016117bd565b5090931495945050505050565b608881511461182657600080fd5b60208101602083016118a7565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b17171790506118a18161188c868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b6118b360008383611833565b6118bf60018383611833565b6118cb60028383611833565b6118d760038383611833565b6118e360048383611833565b6118ef60058383611833565b6118fb60068383611833565b61190760078383611833565b61191360088383611833565b61191f60098383611833565b61192b600a8383611833565b611937600b8383611833565b611943600c8383611833565b61194f600d8383611833565b61195b600e8383611833565b611967600f8383611833565b6118a160108383611833565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e001604051602081830303815290604052905060208201602082016120ef565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611b268660011b67ffffffffffffffff1690565b18188584603f1c611b418660011b67ffffffffffffffff1690565b18188584603f1c611b5c8660011b67ffffffffffffffff1690565b181895508483603f1c611b798560011b67ffffffffffffffff1690565b181894508387603f1c611b968960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b611f1681611a69565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c90811890911682526118a1565b6120fb60008284611f0d565b61210760018284611f0d565b61211360028284611f0d565b61211f60038284611f0d565b61212b60048284611f0d565b61213760058284611f0d565b61214360068284611f0d565b61214f60078284611f0d565b61215b60088284611f0d565b61216760098284611f0d565b612173600a8284611f0d565b61217f600b8284611f0d565b61218b600c8284611f0d565b612197600d8284611f0d565b6121a3600e8284611f0d565b6121af600f8284611f0d565b6121bb60108284611f0d565b6121c760118284611f0d565b6121d360128284611f0d565b6121df60138284611f0d565b6121eb60148284611f0d565b6121f760158284611f0d565b61220360168284611f0d565b6118a160178284611f0d565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176122b5818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b606060405190508160208201818101828683376088830680801561231a576088829003850160808582017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01536001845160001a178453865261232c565b60018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60801c63ffffffff1690565b60006123d4565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006123828360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff00006123af8360101b67ffffffffffffffff1690565b1617905060008160201c6123cd8360201b67ffffffffffffffff1690565b1792915050565b608082015160208301906123ec90612358565b612358565b60408201516123fa90612358565b60401b176124126123e760018460059190911b015190565b825160809190911b9061242490612358565b60c01b17179392505050565b826010810192821561245e579160200282015b8281111561245e578251825591602001919060010190612443565b5061246a929150612486565b5090565b604051806020016040528061248161249b565b905290565b5b8082111561246a5760008155600101612487565b6040518061032001604052806019906020820280368337509192915050565b6000602082840312156124cc57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146124f757600080fd5b919050565b6000806040838503121561250f57600080fd5b612518836124d3565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff8111828210171561257957612579612526565b60405290565b6040516060810167ffffffffffffffff8111828210171561257957612579612526565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156125e9576125e9612526565b604052919050565b600061032080838503121561260557600080fd5b604051602080820167ffffffffffffffff838210818311171561262a5761262a612526565b8160405283955087601f88011261264057600080fd5b612648612555565b948701949150818886111561265c57600080fd5b875b8681101561268457803583811681146126775760008081fd5b845292840192840161265e565b50909352509295945050505050565b6000606082840312156126a557600080fd5b50919050565b60008083601f8401126126bd57600080fd5b50813567ffffffffffffffff8111156126d557600080fd5b6020830191508360208260051b85010111156126f057600080fd5b9250929050565b60008060008060008060008060006103e08a8c03121561271657600080fd5b61271f8a6124d3565b985060208a013597506127358b60408c016125f1565b96506103608a013567ffffffffffffffff8082111561275357600080fd5b61275f8d838e01612693565b97506103808c013591508082111561277657600080fd5b6127828d838e016126ab565b90975095506103a08c013591508082111561279c57600080fd5b6127a88d838e01612693565b94506103c08c01359150808211156127bf57600080fd5b506127cc8c828d016126ab565b915080935050809150509295985092959850929598565b600080600080600060a086880312156127fb57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561283157600080fd5b50508035926020909101359150565b60008060006060848603121561285557600080fd5b61285e846124d3565b95602085013595506040909401359392505050565b60008083601f84011261288557600080fd5b50813567ffffffffffffffff81111561289d57600080fd5b6020830191508360208285010111156126f057600080fd5b600080600080600080608087890312156128ce57600080fd5b86359550602087013567ffffffffffffffff808211156128ed57600080fd5b6128f98a838b01612873565b9097509550604089013591508082111561291257600080fd5b5061291f89828a016126ab565b9094509250506060870135801515811461293857600080fd5b809150509295509295509295565b60008060006040848603121561295b57600080fd5b83359250602084013567ffffffffffffffff81111561297957600080fd5b61298586828701612873565b9497909650939450505050565b6000806000806000608086880312156129aa57600080fd5b6129b3866124d3565b945060208601359350604086013567ffffffffffffffff808211156129d757600080fd5b6129e389838a01612693565b945060608801359150808211156129f957600080fd5b50612a06888289016126ab565b969995985093965092949392505050565b803563ffffffff811681146124f757600080fd5b600080600060608486031215612a4057600080fd5b83359250612a5060208501612a17565b9150612a5e60408501612a17565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612af657612af6612a96565b5060010190565b600060608236031215612b0f57600080fd5b612b1761257f565b823567ffffffffffffffff80821115612b2f57600080fd5b9084019036601f830112612b4257600080fd5b8135602082821115612b5657612b56612526565b612b86817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016125a2565b92508183523681838601011115612b9c57600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b6019811015612c0157825167ffffffffffffffff16825260209283019290910190600101612bd8565b50505092915050565b60008219821115612c1d57612c1d612a96565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612c5757600080fd5b83018035915067ffffffffffffffff821115612c7257600080fd5b6020019150368190038213156126f057600080fd5b600181815b80851115612ce057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612cc657612cc6612a96565b80851615612cd357918102915b93841c9390800290612c8c565b509250929050565b600082612cf757506001612da3565b81612d0457506000612da3565b8160018114612d1a5760028114612d2457612d40565b6001915050612da3565b60ff841115612d3557612d35612a96565b50506001821b612da3565b5060208310610133831016604e8410600b8410161715612d63575081810a612da3565b612d6d8383612c87565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612d9f57612d9f612a96565b0290505b92915050565b60006122b58383612ce8565b600082821015612dc757612dc7612a96565b500390565b600063ffffffff83811690831681811015612de957612de9612a96565b039392505050565b600063ffffffff808316818516808303821115612e1057612e10612a96565b01949350505050565b6000845160005b81811015612e3a5760208188018101518583015201612e20565b81811115612e49576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a",
}
// AlphabetVMABI is the input ABI used to generate the binding from.
......
......@@ -42,8 +42,8 @@ type PreimageOracleLeaf struct {
// PreimageOracleMetaData contains all meta data concerning the PreimageOracle contract.
var PreimageOracleMetaData = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"CHALLENGE_PERIOD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"KECCAK_TREE_DEPTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_LEAF_COUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLeavesLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_stateCommitments\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_finalize\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeFirstLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getTreeRootLPP\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"treeRoot_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_claimedSize\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadKeccak256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_localContext\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_word\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_size\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"key_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"preimageLengths\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimagePartOk\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageParts\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBranches\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalMetadata\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"LPPMetaData\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalParts\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"readPreimage\",\"inputs\":[{\"name\":\"_key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"dat_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"datLen_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"squeezeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zeroHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"ActiveProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AlreadyFinalized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BadProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInputSize\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPreimage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PartOffsetOOB\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PostStateMatches\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StatesNotContiguous\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TreeSizeOverflow\",\"inputs\":[]}]",
Bin: "0x60806040523480156200001157600080fd5b5060005b6200002360016010620000db565b811015620000be5760038160108110620000415762000041620000f5565b015460038260108110620000595762000059620000f5565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060038260016200009491906200010b565b60108110620000a757620000a7620000f5565b015580620000b58162000126565b91505062000015565b5062000142565b634e487b7160e01b600052601160045260246000fd5b600082821015620000f057620000f0620000c5565b500390565b634e487b7160e01b600052603260045260246000fd5b60008219821115620001215762000121620000c5565b500190565b6000600182016200013b576200013b620000c5565b5060010190565b612bd780620001526000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639f99ef82116100cd578063e03110e111610081578063ec5efcbc11610066578063ec5efcbc14610304578063faf37bc714610317578063fef2b4ed1461032a57600080fd5b8063e03110e1146102c9578063e1592611146102f157600080fd5b8063b4801e61116100b2578063b4801e6114610299578063c3a079ed146102ac578063d18534b5146102b657600080fd5b80639f99ef821461025b578063b2e67ba81461026e57600080fd5b806352f0f3ad116101245780636551927b116101095780636551927b146101df5780637ac547671461020a5780638542cf501461021d57600080fd5b806352f0f3ad146101a157806361238bde146101b457600080fd5b80630359a563146101565780632055b36b1461017c5780633909af5c146101845780634d52b4c914610199575b600080fd5b61016961016436600461224e565b61034a565b6040519081526020015b60405180910390f35b610169601081565b610197610192366004612449565b610482565b005b6101696106d0565b6101696101af366004612535565b6106eb565b6101696101c2366004612570565b600160209081526000928352604080842090915290825290205481565b6101696101ed36600461224e565b601460209081526000928352604080842090915290825290205481565b610169610218366004612592565b6107c0565b61024b61022b366004612570565b600260209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610173565b6101976102693660046125ed565b6107d7565b61016961027c36600461224e565b601560209081526000928352604080842090915290825290205481565b6101696102a736600461267e565b610cc5565b6101696201518081565b6101976102c4366004612449565b610cf7565b6102dc6102d7366004612570565b6110a5565b60408051928352602083019190915201610173565b6101976102ff3660046126b1565b611196565b6101976103123660046126fd565b61129f565b610197610325366004612796565b611419565b610169610338366004612592565b60006020819052908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601460209081526040808320848452909152812054819061038d9060601c63ffffffff1690565b63ffffffff16905060005b601081101561047a57816001166001036104205773ffffffffffffffffffffffffffffffffffffffff85166000908152601360209081526040808320878452909152902081601081106103ed576103ed6127d2565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610461565b8260038260108110610434576104346127d2565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061047281612830565b915050610398565b505092915050565b600061048e8a8a61034a565b90506104b186868360208b01356104ac6104a78d612868565b6114e2565b611522565b80156104cf57506104cf83838360208801356104ac6104a78a612868565b610505576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86604001358860405160200161051b9190612937565b6040516020818303038152906040528051906020012014610568576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161057e9190612975565b146105b5576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105fd886105c3868061298d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061158392505050565b610606886116de565b83604001358860405160200161061c9190612937565b6040516020818303038152906040528051906020012003610669576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526014602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b60016106de60106002612b14565b6106e89190612b20565b81565b60006106f78686611f7a565b9050610704836008612975565b8211806107115750602083115b15610748576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b600381601081106107d057600080fd5b0154905081565b606081156107f0576107e98686612027565b905061082a565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526013602090815260408083208a845290915280822081516102008101928390529160109082845b8154815260200190600101908083116108575750503360009081526014602090815260408083208f845290915290205493945061089992508391506120b09050565b63ffffffff166000036108d8576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108e28160c01c90565b67ffffffffffffffff1615610923576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109358260a01c63ffffffff1690565b67ffffffffffffffff16905060006109538360401c63ffffffff1690565b63ffffffff169050600882108015610969575080155b156109f05760006109808460801c63ffffffff1690565b905060008160c01b6000528b356008528351905080601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008f8152602001908152602001600020819055505050610aa5565b60088210158015610a0e575080610a08600884612b20565b92508210155b8015610a225750610a1f8982612975565b82105b15610aa5576000610a338284612b20565b905089610a41826020612975565b10158015610a4d575086155b15610a84576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526015602090815260408083208f84529091529020908b013590555b6000610ab78460601c63ffffffff1690565b63ffffffff169050855160208701608882048a1415608883061715610ae4576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610b94578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8d013560a883015260c882206001860195508560005b610200811015610b89576001821615610b695782818d0152610b89565b8b81015160009081526020938452604090209260019290921c9101610b4c565b505050608801610af1565b50505050600160106002610ba89190612b14565b610bb29190612b20565b811115610beb576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526013602090815260408083208f84529091529020610c119086601061219b565b50610c71610c1f838c612975565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8716171790565b93508615610c9c5777ffffffffffffffffffffffffffffffffffffffffffffffff84164260c01b1793505b50503360009081526014602090815260408083209c83529b905299909920555050505050505050565b60136020528260005260406000206020528160005260406000208160108110610ced57600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526014602090815260408083208b845290915290205467ffffffffffffffff811615610d6a576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62015180610d788260c01c90565b610d8c9067ffffffffffffffff1642612b20565b11610dc3576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dcf8b8b61034a565b9050610de887878360208c01356104ac6104a78e612868565b8015610e065750610e0684848360208901356104ac6104a78b612868565b610e3c576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876040013589604051602001610e529190612937565b6040516020818303038152906040528051906020012014610e9f576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846020013588602001356001610eb59190612975565b141580610ee757506001610ecf8360601c63ffffffff1690565b610ed99190612b37565b63ffffffff16856020013514155b15610f1e576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f308360801c63ffffffff1690565b63ffffffff16905080610f498460401c63ffffffff1690565b63ffffffff1614610f86576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f948a6105c3888061298d565b610f9d8a6116de565b6000610fa88b6120bc565b90506000610fbc8560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff1661112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461114a816008612975565b611155856020612975565b106111735783611166826008612975565b6111709190612b20565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156111b55763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b60006112ab868661034a565b90506112c483838360208801356104ac6104a78a612868565b6112fa576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611336576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61133e6121d9565b61134c816105c3878061298d565b611355816116de565b84604001358160405160200161136b9190612937565b60405160208183030381529060405280519060200120036113b8576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526014602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b611424816008612b5c565b63ffffffff168263ffffffff1610611468576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083209583529490529290922080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09290921b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169190911760809290921b919091179055565b600081600001518260200151836040015160405160200161150593929190612b84565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611576578060051b880135600186831c166001811461155b576000848152602083905260409020935061156c565b600082815260208590526040902093505b5050600101611528565b5090931495945050505050565b608881511461159157600080fd5b6020810160208301611612565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b171717905061160c816115f7868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61161e6000838361159e565b61162a6001838361159e565b6116366002838361159e565b6116426003838361159e565b61164e6004838361159e565b61165a6005838361159e565b6116666006838361159e565b6116726007838361159e565b61167e6008838361159e565b61168a6009838361159e565b611696600a838361159e565b6116a2600b838361159e565b6116ae600c838361159e565b6116ba600d838361159e565b6116c6600e838361159e565b6116d2600f838361159e565b61160c6010838361159e565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201611e5a565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c6118918660011b67ffffffffffffffff1690565b18188584603f1c6118ac8660011b67ffffffffffffffff1690565b18188584603f1c6118c78660011b67ffffffffffffffff1690565b181895508483603f1c6118e48560011b67ffffffffffffffff1690565b181894508387603f1c6119018960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b611c81816117d4565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c908118909116825261160c565b611e6660008284611c78565b611e7260018284611c78565b611e7e60028284611c78565b611e8a60038284611c78565b611e9660048284611c78565b611ea260058284611c78565b611eae60068284611c78565b611eba60078284611c78565b611ec660088284611c78565b611ed260098284611c78565b611ede600a8284611c78565b611eea600b8284611c78565b611ef6600c8284611c78565b611f02600d8284611c78565b611f0e600e8284611c78565b611f1a600f8284611c78565b611f2660108284611c78565b611f3260118284611c78565b611f3e60128284611c78565b611f4a60138284611c78565b611f5660148284611c78565b611f6260158284611c78565b611f6e60168284611c78565b61160c60178284611c78565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617612020818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612085576088829003850160808582017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01536001845160001a1784538652612097565b60018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60801c63ffffffff1690565b600061213f565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006120ed8360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff000061211a8360101b67ffffffffffffffff1690565b1617905060008160201c6121388360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612157906120c3565b6120c3565b6040820151612165906120c3565b60401b1761217d61215260018460059190911b015190565b825160809190911b9061218f906120c3565b60c01b17179392505050565b82601081019282156121c9579160200282015b828111156121c95782518255916020019190600101906121ae565b506121d59291506121f1565b5090565b60405180602001604052806121ec612206565b905290565b5b808211156121d557600081556001016121f2565b6040518061032001604052806019906020820280368337509192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461224957600080fd5b919050565b6000806040838503121561226157600080fd5b61226a83612225565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff811182821017156122cb576122cb612278565b60405290565b6040516060810167ffffffffffffffff811182821017156122cb576122cb612278565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561233b5761233b612278565b604052919050565b600061032080838503121561235757600080fd5b604051602080820167ffffffffffffffff838210818311171561237c5761237c612278565b8160405283955087601f88011261239257600080fd5b61239a6122a7565b94870194915081888611156123ae57600080fd5b875b868110156123d657803583811681146123c95760008081fd5b84529284019284016123b0565b50909352509295945050505050565b6000606082840312156123f757600080fd5b50919050565b60008083601f84011261240f57600080fd5b50813567ffffffffffffffff81111561242757600080fd5b6020830191508360208260051b850101111561244257600080fd5b9250929050565b60008060008060008060008060006103e08a8c03121561246857600080fd5b6124718a612225565b985060208a013597506124878b60408c01612343565b96506103608a013567ffffffffffffffff808211156124a557600080fd5b6124b18d838e016123e5565b97506103808c01359150808211156124c857600080fd5b6124d48d838e016123fd565b90975095506103a08c01359150808211156124ee57600080fd5b6124fa8d838e016123e5565b94506103c08c013591508082111561251157600080fd5b5061251e8c828d016123fd565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561254d57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561258357600080fd5b50508035926020909101359150565b6000602082840312156125a457600080fd5b5035919050565b60008083601f8401126125bd57600080fd5b50813567ffffffffffffffff8111156125d557600080fd5b60208301915083602082850101111561244257600080fd5b6000806000806000806080878903121561260657600080fd5b86359550602087013567ffffffffffffffff8082111561262557600080fd5b6126318a838b016125ab565b9097509550604089013591508082111561264a57600080fd5b5061265789828a016123fd565b9094509250506060870135801515811461267057600080fd5b809150509295509295509295565b60008060006060848603121561269357600080fd5b61269c84612225565b95602085013595506040909401359392505050565b6000806000604084860312156126c657600080fd5b83359250602084013567ffffffffffffffff8111156126e457600080fd5b6126f0868287016125ab565b9497909650939450505050565b60008060008060006080868803121561271557600080fd5b61271e86612225565b945060208601359350604086013567ffffffffffffffff8082111561274257600080fd5b61274e89838a016123e5565b9450606088013591508082111561276457600080fd5b50612771888289016123fd565b969995985093965092949392505050565b803563ffffffff8116811461224957600080fd5b6000806000606084860312156127ab57600080fd5b833592506127bb60208501612782565b91506127c960408501612782565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361286157612861612801565b5060010190565b60006060823603121561287a57600080fd5b6128826122d1565b823567ffffffffffffffff8082111561289a57600080fd5b9084019036601f8301126128ad57600080fd5b81356020828211156128c1576128c1612278565b6128f1817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016122f4565b9250818352368183860101111561290757600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561296c57825167ffffffffffffffff16825260209283019290910190600101612943565b50505092915050565b6000821982111561298857612988612801565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129c257600080fd5b83018035915067ffffffffffffffff8211156129dd57600080fd5b60200191503681900382131561244257600080fd5b600181815b80851115612a4b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612a3157612a31612801565b80851615612a3e57918102915b93841c93908002906129f7565b509250929050565b600082612a6257506001612b0e565b81612a6f57506000612b0e565b8160018114612a855760028114612a8f57612aab565b6001915050612b0e565b60ff841115612aa057612aa0612801565b50506001821b612b0e565b5060208310610133831016604e8410600b8410161715612ace575081810a612b0e565b612ad883836129f2565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612b0a57612b0a612801565b0290505b92915050565b60006120208383612a53565b600082821015612b3257612b32612801565b500390565b600063ffffffff83811690831681811015612b5457612b54612801565b039392505050565b600063ffffffff808316818516808303821115612b7b57612b7b612801565b01949350505050565b6000845160005b81811015612ba55760208188018101518583015201612b8b565b81811115612bb4576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a",
ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"CHALLENGE_PERIOD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"KECCAK_TREE_DEPTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_LEAF_COUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLeavesLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_stateCommitments\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_finalize\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeFirstLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getTreeRootLPP\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"treeRoot_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_claimedSize\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadKeccak256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_localContext\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_word\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_size\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"key_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"preimageLengths\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimagePartOk\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageParts\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocksLen\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBranches\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalCount\",\"inputs\":[],\"outputs\":[{\"name\":\"count_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalMetadata\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"LPPMetaData\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalParts\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposals\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"readPreimage\",\"inputs\":[{\"name\":\"_key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"dat_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"datLen_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"squeezeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zeroHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"ActiveProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AlreadyFinalized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BadProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInputSize\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPreimage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PartOffsetOOB\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PostStateMatches\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StatesNotContiguous\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TreeSizeOverflow\",\"inputs\":[]}]",
Bin: "0x60806040523480156200001157600080fd5b5060005b6200002360016010620000db565b811015620000be5760038160108110620000415762000041620000f5565b015460038260108110620000595762000059620000f5565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060038260016200009491906200010b565b60108110620000a757620000a7620000f5565b015580620000b58162000126565b91505062000015565b5062000142565b634e487b7160e01b600052601160045260246000fd5b600082821015620000f057620000f0620000c5565b500390565b634e487b7160e01b600052603260045260246000fd5b60008219821115620001215762000121620000c5565b500190565b6000600182016200013b576200013b620000c5565b5060010190565b612e6c80620001526000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80639d53a648116100e3578063da35c6641161008c578063ec5efcbc11610066578063ec5efcbc146103f5578063faf37bc714610408578063fef2b4ed1461041b57600080fd5b8063da35c664146103b2578063e03110e1146103ba578063e1592611146103e257600080fd5b8063b4801e61116100bd578063b4801e6114610382578063c3a079ed14610395578063d18534b51461039f57600080fd5b80639d53a648146103025780639f99ef8214610344578063b2e67ba81461035757600080fd5b806352f0f3ad116101455780637ac547671161011f5780637ac54767146102855780638542cf5014610298578063882856ef146102d657600080fd5b806352f0f3ad1461021c57806361238bde1461022f5780636551927b1461025a57600080fd5b80632055b36b116101765780632055b36b146101f75780633909af5c146101ff5780634d52b4c91461021457600080fd5b8063013cf08b146101925780630359a563146101d6575b600080fd5b6101a56101a03660046124ba565b61043b565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b6101e96101e43660046124fc565b610480565b6040519081526020016101cd565b6101e9601081565b61021261020d3660046126f7565b6105b8565b005b6101e9610806565b6101e961022a3660046127e3565b610821565b6101e961023d36600461281e565b600160209081526000928352604080842090915290825290205481565b6101e96102683660046124fc565b601560209081526000928352604080842090915290825290205481565b6101e96102933660046124ba565b6108f6565b6102c66102a636600461281e565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101cd565b6102e96102e4366004612840565b61090d565b60405167ffffffffffffffff90911681526020016101cd565b6101e96103103660046124fc565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b6102126103523660046128b5565b610967565b6101e96103653660046124fc565b601660209081526000928352604080842090915290825290205481565b6101e9610390366004612840565b610ea9565b6101e96201518081565b6102126103ad3660046126f7565b610edb565b6013546101e9565b6103cd6103c836600461281e565b611289565b604080519283526020830191909152016101cd565b6102126103f0366004612946565b61137a565b610212610403366004612992565b611483565b610212610416366004612a2b565b6115fd565b6101e96104293660046124ba565b60006020819052908152604090205481565b6013818154811061044b57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260156020908152604080832084845290915281205481906104c39060601c63ffffffff1690565b63ffffffff16905060005b60108110156105b057816001166001036105565773ffffffffffffffffffffffffffffffffffffffff851660009081526014602090815260408083208784529091529020816010811061052357610523612a67565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610597565b826003826010811061056a5761056a612a67565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c90806105a881612ac5565b9150506104ce565b505092915050565b60006105c48a8a610480565b90506105e786868360208b01356105e26105dd8d612afd565b611777565b6117b7565b8015610605575061060583838360208801356105e26105dd8a612afd565b61063b576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106519190612bcc565b604051602081830303815290604052805190602001201461069e576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360200135876020013560016106b49190612c0a565b146106eb576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610733886106f98680612c22565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061181892505050565b61073c88611973565b8360400135886040516020016107529190612bcc565b604051602081830303815290604052805190602001200361079f576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161081460106002612da9565b61081e9190612db5565b81565b600061082d868661220f565b905061083a836008612c0a565b8211806108475750602083115b1561087e576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b6003816010811061090657600080fd5b0154905081565b6017602052826000526040600020602052816000526040600020818154811061093557600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b606081156109805761097986866122bc565b90506109ba565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208a845290915280822081516102008101928390529160109082845b8154815260200190600101908083116109e75750503360009081526015602090815260408083208f8452909152902054939450610a2992508391506123459050565b63ffffffff16600003610a68576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a728160c01c90565b67ffffffffffffffff1615610ab3576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ac58260a01c63ffffffff1690565b67ffffffffffffffff1690506000610ae38360401c63ffffffff1690565b63ffffffff169050600882108015610af9575080155b15610b80576000610b108460801c63ffffffff1690565b905060008160c01b6000528b356008528351905080601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008f8152602001908152602001600020819055505050610c35565b60088210158015610b9e575080610b98600884612db5565b92508210155b8015610bb25750610baf8982612c0a565b82105b15610c35576000610bc38284612db5565b905089610bd1826020612c0a565b10158015610bdd575086155b15610c14576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208f84529091529020908b013590555b6000610c478460601c63ffffffff1690565b63ffffffff169050855160208701608882048a1415608883061715610c74576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610d24578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8d013560a883015260c882206001860195508560005b610200811015610d19576001821615610cf95782818d0152610d19565b8b81015160009081526020938452604090209260019290921c9101610cdc565b505050608801610c81565b50505050600160106002610d389190612da9565b610d429190612db5565b811115610d7b576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208f84529091529020610da190866010612430565b503360009081526017602090815260408083208f845282528220805460018101825590835291206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055610e55610e03838c612c0a565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8716171790565b93508615610e805777ffffffffffffffffffffffffffffffffffffffffffffffff84164260c01b1793505b50503360009081526015602090815260408083209c83529b905299909920555050505050505050565b60146020528260005260406000206020528160005260406000208160108110610ed157600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff811615610f4e576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62015180610f5c8260c01c90565b610f709067ffffffffffffffff1642612db5565b11610fa7576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610fb38b8b610480565b9050610fcc87878360208c01356105e26105dd8e612afd565b8015610fea5750610fea84848360208901356105e26105dd8b612afd565b611020576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016110369190612bcc565b6040516020818303038152906040528051906020012014611083576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016110999190612c0a565b1415806110cb575060016110b38360601c63ffffffff1690565b6110bd9190612dcc565b63ffffffff16856020013514155b15611102576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111148360801c63ffffffff1690565b63ffffffff1690508061112d8460401c63ffffffff1690565b63ffffffff161461116a576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111788a6106f98880612c22565b6111818a611973565b600061118c8b612351565b905060006111a08560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff16611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461132e816008612c0a565b611339856020612c0a565b10611357578361134a826008612c0a565b6113549190612db5565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156113995763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061148f8686610480565b90506114a883838360208801356105e26105dd8a612afd565b6114de576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208401351561151a576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152261246e565b611530816106f98780612c22565b61153981611973565b84604001358160405160200161154f9190612bcc565b604051602081830303815290604052805190602001200361159c576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b611608816008612df1565b63ffffffff168263ffffffff161061164c576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b600081600001518260200151836040015160405160200161179a93929190612e19565b604051602081830303815290604052805190602001209050919050565b60008160005b601081101561180b578060051b880135600186831c16600181146117f05760008481526020839052604090209350611801565b600082815260208590526040902093505b50506001016117bd565b5090931495945050505050565b608881511461182657600080fd5b60208101602083016118a7565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b17171790506118a18161188c868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b6118b360008383611833565b6118bf60018383611833565b6118cb60028383611833565b6118d760038383611833565b6118e360048383611833565b6118ef60058383611833565b6118fb60068383611833565b61190760078383611833565b61191360088383611833565b61191f60098383611833565b61192b600a8383611833565b611937600b8383611833565b611943600c8383611833565b61194f600d8383611833565b61195b600e8383611833565b611967600f8383611833565b6118a160108383611833565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e001604051602081830303815290604052905060208201602082016120ef565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611b268660011b67ffffffffffffffff1690565b18188584603f1c611b418660011b67ffffffffffffffff1690565b18188584603f1c611b5c8660011b67ffffffffffffffff1690565b181895508483603f1c611b798560011b67ffffffffffffffff1690565b181894508387603f1c611b968960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b611f1681611a69565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c90811890911682526118a1565b6120fb60008284611f0d565b61210760018284611f0d565b61211360028284611f0d565b61211f60038284611f0d565b61212b60048284611f0d565b61213760058284611f0d565b61214360068284611f0d565b61214f60078284611f0d565b61215b60088284611f0d565b61216760098284611f0d565b612173600a8284611f0d565b61217f600b8284611f0d565b61218b600c8284611f0d565b612197600d8284611f0d565b6121a3600e8284611f0d565b6121af600f8284611f0d565b6121bb60108284611f0d565b6121c760118284611f0d565b6121d360128284611f0d565b6121df60138284611f0d565b6121eb60148284611f0d565b6121f760158284611f0d565b61220360168284611f0d565b6118a160178284611f0d565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176122b5818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b606060405190508160208201818101828683376088830680801561231a576088829003850160808582017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01536001845160001a178453865261232c565b60018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60801c63ffffffff1690565b60006123d4565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006123828360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff00006123af8360101b67ffffffffffffffff1690565b1617905060008160201c6123cd8360201b67ffffffffffffffff1690565b1792915050565b608082015160208301906123ec90612358565b612358565b60408201516123fa90612358565b60401b176124126123e760018460059190911b015190565b825160809190911b9061242490612358565b60c01b17179392505050565b826010810192821561245e579160200282015b8281111561245e578251825591602001919060010190612443565b5061246a929150612486565b5090565b604051806020016040528061248161249b565b905290565b5b8082111561246a5760008155600101612487565b6040518061032001604052806019906020820280368337509192915050565b6000602082840312156124cc57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146124f757600080fd5b919050565b6000806040838503121561250f57600080fd5b612518836124d3565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff8111828210171561257957612579612526565b60405290565b6040516060810167ffffffffffffffff8111828210171561257957612579612526565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156125e9576125e9612526565b604052919050565b600061032080838503121561260557600080fd5b604051602080820167ffffffffffffffff838210818311171561262a5761262a612526565b8160405283955087601f88011261264057600080fd5b612648612555565b948701949150818886111561265c57600080fd5b875b8681101561268457803583811681146126775760008081fd5b845292840192840161265e565b50909352509295945050505050565b6000606082840312156126a557600080fd5b50919050565b60008083601f8401126126bd57600080fd5b50813567ffffffffffffffff8111156126d557600080fd5b6020830191508360208260051b85010111156126f057600080fd5b9250929050565b60008060008060008060008060006103e08a8c03121561271657600080fd5b61271f8a6124d3565b985060208a013597506127358b60408c016125f1565b96506103608a013567ffffffffffffffff8082111561275357600080fd5b61275f8d838e01612693565b97506103808c013591508082111561277657600080fd5b6127828d838e016126ab565b90975095506103a08c013591508082111561279c57600080fd5b6127a88d838e01612693565b94506103c08c01359150808211156127bf57600080fd5b506127cc8c828d016126ab565b915080935050809150509295985092959850929598565b600080600080600060a086880312156127fb57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561283157600080fd5b50508035926020909101359150565b60008060006060848603121561285557600080fd5b61285e846124d3565b95602085013595506040909401359392505050565b60008083601f84011261288557600080fd5b50813567ffffffffffffffff81111561289d57600080fd5b6020830191508360208285010111156126f057600080fd5b600080600080600080608087890312156128ce57600080fd5b86359550602087013567ffffffffffffffff808211156128ed57600080fd5b6128f98a838b01612873565b9097509550604089013591508082111561291257600080fd5b5061291f89828a016126ab565b9094509250506060870135801515811461293857600080fd5b809150509295509295509295565b60008060006040848603121561295b57600080fd5b83359250602084013567ffffffffffffffff81111561297957600080fd5b61298586828701612873565b9497909650939450505050565b6000806000806000608086880312156129aa57600080fd5b6129b3866124d3565b945060208601359350604086013567ffffffffffffffff808211156129d757600080fd5b6129e389838a01612693565b945060608801359150808211156129f957600080fd5b50612a06888289016126ab565b969995985093965092949392505050565b803563ffffffff811681146124f757600080fd5b600080600060608486031215612a4057600080fd5b83359250612a5060208501612a17565b9150612a5e60408501612a17565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612af657612af6612a96565b5060010190565b600060608236031215612b0f57600080fd5b612b1761257f565b823567ffffffffffffffff80821115612b2f57600080fd5b9084019036601f830112612b4257600080fd5b8135602082821115612b5657612b56612526565b612b86817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016125a2565b92508183523681838601011115612b9c57600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b6019811015612c0157825167ffffffffffffffff16825260209283019290910190600101612bd8565b50505092915050565b60008219821115612c1d57612c1d612a96565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612c5757600080fd5b83018035915067ffffffffffffffff821115612c7257600080fd5b6020019150368190038213156126f057600080fd5b600181815b80851115612ce057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612cc657612cc6612a96565b80851615612cd357918102915b93841c9390800290612c8c565b509250929050565b600082612cf757506001612da3565b81612d0457506000612da3565b8160018114612d1a5760028114612d2457612d40565b6001915050612da3565b60ff841115612d3557612d35612a96565b50506001821b612da3565b5060208310610133831016604e8410600b8410161715612d63575081810a612da3565b612d6d8383612c87565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612d9f57612d9f612a96565b0290505b92915050565b60006122b58383612ce8565b600082821015612dc757612dc7612a96565b500390565b600063ffffffff83811690831681811015612de957612de9612a96565b039392505050565b600063ffffffff808316818516808303821115612e1057612e10612a96565b01949350505050565b6000845160005b81811015612e3a5760208188018101518583015201612e20565b81811115612e49576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a",
}
// PreimageOracleABI is the input ABI used to generate the binding from.
......@@ -430,6 +430,68 @@ func (_PreimageOracle *PreimageOracleCallerSession) PreimageParts(arg0 [32]byte,
return _PreimageOracle.Contract.PreimageParts(&_PreimageOracle.CallOpts, arg0, arg1)
}
// ProposalBlocks is a free data retrieval call binding the contract method 0x882856ef.
//
// Solidity: function proposalBlocks(address , uint256 , uint256 ) view returns(uint64)
func (_PreimageOracle *PreimageOracleCaller) ProposalBlocks(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int, arg2 *big.Int) (uint64, error) {
var out []interface{}
err := _PreimageOracle.contract.Call(opts, &out, "proposalBlocks", arg0, arg1, arg2)
if err != nil {
return *new(uint64), err
}
out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64)
return out0, err
}
// ProposalBlocks is a free data retrieval call binding the contract method 0x882856ef.
//
// Solidity: function proposalBlocks(address , uint256 , uint256 ) view returns(uint64)
func (_PreimageOracle *PreimageOracleSession) ProposalBlocks(arg0 common.Address, arg1 *big.Int, arg2 *big.Int) (uint64, error) {
return _PreimageOracle.Contract.ProposalBlocks(&_PreimageOracle.CallOpts, arg0, arg1, arg2)
}
// ProposalBlocks is a free data retrieval call binding the contract method 0x882856ef.
//
// Solidity: function proposalBlocks(address , uint256 , uint256 ) view returns(uint64)
func (_PreimageOracle *PreimageOracleCallerSession) ProposalBlocks(arg0 common.Address, arg1 *big.Int, arg2 *big.Int) (uint64, error) {
return _PreimageOracle.Contract.ProposalBlocks(&_PreimageOracle.CallOpts, arg0, arg1, arg2)
}
// ProposalBlocksLen is a free data retrieval call binding the contract method 0x9d53a648.
//
// Solidity: function proposalBlocksLen(address _claimant, uint256 _uuid) view returns(uint256 len_)
func (_PreimageOracle *PreimageOracleCaller) ProposalBlocksLen(opts *bind.CallOpts, _claimant common.Address, _uuid *big.Int) (*big.Int, error) {
var out []interface{}
err := _PreimageOracle.contract.Call(opts, &out, "proposalBlocksLen", _claimant, _uuid)
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// ProposalBlocksLen is a free data retrieval call binding the contract method 0x9d53a648.
//
// Solidity: function proposalBlocksLen(address _claimant, uint256 _uuid) view returns(uint256 len_)
func (_PreimageOracle *PreimageOracleSession) ProposalBlocksLen(_claimant common.Address, _uuid *big.Int) (*big.Int, error) {
return _PreimageOracle.Contract.ProposalBlocksLen(&_PreimageOracle.CallOpts, _claimant, _uuid)
}
// ProposalBlocksLen is a free data retrieval call binding the contract method 0x9d53a648.
//
// Solidity: function proposalBlocksLen(address _claimant, uint256 _uuid) view returns(uint256 len_)
func (_PreimageOracle *PreimageOracleCallerSession) ProposalBlocksLen(_claimant common.Address, _uuid *big.Int) (*big.Int, error) {
return _PreimageOracle.Contract.ProposalBlocksLen(&_PreimageOracle.CallOpts, _claimant, _uuid)
}
// ProposalBranches is a free data retrieval call binding the contract method 0xb4801e61.
//
// Solidity: function proposalBranches(address , uint256 , uint256 ) view returns(bytes32)
......@@ -461,6 +523,37 @@ func (_PreimageOracle *PreimageOracleCallerSession) ProposalBranches(arg0 common
return _PreimageOracle.Contract.ProposalBranches(&_PreimageOracle.CallOpts, arg0, arg1, arg2)
}
// ProposalCount is a free data retrieval call binding the contract method 0xda35c664.
//
// Solidity: function proposalCount() view returns(uint256 count_)
func (_PreimageOracle *PreimageOracleCaller) ProposalCount(opts *bind.CallOpts) (*big.Int, error) {
var out []interface{}
err := _PreimageOracle.contract.Call(opts, &out, "proposalCount")
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// ProposalCount is a free data retrieval call binding the contract method 0xda35c664.
//
// Solidity: function proposalCount() view returns(uint256 count_)
func (_PreimageOracle *PreimageOracleSession) ProposalCount() (*big.Int, error) {
return _PreimageOracle.Contract.ProposalCount(&_PreimageOracle.CallOpts)
}
// ProposalCount is a free data retrieval call binding the contract method 0xda35c664.
//
// Solidity: function proposalCount() view returns(uint256 count_)
func (_PreimageOracle *PreimageOracleCallerSession) ProposalCount() (*big.Int, error) {
return _PreimageOracle.Contract.ProposalCount(&_PreimageOracle.CallOpts)
}
// ProposalMetadata is a free data retrieval call binding the contract method 0x6551927b.
//
// Solidity: function proposalMetadata(address , uint256 ) view returns(bytes32)
......@@ -523,6 +616,51 @@ func (_PreimageOracle *PreimageOracleCallerSession) ProposalParts(arg0 common.Ad
return _PreimageOracle.Contract.ProposalParts(&_PreimageOracle.CallOpts, arg0, arg1)
}
// Proposals is a free data retrieval call binding the contract method 0x013cf08b.
//
// Solidity: function proposals(uint256 ) view returns(address claimant, uint256 uuid)
func (_PreimageOracle *PreimageOracleCaller) Proposals(opts *bind.CallOpts, arg0 *big.Int) (struct {
Claimant common.Address
Uuid *big.Int
}, error) {
var out []interface{}
err := _PreimageOracle.contract.Call(opts, &out, "proposals", arg0)
outstruct := new(struct {
Claimant common.Address
Uuid *big.Int
})
if err != nil {
return *outstruct, err
}
outstruct.Claimant = *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
outstruct.Uuid = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
return *outstruct, err
}
// Proposals is a free data retrieval call binding the contract method 0x013cf08b.
//
// Solidity: function proposals(uint256 ) view returns(address claimant, uint256 uuid)
func (_PreimageOracle *PreimageOracleSession) Proposals(arg0 *big.Int) (struct {
Claimant common.Address
Uuid *big.Int
}, error) {
return _PreimageOracle.Contract.Proposals(&_PreimageOracle.CallOpts, arg0)
}
// Proposals is a free data retrieval call binding the contract method 0x013cf08b.
//
// Solidity: function proposals(uint256 ) view returns(address claimant, uint256 uuid)
func (_PreimageOracle *PreimageOracleCallerSession) Proposals(arg0 *big.Int) (struct {
Claimant common.Address
Uuid *big.Int
}, error) {
return _PreimageOracle.Contract.Proposals(&_PreimageOracle.CallOpts, arg0)
}
// ReadPreimage is a free data retrieval call binding the contract method 0xe03110e1.
//
// Solidity: function readPreimage(bytes32 _key, uint256 _offset) view returns(bytes32 dat_, uint256 datLen_)
......
......@@ -9,11 +9,11 @@ import (
"github.com/ethereum-optimism/optimism/op-bindings/solc"
)
const PreimageOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimageLengths\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_bytes32,t_uint256)\"},{\"astId\":1001,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimageParts\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes32))\"},{\"astId\":1002,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimagePartOk\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bool))\"},{\"astId\":1003,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"zeroHashes\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_array(t_bytes32)16_storage\"},{\"astId\":1004,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalBranches\",\"offset\":0,\"slot\":\"19\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_bytes32)16_storage))\"},{\"astId\":1005,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalMetadata\",\"offset\":0,\"slot\":\"20\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1007))\"},{\"astId\":1006,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalParts\",\"offset\":0,\"slot\":\"21\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_bytes32))\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_bytes32)16_storage\":{\"encoding\":\"inplace\",\"label\":\"bytes32[16]\",\"numberOfBytes\":\"512\",\"base\":\"t_bytes32\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_bytes32)16_storage))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e bytes32[16]))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_array(t_bytes32)16_storage)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_bytes32))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e bytes32))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_bytes32)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1007))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e LPPMetaData))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1007)\"},\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bool))\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e mapping(uint256 =\u003e bool))\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_mapping(t_uint256,t_bool)\"},\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes32))\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e mapping(uint256 =\u003e bytes32))\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_mapping(t_uint256,t_bytes32)\"},\"t_mapping(t_bytes32,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_uint256\"},\"t_mapping(t_uint256,t_array(t_bytes32)16_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32[16])\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_array(t_bytes32)16_storage\"},\"t_mapping(t_uint256,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bytes32\"},\"t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1007)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e LPPMetaData)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_userDefinedValueType(LPPMetaData)1007\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_userDefinedValueType(LPPMetaData)1007\":{\"encoding\":\"inplace\",\"label\":\"LPPMetaData\",\"numberOfBytes\":\"32\"}}}"
const PreimageOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimageLengths\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_bytes32,t_uint256)\"},{\"astId\":1001,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimageParts\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes32))\"},{\"astId\":1002,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimagePartOk\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bool))\"},{\"astId\":1003,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"zeroHashes\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_array(t_bytes32)16_storage\"},{\"astId\":1004,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposals\",\"offset\":0,\"slot\":\"19\",\"type\":\"t_array(t_struct(LargePreimageProposalKeys)1009_storage)dyn_storage\"},{\"astId\":1005,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalBranches\",\"offset\":0,\"slot\":\"20\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_bytes32)16_storage))\"},{\"astId\":1006,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalMetadata\",\"offset\":0,\"slot\":\"21\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1010))\"},{\"astId\":1007,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalParts\",\"offset\":0,\"slot\":\"22\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_bytes32))\"},{\"astId\":1008,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalBlocks\",\"offset\":0,\"slot\":\"23\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_uint64)dyn_storage))\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_bytes32)16_storage\":{\"encoding\":\"inplace\",\"label\":\"bytes32[16]\",\"numberOfBytes\":\"512\",\"base\":\"t_bytes32\"},\"t_array(t_struct(LargePreimageProposalKeys)1009_storage)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"struct PreimageOracle.LargePreimageProposalKeys[]\",\"numberOfBytes\":\"32\",\"base\":\"t_struct(LargePreimageProposalKeys)1009_storage\"},\"t_array(t_uint64)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"uint64[]\",\"numberOfBytes\":\"32\",\"base\":\"t_uint64\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_bytes32)16_storage))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e bytes32[16]))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_array(t_bytes32)16_storage)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_uint64)dyn_storage))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e uint64[]))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_array(t_uint64)dyn_storage)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_bytes32))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e bytes32))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_bytes32)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1010))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e LPPMetaData))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1010)\"},\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bool))\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e mapping(uint256 =\u003e bool))\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_mapping(t_uint256,t_bool)\"},\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes32))\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e mapping(uint256 =\u003e bytes32))\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_mapping(t_uint256,t_bytes32)\"},\"t_mapping(t_bytes32,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_uint256\"},\"t_mapping(t_uint256,t_array(t_bytes32)16_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32[16])\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_array(t_bytes32)16_storage\"},\"t_mapping(t_uint256,t_array(t_uint64)dyn_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint64[])\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_array(t_uint64)dyn_storage\"},\"t_mapping(t_uint256,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bytes32\"},\"t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1010)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e LPPMetaData)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_userDefinedValueType(LPPMetaData)1010\"},\"t_struct(LargePreimageProposalKeys)1009_storage\":{\"encoding\":\"inplace\",\"label\":\"struct PreimageOracle.LargePreimageProposalKeys\",\"numberOfBytes\":\"64\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_userDefinedValueType(LPPMetaData)1010\":{\"encoding\":\"inplace\",\"label\":\"LPPMetaData\",\"numberOfBytes\":\"32\"}}}"
var PreimageOracleStorageLayout = new(solc.StorageLayout)
var PreimageOracleDeployedBin = "0x608060405234801561001057600080fd5b50600436106101515760003560e01c80639f99ef82116100cd578063e03110e111610081578063ec5efcbc11610066578063ec5efcbc14610304578063faf37bc714610317578063fef2b4ed1461032a57600080fd5b8063e03110e1146102c9578063e1592611146102f157600080fd5b8063b4801e61116100b2578063b4801e6114610299578063c3a079ed146102ac578063d18534b5146102b657600080fd5b80639f99ef821461025b578063b2e67ba81461026e57600080fd5b806352f0f3ad116101245780636551927b116101095780636551927b146101df5780637ac547671461020a5780638542cf501461021d57600080fd5b806352f0f3ad146101a157806361238bde146101b457600080fd5b80630359a563146101565780632055b36b1461017c5780633909af5c146101845780634d52b4c914610199575b600080fd5b61016961016436600461224e565b61034a565b6040519081526020015b60405180910390f35b610169601081565b610197610192366004612449565b610482565b005b6101696106d0565b6101696101af366004612535565b6106eb565b6101696101c2366004612570565b600160209081526000928352604080842090915290825290205481565b6101696101ed36600461224e565b601460209081526000928352604080842090915290825290205481565b610169610218366004612592565b6107c0565b61024b61022b366004612570565b600260209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610173565b6101976102693660046125ed565b6107d7565b61016961027c36600461224e565b601560209081526000928352604080842090915290825290205481565b6101696102a736600461267e565b610cc5565b6101696201518081565b6101976102c4366004612449565b610cf7565b6102dc6102d7366004612570565b6110a5565b60408051928352602083019190915201610173565b6101976102ff3660046126b1565b611196565b6101976103123660046126fd565b61129f565b610197610325366004612796565b611419565b610169610338366004612592565b60006020819052908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601460209081526040808320848452909152812054819061038d9060601c63ffffffff1690565b63ffffffff16905060005b601081101561047a57816001166001036104205773ffffffffffffffffffffffffffffffffffffffff85166000908152601360209081526040808320878452909152902081601081106103ed576103ed6127d2565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610461565b8260038260108110610434576104346127d2565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061047281612830565b915050610398565b505092915050565b600061048e8a8a61034a565b90506104b186868360208b01356104ac6104a78d612868565b6114e2565b611522565b80156104cf57506104cf83838360208801356104ac6104a78a612868565b610505576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86604001358860405160200161051b9190612937565b6040516020818303038152906040528051906020012014610568576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161057e9190612975565b146105b5576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105fd886105c3868061298d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061158392505050565b610606886116de565b83604001358860405160200161061c9190612937565b6040516020818303038152906040528051906020012003610669576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526014602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b60016106de60106002612b14565b6106e89190612b20565b81565b60006106f78686611f7a565b9050610704836008612975565b8211806107115750602083115b15610748576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b600381601081106107d057600080fd5b0154905081565b606081156107f0576107e98686612027565b905061082a565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526013602090815260408083208a845290915280822081516102008101928390529160109082845b8154815260200190600101908083116108575750503360009081526014602090815260408083208f845290915290205493945061089992508391506120b09050565b63ffffffff166000036108d8576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108e28160c01c90565b67ffffffffffffffff1615610923576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109358260a01c63ffffffff1690565b67ffffffffffffffff16905060006109538360401c63ffffffff1690565b63ffffffff169050600882108015610969575080155b156109f05760006109808460801c63ffffffff1690565b905060008160c01b6000528b356008528351905080601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008f8152602001908152602001600020819055505050610aa5565b60088210158015610a0e575080610a08600884612b20565b92508210155b8015610a225750610a1f8982612975565b82105b15610aa5576000610a338284612b20565b905089610a41826020612975565b10158015610a4d575086155b15610a84576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526015602090815260408083208f84529091529020908b013590555b6000610ab78460601c63ffffffff1690565b63ffffffff169050855160208701608882048a1415608883061715610ae4576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610b94578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8d013560a883015260c882206001860195508560005b610200811015610b89576001821615610b695782818d0152610b89565b8b81015160009081526020938452604090209260019290921c9101610b4c565b505050608801610af1565b50505050600160106002610ba89190612b14565b610bb29190612b20565b811115610beb576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526013602090815260408083208f84529091529020610c119086601061219b565b50610c71610c1f838c612975565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8716171790565b93508615610c9c5777ffffffffffffffffffffffffffffffffffffffffffffffff84164260c01b1793505b50503360009081526014602090815260408083209c83529b905299909920555050505050505050565b60136020528260005260406000206020528160005260406000208160108110610ced57600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526014602090815260408083208b845290915290205467ffffffffffffffff811615610d6a576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62015180610d788260c01c90565b610d8c9067ffffffffffffffff1642612b20565b11610dc3576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dcf8b8b61034a565b9050610de887878360208c01356104ac6104a78e612868565b8015610e065750610e0684848360208901356104ac6104a78b612868565b610e3c576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876040013589604051602001610e529190612937565b6040516020818303038152906040528051906020012014610e9f576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846020013588602001356001610eb59190612975565b141580610ee757506001610ecf8360601c63ffffffff1690565b610ed99190612b37565b63ffffffff16856020013514155b15610f1e576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f308360801c63ffffffff1690565b63ffffffff16905080610f498460401c63ffffffff1690565b63ffffffff1614610f86576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f948a6105c3888061298d565b610f9d8a6116de565b6000610fa88b6120bc565b90506000610fbc8560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff1661112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461114a816008612975565b611155856020612975565b106111735783611166826008612975565b6111709190612b20565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156111b55763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b60006112ab868661034a565b90506112c483838360208801356104ac6104a78a612868565b6112fa576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611336576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61133e6121d9565b61134c816105c3878061298d565b611355816116de565b84604001358160405160200161136b9190612937565b60405160208183030381529060405280519060200120036113b8576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526014602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b611424816008612b5c565b63ffffffff168263ffffffff1610611468576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083209583529490529290922080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09290921b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169190911760809290921b919091179055565b600081600001518260200151836040015160405160200161150593929190612b84565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611576578060051b880135600186831c166001811461155b576000848152602083905260409020935061156c565b600082815260208590526040902093505b5050600101611528565b5090931495945050505050565b608881511461159157600080fd5b6020810160208301611612565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b171717905061160c816115f7868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61161e6000838361159e565b61162a6001838361159e565b6116366002838361159e565b6116426003838361159e565b61164e6004838361159e565b61165a6005838361159e565b6116666006838361159e565b6116726007838361159e565b61167e6008838361159e565b61168a6009838361159e565b611696600a838361159e565b6116a2600b838361159e565b6116ae600c838361159e565b6116ba600d838361159e565b6116c6600e838361159e565b6116d2600f838361159e565b61160c6010838361159e565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201611e5a565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c6118918660011b67ffffffffffffffff1690565b18188584603f1c6118ac8660011b67ffffffffffffffff1690565b18188584603f1c6118c78660011b67ffffffffffffffff1690565b181895508483603f1c6118e48560011b67ffffffffffffffff1690565b181894508387603f1c6119018960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b611c81816117d4565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c908118909116825261160c565b611e6660008284611c78565b611e7260018284611c78565b611e7e60028284611c78565b611e8a60038284611c78565b611e9660048284611c78565b611ea260058284611c78565b611eae60068284611c78565b611eba60078284611c78565b611ec660088284611c78565b611ed260098284611c78565b611ede600a8284611c78565b611eea600b8284611c78565b611ef6600c8284611c78565b611f02600d8284611c78565b611f0e600e8284611c78565b611f1a600f8284611c78565b611f2660108284611c78565b611f3260118284611c78565b611f3e60128284611c78565b611f4a60138284611c78565b611f5660148284611c78565b611f6260158284611c78565b611f6e60168284611c78565b61160c60178284611c78565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617612020818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612085576088829003850160808582017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01536001845160001a1784538652612097565b60018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60801c63ffffffff1690565b600061213f565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006120ed8360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff000061211a8360101b67ffffffffffffffff1690565b1617905060008160201c6121388360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612157906120c3565b6120c3565b6040820151612165906120c3565b60401b1761217d61215260018460059190911b015190565b825160809190911b9061218f906120c3565b60c01b17179392505050565b82601081019282156121c9579160200282015b828111156121c95782518255916020019190600101906121ae565b506121d59291506121f1565b5090565b60405180602001604052806121ec612206565b905290565b5b808211156121d557600081556001016121f2565b6040518061032001604052806019906020820280368337509192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461224957600080fd5b919050565b6000806040838503121561226157600080fd5b61226a83612225565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff811182821017156122cb576122cb612278565b60405290565b6040516060810167ffffffffffffffff811182821017156122cb576122cb612278565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561233b5761233b612278565b604052919050565b600061032080838503121561235757600080fd5b604051602080820167ffffffffffffffff838210818311171561237c5761237c612278565b8160405283955087601f88011261239257600080fd5b61239a6122a7565b94870194915081888611156123ae57600080fd5b875b868110156123d657803583811681146123c95760008081fd5b84529284019284016123b0565b50909352509295945050505050565b6000606082840312156123f757600080fd5b50919050565b60008083601f84011261240f57600080fd5b50813567ffffffffffffffff81111561242757600080fd5b6020830191508360208260051b850101111561244257600080fd5b9250929050565b60008060008060008060008060006103e08a8c03121561246857600080fd5b6124718a612225565b985060208a013597506124878b60408c01612343565b96506103608a013567ffffffffffffffff808211156124a557600080fd5b6124b18d838e016123e5565b97506103808c01359150808211156124c857600080fd5b6124d48d838e016123fd565b90975095506103a08c01359150808211156124ee57600080fd5b6124fa8d838e016123e5565b94506103c08c013591508082111561251157600080fd5b5061251e8c828d016123fd565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561254d57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561258357600080fd5b50508035926020909101359150565b6000602082840312156125a457600080fd5b5035919050565b60008083601f8401126125bd57600080fd5b50813567ffffffffffffffff8111156125d557600080fd5b60208301915083602082850101111561244257600080fd5b6000806000806000806080878903121561260657600080fd5b86359550602087013567ffffffffffffffff8082111561262557600080fd5b6126318a838b016125ab565b9097509550604089013591508082111561264a57600080fd5b5061265789828a016123fd565b9094509250506060870135801515811461267057600080fd5b809150509295509295509295565b60008060006060848603121561269357600080fd5b61269c84612225565b95602085013595506040909401359392505050565b6000806000604084860312156126c657600080fd5b83359250602084013567ffffffffffffffff8111156126e457600080fd5b6126f0868287016125ab565b9497909650939450505050565b60008060008060006080868803121561271557600080fd5b61271e86612225565b945060208601359350604086013567ffffffffffffffff8082111561274257600080fd5b61274e89838a016123e5565b9450606088013591508082111561276457600080fd5b50612771888289016123fd565b969995985093965092949392505050565b803563ffffffff8116811461224957600080fd5b6000806000606084860312156127ab57600080fd5b833592506127bb60208501612782565b91506127c960408501612782565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361286157612861612801565b5060010190565b60006060823603121561287a57600080fd5b6128826122d1565b823567ffffffffffffffff8082111561289a57600080fd5b9084019036601f8301126128ad57600080fd5b81356020828211156128c1576128c1612278565b6128f1817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016122f4565b9250818352368183860101111561290757600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561296c57825167ffffffffffffffff16825260209283019290910190600101612943565b50505092915050565b6000821982111561298857612988612801565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129c257600080fd5b83018035915067ffffffffffffffff8211156129dd57600080fd5b60200191503681900382131561244257600080fd5b600181815b80851115612a4b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612a3157612a31612801565b80851615612a3e57918102915b93841c93908002906129f7565b509250929050565b600082612a6257506001612b0e565b81612a6f57506000612b0e565b8160018114612a855760028114612a8f57612aab565b6001915050612b0e565b60ff841115612aa057612aa0612801565b50506001821b612b0e565b5060208310610133831016604e8410600b8410161715612ace575081810a612b0e565b612ad883836129f2565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612b0a57612b0a612801565b0290505b92915050565b60006120208383612a53565b600082821015612b3257612b32612801565b500390565b600063ffffffff83811690831681811015612b5457612b54612801565b039392505050565b600063ffffffff808316818516808303821115612b7b57612b7b612801565b01949350505050565b6000845160005b81811015612ba55760208188018101518583015201612b8b565b81811115612bb4576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a"
var PreimageOracleDeployedBin = "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c80639d53a648116100e3578063da35c6641161008c578063ec5efcbc11610066578063ec5efcbc146103f5578063faf37bc714610408578063fef2b4ed1461041b57600080fd5b8063da35c664146103b2578063e03110e1146103ba578063e1592611146103e257600080fd5b8063b4801e61116100bd578063b4801e6114610382578063c3a079ed14610395578063d18534b51461039f57600080fd5b80639d53a648146103025780639f99ef8214610344578063b2e67ba81461035757600080fd5b806352f0f3ad116101455780637ac547671161011f5780637ac54767146102855780638542cf5014610298578063882856ef146102d657600080fd5b806352f0f3ad1461021c57806361238bde1461022f5780636551927b1461025a57600080fd5b80632055b36b116101765780632055b36b146101f75780633909af5c146101ff5780634d52b4c91461021457600080fd5b8063013cf08b146101925780630359a563146101d6575b600080fd5b6101a56101a03660046124ba565b61043b565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b6101e96101e43660046124fc565b610480565b6040519081526020016101cd565b6101e9601081565b61021261020d3660046126f7565b6105b8565b005b6101e9610806565b6101e961022a3660046127e3565b610821565b6101e961023d36600461281e565b600160209081526000928352604080842090915290825290205481565b6101e96102683660046124fc565b601560209081526000928352604080842090915290825290205481565b6101e96102933660046124ba565b6108f6565b6102c66102a636600461281e565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101cd565b6102e96102e4366004612840565b61090d565b60405167ffffffffffffffff90911681526020016101cd565b6101e96103103660046124fc565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b6102126103523660046128b5565b610967565b6101e96103653660046124fc565b601660209081526000928352604080842090915290825290205481565b6101e9610390366004612840565b610ea9565b6101e96201518081565b6102126103ad3660046126f7565b610edb565b6013546101e9565b6103cd6103c836600461281e565b611289565b604080519283526020830191909152016101cd565b6102126103f0366004612946565b61137a565b610212610403366004612992565b611483565b610212610416366004612a2b565b6115fd565b6101e96104293660046124ba565b60006020819052908152604090205481565b6013818154811061044b57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260156020908152604080832084845290915281205481906104c39060601c63ffffffff1690565b63ffffffff16905060005b60108110156105b057816001166001036105565773ffffffffffffffffffffffffffffffffffffffff851660009081526014602090815260408083208784529091529020816010811061052357610523612a67565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610597565b826003826010811061056a5761056a612a67565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c90806105a881612ac5565b9150506104ce565b505092915050565b60006105c48a8a610480565b90506105e786868360208b01356105e26105dd8d612afd565b611777565b6117b7565b8015610605575061060583838360208801356105e26105dd8a612afd565b61063b576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106519190612bcc565b604051602081830303815290604052805190602001201461069e576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360200135876020013560016106b49190612c0a565b146106eb576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610733886106f98680612c22565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061181892505050565b61073c88611973565b8360400135886040516020016107529190612bcc565b604051602081830303815290604052805190602001200361079f576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161081460106002612da9565b61081e9190612db5565b81565b600061082d868661220f565b905061083a836008612c0a565b8211806108475750602083115b1561087e576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b6003816010811061090657600080fd5b0154905081565b6017602052826000526040600020602052816000526040600020818154811061093557600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b606081156109805761097986866122bc565b90506109ba565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208a845290915280822081516102008101928390529160109082845b8154815260200190600101908083116109e75750503360009081526015602090815260408083208f8452909152902054939450610a2992508391506123459050565b63ffffffff16600003610a68576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a728160c01c90565b67ffffffffffffffff1615610ab3576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ac58260a01c63ffffffff1690565b67ffffffffffffffff1690506000610ae38360401c63ffffffff1690565b63ffffffff169050600882108015610af9575080155b15610b80576000610b108460801c63ffffffff1690565b905060008160c01b6000528b356008528351905080601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008f8152602001908152602001600020819055505050610c35565b60088210158015610b9e575080610b98600884612db5565b92508210155b8015610bb25750610baf8982612c0a565b82105b15610c35576000610bc38284612db5565b905089610bd1826020612c0a565b10158015610bdd575086155b15610c14576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208f84529091529020908b013590555b6000610c478460601c63ffffffff1690565b63ffffffff169050855160208701608882048a1415608883061715610c74576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610d24578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8d013560a883015260c882206001860195508560005b610200811015610d19576001821615610cf95782818d0152610d19565b8b81015160009081526020938452604090209260019290921c9101610cdc565b505050608801610c81565b50505050600160106002610d389190612da9565b610d429190612db5565b811115610d7b576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208f84529091529020610da190866010612430565b503360009081526017602090815260408083208f845282528220805460018101825590835291206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055610e55610e03838c612c0a565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8716171790565b93508615610e805777ffffffffffffffffffffffffffffffffffffffffffffffff84164260c01b1793505b50503360009081526015602090815260408083209c83529b905299909920555050505050505050565b60146020528260005260406000206020528160005260406000208160108110610ed157600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff811615610f4e576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62015180610f5c8260c01c90565b610f709067ffffffffffffffff1642612db5565b11610fa7576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610fb38b8b610480565b9050610fcc87878360208c01356105e26105dd8e612afd565b8015610fea5750610fea84848360208901356105e26105dd8b612afd565b611020576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016110369190612bcc565b6040516020818303038152906040528051906020012014611083576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016110999190612c0a565b1415806110cb575060016110b38360601c63ffffffff1690565b6110bd9190612dcc565b63ffffffff16856020013514155b15611102576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111148360801c63ffffffff1690565b63ffffffff1690508061112d8460401c63ffffffff1690565b63ffffffff161461116a576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111788a6106f98880612c22565b6111818a611973565b600061118c8b612351565b905060006111a08560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff16611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461132e816008612c0a565b611339856020612c0a565b10611357578361134a826008612c0a565b6113549190612db5565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156113995763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061148f8686610480565b90506114a883838360208801356105e26105dd8a612afd565b6114de576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208401351561151a576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152261246e565b611530816106f98780612c22565b61153981611973565b84604001358160405160200161154f9190612bcc565b604051602081830303815290604052805190602001200361159c576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b611608816008612df1565b63ffffffff168263ffffffff161061164c576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b600081600001518260200151836040015160405160200161179a93929190612e19565b604051602081830303815290604052805190602001209050919050565b60008160005b601081101561180b578060051b880135600186831c16600181146117f05760008481526020839052604090209350611801565b600082815260208590526040902093505b50506001016117bd565b5090931495945050505050565b608881511461182657600080fd5b60208101602083016118a7565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b17171790506118a18161188c868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b6118b360008383611833565b6118bf60018383611833565b6118cb60028383611833565b6118d760038383611833565b6118e360048383611833565b6118ef60058383611833565b6118fb60068383611833565b61190760078383611833565b61191360088383611833565b61191f60098383611833565b61192b600a8383611833565b611937600b8383611833565b611943600c8383611833565b61194f600d8383611833565b61195b600e8383611833565b611967600f8383611833565b6118a160108383611833565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e001604051602081830303815290604052905060208201602082016120ef565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611b268660011b67ffffffffffffffff1690565b18188584603f1c611b418660011b67ffffffffffffffff1690565b18188584603f1c611b5c8660011b67ffffffffffffffff1690565b181895508483603f1c611b798560011b67ffffffffffffffff1690565b181894508387603f1c611b968960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b611f1681611a69565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c90811890911682526118a1565b6120fb60008284611f0d565b61210760018284611f0d565b61211360028284611f0d565b61211f60038284611f0d565b61212b60048284611f0d565b61213760058284611f0d565b61214360068284611f0d565b61214f60078284611f0d565b61215b60088284611f0d565b61216760098284611f0d565b612173600a8284611f0d565b61217f600b8284611f0d565b61218b600c8284611f0d565b612197600d8284611f0d565b6121a3600e8284611f0d565b6121af600f8284611f0d565b6121bb60108284611f0d565b6121c760118284611f0d565b6121d360128284611f0d565b6121df60138284611f0d565b6121eb60148284611f0d565b6121f760158284611f0d565b61220360168284611f0d565b6118a160178284611f0d565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176122b5818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b606060405190508160208201818101828683376088830680801561231a576088829003850160808582017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01536001845160001a178453865261232c565b60018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60801c63ffffffff1690565b60006123d4565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006123828360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff00006123af8360101b67ffffffffffffffff1690565b1617905060008160201c6123cd8360201b67ffffffffffffffff1690565b1792915050565b608082015160208301906123ec90612358565b612358565b60408201516123fa90612358565b60401b176124126123e760018460059190911b015190565b825160809190911b9061242490612358565b60c01b17179392505050565b826010810192821561245e579160200282015b8281111561245e578251825591602001919060010190612443565b5061246a929150612486565b5090565b604051806020016040528061248161249b565b905290565b5b8082111561246a5760008155600101612487565b6040518061032001604052806019906020820280368337509192915050565b6000602082840312156124cc57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146124f757600080fd5b919050565b6000806040838503121561250f57600080fd5b612518836124d3565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff8111828210171561257957612579612526565b60405290565b6040516060810167ffffffffffffffff8111828210171561257957612579612526565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156125e9576125e9612526565b604052919050565b600061032080838503121561260557600080fd5b604051602080820167ffffffffffffffff838210818311171561262a5761262a612526565b8160405283955087601f88011261264057600080fd5b612648612555565b948701949150818886111561265c57600080fd5b875b8681101561268457803583811681146126775760008081fd5b845292840192840161265e565b50909352509295945050505050565b6000606082840312156126a557600080fd5b50919050565b60008083601f8401126126bd57600080fd5b50813567ffffffffffffffff8111156126d557600080fd5b6020830191508360208260051b85010111156126f057600080fd5b9250929050565b60008060008060008060008060006103e08a8c03121561271657600080fd5b61271f8a6124d3565b985060208a013597506127358b60408c016125f1565b96506103608a013567ffffffffffffffff8082111561275357600080fd5b61275f8d838e01612693565b97506103808c013591508082111561277657600080fd5b6127828d838e016126ab565b90975095506103a08c013591508082111561279c57600080fd5b6127a88d838e01612693565b94506103c08c01359150808211156127bf57600080fd5b506127cc8c828d016126ab565b915080935050809150509295985092959850929598565b600080600080600060a086880312156127fb57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561283157600080fd5b50508035926020909101359150565b60008060006060848603121561285557600080fd5b61285e846124d3565b95602085013595506040909401359392505050565b60008083601f84011261288557600080fd5b50813567ffffffffffffffff81111561289d57600080fd5b6020830191508360208285010111156126f057600080fd5b600080600080600080608087890312156128ce57600080fd5b86359550602087013567ffffffffffffffff808211156128ed57600080fd5b6128f98a838b01612873565b9097509550604089013591508082111561291257600080fd5b5061291f89828a016126ab565b9094509250506060870135801515811461293857600080fd5b809150509295509295509295565b60008060006040848603121561295b57600080fd5b83359250602084013567ffffffffffffffff81111561297957600080fd5b61298586828701612873565b9497909650939450505050565b6000806000806000608086880312156129aa57600080fd5b6129b3866124d3565b945060208601359350604086013567ffffffffffffffff808211156129d757600080fd5b6129e389838a01612693565b945060608801359150808211156129f957600080fd5b50612a06888289016126ab565b969995985093965092949392505050565b803563ffffffff811681146124f757600080fd5b600080600060608486031215612a4057600080fd5b83359250612a5060208501612a17565b9150612a5e60408501612a17565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612af657612af6612a96565b5060010190565b600060608236031215612b0f57600080fd5b612b1761257f565b823567ffffffffffffffff80821115612b2f57600080fd5b9084019036601f830112612b4257600080fd5b8135602082821115612b5657612b56612526565b612b86817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016125a2565b92508183523681838601011115612b9c57600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b6019811015612c0157825167ffffffffffffffff16825260209283019290910190600101612bd8565b50505092915050565b60008219821115612c1d57612c1d612a96565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612c5757600080fd5b83018035915067ffffffffffffffff821115612c7257600080fd5b6020019150368190038213156126f057600080fd5b600181815b80851115612ce057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612cc657612cc6612a96565b80851615612cd357918102915b93841c9390800290612c8c565b509250929050565b600082612cf757506001612da3565b81612d0457506000612da3565b8160018114612d1a5760028114612d2457612d40565b6001915050612da3565b60ff841115612d3557612d35612a96565b50506001821b612da3565b5060208310610133831016604e8410600b8410161715612d63575081810a612da3565b612d6d8383612c87565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612d9f57612d9f612a96565b0290505b92915050565b60006122b58383612ce8565b600082821015612dc757612dc7612a96565b500390565b600063ffffffff83811690831681811015612de957612de9612a96565b039392505050565b600063ffffffff808316818516808303821115612e1057612e10612a96565b01949350505050565b6000845160005b81811015612e3a5760208188018101518583015201612e20565b81811115612e49576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a"
func init() {
......
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
import { PreimageOracle } from "src/cannon/PreimageOracle.sol";
import { Script } from "forge-std/Script.sol";
import { StdAssertions } from "forge-std/StdAssertions.sol";
import "src/cannon/libraries/CannonTypes.sol";
contract SubmitLPP is Script, StdAssertions {
/// @notice Test UUID
uint256 private constant TEST_UUID = uint256(keccak256("TEST_UUID"));
/// @notice Number of bytes to submit to the preimage oracle.
uint256 private constant BYTES_TO_SUBMIT = 4_012_000;
/// @notice Chunk size to submit to the preimage oracle.
uint256 private constant CHUNK_SIZE = 500 * 136;
PreimageOracle private oracle;
function post(address _po) external {
// Bootstrap
oracle = PreimageOracle(_po);
// Allocate chunk - worst case w/ all bits set.
bytes memory chunk = new bytes(CHUNK_SIZE);
for (uint256 i; i < chunk.length; i++) {
chunk[i] = 0xFF;
}
// Mock state commitments. Worst case w/ all bits set.
bytes32[] memory mockStateCommitments = new bytes32[](CHUNK_SIZE / 136);
bytes32[] memory mockStateCommitmentsLast = new bytes32[](CHUNK_SIZE / 136 + 1);
for (uint256 i; i < mockStateCommitments.length; i++) {
mockStateCommitments[i] = bytes32(type(uint256).max);
mockStateCommitmentsLast[i] = bytes32(type(uint256).max);
}
// Assign last mock state commitment to all bits set.
mockStateCommitmentsLast[mockStateCommitmentsLast.length - 1] = bytes32(type(uint256).max);
vm.broadcast();
oracle.initLPP({ _uuid: TEST_UUID, _partOffset: 0, _claimedSize: uint32(BYTES_TO_SUBMIT) });
// Submit LPP in 500 * 136 byte chunks.
for (uint256 i = 0; i < BYTES_TO_SUBMIT; i += CHUNK_SIZE) {
bool finalize = i + CHUNK_SIZE >= BYTES_TO_SUBMIT;
vm.broadcast();
oracle.addLeavesLPP({
_uuid: TEST_UUID,
_input: chunk,
_stateCommitments: finalize ? mockStateCommitmentsLast : mockStateCommitments,
_finalize: finalize
});
}
// Assert that all bytes were submitted.
LPPMetaData metaData = oracle.proposalMetadata(msg.sender, TEST_UUID);
assertEq(metaData.bytesProcessed(), BYTES_TO_SUBMIT);
assertEq(metaData.blocksProcessed(), (BYTES_TO_SUBMIT / 136) + 1);
}
}
#!/bin/bash
# Default Anvil private key
PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"
PUB_KEY="$(cast wallet addr $PRIVATE_KEY)"
# 40 gwei base fee
BASE_FEE=40000000000
# Anvil RPC
export ETH_RPC_URL="http://localhost:8545"
# Start anvil in the background
anvil --base-fee $BASE_FEE &
# Capture the process ID
ANVIL_PID=$!
# Deploy the `PreimageOracle` contract to anvil.
PO_ADDR=$(forge create PreimageOracle --private-key $PRIVATE_KEY --rpc-url $ETH_RPC_URL --json | jq -r '.deployedTo')
# Capture the balance of the submitter prior to submitting all leaves.
BALANCE_BEFORE=$(cast balance --rpc-url http://localhost:8545 "$PUB_KEY")
BASE_FEE_BEFORE=$(cast 2d "$(cast rpc 'eth_gasPrice' | jq -r)")
# Run the `SubmitLPP` script to submit the LPP to the `PreimageOracle` contract.
forge script scripts/fpac/SubmitLPP.sol \
--sig "post(address)" "$PO_ADDR" \
--private-key $PRIVATE_KEY \
--rpc-url $ETH_RPC_URL \
--broadcast
BALANCE_AFTER=$(cast balance "$PUB_KEY")
BASE_FEE_AFTER=$(cast 2d "$(cast rpc 'eth_gasPrice' | jq -r)")
echo "Base Fee Before: $BASE_FEE_BEFORE"
echo "Base Fee After: $BASE_FEE_AFTER"
echo "Balance before: $BALANCE_BEFORE"
echo "Balance after: $BALANCE_AFTER"
echo "Cost: $(cast from-wei $((BALANCE_BEFORE - BALANCE_AFTER))) ETH"
# Kill anvil
kill $ANVIL_PID
......@@ -1096,10 +1096,10 @@
"impact": "Medium",
"confidence": "Medium",
"check": "uninitialized-local",
"description": "PreimageOracle.challengeFirstLPP(address,uint256,PreimageOracle.Leaf,bytes32[]).stateMatrix (src/cannon/PreimageOracle.sol#357) is a local variable never initialized\n",
"description": "PreimageOracle.challengeFirstLPP(address,uint256,PreimageOracle.Leaf,bytes32[]).stateMatrix (src/cannon/PreimageOracle.sol#383) is a local variable never initialized\n",
"type": "variable",
"name": "stateMatrix",
"start": 16305,
"start": 17601,
"length": 40,
"filename_relative": "src/cannon/PreimageOracle.sol"
},
......
......@@ -371,6 +371,59 @@
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "proposalBlocks",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_claimant",
"type": "address"
},
{
"internalType": "uint256",
"name": "_uuid",
"type": "uint256"
}
],
"name": "proposalBlocksLen",
"outputs": [
{
"internalType": "uint256",
"name": "len_",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
......@@ -400,6 +453,19 @@
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proposalCount",
"outputs": [
{
"internalType": "uint256",
"name": "count_",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
......@@ -448,6 +514,30 @@
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "proposals",
"outputs": [
{
"internalType": "address",
"name": "claimant",
"type": "address"
},
{
"internalType": "uint256",
"name": "uuid",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
......
......@@ -29,23 +29,37 @@
},
{
"bytes": "32",
"label": "proposalBranches",
"label": "proposals",
"offset": 0,
"slot": "19",
"type": "struct PreimageOracle.LargePreimageProposalKeys[]"
},
{
"bytes": "32",
"label": "proposalBranches",
"offset": 0,
"slot": "20",
"type": "mapping(address => mapping(uint256 => bytes32[16]))"
},
{
"bytes": "32",
"label": "proposalMetadata",
"offset": 0,
"slot": "20",
"slot": "21",
"type": "mapping(address => mapping(uint256 => LPPMetaData))"
},
{
"bytes": "32",
"label": "proposalParts",
"offset": 0,
"slot": "21",
"slot": "22",
"type": "mapping(address => mapping(uint256 => bytes32))"
},
{
"bytes": "32",
"label": "proposalBlocks",
"offset": 0,
"slot": "23",
"type": "mapping(address => mapping(uint256 => uint64[]))"
}
]
\ No newline at end of file
......@@ -48,9 +48,19 @@ contract PreimageOracle is IPreimageOracle {
bytes32 stateCommitment;
}
/// @notice Unpacked keys for large preimage proposals.
struct LargePreimageProposalKeys {
/// @notice The claimant of the large preimage proposal.
address claimant;
/// @notice The UUID of the large preimage proposal.
uint256 uuid;
}
/// @notice Static padding hashes. These values are persisted in storage, but are entirely immutable
/// after the constructor's execution.
bytes32[KECCAK_TREE_DEPTH] public zeroHashes;
/// @notice Append-only array of large preimage proposals for off-chain reference.
LargePreimageProposalKeys[] public proposals;
/// @notice Mapping of claimants to proposal UUIDs to the current branch path of the merkleization process.
mapping(address => mapping(uint256 => bytes32[KECCAK_TREE_DEPTH])) public proposalBranches;
/// @notice Mapping of claimants to proposal UUIDs to the timestamp of creation of the proposal as well as the
......@@ -58,6 +68,8 @@ contract PreimageOracle is IPreimageOracle {
mapping(address => mapping(uint256 => LPPMetaData)) public proposalMetadata;
/// @notice Mapping of claimants to proposal UUIDs to the preimage part picked up during the absorbtion process.
mapping(address => mapping(uint256 => bytes32)) public proposalParts;
/// @notice Mapping of claimants to proposal UUIDs to blocks which leaves were added to the merkle tree.
mapping(address => mapping(uint256 => uint64[])) public proposalBlocks;
////////////////////////////////////////////////////////////////
// Constructor //
......@@ -170,12 +182,24 @@ contract PreimageOracle is IPreimageOracle {
// Large Preimage Proposals (External) //
////////////////////////////////////////////////////////////////
/// @notice Returns the length of the `proposals` array
function proposalCount() external view returns (uint256 count_) {
count_ = proposals.length;
}
/// @notice Initialize a large preimage proposal. Must be called before adding any leaves.
function initLPP(uint256 _uuid, uint32 _partOffset, uint32 _claimedSize) external {
if (_partOffset >= _claimedSize + 8) revert PartOffsetOOB();
LPPMetaData metaData = proposalMetadata[msg.sender][_uuid];
proposalMetadata[msg.sender][_uuid] = metaData.setPartOffset(_partOffset).setClaimedSize(_claimedSize);
proposals.push(LargePreimageProposalKeys(msg.sender, _uuid));
}
/// @notice Returns the length of the array with the block numbers of `addLeavesLPP` calls for a given large
/// preimage proposal.
function proposalBlocksLen(address _claimant, uint256 _uuid) external view returns (uint256 len_) {
len_ = proposalBlocks[_claimant][_uuid].length;
}
/// @notice Adds a contiguous list of keccak state matrices to the merkle tree.
......@@ -291,6 +315,8 @@ contract PreimageOracle is IPreimageOracle {
// Perist the branch to storage.
proposalBranches[msg.sender][_uuid] = branch;
// Track the block number that these leaves were added at.
proposalBlocks[msg.sender][_uuid].push(uint64(block.number));
// Update the proposal metadata.
metaData =
......
......@@ -227,6 +227,11 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
// Ensure that the proposal keys are present in the array.
(address claimant, uint256 uuid) = oracle.proposals(0);
assertEq(oracle.proposalCount(), 1);
assertEq(claimant, address(this));
assertEq(uuid, TEST_UUID);
// Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix;
......@@ -251,6 +256,9 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
assertEq(metaData.bytesProcessed(), 136 * 2);
assertFalse(metaData.countered());
// Move ahead one block.
vm.roll(block.number + 1);
oracle.addLeavesLPP(TEST_UUID, Bytes.slice(data, 136 * 2, 136), commitmentsB, true);
// MetaData assertions
......@@ -266,6 +274,9 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
bytes32 expectedPart = bytes32((~uint256(0) & ~(uint256(type(uint64).max) << 192)) | (data.length << 192));
assertEq(oracle.proposalParts(address(this), TEST_UUID), expectedPart);
assertEq(oracle.proposalBlocks(address(this), TEST_UUID, 0), block.number - 1);
assertEq(oracle.proposalBlocks(address(this), TEST_UUID, 1), block.number);
// Should revert if we try to add new leaves.
vm.expectRevert(AlreadyFinalized.selector);
oracle.addLeavesLPP(TEST_UUID, data, stateCommitments, true);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment