Commit f0f6aa7c authored by clabby's avatar clabby Committed by GitHub

feat(ctb): Blob preimage type in `PreimageOracle` (#9095)

* Add blob preimage type

* Compute versioned hash correctly

* Version byte bump

* @protolambda review

* @refcell review

* rebase
parent 89ea67df
...@@ -31,7 +31,7 @@ var ( ...@@ -31,7 +31,7 @@ var (
// AlphabetVMMetaData contains all meta data concerning the AlphabetVM contract. // AlphabetVMMetaData contains all meta data concerning the AlphabetVM contract.
var AlphabetVMMetaData = &bind.MetaData{ 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\"}]", 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: "0x60a060405234801561001057600080fd5b506040516138b53803806138b583398101604081905261002f916100a0565b6080819052604051600090819061004590610093565b9182526020820152604001604051809103906000f08015801561006c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100b9565b6132de806105d783390190565b6000602082840312156100b257600080fd5b5051919050565b6080516105046100d3600039600060af01526105046000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063e14ced3214610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610098610093366004610395565b6100a6565b60405190815260200161007c565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b600889896040516100e2929190610409565b6040518091039020901b036101d9576000805473ffffffffffffffffffffffffffffffffffffffff1663e03110e161011b60048861029f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152600060248201526044016040805180830381865afa158015610175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101999190610419565b50640ffffffff0607c82901c169350905063ffffffff608082901c1660006101c38a8c018c61043d565b90506101cf8582610485565b9350505050610206565b6101e58789018961049d565b9092509050816101f4816104bf565b9250508080610202906104bf565b9150505b6040805160208101849052908101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001798975050505050505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617610345818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b60008083601f84011261035e57600080fd5b50813567ffffffffffffffff81111561037657600080fd5b60208301915083602082850101111561038e57600080fd5b9250929050565b6000806000806000606086880312156103ad57600080fd5b853567ffffffffffffffff808211156103c557600080fd5b6103d189838a0161034c565b909750955060208801359150808211156103ea57600080fd5b506103f78882890161034c565b96999598509660400135949350505050565b8183823760009101908152919050565b6000806040838503121561042c57600080fd5b505080516020909101519092909150565b60006020828403121561044f57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561049857610498610456565b500190565b600080604083850312156104b057600080fd5b50508035926020909101359150565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036104f0576104f0610456565b506001019056fea164736f6c634300080f000a60c06040523480156200001157600080fd5b50604051620032de380380620032de8339810160408190526200003491620000f3565b60a0829052608081905260005b6200004f600160106200012e565b811015620000ea57600381601081106200006d576200006d62000148565b01546003826010811062000085576200008562000148565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206003826001620000c091906200015e565b60108110620000d357620000d362000148565b015580620000e18162000179565b91505062000041565b50505062000195565b600080604083850312156200010757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b60008282101562000143576200014362000118565b500390565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000174576200017462000118565b500190565b6000600182016200018e576200018e62000118565b5060010190565b60805160a051613115620001c9600039600081816103db015261175501526000818161044f015261100201526131156000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638dc4be11116100ee578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc1461043a578063f3f480d91461044d578063faf37bc714610473578063fef2b4ed1461048657600080fd5b8063dd24f9bf146103d9578063e03110e1146103ff578063e15926111461042757600080fd5b8063b4801e61116100c8578063b4801e61146103ab578063d18534b5146103be578063da35c664146103d157600080fd5b80638dc4be111461032b5780639d53a6481461033e578063b2e67ba81461038057600080fd5b806361238bde116101505780637ac547671161012a5780637ac54767146102ae5780638542cf50146102c1578063882856ef146102ff57600080fd5b806361238bde146102455780636551927b146102705780637917de1d1461029b57600080fd5b80633909af5c116101815780633909af5c146102155780634d52b4c91461022a57806352f0f3ad1461023257600080fd5b8063013cf08b146101a85780630359a563146101ec5780632055b36b1461020d575b600080fd5b6101bb6101b6366004612758565b6104a6565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b6101ff6101fa36600461279a565b6104eb565b6040519081526020016101e3565b6101ff601081565b610228610223366004612995565b610623565b005b6101ff610871565b6101ff610240366004612a81565b61088c565b6101ff610253366004612abc565b600160209081526000928352604080842090915290825290205481565b6101ff61027e36600461279a565b601560209081526000928352604080842090915290825290205481565b6102286102a9366004612b20565b610961565b6101ff6102bc366004612758565b610def565b6102ef6102cf366004612abc565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101e3565b61031261030d366004612bbc565b610e06565b60405167ffffffffffffffff90911681526020016101e3565b610228610339366004612bef565b610e60565b6101ff61034c36600461279a565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b6101ff61038e36600461279a565b601660209081526000928352604080842090915290825290205481565b6101ff6103b9366004612bbc565b610f5b565b6102286103cc366004612995565b610f8d565b6013546101ff565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b61041261040d366004612abc565b611358565b604080519283526020830191909152016101e3565b610228610435366004612bef565b611449565b610228610448366004612c3b565b611551565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b610228610481366004612cd4565b6116cb565b6101ff610494366004612758565b60006020819052908152604090205481565b601381815481106104b657600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061052e9060601c63ffffffff1690565b63ffffffff16905060005b601081101561061b57816001166001036105c15773ffffffffffffffffffffffffffffffffffffffff851660009081526014602090815260408083208784529091529020816010811061058e5761058e612d10565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610602565b82600382601081106105d5576105d5612d10565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061061381612d6e565b915050610539565b505092915050565b600061062f8a8a6104eb565b905061065286868360208b013561064d6106488d612da6565b6118de565b61191e565b80156106705750610670838383602088013561064d6106488a612da6565b6106a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106bc9190612e75565b6040516020818303038152906040528051906020012014610709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161071f9190612eb3565b14610756576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079e886107648680612ecb565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061197f92505050565b6107a788611ada565b8360400135886040516020016107bd9190612e75565b604051602081830303815290604052805190602001200361080a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161087f60106002613052565b610889919061305e565b81565b60006108988686612376565b90506108a5836008612eb3565b8211806108b25750602083115b156108e9576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b6060811561097a576109738686612423565b90506109b4565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b8154815260200190600101908083116109e157505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610a628260601c63ffffffff1690565b63ffffffff169050333214610aa3576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab38260801c63ffffffff1690565b63ffffffff16600003610af2576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610afc8260c01c90565b67ffffffffffffffff1615610b3d576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610b76576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b8389898d888661249c565b83516020850160888204881415608883061715610ba8576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610c58578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610c4d576001821615610c2d5782818b0152610c4d565b8981015160009081526020938452604090209260019290921c9101610c10565b505050608801610bb5565b50505050600160106002610c6c9190613052565b610c76919061305e565b811115610caf576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d24610cc28360401c63ffffffff1690565b610cd29063ffffffff168a612eb3565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610d4f5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791505b3360009081526014602090815260408083208e84529091529020610d75908460106126ce565b50503360008181526017602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b60038160108110610dff57600080fd5b0154905081565b60176020528260005260406000206020528160005260406000208181548110610e2e57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b604435600080600883018610610e7e5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610eab57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b60146020528260005260406000206020528160005260406000208160108110610f8357600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff811615611000576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061102b8260c01c90565b61103f9067ffffffffffffffff164261305e565b11611076576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110828b8b6104eb565b905061109b87878360208c013561064d6106488e612da6565b80156110b957506110b9848483602089013561064d6106488b612da6565b6110ef576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016111059190612e75565b6040516020818303038152906040528051906020012014611152576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016111689190612eb3565b14158061119a575060016111828360601c63ffffffff1690565b61118c9190613075565b63ffffffff16856020013514155b156111d1576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111e38360801c63ffffffff1690565b63ffffffff169050806111fc8460401c63ffffffff1690565b63ffffffff1614611239576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112478a6107648880612ecb565b6112508a611ada565b600061125b8b6125ef565b9050600061126f8560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166113e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546113fd816008612eb3565b611408856020612eb3565b106114265783611419826008612eb3565b611423919061305e565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106114675763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061155d86866104eb565b9050611576838383602088013561064d6106488a612da6565b6115ac576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156115e8576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115f061270c565b6115fe816107648780612ecb565b61160781611ada565b84604001358160405160200161161d9190612e75565b604051602081830303815290604052805190602001200361166a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b333214611704576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61170f81600861309a565b63ffffffff168263ffffffff1610611753576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff1610156117b3576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b6000816000015182602001518360400151604051602001611901939291906130c2565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611972578060051b880135600186831c16600181146119575760008481526020839052604090209350611968565b600082815260208590526040902093505b5050600101611924565b5090931495945050505050565b608881511461198d57600080fd5b6020810160208301611a0e565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611a08816119f3868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611a1a6000838361199a565b611a266001838361199a565b611a326002838361199a565b611a3e6003838361199a565b611a4a6004838361199a565b611a566005838361199a565b611a626006838361199a565b611a6e6007838361199a565b611a7a6008838361199a565b611a866009838361199a565b611a92600a838361199a565b611a9e600b838361199a565b611aaa600c838361199a565b611ab6600d838361199a565b611ac2600e838361199a565b611ace600f838361199a565b611a086010838361199a565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612256565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611c8d8660011b67ffffffffffffffff1690565b18188584603f1c611ca88660011b67ffffffffffffffff1690565b18188584603f1c611cc38660011b67ffffffffffffffff1690565b181895508483603f1c611ce08560011b67ffffffffffffffff1690565b181894508387603f1c611cfd8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61207d81611bd0565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611a08565b61226260008284612074565b61226e60018284612074565b61227a60028284612074565b61228660038284612074565b61229260048284612074565b61229e60058284612074565b6122aa60068284612074565b6122b660078284612074565b6122c260088284612074565b6122ce60098284612074565b6122da600a8284612074565b6122e6600b8284612074565b6122f2600c8284612074565b6122fe600d8284612074565b61230a600e8284612074565b612316600f8284612074565b61232260108284612074565b61232e60118284612074565b61233a60128284612074565b61234660138284612074565b61235260148284612074565b61235e60158284612074565b61236a60168284612074565b611a0860178284612074565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83161761241c818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b606060405190508160208201818101828683376088830680801561246c5760888290038501848101848103803687375060806001820353506001845160001a1784538652612483565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006124ae8260a01c63ffffffff1690565b67ffffffffffffffff16905060006124cc8360801c63ffffffff1690565b63ffffffff16905060006124e68460401c63ffffffff1690565b63ffffffff1690506008831080156124fc575080155b156125305760c082901b6000908152883560085283513382526016602090815260408084208a8552909152909120556125e5565b6008831015801561254e57508061254860088561305e565b93508310155b8015612562575061255f8782612eb3565b83105b156125e5576000612573828561305e565b905087612581826020612eb3565b1015801561258d575085155b156125c4576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208a845290915290209089013590555b5050505050505050565b6000612672565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006126208360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff000061264d8360101b67ffffffffffffffff1690565b1617905060008160201c61266b8360201b67ffffffffffffffff1690565b1792915050565b6080820151602083019061268a906125f6565b6125f6565b6040820151612698906125f6565b60401b176126b061268560018460059190911b015190565b825160809190911b906126c2906125f6565b60c01b17179392505050565b82601081019282156126fc579160200282015b828111156126fc5782518255916020019190600101906126e1565b50612708929150612724565b5090565b604051806020016040528061271f612739565b905290565b5b808211156127085760008155600101612725565b6040518061032001604052806019906020820280368337509192915050565b60006020828403121561276a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461279557600080fd5b919050565b600080604083850312156127ad57600080fd5b6127b683612771565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612817576128176127c4565b60405290565b6040516060810167ffffffffffffffff81118282101715612817576128176127c4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612887576128876127c4565b604052919050565b60006103208083850312156128a357600080fd5b604051602080820167ffffffffffffffff83821081831117156128c8576128c86127c4565b8160405283955087601f8801126128de57600080fd5b6128e66127f3565b94870194915081888611156128fa57600080fd5b875b8681101561292257803583811681146129155760008081fd5b84529284019284016128fc565b50909352509295945050505050565b60006060828403121561294357600080fd5b50919050565b60008083601f84011261295b57600080fd5b50813567ffffffffffffffff81111561297357600080fd5b6020830191508360208260051b850101111561298e57600080fd5b9250929050565b60008060008060008060008060006103e08a8c0312156129b457600080fd5b6129bd8a612771565b985060208a013597506129d38b60408c0161288f565b96506103608a013567ffffffffffffffff808211156129f157600080fd5b6129fd8d838e01612931565b97506103808c0135915080821115612a1457600080fd5b612a208d838e01612949565b90975095506103a08c0135915080821115612a3a57600080fd5b612a468d838e01612931565b94506103c08c0135915080821115612a5d57600080fd5b50612a6a8c828d01612949565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612a9957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612acf57600080fd5b50508035926020909101359150565b60008083601f840112612af057600080fd5b50813567ffffffffffffffff811115612b0857600080fd5b60208301915083602082850101111561298e57600080fd5b600080600080600080600060a0888a031215612b3b57600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612b6157600080fd5b612b6d8b838c01612ade565b909750955060608a0135915080821115612b8657600080fd5b50612b938a828b01612949565b90945092505060808801358015158114612bac57600080fd5b8091505092959891949750929550565b600080600060608486031215612bd157600080fd5b612bda84612771565b95602085013595506040909401359392505050565b600080600060408486031215612c0457600080fd5b83359250602084013567ffffffffffffffff811115612c2257600080fd5b612c2e86828701612ade565b9497909650939450505050565b600080600080600060808688031215612c5357600080fd5b612c5c86612771565b945060208601359350604086013567ffffffffffffffff80821115612c8057600080fd5b612c8c89838a01612931565b94506060880135915080821115612ca257600080fd5b50612caf88828901612949565b969995985093965092949392505050565b803563ffffffff8116811461279557600080fd5b600080600060608486031215612ce957600080fd5b83359250612cf960208501612cc0565b9150612d0760408501612cc0565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d9f57612d9f612d3f565b5060010190565b600060608236031215612db857600080fd5b612dc061281d565b823567ffffffffffffffff80821115612dd857600080fd5b9084019036601f830112612deb57600080fd5b8135602082821115612dff57612dff6127c4565b612e2f817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612840565b92508183523681838601011115612e4557600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b6019811015612eaa57825167ffffffffffffffff16825260209283019290910190600101612e81565b50505092915050565b60008219821115612ec657612ec6612d3f565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612f0057600080fd5b83018035915067ffffffffffffffff821115612f1b57600080fd5b60200191503681900382131561298e57600080fd5b600181815b80851115612f8957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612f6f57612f6f612d3f565b80851615612f7c57918102915b93841c9390800290612f35565b509250929050565b600082612fa05750600161304c565b81612fad5750600061304c565b8160018114612fc35760028114612fcd57612fe9565b600191505061304c565b60ff841115612fde57612fde612d3f565b50506001821b61304c565b5060208310610133831016604e8410600b841016171561300c575081810a61304c565b6130168383612f30565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561304857613048612d3f565b0290505b92915050565b600061241c8383612f91565b60008282101561307057613070612d3f565b500390565b600063ffffffff8381169083168181101561309257613092612d3f565b039392505050565b600063ffffffff8083168185168083038211156130b9576130b9612d3f565b01949350505050565b6000845160005b818110156130e357602081880181015185830152016130c9565b818111156130f2576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a", Bin: "0x60a060405234801561001057600080fd5b50604051613b16380380613b1683398101604081905261002f916100a0565b6080819052604051600090819061004590610093565b9182526020820152604001604051809103906000f08015801561006c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100b9565b61353f806105d783390190565b6000602082840312156100b257600080fd5b5051919050565b6080516105046100d3600039600060af01526105046000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063e14ced3214610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610098610093366004610395565b6100a6565b60405190815260200161007c565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b600889896040516100e2929190610409565b6040518091039020901b036101d9576000805473ffffffffffffffffffffffffffffffffffffffff1663e03110e161011b60048861029f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152600060248201526044016040805180830381865afa158015610175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101999190610419565b50640ffffffff0607c82901c169350905063ffffffff608082901c1660006101c38a8c018c61043d565b90506101cf8582610485565b9350505050610206565b6101e58789018961049d565b9092509050816101f4816104bf565b9250508080610202906104bf565b9150505b6040805160208101849052908101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001798975050505050505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617610345818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b60008083601f84011261035e57600080fd5b50813567ffffffffffffffff81111561037657600080fd5b60208301915083602082850101111561038e57600080fd5b9250929050565b6000806000806000606086880312156103ad57600080fd5b853567ffffffffffffffff808211156103c557600080fd5b6103d189838a0161034c565b909750955060208801359150808211156103ea57600080fd5b506103f78882890161034c565b96999598509660400135949350505050565b8183823760009101908152919050565b6000806040838503121561042c57600080fd5b505080516020909101519092909150565b60006020828403121561044f57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561049857610498610456565b500190565b600080604083850312156104b057600080fd5b50508035926020909101359150565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036104f0576104f0610456565b506001019056fea164736f6c634300080f000a60c06040523480156200001157600080fd5b506040516200353f3803806200353f8339810160408190526200003491620000f3565b60a0829052608081905260005b6200004f600160106200012e565b811015620000ea57600381601081106200006d576200006d62000148565b01546003826010811062000085576200008562000148565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206003826001620000c091906200015e565b60108110620000d357620000d362000148565b015580620000e18162000179565b91505062000041565b50505062000195565b600080604083850312156200010757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b60008282101562000143576200014362000118565b500390565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000174576200017462000118565b500190565b6000600182016200018e576200018e62000118565b5060010190565b60805160a051613376620001c9600039600081816103f9015261192a01526000818161046d01526111d701526133766000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639d53a648116100ee578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc14610458578063f3f480d91461046b578063faf37bc714610491578063fef2b4ed146104a457600080fd5b8063dd24f9bf146103f7578063e03110e11461041d578063e15926111461044557600080fd5b8063b4801e61116100c8578063b4801e61146103c9578063d18534b5146103dc578063da35c664146103ef57600080fd5b80639d53a648146103495780639d7e87691461038b578063b2e67ba81461039e57600080fd5b806361238bde1161015b5780637ac54767116101355780637ac54767146102b95780638542cf50146102cc578063882856ef1461030a5780638dc4be111461033657600080fd5b806361238bde146102505780636551927b1461027b5780637917de1d146102a657600080fd5b80633909af5c1161018c5780633909af5c146102205780634d52b4c91461023557806352f0f3ad1461023d57600080fd5b8063013cf08b146101b35780630359a563146101f75780632055b36b14610218575b600080fd5b6101c66101c136600461292d565b6104c4565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b61020a61020536600461296f565b610509565b6040519081526020016101ee565b61020a601081565b61023361022e366004612b6a565b610641565b005b61020a61088f565b61020a61024b366004612c56565b6108aa565b61020a61025e366004612c91565b600160209081526000928352604080842090915290825290205481565b61020a61028936600461296f565b601560209081526000928352604080842090915290825290205481565b6102336102b4366004612cf5565b61097f565b61020a6102c736600461292d565b610e0d565b6102fa6102da366004612c91565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101ee565b61031d610318366004612d91565b610e24565b60405167ffffffffffffffff90911681526020016101ee565b610233610344366004612dc4565b610e7e565b61020a61035736600461296f565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b610233610399366004612e10565b610f79565b61020a6103ac36600461296f565b601660209081526000928352604080842090915290825290205481565b61020a6103d7366004612d91565b611130565b6102336103ea366004612b6a565b611162565b60135461020a565b7f000000000000000000000000000000000000000000000000000000000000000061020a565b61043061042b366004612c91565b61152d565b604080519283526020830191909152016101ee565b610233610453366004612dc4565b61161e565b610233610466366004612e9c565b611726565b7f000000000000000000000000000000000000000000000000000000000000000061020a565b61023361049f366004612f35565b6118a0565b61020a6104b236600461292d565b60006020819052908152604090205481565b601381815481106104d457600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061054c9060601c63ffffffff1690565b63ffffffff16905060005b601081101561063957816001166001036105df5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106105ac576105ac612f71565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610620565b82600382601081106105f3576105f3612f71565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061063181612fcf565b915050610557565b505092915050565b600061064d8a8a610509565b905061067086868360208b013561066b6106668d613007565b611ab3565b611af3565b801561068e575061068e838383602088013561066b6106668a613007565b6106c4576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106da91906130d6565b6040516020818303038152906040528051906020012014610727576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161073d9190613114565b14610774576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107bc88610782868061312c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b5492505050565b6107c588611caf565b8360400135886040516020016107db91906130d6565b6040516020818303038152906040528051906020012003610828576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161089d601060026132b3565b6108a791906132bf565b81565b60006108b6868661254b565b90506108c3836008613114565b8211806108d05750602083115b15610907576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b606081156109985761099186866125f8565b90506109d2565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b8154815260200190600101908083116109ff57505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610a808260601c63ffffffff1690565b63ffffffff169050333214610ac1576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad18260801c63ffffffff1690565b63ffffffff16600003610b10576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b1a8260c01c90565b67ffffffffffffffff1615610b5b576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610b94576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba189898d8886612671565b83516020850160888204881415608883061715610bc6576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610c76578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610c6b576001821615610c4b5782818b0152610c6b565b8981015160009081526020938452604090209260019290921c9101610c2e565b505050608801610bd3565b50505050600160106002610c8a91906132b3565b610c9491906132bf565b811115610ccd576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d42610ce08360401c63ffffffff1690565b610cf09063ffffffff168a613114565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610d6d5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791505b3360009081526014602090815260408083208e84529091529020610d93908460106128a3565b50503360008181526017602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b60038160108110610e1d57600080fd5b0154905081565b60176020528260005260406000206020528160005260406000208181548110610e4c57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b604435600080600883018610610e9c5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610ec957600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b600080603087600037602060006030600060025afa80610fa15763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa925082611023576309bde3396000526004601cfd5b602886106110395763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b6014602052826000526040600020602052816000526040600020816010811061115857600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156111d5576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006112008260c01c90565b6112149067ffffffffffffffff16426132bf565b1161124b576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112578b8b610509565b905061127087878360208c013561066b6106668e613007565b801561128e575061128e848483602089013561066b6106668b613007565b6112c4576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016112da91906130d6565b6040516020818303038152906040528051906020012014611327576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84602001358860200135600161133d9190613114565b14158061136f575060016113578360601c63ffffffff1690565b61136191906132d6565b63ffffffff16856020013514155b156113a6576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113b88360801c63ffffffff1690565b63ffffffff169050806113d18460401c63ffffffff1690565b63ffffffff161461140e576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61141c8a610782888061312c565b6114258a611caf565b60006114308b6127c4565b905060006114448560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166115b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546115d2816008613114565b6115dd856020613114565b106115fb57836115ee826008613114565b6115f891906132bf565b91505b506000938452600160209081526040808620948652939052919092205492909150565b60443560008060088301861061163c5763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b60006117328686610509565b905061174b838383602088013561066b6106668a613007565b611781576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156117bd576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117c56128e1565b6117d381610782878061312c565b6117dc81611caf565b8460400135816040516020016117f291906130d6565b604051602081830303815290604052805190602001200361183f576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b3332146118d9576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e48160086132fb565b63ffffffff168263ffffffff1610611928576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff161015611988576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b6000816000015182602001518360400151604051602001611ad693929190613323565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611b47578060051b880135600186831c1660018114611b2c5760008481526020839052604090209350611b3d565b600082815260208590526040902093505b5050600101611af9565b5090931495945050505050565b6088815114611b6257600080fd5b6020810160208301611be3565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611bdd81611bc8868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611bef60008383611b6f565b611bfb60018383611b6f565b611c0760028383611b6f565b611c1360038383611b6f565b611c1f60048383611b6f565b611c2b60058383611b6f565b611c3760068383611b6f565b611c4360078383611b6f565b611c4f60088383611b6f565b611c5b60098383611b6f565b611c67600a8383611b6f565b611c73600b8383611b6f565b611c7f600c8383611b6f565b611c8b600d8383611b6f565b611c97600e8383611b6f565b611ca3600f8383611b6f565b611bdd60108383611b6f565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e0016040516020818303038152906040529050602082016020820161242b565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611e628660011b67ffffffffffffffff1690565b18188584603f1c611e7d8660011b67ffffffffffffffff1690565b18188584603f1c611e988660011b67ffffffffffffffff1690565b181895508483603f1c611eb58560011b67ffffffffffffffff1690565b181894508387603f1c611ed28960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61225281611da5565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611bdd565b61243760008284612249565b61244360018284612249565b61244f60028284612249565b61245b60038284612249565b61246760048284612249565b61247360058284612249565b61247f60068284612249565b61248b60078284612249565b61249760088284612249565b6124a360098284612249565b6124af600a8284612249565b6124bb600b8284612249565b6124c7600c8284612249565b6124d3600d8284612249565b6124df600e8284612249565b6124eb600f8284612249565b6124f760108284612249565b61250360118284612249565b61250f60128284612249565b61251b60138284612249565b61252760148284612249565b61253360158284612249565b61253f60168284612249565b611bdd60178284612249565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176125f1818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b60606040519050816020820181810182868337608883068080156126415760888290038501848101848103803687375060806001820353506001845160001a1784538652612658565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006126838260a01c63ffffffff1690565b67ffffffffffffffff16905060006126a18360801c63ffffffff1690565b63ffffffff16905060006126bb8460401c63ffffffff1690565b63ffffffff1690506008831080156126d1575080155b156127055760c082901b6000908152883560085283513382526016602090815260408084208a8552909152909120556127ba565b6008831015801561272357508061271d6008856132bf565b93508310155b801561273757506127348782613114565b83105b156127ba57600061274882856132bf565b905087612756826020613114565b10158015612762575085155b15612799576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208a845290915290209089013590555b5050505050505050565b6000612847565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006127f58360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff00006128228360101b67ffffffffffffffff1690565b1617905060008160201c6128408360201b67ffffffffffffffff1690565b1792915050565b6080820151602083019061285f906127cb565b6127cb565b604082015161286d906127cb565b60401b1761288561285a60018460059190911b015190565b825160809190911b90612897906127cb565b60c01b17179392505050565b82601081019282156128d1579160200282015b828111156128d15782518255916020019190600101906128b6565b506128dd9291506128f9565b5090565b60405180602001604052806128f461290e565b905290565b5b808211156128dd57600081556001016128fa565b6040518061032001604052806019906020820280368337509192915050565b60006020828403121561293f57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461296a57600080fd5b919050565b6000806040838503121561298257600080fd5b61298b83612946565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff811182821017156129ec576129ec612999565b60405290565b6040516060810167ffffffffffffffff811182821017156129ec576129ec612999565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612a5c57612a5c612999565b604052919050565b6000610320808385031215612a7857600080fd5b604051602080820167ffffffffffffffff8382108183111715612a9d57612a9d612999565b8160405283955087601f880112612ab357600080fd5b612abb6129c8565b9487019491508188861115612acf57600080fd5b875b86811015612af75780358381168114612aea5760008081fd5b8452928401928401612ad1565b50909352509295945050505050565b600060608284031215612b1857600080fd5b50919050565b60008083601f840112612b3057600080fd5b50813567ffffffffffffffff811115612b4857600080fd5b6020830191508360208260051b8501011115612b6357600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612b8957600080fd5b612b928a612946565b985060208a01359750612ba88b60408c01612a64565b96506103608a013567ffffffffffffffff80821115612bc657600080fd5b612bd28d838e01612b06565b97506103808c0135915080821115612be957600080fd5b612bf58d838e01612b1e565b90975095506103a08c0135915080821115612c0f57600080fd5b612c1b8d838e01612b06565b94506103c08c0135915080821115612c3257600080fd5b50612c3f8c828d01612b1e565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612c6e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612ca457600080fd5b50508035926020909101359150565b60008083601f840112612cc557600080fd5b50813567ffffffffffffffff811115612cdd57600080fd5b602083019150836020828501011115612b6357600080fd5b600080600080600080600060a0888a031215612d1057600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612d3657600080fd5b612d428b838c01612cb3565b909750955060608a0135915080821115612d5b57600080fd5b50612d688a828b01612b1e565b90945092505060808801358015158114612d8157600080fd5b8091505092959891949750929550565b600080600060608486031215612da657600080fd5b612daf84612946565b95602085013595506040909401359392505050565b600080600060408486031215612dd957600080fd5b83359250602084013567ffffffffffffffff811115612df757600080fd5b612e0386828701612cb3565b9497909650939450505050565b600080600080600080600060a0888a031215612e2b57600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612e5157600080fd5b612e5d8b838c01612cb3565b909750955060608a0135915080821115612e7657600080fd5b50612e838a828b01612cb3565b989b979a50959894979596608090950135949350505050565b600080600080600060808688031215612eb457600080fd5b612ebd86612946565b945060208601359350604086013567ffffffffffffffff80821115612ee157600080fd5b612eed89838a01612b06565b94506060880135915080821115612f0357600080fd5b50612f1088828901612b1e565b969995985093965092949392505050565b803563ffffffff8116811461296a57600080fd5b600080600060608486031215612f4a57600080fd5b83359250612f5a60208501612f21565b9150612f6860408501612f21565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361300057613000612fa0565b5060010190565b60006060823603121561301957600080fd5b6130216129f2565b823567ffffffffffffffff8082111561303957600080fd5b9084019036601f83011261304c57600080fd5b813560208282111561306057613060612999565b613090817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612a15565b925081835236818386010111156130a657600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561310b57825167ffffffffffffffff168252602092830192909101906001016130e2565b50505092915050565b6000821982111561312757613127612fa0565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261316157600080fd5b83018035915067ffffffffffffffff82111561317c57600080fd5b602001915036819003821315612b6357600080fd5b600181815b808511156131ea57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156131d0576131d0612fa0565b808516156131dd57918102915b93841c9390800290613196565b509250929050565b600082613201575060016132ad565b8161320e575060006132ad565b8160018114613224576002811461322e5761324a565b60019150506132ad565b60ff84111561323f5761323f612fa0565b50506001821b6132ad565b5060208310610133831016604e8410600b841016171561326d575081810a6132ad565b6132778383613191565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156132a9576132a9612fa0565b0290505b92915050565b60006125f183836131f2565b6000828210156132d1576132d1612fa0565b500390565b600063ffffffff838116908316818110156132f3576132f3612fa0565b039392505050565b600063ffffffff80831681851680830382111561331a5761331a612fa0565b01949350505050565b6000845160005b81811015613344576020818801810151858301520161332a565b81811115613353576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a",
} }
// AlphabetVMABI is the input ABI used to generate the binding from. // AlphabetVMABI is the input ABI used to generate the binding from.
......
...@@ -42,8 +42,8 @@ type PreimageOracleLeaf struct { ...@@ -42,8 +42,8 @@ type PreimageOracleLeaf struct {
// PreimageOracleMetaData contains all meta data concerning the PreimageOracle contract. // PreimageOracleMetaData contains all meta data concerning the PreimageOracle contract.
var PreimageOracleMetaData = &bind.MetaData{ var PreimageOracleMetaData = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_minProposalSize\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_challengePeriod\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"_inputStartBlock\",\"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\":\"challengePeriod\",\"inputs\":[],\"outputs\":[{\"name\":\"challengePeriod_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"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\":\"loadSha256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"minProposalSize\",\"inputs\":[],\"outputs\":[{\"name\":\"minProposalSize_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"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\":\"NotEOA\",\"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\":[]},{\"type\":\"error\",\"name\":\"WrongStartingBlock\",\"inputs\":[]}]", ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_minProposalSize\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_challengePeriod\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"_inputStartBlock\",\"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\":\"challengePeriod\",\"inputs\":[],\"outputs\":[{\"name\":\"challengePeriod_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"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\":\"loadBlobPreimagePart\",\"inputs\":[{\"name\":\"_z\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_y\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_commitment\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"loadSha256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"minProposalSize\",\"inputs\":[],\"outputs\":[{\"name\":\"minProposalSize_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"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\":\"NotEOA\",\"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\":[]},{\"type\":\"error\",\"name\":\"WrongStartingBlock\",\"inputs\":[]}]",
Bin: "0x60c06040523480156200001157600080fd5b50604051620032de380380620032de8339810160408190526200003491620000f3565b60a0829052608081905260005b6200004f600160106200012e565b811015620000ea57600381601081106200006d576200006d62000148565b01546003826010811062000085576200008562000148565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206003826001620000c091906200015e565b60108110620000d357620000d362000148565b015580620000e18162000179565b91505062000041565b50505062000195565b600080604083850312156200010757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b60008282101562000143576200014362000118565b500390565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000174576200017462000118565b500190565b6000600182016200018e576200018e62000118565b5060010190565b60805160a051613115620001c9600039600081816103db015261175501526000818161044f015261100201526131156000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638dc4be11116100ee578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc1461043a578063f3f480d91461044d578063faf37bc714610473578063fef2b4ed1461048657600080fd5b8063dd24f9bf146103d9578063e03110e1146103ff578063e15926111461042757600080fd5b8063b4801e61116100c8578063b4801e61146103ab578063d18534b5146103be578063da35c664146103d157600080fd5b80638dc4be111461032b5780639d53a6481461033e578063b2e67ba81461038057600080fd5b806361238bde116101505780637ac547671161012a5780637ac54767146102ae5780638542cf50146102c1578063882856ef146102ff57600080fd5b806361238bde146102455780636551927b146102705780637917de1d1461029b57600080fd5b80633909af5c116101815780633909af5c146102155780634d52b4c91461022a57806352f0f3ad1461023257600080fd5b8063013cf08b146101a85780630359a563146101ec5780632055b36b1461020d575b600080fd5b6101bb6101b6366004612758565b6104a6565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b6101ff6101fa36600461279a565b6104eb565b6040519081526020016101e3565b6101ff601081565b610228610223366004612995565b610623565b005b6101ff610871565b6101ff610240366004612a81565b61088c565b6101ff610253366004612abc565b600160209081526000928352604080842090915290825290205481565b6101ff61027e36600461279a565b601560209081526000928352604080842090915290825290205481565b6102286102a9366004612b20565b610961565b6101ff6102bc366004612758565b610def565b6102ef6102cf366004612abc565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101e3565b61031261030d366004612bbc565b610e06565b60405167ffffffffffffffff90911681526020016101e3565b610228610339366004612bef565b610e60565b6101ff61034c36600461279a565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b6101ff61038e36600461279a565b601660209081526000928352604080842090915290825290205481565b6101ff6103b9366004612bbc565b610f5b565b6102286103cc366004612995565b610f8d565b6013546101ff565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b61041261040d366004612abc565b611358565b604080519283526020830191909152016101e3565b610228610435366004612bef565b611449565b610228610448366004612c3b565b611551565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b610228610481366004612cd4565b6116cb565b6101ff610494366004612758565b60006020819052908152604090205481565b601381815481106104b657600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061052e9060601c63ffffffff1690565b63ffffffff16905060005b601081101561061b57816001166001036105c15773ffffffffffffffffffffffffffffffffffffffff851660009081526014602090815260408083208784529091529020816010811061058e5761058e612d10565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610602565b82600382601081106105d5576105d5612d10565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061061381612d6e565b915050610539565b505092915050565b600061062f8a8a6104eb565b905061065286868360208b013561064d6106488d612da6565b6118de565b61191e565b80156106705750610670838383602088013561064d6106488a612da6565b6106a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106bc9190612e75565b6040516020818303038152906040528051906020012014610709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161071f9190612eb3565b14610756576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079e886107648680612ecb565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061197f92505050565b6107a788611ada565b8360400135886040516020016107bd9190612e75565b604051602081830303815290604052805190602001200361080a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161087f60106002613052565b610889919061305e565b81565b60006108988686612376565b90506108a5836008612eb3565b8211806108b25750602083115b156108e9576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b6060811561097a576109738686612423565b90506109b4565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b8154815260200190600101908083116109e157505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610a628260601c63ffffffff1690565b63ffffffff169050333214610aa3576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab38260801c63ffffffff1690565b63ffffffff16600003610af2576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610afc8260c01c90565b67ffffffffffffffff1615610b3d576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610b76576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b8389898d888661249c565b83516020850160888204881415608883061715610ba8576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610c58578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610c4d576001821615610c2d5782818b0152610c4d565b8981015160009081526020938452604090209260019290921c9101610c10565b505050608801610bb5565b50505050600160106002610c6c9190613052565b610c76919061305e565b811115610caf576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d24610cc28360401c63ffffffff1690565b610cd29063ffffffff168a612eb3565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610d4f5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791505b3360009081526014602090815260408083208e84529091529020610d75908460106126ce565b50503360008181526017602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b60038160108110610dff57600080fd5b0154905081565b60176020528260005260406000206020528160005260406000208181548110610e2e57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b604435600080600883018610610e7e5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610eab57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b60146020528260005260406000206020528160005260406000208160108110610f8357600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff811615611000576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061102b8260c01c90565b61103f9067ffffffffffffffff164261305e565b11611076576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110828b8b6104eb565b905061109b87878360208c013561064d6106488e612da6565b80156110b957506110b9848483602089013561064d6106488b612da6565b6110ef576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016111059190612e75565b6040516020818303038152906040528051906020012014611152576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016111689190612eb3565b14158061119a575060016111828360601c63ffffffff1690565b61118c9190613075565b63ffffffff16856020013514155b156111d1576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111e38360801c63ffffffff1690565b63ffffffff169050806111fc8460401c63ffffffff1690565b63ffffffff1614611239576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112478a6107648880612ecb565b6112508a611ada565b600061125b8b6125ef565b9050600061126f8560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166113e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546113fd816008612eb3565b611408856020612eb3565b106114265783611419826008612eb3565b611423919061305e565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106114675763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061155d86866104eb565b9050611576838383602088013561064d6106488a612da6565b6115ac576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156115e8576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115f061270c565b6115fe816107648780612ecb565b61160781611ada565b84604001358160405160200161161d9190612e75565b604051602081830303815290604052805190602001200361166a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b333214611704576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61170f81600861309a565b63ffffffff168263ffffffff1610611753576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff1610156117b3576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b6000816000015182602001518360400151604051602001611901939291906130c2565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611972578060051b880135600186831c16600181146119575760008481526020839052604090209350611968565b600082815260208590526040902093505b5050600101611924565b5090931495945050505050565b608881511461198d57600080fd5b6020810160208301611a0e565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611a08816119f3868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611a1a6000838361199a565b611a266001838361199a565b611a326002838361199a565b611a3e6003838361199a565b611a4a6004838361199a565b611a566005838361199a565b611a626006838361199a565b611a6e6007838361199a565b611a7a6008838361199a565b611a866009838361199a565b611a92600a838361199a565b611a9e600b838361199a565b611aaa600c838361199a565b611ab6600d838361199a565b611ac2600e838361199a565b611ace600f838361199a565b611a086010838361199a565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612256565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611c8d8660011b67ffffffffffffffff1690565b18188584603f1c611ca88660011b67ffffffffffffffff1690565b18188584603f1c611cc38660011b67ffffffffffffffff1690565b181895508483603f1c611ce08560011b67ffffffffffffffff1690565b181894508387603f1c611cfd8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61207d81611bd0565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611a08565b61226260008284612074565b61226e60018284612074565b61227a60028284612074565b61228660038284612074565b61229260048284612074565b61229e60058284612074565b6122aa60068284612074565b6122b660078284612074565b6122c260088284612074565b6122ce60098284612074565b6122da600a8284612074565b6122e6600b8284612074565b6122f2600c8284612074565b6122fe600d8284612074565b61230a600e8284612074565b612316600f8284612074565b61232260108284612074565b61232e60118284612074565b61233a60128284612074565b61234660138284612074565b61235260148284612074565b61235e60158284612074565b61236a60168284612074565b611a0860178284612074565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83161761241c818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b606060405190508160208201818101828683376088830680801561246c5760888290038501848101848103803687375060806001820353506001845160001a1784538652612483565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006124ae8260a01c63ffffffff1690565b67ffffffffffffffff16905060006124cc8360801c63ffffffff1690565b63ffffffff16905060006124e68460401c63ffffffff1690565b63ffffffff1690506008831080156124fc575080155b156125305760c082901b6000908152883560085283513382526016602090815260408084208a8552909152909120556125e5565b6008831015801561254e57508061254860088561305e565b93508310155b8015612562575061255f8782612eb3565b83105b156125e5576000612573828561305e565b905087612581826020612eb3565b1015801561258d575085155b156125c4576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208a845290915290209089013590555b5050505050505050565b6000612672565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006126208360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff000061264d8360101b67ffffffffffffffff1690565b1617905060008160201c61266b8360201b67ffffffffffffffff1690565b1792915050565b6080820151602083019061268a906125f6565b6125f6565b6040820151612698906125f6565b60401b176126b061268560018460059190911b015190565b825160809190911b906126c2906125f6565b60c01b17179392505050565b82601081019282156126fc579160200282015b828111156126fc5782518255916020019190600101906126e1565b50612708929150612724565b5090565b604051806020016040528061271f612739565b905290565b5b808211156127085760008155600101612725565b6040518061032001604052806019906020820280368337509192915050565b60006020828403121561276a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461279557600080fd5b919050565b600080604083850312156127ad57600080fd5b6127b683612771565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612817576128176127c4565b60405290565b6040516060810167ffffffffffffffff81118282101715612817576128176127c4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612887576128876127c4565b604052919050565b60006103208083850312156128a357600080fd5b604051602080820167ffffffffffffffff83821081831117156128c8576128c86127c4565b8160405283955087601f8801126128de57600080fd5b6128e66127f3565b94870194915081888611156128fa57600080fd5b875b8681101561292257803583811681146129155760008081fd5b84529284019284016128fc565b50909352509295945050505050565b60006060828403121561294357600080fd5b50919050565b60008083601f84011261295b57600080fd5b50813567ffffffffffffffff81111561297357600080fd5b6020830191508360208260051b850101111561298e57600080fd5b9250929050565b60008060008060008060008060006103e08a8c0312156129b457600080fd5b6129bd8a612771565b985060208a013597506129d38b60408c0161288f565b96506103608a013567ffffffffffffffff808211156129f157600080fd5b6129fd8d838e01612931565b97506103808c0135915080821115612a1457600080fd5b612a208d838e01612949565b90975095506103a08c0135915080821115612a3a57600080fd5b612a468d838e01612931565b94506103c08c0135915080821115612a5d57600080fd5b50612a6a8c828d01612949565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612a9957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612acf57600080fd5b50508035926020909101359150565b60008083601f840112612af057600080fd5b50813567ffffffffffffffff811115612b0857600080fd5b60208301915083602082850101111561298e57600080fd5b600080600080600080600060a0888a031215612b3b57600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612b6157600080fd5b612b6d8b838c01612ade565b909750955060608a0135915080821115612b8657600080fd5b50612b938a828b01612949565b90945092505060808801358015158114612bac57600080fd5b8091505092959891949750929550565b600080600060608486031215612bd157600080fd5b612bda84612771565b95602085013595506040909401359392505050565b600080600060408486031215612c0457600080fd5b83359250602084013567ffffffffffffffff811115612c2257600080fd5b612c2e86828701612ade565b9497909650939450505050565b600080600080600060808688031215612c5357600080fd5b612c5c86612771565b945060208601359350604086013567ffffffffffffffff80821115612c8057600080fd5b612c8c89838a01612931565b94506060880135915080821115612ca257600080fd5b50612caf88828901612949565b969995985093965092949392505050565b803563ffffffff8116811461279557600080fd5b600080600060608486031215612ce957600080fd5b83359250612cf960208501612cc0565b9150612d0760408501612cc0565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d9f57612d9f612d3f565b5060010190565b600060608236031215612db857600080fd5b612dc061281d565b823567ffffffffffffffff80821115612dd857600080fd5b9084019036601f830112612deb57600080fd5b8135602082821115612dff57612dff6127c4565b612e2f817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612840565b92508183523681838601011115612e4557600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b6019811015612eaa57825167ffffffffffffffff16825260209283019290910190600101612e81565b50505092915050565b60008219821115612ec657612ec6612d3f565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612f0057600080fd5b83018035915067ffffffffffffffff821115612f1b57600080fd5b60200191503681900382131561298e57600080fd5b600181815b80851115612f8957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612f6f57612f6f612d3f565b80851615612f7c57918102915b93841c9390800290612f35565b509250929050565b600082612fa05750600161304c565b81612fad5750600061304c565b8160018114612fc35760028114612fcd57612fe9565b600191505061304c565b60ff841115612fde57612fde612d3f565b50506001821b61304c565b5060208310610133831016604e8410600b841016171561300c575081810a61304c565b6130168383612f30565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561304857613048612d3f565b0290505b92915050565b600061241c8383612f91565b60008282101561307057613070612d3f565b500390565b600063ffffffff8381169083168181101561309257613092612d3f565b039392505050565b600063ffffffff8083168185168083038211156130b9576130b9612d3f565b01949350505050565b6000845160005b818110156130e357602081880181015185830152016130c9565b818111156130f2576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a", Bin: "0x60c06040523480156200001157600080fd5b506040516200353f3803806200353f8339810160408190526200003491620000f3565b60a0829052608081905260005b6200004f600160106200012e565b811015620000ea57600381601081106200006d576200006d62000148565b01546003826010811062000085576200008562000148565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206003826001620000c091906200015e565b60108110620000d357620000d362000148565b015580620000e18162000179565b91505062000041565b50505062000195565b600080604083850312156200010757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b60008282101562000143576200014362000118565b500390565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000174576200017462000118565b500190565b6000600182016200018e576200018e62000118565b5060010190565b60805160a051613376620001c9600039600081816103f9015261192a01526000818161046d01526111d701526133766000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639d53a648116100ee578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc14610458578063f3f480d91461046b578063faf37bc714610491578063fef2b4ed146104a457600080fd5b8063dd24f9bf146103f7578063e03110e11461041d578063e15926111461044557600080fd5b8063b4801e61116100c8578063b4801e61146103c9578063d18534b5146103dc578063da35c664146103ef57600080fd5b80639d53a648146103495780639d7e87691461038b578063b2e67ba81461039e57600080fd5b806361238bde1161015b5780637ac54767116101355780637ac54767146102b95780638542cf50146102cc578063882856ef1461030a5780638dc4be111461033657600080fd5b806361238bde146102505780636551927b1461027b5780637917de1d146102a657600080fd5b80633909af5c1161018c5780633909af5c146102205780634d52b4c91461023557806352f0f3ad1461023d57600080fd5b8063013cf08b146101b35780630359a563146101f75780632055b36b14610218575b600080fd5b6101c66101c136600461292d565b6104c4565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b61020a61020536600461296f565b610509565b6040519081526020016101ee565b61020a601081565b61023361022e366004612b6a565b610641565b005b61020a61088f565b61020a61024b366004612c56565b6108aa565b61020a61025e366004612c91565b600160209081526000928352604080842090915290825290205481565b61020a61028936600461296f565b601560209081526000928352604080842090915290825290205481565b6102336102b4366004612cf5565b61097f565b61020a6102c736600461292d565b610e0d565b6102fa6102da366004612c91565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101ee565b61031d610318366004612d91565b610e24565b60405167ffffffffffffffff90911681526020016101ee565b610233610344366004612dc4565b610e7e565b61020a61035736600461296f565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b610233610399366004612e10565b610f79565b61020a6103ac36600461296f565b601660209081526000928352604080842090915290825290205481565b61020a6103d7366004612d91565b611130565b6102336103ea366004612b6a565b611162565b60135461020a565b7f000000000000000000000000000000000000000000000000000000000000000061020a565b61043061042b366004612c91565b61152d565b604080519283526020830191909152016101ee565b610233610453366004612dc4565b61161e565b610233610466366004612e9c565b611726565b7f000000000000000000000000000000000000000000000000000000000000000061020a565b61023361049f366004612f35565b6118a0565b61020a6104b236600461292d565b60006020819052908152604090205481565b601381815481106104d457600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061054c9060601c63ffffffff1690565b63ffffffff16905060005b601081101561063957816001166001036105df5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106105ac576105ac612f71565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610620565b82600382601081106105f3576105f3612f71565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061063181612fcf565b915050610557565b505092915050565b600061064d8a8a610509565b905061067086868360208b013561066b6106668d613007565b611ab3565b611af3565b801561068e575061068e838383602088013561066b6106668a613007565b6106c4576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106da91906130d6565b6040516020818303038152906040528051906020012014610727576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161073d9190613114565b14610774576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107bc88610782868061312c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b5492505050565b6107c588611caf565b8360400135886040516020016107db91906130d6565b6040516020818303038152906040528051906020012003610828576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161089d601060026132b3565b6108a791906132bf565b81565b60006108b6868661254b565b90506108c3836008613114565b8211806108d05750602083115b15610907576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b606081156109985761099186866125f8565b90506109d2565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b8154815260200190600101908083116109ff57505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610a808260601c63ffffffff1690565b63ffffffff169050333214610ac1576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad18260801c63ffffffff1690565b63ffffffff16600003610b10576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b1a8260c01c90565b67ffffffffffffffff1615610b5b576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610b94576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba189898d8886612671565b83516020850160888204881415608883061715610bc6576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610c76578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610c6b576001821615610c4b5782818b0152610c6b565b8981015160009081526020938452604090209260019290921c9101610c2e565b505050608801610bd3565b50505050600160106002610c8a91906132b3565b610c9491906132bf565b811115610ccd576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d42610ce08360401c63ffffffff1690565b610cf09063ffffffff168a613114565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610d6d5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791505b3360009081526014602090815260408083208e84529091529020610d93908460106128a3565b50503360008181526017602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b60038160108110610e1d57600080fd5b0154905081565b60176020528260005260406000206020528160005260406000208181548110610e4c57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b604435600080600883018610610e9c5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610ec957600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b600080603087600037602060006030600060025afa80610fa15763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa925082611023576309bde3396000526004601cfd5b602886106110395763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b6014602052826000526040600020602052816000526040600020816010811061115857600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156111d5576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006112008260c01c90565b6112149067ffffffffffffffff16426132bf565b1161124b576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112578b8b610509565b905061127087878360208c013561066b6106668e613007565b801561128e575061128e848483602089013561066b6106668b613007565b6112c4576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016112da91906130d6565b6040516020818303038152906040528051906020012014611327576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84602001358860200135600161133d9190613114565b14158061136f575060016113578360601c63ffffffff1690565b61136191906132d6565b63ffffffff16856020013514155b156113a6576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113b88360801c63ffffffff1690565b63ffffffff169050806113d18460401c63ffffffff1690565b63ffffffff161461140e576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61141c8a610782888061312c565b6114258a611caf565b60006114308b6127c4565b905060006114448560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166115b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546115d2816008613114565b6115dd856020613114565b106115fb57836115ee826008613114565b6115f891906132bf565b91505b506000938452600160209081526040808620948652939052919092205492909150565b60443560008060088301861061163c5763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b60006117328686610509565b905061174b838383602088013561066b6106668a613007565b611781576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156117bd576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117c56128e1565b6117d381610782878061312c565b6117dc81611caf565b8460400135816040516020016117f291906130d6565b604051602081830303815290604052805190602001200361183f576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b3332146118d9576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e48160086132fb565b63ffffffff168263ffffffff1610611928576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff161015611988576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b6000816000015182602001518360400151604051602001611ad693929190613323565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611b47578060051b880135600186831c1660018114611b2c5760008481526020839052604090209350611b3d565b600082815260208590526040902093505b5050600101611af9565b5090931495945050505050565b6088815114611b6257600080fd5b6020810160208301611be3565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611bdd81611bc8868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611bef60008383611b6f565b611bfb60018383611b6f565b611c0760028383611b6f565b611c1360038383611b6f565b611c1f60048383611b6f565b611c2b60058383611b6f565b611c3760068383611b6f565b611c4360078383611b6f565b611c4f60088383611b6f565b611c5b60098383611b6f565b611c67600a8383611b6f565b611c73600b8383611b6f565b611c7f600c8383611b6f565b611c8b600d8383611b6f565b611c97600e8383611b6f565b611ca3600f8383611b6f565b611bdd60108383611b6f565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e0016040516020818303038152906040529050602082016020820161242b565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611e628660011b67ffffffffffffffff1690565b18188584603f1c611e7d8660011b67ffffffffffffffff1690565b18188584603f1c611e988660011b67ffffffffffffffff1690565b181895508483603f1c611eb58560011b67ffffffffffffffff1690565b181894508387603f1c611ed28960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61225281611da5565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611bdd565b61243760008284612249565b61244360018284612249565b61244f60028284612249565b61245b60038284612249565b61246760048284612249565b61247360058284612249565b61247f60068284612249565b61248b60078284612249565b61249760088284612249565b6124a360098284612249565b6124af600a8284612249565b6124bb600b8284612249565b6124c7600c8284612249565b6124d3600d8284612249565b6124df600e8284612249565b6124eb600f8284612249565b6124f760108284612249565b61250360118284612249565b61250f60128284612249565b61251b60138284612249565b61252760148284612249565b61253360158284612249565b61253f60168284612249565b611bdd60178284612249565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176125f1818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b60606040519050816020820181810182868337608883068080156126415760888290038501848101848103803687375060806001820353506001845160001a1784538652612658565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006126838260a01c63ffffffff1690565b67ffffffffffffffff16905060006126a18360801c63ffffffff1690565b63ffffffff16905060006126bb8460401c63ffffffff1690565b63ffffffff1690506008831080156126d1575080155b156127055760c082901b6000908152883560085283513382526016602090815260408084208a8552909152909120556127ba565b6008831015801561272357508061271d6008856132bf565b93508310155b801561273757506127348782613114565b83105b156127ba57600061274882856132bf565b905087612756826020613114565b10158015612762575085155b15612799576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208a845290915290209089013590555b5050505050505050565b6000612847565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006127f58360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff00006128228360101b67ffffffffffffffff1690565b1617905060008160201c6128408360201b67ffffffffffffffff1690565b1792915050565b6080820151602083019061285f906127cb565b6127cb565b604082015161286d906127cb565b60401b1761288561285a60018460059190911b015190565b825160809190911b90612897906127cb565b60c01b17179392505050565b82601081019282156128d1579160200282015b828111156128d15782518255916020019190600101906128b6565b506128dd9291506128f9565b5090565b60405180602001604052806128f461290e565b905290565b5b808211156128dd57600081556001016128fa565b6040518061032001604052806019906020820280368337509192915050565b60006020828403121561293f57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461296a57600080fd5b919050565b6000806040838503121561298257600080fd5b61298b83612946565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff811182821017156129ec576129ec612999565b60405290565b6040516060810167ffffffffffffffff811182821017156129ec576129ec612999565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612a5c57612a5c612999565b604052919050565b6000610320808385031215612a7857600080fd5b604051602080820167ffffffffffffffff8382108183111715612a9d57612a9d612999565b8160405283955087601f880112612ab357600080fd5b612abb6129c8565b9487019491508188861115612acf57600080fd5b875b86811015612af75780358381168114612aea5760008081fd5b8452928401928401612ad1565b50909352509295945050505050565b600060608284031215612b1857600080fd5b50919050565b60008083601f840112612b3057600080fd5b50813567ffffffffffffffff811115612b4857600080fd5b6020830191508360208260051b8501011115612b6357600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612b8957600080fd5b612b928a612946565b985060208a01359750612ba88b60408c01612a64565b96506103608a013567ffffffffffffffff80821115612bc657600080fd5b612bd28d838e01612b06565b97506103808c0135915080821115612be957600080fd5b612bf58d838e01612b1e565b90975095506103a08c0135915080821115612c0f57600080fd5b612c1b8d838e01612b06565b94506103c08c0135915080821115612c3257600080fd5b50612c3f8c828d01612b1e565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612c6e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612ca457600080fd5b50508035926020909101359150565b60008083601f840112612cc557600080fd5b50813567ffffffffffffffff811115612cdd57600080fd5b602083019150836020828501011115612b6357600080fd5b600080600080600080600060a0888a031215612d1057600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612d3657600080fd5b612d428b838c01612cb3565b909750955060608a0135915080821115612d5b57600080fd5b50612d688a828b01612b1e565b90945092505060808801358015158114612d8157600080fd5b8091505092959891949750929550565b600080600060608486031215612da657600080fd5b612daf84612946565b95602085013595506040909401359392505050565b600080600060408486031215612dd957600080fd5b83359250602084013567ffffffffffffffff811115612df757600080fd5b612e0386828701612cb3565b9497909650939450505050565b600080600080600080600060a0888a031215612e2b57600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612e5157600080fd5b612e5d8b838c01612cb3565b909750955060608a0135915080821115612e7657600080fd5b50612e838a828b01612cb3565b989b979a50959894979596608090950135949350505050565b600080600080600060808688031215612eb457600080fd5b612ebd86612946565b945060208601359350604086013567ffffffffffffffff80821115612ee157600080fd5b612eed89838a01612b06565b94506060880135915080821115612f0357600080fd5b50612f1088828901612b1e565b969995985093965092949392505050565b803563ffffffff8116811461296a57600080fd5b600080600060608486031215612f4a57600080fd5b83359250612f5a60208501612f21565b9150612f6860408501612f21565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361300057613000612fa0565b5060010190565b60006060823603121561301957600080fd5b6130216129f2565b823567ffffffffffffffff8082111561303957600080fd5b9084019036601f83011261304c57600080fd5b813560208282111561306057613060612999565b613090817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612a15565b925081835236818386010111156130a657600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561310b57825167ffffffffffffffff168252602092830192909101906001016130e2565b50505092915050565b6000821982111561312757613127612fa0565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261316157600080fd5b83018035915067ffffffffffffffff82111561317c57600080fd5b602001915036819003821315612b6357600080fd5b600181815b808511156131ea57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156131d0576131d0612fa0565b808516156131dd57918102915b93841c9390800290613196565b509250929050565b600082613201575060016132ad565b8161320e575060006132ad565b8160018114613224576002811461322e5761324a565b60019150506132ad565b60ff84111561323f5761323f612fa0565b50506001821b6132ad565b5060208310610133831016604e8410600b841016171561326d575081810a6132ad565b6132778383613191565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156132a9576132a9612fa0565b0290505b92915050565b60006125f183836131f2565b6000828210156132d1576132d1612fa0565b500390565b600063ffffffff838116908316818110156132f3576132f3612fa0565b039392505050565b600063ffffffff80831681851680830382111561331a5761331a612fa0565b01949350505050565b6000845160005b81811015613344576020818801810151858301520161332a565b81811115613353576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a",
} }
// PreimageOracleABI is the input ABI used to generate the binding from. // PreimageOracleABI is the input ABI used to generate the binding from.
...@@ -852,6 +852,27 @@ func (_PreimageOracle *PreimageOracleTransactorSession) InitLPP(_uuid *big.Int, ...@@ -852,6 +852,27 @@ func (_PreimageOracle *PreimageOracleTransactorSession) InitLPP(_uuid *big.Int,
return _PreimageOracle.Contract.InitLPP(&_PreimageOracle.TransactOpts, _uuid, _partOffset, _claimedSize) return _PreimageOracle.Contract.InitLPP(&_PreimageOracle.TransactOpts, _uuid, _partOffset, _claimedSize)
} }
// LoadBlobPreimagePart is a paid mutator transaction binding the contract method 0x9d7e8769.
//
// Solidity: function loadBlobPreimagePart(uint256 _z, uint256 _y, bytes _commitment, bytes _proof, uint256 _partOffset) returns()
func (_PreimageOracle *PreimageOracleTransactor) LoadBlobPreimagePart(opts *bind.TransactOpts, _z *big.Int, _y *big.Int, _commitment []byte, _proof []byte, _partOffset *big.Int) (*types.Transaction, error) {
return _PreimageOracle.contract.Transact(opts, "loadBlobPreimagePart", _z, _y, _commitment, _proof, _partOffset)
}
// LoadBlobPreimagePart is a paid mutator transaction binding the contract method 0x9d7e8769.
//
// Solidity: function loadBlobPreimagePart(uint256 _z, uint256 _y, bytes _commitment, bytes _proof, uint256 _partOffset) returns()
func (_PreimageOracle *PreimageOracleSession) LoadBlobPreimagePart(_z *big.Int, _y *big.Int, _commitment []byte, _proof []byte, _partOffset *big.Int) (*types.Transaction, error) {
return _PreimageOracle.Contract.LoadBlobPreimagePart(&_PreimageOracle.TransactOpts, _z, _y, _commitment, _proof, _partOffset)
}
// LoadBlobPreimagePart is a paid mutator transaction binding the contract method 0x9d7e8769.
//
// Solidity: function loadBlobPreimagePart(uint256 _z, uint256 _y, bytes _commitment, bytes _proof, uint256 _partOffset) returns()
func (_PreimageOracle *PreimageOracleTransactorSession) LoadBlobPreimagePart(_z *big.Int, _y *big.Int, _commitment []byte, _proof []byte, _partOffset *big.Int) (*types.Transaction, error) {
return _PreimageOracle.Contract.LoadBlobPreimagePart(&_PreimageOracle.TransactOpts, _z, _y, _commitment, _proof, _partOffset)
}
// LoadKeccak256PreimagePart is a paid mutator transaction binding the contract method 0xe1592611. // LoadKeccak256PreimagePart is a paid mutator transaction binding the contract method 0xe1592611.
// //
// Solidity: function loadKeccak256PreimagePart(uint256 _partOffset, bytes _preimage) returns() // Solidity: function loadKeccak256PreimagePart(uint256 _partOffset, bytes _preimage) returns()
......
...@@ -13,7 +13,7 @@ const PreimageOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contrac ...@@ -13,7 +13,7 @@ const PreimageOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contrac
var PreimageOracleStorageLayout = new(solc.StorageLayout) var PreimageOracleStorageLayout = new(solc.StorageLayout)
var PreimageOracleDeployedBin = "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c80638dc4be11116100ee578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc1461043a578063f3f480d91461044d578063faf37bc714610473578063fef2b4ed1461048657600080fd5b8063dd24f9bf146103d9578063e03110e1146103ff578063e15926111461042757600080fd5b8063b4801e61116100c8578063b4801e61146103ab578063d18534b5146103be578063da35c664146103d157600080fd5b80638dc4be111461032b5780639d53a6481461033e578063b2e67ba81461038057600080fd5b806361238bde116101505780637ac547671161012a5780637ac54767146102ae5780638542cf50146102c1578063882856ef146102ff57600080fd5b806361238bde146102455780636551927b146102705780637917de1d1461029b57600080fd5b80633909af5c116101815780633909af5c146102155780634d52b4c91461022a57806352f0f3ad1461023257600080fd5b8063013cf08b146101a85780630359a563146101ec5780632055b36b1461020d575b600080fd5b6101bb6101b6366004612758565b6104a6565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b6101ff6101fa36600461279a565b6104eb565b6040519081526020016101e3565b6101ff601081565b610228610223366004612995565b610623565b005b6101ff610871565b6101ff610240366004612a81565b61088c565b6101ff610253366004612abc565b600160209081526000928352604080842090915290825290205481565b6101ff61027e36600461279a565b601560209081526000928352604080842090915290825290205481565b6102286102a9366004612b20565b610961565b6101ff6102bc366004612758565b610def565b6102ef6102cf366004612abc565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101e3565b61031261030d366004612bbc565b610e06565b60405167ffffffffffffffff90911681526020016101e3565b610228610339366004612bef565b610e60565b6101ff61034c36600461279a565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b6101ff61038e36600461279a565b601660209081526000928352604080842090915290825290205481565b6101ff6103b9366004612bbc565b610f5b565b6102286103cc366004612995565b610f8d565b6013546101ff565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b61041261040d366004612abc565b611358565b604080519283526020830191909152016101e3565b610228610435366004612bef565b611449565b610228610448366004612c3b565b611551565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b610228610481366004612cd4565b6116cb565b6101ff610494366004612758565b60006020819052908152604090205481565b601381815481106104b657600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061052e9060601c63ffffffff1690565b63ffffffff16905060005b601081101561061b57816001166001036105c15773ffffffffffffffffffffffffffffffffffffffff851660009081526014602090815260408083208784529091529020816010811061058e5761058e612d10565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610602565b82600382601081106105d5576105d5612d10565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061061381612d6e565b915050610539565b505092915050565b600061062f8a8a6104eb565b905061065286868360208b013561064d6106488d612da6565b6118de565b61191e565b80156106705750610670838383602088013561064d6106488a612da6565b6106a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106bc9190612e75565b6040516020818303038152906040528051906020012014610709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161071f9190612eb3565b14610756576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079e886107648680612ecb565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061197f92505050565b6107a788611ada565b8360400135886040516020016107bd9190612e75565b604051602081830303815290604052805190602001200361080a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161087f60106002613052565b610889919061305e565b81565b60006108988686612376565b90506108a5836008612eb3565b8211806108b25750602083115b156108e9576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b6060811561097a576109738686612423565b90506109b4565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b8154815260200190600101908083116109e157505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610a628260601c63ffffffff1690565b63ffffffff169050333214610aa3576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab38260801c63ffffffff1690565b63ffffffff16600003610af2576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610afc8260c01c90565b67ffffffffffffffff1615610b3d576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610b76576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b8389898d888661249c565b83516020850160888204881415608883061715610ba8576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610c58578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610c4d576001821615610c2d5782818b0152610c4d565b8981015160009081526020938452604090209260019290921c9101610c10565b505050608801610bb5565b50505050600160106002610c6c9190613052565b610c76919061305e565b811115610caf576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d24610cc28360401c63ffffffff1690565b610cd29063ffffffff168a612eb3565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610d4f5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791505b3360009081526014602090815260408083208e84529091529020610d75908460106126ce565b50503360008181526017602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b60038160108110610dff57600080fd5b0154905081565b60176020528260005260406000206020528160005260406000208181548110610e2e57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b604435600080600883018610610e7e5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610eab57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b60146020528260005260406000206020528160005260406000208160108110610f8357600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff811615611000576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061102b8260c01c90565b61103f9067ffffffffffffffff164261305e565b11611076576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110828b8b6104eb565b905061109b87878360208c013561064d6106488e612da6565b80156110b957506110b9848483602089013561064d6106488b612da6565b6110ef576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016111059190612e75565b6040516020818303038152906040528051906020012014611152576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016111689190612eb3565b14158061119a575060016111828360601c63ffffffff1690565b61118c9190613075565b63ffffffff16856020013514155b156111d1576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111e38360801c63ffffffff1690565b63ffffffff169050806111fc8460401c63ffffffff1690565b63ffffffff1614611239576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112478a6107648880612ecb565b6112508a611ada565b600061125b8b6125ef565b9050600061126f8560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166113e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546113fd816008612eb3565b611408856020612eb3565b106114265783611419826008612eb3565b611423919061305e565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106114675763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061155d86866104eb565b9050611576838383602088013561064d6106488a612da6565b6115ac576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156115e8576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115f061270c565b6115fe816107648780612ecb565b61160781611ada565b84604001358160405160200161161d9190612e75565b604051602081830303815290604052805190602001200361166a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b333214611704576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61170f81600861309a565b63ffffffff168263ffffffff1610611753576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff1610156117b3576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b6000816000015182602001518360400151604051602001611901939291906130c2565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611972578060051b880135600186831c16600181146119575760008481526020839052604090209350611968565b600082815260208590526040902093505b5050600101611924565b5090931495945050505050565b608881511461198d57600080fd5b6020810160208301611a0e565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611a08816119f3868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611a1a6000838361199a565b611a266001838361199a565b611a326002838361199a565b611a3e6003838361199a565b611a4a6004838361199a565b611a566005838361199a565b611a626006838361199a565b611a6e6007838361199a565b611a7a6008838361199a565b611a866009838361199a565b611a92600a838361199a565b611a9e600b838361199a565b611aaa600c838361199a565b611ab6600d838361199a565b611ac2600e838361199a565b611ace600f838361199a565b611a086010838361199a565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612256565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611c8d8660011b67ffffffffffffffff1690565b18188584603f1c611ca88660011b67ffffffffffffffff1690565b18188584603f1c611cc38660011b67ffffffffffffffff1690565b181895508483603f1c611ce08560011b67ffffffffffffffff1690565b181894508387603f1c611cfd8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61207d81611bd0565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611a08565b61226260008284612074565b61226e60018284612074565b61227a60028284612074565b61228660038284612074565b61229260048284612074565b61229e60058284612074565b6122aa60068284612074565b6122b660078284612074565b6122c260088284612074565b6122ce60098284612074565b6122da600a8284612074565b6122e6600b8284612074565b6122f2600c8284612074565b6122fe600d8284612074565b61230a600e8284612074565b612316600f8284612074565b61232260108284612074565b61232e60118284612074565b61233a60128284612074565b61234660138284612074565b61235260148284612074565b61235e60158284612074565b61236a60168284612074565b611a0860178284612074565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83161761241c818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b606060405190508160208201818101828683376088830680801561246c5760888290038501848101848103803687375060806001820353506001845160001a1784538652612483565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006124ae8260a01c63ffffffff1690565b67ffffffffffffffff16905060006124cc8360801c63ffffffff1690565b63ffffffff16905060006124e68460401c63ffffffff1690565b63ffffffff1690506008831080156124fc575080155b156125305760c082901b6000908152883560085283513382526016602090815260408084208a8552909152909120556125e5565b6008831015801561254e57508061254860088561305e565b93508310155b8015612562575061255f8782612eb3565b83105b156125e5576000612573828561305e565b905087612581826020612eb3565b1015801561258d575085155b156125c4576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208a845290915290209089013590555b5050505050505050565b6000612672565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006126208360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff000061264d8360101b67ffffffffffffffff1690565b1617905060008160201c61266b8360201b67ffffffffffffffff1690565b1792915050565b6080820151602083019061268a906125f6565b6125f6565b6040820151612698906125f6565b60401b176126b061268560018460059190911b015190565b825160809190911b906126c2906125f6565b60c01b17179392505050565b82601081019282156126fc579160200282015b828111156126fc5782518255916020019190600101906126e1565b50612708929150612724565b5090565b604051806020016040528061271f612739565b905290565b5b808211156127085760008155600101612725565b6040518061032001604052806019906020820280368337509192915050565b60006020828403121561276a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461279557600080fd5b919050565b600080604083850312156127ad57600080fd5b6127b683612771565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612817576128176127c4565b60405290565b6040516060810167ffffffffffffffff81118282101715612817576128176127c4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612887576128876127c4565b604052919050565b60006103208083850312156128a357600080fd5b604051602080820167ffffffffffffffff83821081831117156128c8576128c86127c4565b8160405283955087601f8801126128de57600080fd5b6128e66127f3565b94870194915081888611156128fa57600080fd5b875b8681101561292257803583811681146129155760008081fd5b84529284019284016128fc565b50909352509295945050505050565b60006060828403121561294357600080fd5b50919050565b60008083601f84011261295b57600080fd5b50813567ffffffffffffffff81111561297357600080fd5b6020830191508360208260051b850101111561298e57600080fd5b9250929050565b60008060008060008060008060006103e08a8c0312156129b457600080fd5b6129bd8a612771565b985060208a013597506129d38b60408c0161288f565b96506103608a013567ffffffffffffffff808211156129f157600080fd5b6129fd8d838e01612931565b97506103808c0135915080821115612a1457600080fd5b612a208d838e01612949565b90975095506103a08c0135915080821115612a3a57600080fd5b612a468d838e01612931565b94506103c08c0135915080821115612a5d57600080fd5b50612a6a8c828d01612949565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612a9957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612acf57600080fd5b50508035926020909101359150565b60008083601f840112612af057600080fd5b50813567ffffffffffffffff811115612b0857600080fd5b60208301915083602082850101111561298e57600080fd5b600080600080600080600060a0888a031215612b3b57600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612b6157600080fd5b612b6d8b838c01612ade565b909750955060608a0135915080821115612b8657600080fd5b50612b938a828b01612949565b90945092505060808801358015158114612bac57600080fd5b8091505092959891949750929550565b600080600060608486031215612bd157600080fd5b612bda84612771565b95602085013595506040909401359392505050565b600080600060408486031215612c0457600080fd5b83359250602084013567ffffffffffffffff811115612c2257600080fd5b612c2e86828701612ade565b9497909650939450505050565b600080600080600060808688031215612c5357600080fd5b612c5c86612771565b945060208601359350604086013567ffffffffffffffff80821115612c8057600080fd5b612c8c89838a01612931565b94506060880135915080821115612ca257600080fd5b50612caf88828901612949565b969995985093965092949392505050565b803563ffffffff8116811461279557600080fd5b600080600060608486031215612ce957600080fd5b83359250612cf960208501612cc0565b9150612d0760408501612cc0565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d9f57612d9f612d3f565b5060010190565b600060608236031215612db857600080fd5b612dc061281d565b823567ffffffffffffffff80821115612dd857600080fd5b9084019036601f830112612deb57600080fd5b8135602082821115612dff57612dff6127c4565b612e2f817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612840565b92508183523681838601011115612e4557600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b6019811015612eaa57825167ffffffffffffffff16825260209283019290910190600101612e81565b50505092915050565b60008219821115612ec657612ec6612d3f565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612f0057600080fd5b83018035915067ffffffffffffffff821115612f1b57600080fd5b60200191503681900382131561298e57600080fd5b600181815b80851115612f8957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612f6f57612f6f612d3f565b80851615612f7c57918102915b93841c9390800290612f35565b509250929050565b600082612fa05750600161304c565b81612fad5750600061304c565b8160018114612fc35760028114612fcd57612fe9565b600191505061304c565b60ff841115612fde57612fde612d3f565b50506001821b61304c565b5060208310610133831016604e8410600b841016171561300c575081810a61304c565b6130168383612f30565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561304857613048612d3f565b0290505b92915050565b600061241c8383612f91565b60008282101561307057613070612d3f565b500390565b600063ffffffff8381169083168181101561309257613092612d3f565b039392505050565b600063ffffffff8083168185168083038211156130b9576130b9612d3f565b01949350505050565b6000845160005b818110156130e357602081880181015185830152016130c9565b818111156130f2576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a" var PreimageOracleDeployedBin = "0x608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639d53a648116100ee578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc14610458578063f3f480d91461046b578063faf37bc714610491578063fef2b4ed146104a457600080fd5b8063dd24f9bf146103f7578063e03110e11461041d578063e15926111461044557600080fd5b8063b4801e61116100c8578063b4801e61146103c9578063d18534b5146103dc578063da35c664146103ef57600080fd5b80639d53a648146103495780639d7e87691461038b578063b2e67ba81461039e57600080fd5b806361238bde1161015b5780637ac54767116101355780637ac54767146102b95780638542cf50146102cc578063882856ef1461030a5780638dc4be111461033657600080fd5b806361238bde146102505780636551927b1461027b5780637917de1d146102a657600080fd5b80633909af5c1161018c5780633909af5c146102205780634d52b4c91461023557806352f0f3ad1461023d57600080fd5b8063013cf08b146101b35780630359a563146101f75780632055b36b14610218575b600080fd5b6101c66101c136600461292d565b6104c4565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b61020a61020536600461296f565b610509565b6040519081526020016101ee565b61020a601081565b61023361022e366004612b6a565b610641565b005b61020a61088f565b61020a61024b366004612c56565b6108aa565b61020a61025e366004612c91565b600160209081526000928352604080842090915290825290205481565b61020a61028936600461296f565b601560209081526000928352604080842090915290825290205481565b6102336102b4366004612cf5565b61097f565b61020a6102c736600461292d565b610e0d565b6102fa6102da366004612c91565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101ee565b61031d610318366004612d91565b610e24565b60405167ffffffffffffffff90911681526020016101ee565b610233610344366004612dc4565b610e7e565b61020a61035736600461296f565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b610233610399366004612e10565b610f79565b61020a6103ac36600461296f565b601660209081526000928352604080842090915290825290205481565b61020a6103d7366004612d91565b611130565b6102336103ea366004612b6a565b611162565b60135461020a565b7f000000000000000000000000000000000000000000000000000000000000000061020a565b61043061042b366004612c91565b61152d565b604080519283526020830191909152016101ee565b610233610453366004612dc4565b61161e565b610233610466366004612e9c565b611726565b7f000000000000000000000000000000000000000000000000000000000000000061020a565b61023361049f366004612f35565b6118a0565b61020a6104b236600461292d565b60006020819052908152604090205481565b601381815481106104d457600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061054c9060601c63ffffffff1690565b63ffffffff16905060005b601081101561063957816001166001036105df5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106105ac576105ac612f71565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610620565b82600382601081106105f3576105f3612f71565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061063181612fcf565b915050610557565b505092915050565b600061064d8a8a610509565b905061067086868360208b013561066b6106668d613007565b611ab3565b611af3565b801561068e575061068e838383602088013561066b6106668a613007565b6106c4576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106da91906130d6565b6040516020818303038152906040528051906020012014610727576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161073d9190613114565b14610774576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107bc88610782868061312c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b5492505050565b6107c588611caf565b8360400135886040516020016107db91906130d6565b6040516020818303038152906040528051906020012003610828576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161089d601060026132b3565b6108a791906132bf565b81565b60006108b6868661254b565b90506108c3836008613114565b8211806108d05750602083115b15610907576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b606081156109985761099186866125f8565b90506109d2565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b8154815260200190600101908083116109ff57505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610a808260601c63ffffffff1690565b63ffffffff169050333214610ac1576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad18260801c63ffffffff1690565b63ffffffff16600003610b10576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b1a8260c01c90565b67ffffffffffffffff1615610b5b576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610b94576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba189898d8886612671565b83516020850160888204881415608883061715610bc6576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610c76578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610c6b576001821615610c4b5782818b0152610c6b565b8981015160009081526020938452604090209260019290921c9101610c2e565b505050608801610bd3565b50505050600160106002610c8a91906132b3565b610c9491906132bf565b811115610ccd576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d42610ce08360401c63ffffffff1690565b610cf09063ffffffff168a613114565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610d6d5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791505b3360009081526014602090815260408083208e84529091529020610d93908460106128a3565b50503360008181526017602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b60038160108110610e1d57600080fd5b0154905081565b60176020528260005260406000206020528160005260406000208181548110610e4c57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b604435600080600883018610610e9c5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610ec957600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b600080603087600037602060006030600060025afa80610fa15763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa925082611023576309bde3396000526004601cfd5b602886106110395763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b6014602052826000526040600020602052816000526040600020816010811061115857600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156111d5576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006112008260c01c90565b6112149067ffffffffffffffff16426132bf565b1161124b576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112578b8b610509565b905061127087878360208c013561066b6106668e613007565b801561128e575061128e848483602089013561066b6106668b613007565b6112c4576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016112da91906130d6565b6040516020818303038152906040528051906020012014611327576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84602001358860200135600161133d9190613114565b14158061136f575060016113578360601c63ffffffff1690565b61136191906132d6565b63ffffffff16856020013514155b156113a6576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113b88360801c63ffffffff1690565b63ffffffff169050806113d18460401c63ffffffff1690565b63ffffffff161461140e576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61141c8a610782888061312c565b6114258a611caf565b60006114308b6127c4565b905060006114448560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166115b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546115d2816008613114565b6115dd856020613114565b106115fb57836115ee826008613114565b6115f891906132bf565b91505b506000938452600160209081526040808620948652939052919092205492909150565b60443560008060088301861061163c5763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b60006117328686610509565b905061174b838383602088013561066b6106668a613007565b611781576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156117bd576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117c56128e1565b6117d381610782878061312c565b6117dc81611caf565b8460400135816040516020016117f291906130d6565b604051602081830303815290604052805190602001200361183f576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b3332146118d9576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e48160086132fb565b63ffffffff168263ffffffff1610611928576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff161015611988576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b6000816000015182602001518360400151604051602001611ad693929190613323565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611b47578060051b880135600186831c1660018114611b2c5760008481526020839052604090209350611b3d565b600082815260208590526040902093505b5050600101611af9565b5090931495945050505050565b6088815114611b6257600080fd5b6020810160208301611be3565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611bdd81611bc8868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611bef60008383611b6f565b611bfb60018383611b6f565b611c0760028383611b6f565b611c1360038383611b6f565b611c1f60048383611b6f565b611c2b60058383611b6f565b611c3760068383611b6f565b611c4360078383611b6f565b611c4f60088383611b6f565b611c5b60098383611b6f565b611c67600a8383611b6f565b611c73600b8383611b6f565b611c7f600c8383611b6f565b611c8b600d8383611b6f565b611c97600e8383611b6f565b611ca3600f8383611b6f565b611bdd60108383611b6f565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e0016040516020818303038152906040529050602082016020820161242b565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611e628660011b67ffffffffffffffff1690565b18188584603f1c611e7d8660011b67ffffffffffffffff1690565b18188584603f1c611e988660011b67ffffffffffffffff1690565b181895508483603f1c611eb58560011b67ffffffffffffffff1690565b181894508387603f1c611ed28960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61225281611da5565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611bdd565b61243760008284612249565b61244360018284612249565b61244f60028284612249565b61245b60038284612249565b61246760048284612249565b61247360058284612249565b61247f60068284612249565b61248b60078284612249565b61249760088284612249565b6124a360098284612249565b6124af600a8284612249565b6124bb600b8284612249565b6124c7600c8284612249565b6124d3600d8284612249565b6124df600e8284612249565b6124eb600f8284612249565b6124f760108284612249565b61250360118284612249565b61250f60128284612249565b61251b60138284612249565b61252760148284612249565b61253360158284612249565b61253f60168284612249565b611bdd60178284612249565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176125f1818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b60606040519050816020820181810182868337608883068080156126415760888290038501848101848103803687375060806001820353506001845160001a1784538652612658565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006126838260a01c63ffffffff1690565b67ffffffffffffffff16905060006126a18360801c63ffffffff1690565b63ffffffff16905060006126bb8460401c63ffffffff1690565b63ffffffff1690506008831080156126d1575080155b156127055760c082901b6000908152883560085283513382526016602090815260408084208a8552909152909120556127ba565b6008831015801561272357508061271d6008856132bf565b93508310155b801561273757506127348782613114565b83105b156127ba57600061274882856132bf565b905087612756826020613114565b10158015612762575085155b15612799576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208a845290915290209089013590555b5050505050505050565b6000612847565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006127f58360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff00006128228360101b67ffffffffffffffff1690565b1617905060008160201c6128408360201b67ffffffffffffffff1690565b1792915050565b6080820151602083019061285f906127cb565b6127cb565b604082015161286d906127cb565b60401b1761288561285a60018460059190911b015190565b825160809190911b90612897906127cb565b60c01b17179392505050565b82601081019282156128d1579160200282015b828111156128d15782518255916020019190600101906128b6565b506128dd9291506128f9565b5090565b60405180602001604052806128f461290e565b905290565b5b808211156128dd57600081556001016128fa565b6040518061032001604052806019906020820280368337509192915050565b60006020828403121561293f57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461296a57600080fd5b919050565b6000806040838503121561298257600080fd5b61298b83612946565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff811182821017156129ec576129ec612999565b60405290565b6040516060810167ffffffffffffffff811182821017156129ec576129ec612999565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612a5c57612a5c612999565b604052919050565b6000610320808385031215612a7857600080fd5b604051602080820167ffffffffffffffff8382108183111715612a9d57612a9d612999565b8160405283955087601f880112612ab357600080fd5b612abb6129c8565b9487019491508188861115612acf57600080fd5b875b86811015612af75780358381168114612aea5760008081fd5b8452928401928401612ad1565b50909352509295945050505050565b600060608284031215612b1857600080fd5b50919050565b60008083601f840112612b3057600080fd5b50813567ffffffffffffffff811115612b4857600080fd5b6020830191508360208260051b8501011115612b6357600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612b8957600080fd5b612b928a612946565b985060208a01359750612ba88b60408c01612a64565b96506103608a013567ffffffffffffffff80821115612bc657600080fd5b612bd28d838e01612b06565b97506103808c0135915080821115612be957600080fd5b612bf58d838e01612b1e565b90975095506103a08c0135915080821115612c0f57600080fd5b612c1b8d838e01612b06565b94506103c08c0135915080821115612c3257600080fd5b50612c3f8c828d01612b1e565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612c6e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612ca457600080fd5b50508035926020909101359150565b60008083601f840112612cc557600080fd5b50813567ffffffffffffffff811115612cdd57600080fd5b602083019150836020828501011115612b6357600080fd5b600080600080600080600060a0888a031215612d1057600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612d3657600080fd5b612d428b838c01612cb3565b909750955060608a0135915080821115612d5b57600080fd5b50612d688a828b01612b1e565b90945092505060808801358015158114612d8157600080fd5b8091505092959891949750929550565b600080600060608486031215612da657600080fd5b612daf84612946565b95602085013595506040909401359392505050565b600080600060408486031215612dd957600080fd5b83359250602084013567ffffffffffffffff811115612df757600080fd5b612e0386828701612cb3565b9497909650939450505050565b600080600080600080600060a0888a031215612e2b57600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612e5157600080fd5b612e5d8b838c01612cb3565b909750955060608a0135915080821115612e7657600080fd5b50612e838a828b01612cb3565b989b979a50959894979596608090950135949350505050565b600080600080600060808688031215612eb457600080fd5b612ebd86612946565b945060208601359350604086013567ffffffffffffffff80821115612ee157600080fd5b612eed89838a01612b06565b94506060880135915080821115612f0357600080fd5b50612f1088828901612b1e565b969995985093965092949392505050565b803563ffffffff8116811461296a57600080fd5b600080600060608486031215612f4a57600080fd5b83359250612f5a60208501612f21565b9150612f6860408501612f21565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361300057613000612fa0565b5060010190565b60006060823603121561301957600080fd5b6130216129f2565b823567ffffffffffffffff8082111561303957600080fd5b9084019036601f83011261304c57600080fd5b813560208282111561306057613060612999565b613090817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612a15565b925081835236818386010111156130a657600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561310b57825167ffffffffffffffff168252602092830192909101906001016130e2565b50505092915050565b6000821982111561312757613127612fa0565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261316157600080fd5b83018035915067ffffffffffffffff82111561317c57600080fd5b602001915036819003821315612b6357600080fd5b600181815b808511156131ea57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156131d0576131d0612fa0565b808516156131dd57918102915b93841c9390800290613196565b509250929050565b600082613201575060016132ad565b8161320e575060006132ad565b8160018114613224576002811461322e5761324a565b60019150506132ad565b60ff84111561323f5761323f612fa0565b50506001821b6132ad565b5060208310610133831016604e8410600b841016171561326d575081810a6132ad565b6132778383613191565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156132a9576132a9612fa0565b0290505b92915050565b60006125f183836131f2565b6000828210156132d1576132d1612fa0565b500390565b600063ffffffff838116908316818110156132f3576132f3612fa0565b039392505050565b600063ffffffff80831681851680830382111561331a5761331a612fa0565b01949350505050565b6000845160005b81811015613344576020818801810151858301520161332a565b81811115613353576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a"
func init() { func init() {
......
...@@ -1120,10 +1120,10 @@ ...@@ -1120,10 +1120,10 @@
"impact": "Medium", "impact": "Medium",
"confidence": "Medium", "confidence": "Medium",
"check": "uninitialized-local", "check": "uninitialized-local",
"description": "PreimageOracle.challengeFirstLPP(address,uint256,PreimageOracle.Leaf,bytes32[]).stateMatrix (src/cannon/PreimageOracle.sol#446) is a local variable never initialized\n", "description": "PreimageOracle.challengeFirstLPP(address,uint256,PreimageOracle.Leaf,bytes32[]).stateMatrix (src/cannon/PreimageOracle.sol#534) is a local variable never initialized\n",
"type": "variable", "type": "variable",
"name": "stateMatrix", "name": "stateMatrix",
"start": 20750, "start": 25088,
"length": 40, "length": 40,
"filename_relative": "src/cannon/PreimageOracle.sol" "filename_relative": "src/cannon/PreimageOracle.sol"
}, },
......
...@@ -263,6 +263,39 @@ ...@@ -263,6 +263,39 @@
"stateMutability": "nonpayable", "stateMutability": "nonpayable",
"type": "function" "type": "function"
}, },
{
"inputs": [
{
"internalType": "uint256",
"name": "_z",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_y",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_commitment",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "_proof",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "_partOffset",
"type": "uint256"
}
],
"name": "loadBlobPreimagePart",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{ {
"inputs": [ "inputs": [
{ {
......
...@@ -159,24 +159,23 @@ contract PreimageOracle is IPreimageOracle { ...@@ -159,24 +159,23 @@ contract PreimageOracle is IPreimageOracle {
// revert if part offset >= size+8 (i.e. parts must be within bounds) // revert if part offset >= size+8 (i.e. parts must be within bounds)
if iszero(lt(_partOffset, add(size, 8))) { if iszero(lt(_partOffset, add(size, 8))) {
// Store "PartOffsetOOB()" // Store "PartOffsetOOB()"
mstore(0, 0xfe254987) mstore(0x00, 0xfe254987)
// Revert with "PartOffsetOOB()" // Revert with "PartOffsetOOB()"
revert(0x1c, 4) revert(0x1c, 0x04)
} }
// we leave solidity slots 0x40 and 0x60 untouched, // we leave solidity slots 0x40 and 0x60 untouched, and everything after as scratch-memory.
// and everything after as scratch-memory.
let ptr := 0x80 let ptr := 0x80
// put size as big-endian uint64 at start of pre-image // put size as big-endian uint64 at start of pre-image
mstore(ptr, shl(192, size)) mstore(ptr, shl(192, size))
ptr := add(ptr, 8) ptr := add(ptr, 0x08)
// copy preimage payload into memory so we can hash and read it. // copy preimage payload into memory so we can hash and read it.
calldatacopy(ptr, _preimage.offset, size) calldatacopy(ptr, _preimage.offset, size)
// Note that it includes the 8-byte big-endian uint64 length prefix. // Note that it includes the 8-byte big-endian uint64 length prefix.
// this will be zero-padded at the end, since memory at end is clean. // this will be zero-padded at the end, since memory at end is clean.
part := mload(add(sub(ptr, 8), _partOffset)) part := mload(add(sub(ptr, 0x08), _partOffset))
let h := keccak256(ptr, size) // compute preimage keccak256 hash let h := keccak256(ptr, size) // compute preimage keccak256 hash
// mask out prefix byte, replace with type 2 byte // mask out prefix byte, replace with type 2 byte
key := or(and(h, not(shl(248, 0xFF))), shl(248, 2)) key := or(and(h, not(shl(248, 0xFF))), shl(248, 0x02))
} }
preimagePartOk[key][_partOffset] = true; preimagePartOk[key][_partOffset] = true;
preimageParts[key][_partOffset] = part; preimageParts[key][_partOffset] = part;
...@@ -232,7 +231,96 @@ contract PreimageOracle is IPreimageOracle { ...@@ -232,7 +231,96 @@ contract PreimageOracle is IPreimageOracle {
preimageLengths[key] = size; preimageLengths[key] = size;
} }
// TODO 4844 point-evaluation preimage /// @inheritdoc IPreimageOracle
function loadBlobPreimagePart(
uint256 _z,
uint256 _y,
bytes calldata _commitment,
bytes calldata _proof,
uint256 _partOffset
)
external
{
bytes32 key;
bytes32 part;
assembly {
// Compute the versioned hash. The SHA2 hash of the 48 byte commitment is masked with the version byte,
// which is currently 1. https://eips.ethereum.org/EIPS/eip-4844#parameters
// SAFETY: We're only reading 48 bytes from `_commitment` into scratch space, so we're not reading into the
// free memory ptr region. Since the exact number of btyes that is copied into scratch space is
// the same size as the hash input, there's no concern of dirty memory being read into the hash
// input.
calldatacopy(0x00, _commitment.offset, 0x30)
let success := staticcall(gas(), 0x02, 0x00, 0x30, 0x00, 0x20)
if iszero(success) {
// Store the "ShaFailed()" error selector.
mstore(0x00, 0xf9112969)
// revert with "ShaFailed()"
revert(0x1C, 0x04)
}
// Set the `VERSIONED_HASH_VERSION_KZG` byte = 1 in the high-order byte of the hash.
let versionedHash := or(and(mload(0x00), not(shl(248, 0xFF))), shl(248, 0x01))
// we leave solidity slots 0x40 and 0x60 untouched, and everything after as scratch-memory.
let ptr := 0x80
// Load the inputs for the point evaluation precompile into memory. The inputs to the point evaluation
// precompile are packed, and not supposed to be ABI-encoded.
mstore(ptr, versionedHash)
mstore(add(ptr, 0x20), _z)
mstore(add(ptr, 0x40), _y)
calldatacopy(add(ptr, 0x60), _commitment.offset, 0x30)
calldatacopy(add(ptr, 0x90), _proof.offset, 0x30)
// Verify the KZG proof by calling the point evaluation precompile. If the proof is invalid, the precompile
// will revert.
success :=
staticcall(
gas(), // forward all gas
0x0A, // point evaluation precompile address
ptr, // input ptr
0xC0, // input size = 192 bytes
0x00, // output ptr
0x00 // output size
)
if iszero(success) {
// Store the "InvalidProof()" error selector.
mstore(0x00, 0x09bde339)
// revert with "InvalidProof()"
revert(0x1C, 0x04)
}
// revert if part offset >= 32+8 (i.e. parts must be within bounds)
if iszero(lt(_partOffset, 0x28)) {
// Store "PartOffsetOOB()"
mstore(0x00, 0xfe254987)
// Revert with "PartOffsetOOB()"
revert(0x1C, 0x04)
}
// Clean the word at `ptr + 0x28` to ensure that data out of bounds of the preimage is zero, if the part
// offset requires a partial read.
mstore(add(ptr, 0x28), 0x00)
// put size (32) as a big-endian uint64 at start of pre-image
mstore(ptr, shl(192, 0x20))
// copy preimage payload into memory so we can hash and read it.
mstore(add(ptr, 0x08), _y)
// Note that it includes the 8-byte big-endian uint64 length prefix. This will be zero-padded at the end,
// since memory at end is guaranteed to be clean.
part := mload(add(ptr, _partOffset))
// Compute the key: `keccak256(commitment ++ z)`. Since the exact number of btyes that is copied into
// scratch space is the same size as the hash input, there's no concern of dirty memory being read into
// the hash input.
calldatacopy(ptr, _commitment.offset, 0x30)
mstore(add(ptr, 0x30), _z)
let h := keccak256(ptr, 0x50)
// mask out prefix byte, replace with type 5 byte
key := or(and(h, not(shl(248, 0xFF))), shl(248, 0x05))
}
preimagePartOk[key][_partOffset] = true;
preimageParts[key][_partOffset] = part;
preimageLengths[key] = 32;
}
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
// Large Preimage Proposals (External) // // Large Preimage Proposals (External) //
......
...@@ -53,4 +53,20 @@ interface IPreimageOracle { ...@@ -53,4 +53,20 @@ interface IPreimageOracle {
/// @param _partOffset The offset of the preimage to read. /// @param _partOffset The offset of the preimage to read.
/// @param _preimage The preimage data. /// @param _preimage The preimage data.
function loadSha256PreimagePart(uint256 _partOffset, bytes calldata _preimage) external; function loadSha256PreimagePart(uint256 _partOffset, bytes calldata _preimage) external;
/// @notice Verifies that `p(_z) = _y` given `_commitment` that corresponds to the polynomial `p(x)` and a KZG
// proof. The value `y` is the pre-image, and the preimage key is `5 ++ keccak256(_commitment ++ z)[1:]`.
/// @param _z Big endian point value. Part of the preimage key.
/// @param _y Big endian point value. The preimage for the key.
/// @param _commitment The commitment to the polynomial. 48 bytes, part of the preimage key.
/// @param _proof The KZG proof, part of the preimage key.
/// @param _partOffset The offset of the preimage to store.
function loadBlobPreimagePart(
uint256 _z,
uint256 _y,
bytes calldata _commitment,
bytes calldata _proof,
uint256 _partOffset
)
external;
} }
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