Commit b37df3e9 authored by smartcontracts's avatar smartcontracts Committed by GitHub

feat: implement bigbond version of getRequiredBond (#9580)

Implements the Big Bonds v1.5 (tm) version of getRequiredBond.
This is a relatively simple bond model designed to carry the
contracts through the next 6-12 months until a fully dynamic bond
model is implemented.
parent 5b23c3d1
......@@ -30,8 +30,8 @@ var (
// FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract.
var FaultDisputeGameMetaData = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_absolutePrestate\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_genesisBlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_genesisOutputRoot\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"_maxGameDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_splitDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gameDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_vm\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"},{\"name\":\"_weth\",\"type\":\"address\",\"internalType\":\"contractIDelayedWETH\"},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"absolutePrestate\",\"inputs\":[],\"outputs\":[{\"name\":\"absolutePrestate_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_execLeafIdx\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"attack\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"claimCredit\",\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimData\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"parentIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"counteredBy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bond\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"position\",\"type\":\"uint128\",\"internalType\":\"Position\"},{\"name\":\"clock\",\"type\":\"uint128\",\"internalType\":\"Clock\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDataLen\",\"inputs\":[],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimedBondFlag\",\"inputs\":[],\"outputs\":[{\"name\":\"claimedBondFlag_\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"createdAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"credit\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defend\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"extraData\",\"inputs\":[],\"outputs\":[{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameData\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"gameDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameType\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisBlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisOutputRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisOutputRoot_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredBond\",\"inputs\":[{\"name\":\"_position\",\"type\":\"uint128\",\"internalType\":\"Position\"}],\"outputs\":[{\"name\":\"requiredBond_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"l1Head\",\"inputs\":[],\"outputs\":[{\"name\":\"l1Head_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2BlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2BlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"l2ChainId_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxGameDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"maxGameDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"move\",\"inputs\":[{\"name\":\"_challengeIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[],\"outputs\":[{\"name\":\"status_\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolveClaim\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolvedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rootClaim\",\"inputs\":[],\"outputs\":[{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"splitDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"splitDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"status\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"step\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_stateData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"vm\",\"inputs\":[],\"outputs\":[{\"name\":\"vm_\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"weth\",\"inputs\":[],\"outputs\":[{\"name\":\"weth_\",\"type\":\"address\",\"internalType\":\"contractIDelayedWETH\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Move\",\"inputs\":[{\"name\":\"parentIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"Claim\"},{\"name\":\"claimant\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Resolved\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumGameStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BondTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotDefendRootClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAboveSplit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockNotExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockTimeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DuplicateStep\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameDepthExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotInProgress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBond\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidLocalIdent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPrestate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSplitDepth\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoCreditToClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfOrderResolution\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRootClaim\",\"inputs\":[{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}]},{\"type\":\"error\",\"name\":\"ValidStep\",\"inputs\":[]}]",
Bin: "0x6101c06040523480156200001257600080fd5b5060405162003fb038038062003fb08339810160408190526200003591620000c6565b858510620000565760405163e62ccf3960e01b815260040160405180910390fd5b63ffffffff90991661016052608097909752610120959095526101409390935260a09190915260c0526001600160401b031660e0526001600160a01b039081166101005216610180526101a05262000177565b80516001600160a01b0381168114620000c157600080fd5b919050565b6000806000806000806000806000806101408b8d031215620000e757600080fd5b8a5163ffffffff81168114620000fc57600080fd5b809a505060208b0151985060408b0151975060608b0151965060808b0151955060a08b0151945060c08b015160018060401b03811681146200013d57600080fd5b93506200014d60e08c01620000a9565b92506200015e6101008c01620000a9565b91506101208b015190509295989b9194979a5092959850565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051613d07620002a9600039600081816106a2015261231901526000818161033e01528181610ad2015281816113aa0152818161179c015261335d01526000818161051a01526123b301526000818161044f01526130090152600081816101ff0152818161148801526121ee0152600081816102ea01528181611c690152611fc50152600081816106f501528181610fd5015261251101526000818161072801528181610dc301528181610e8c01528181611ac4015281816121c40152818161295201528181612b9501528181612cc301528181612dcb0152612ea70152600081816107ca01528181610e2f015281816119b30152611ae50152600081816104df0152611b7b0152613d076000f3fe6080604052600436106101e75760003560e01c80638d450a951161010e578063d6ae3cd5116100a7578063f3f7214e11610079578063fa24f74311610061578063fa24f74314610797578063fa315aa9146107bb578063fdffbb28146107ee57005b8063f3f7214e1461074c578063f8f43ff61461077757005b8063d6ae3cd514610693578063d8cc1a3c146106c6578063e1f0c376146106e6578063ec5e63081461071957005b8063c55cd0c7116100e0578063c55cd0c7146105a8578063c6f0308c146105bb578063cf09e0d014610645578063d5d44d801461066657005b80638d450a95146104d0578063bbdc02db14610503578063bcef3b5514610544578063c395e1ca1461058157005b8063609d33341161018057806368800abf1161015257806368800abf146104405780638129fc1c146104735780638980e0cc1461047b5780638b85902b1461049057005b8063609d3334146103b857806360e27464146103cd578063632247ea146103ed5780636361506d1461040057005b806335fef567116101b957806335fef567146102c85780633a768463146102db5780633fc8cef31461032f57806354fd4d501461036257005b80630356fe3a146101f057806319effeb414610232578063200d2ed2146102785780632810e1d6146102b357005b366101ee57005b005b3480156101fc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561023e57600080fd5b5060005461025f9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610229565b34801561028457600080fd5b506000546102a690700100000000000000000000000000000000900460ff1681565b6040516102299190613741565b3480156102bf57600080fd5b506102a6610801565b6101ee6102d6366004613782565b6109fe565b3480156102e757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610229565b34801561033b57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030a565b34801561036e57600080fd5b506103ab6040518060400160405280600581526020017f302e372e3000000000000000000000000000000000000000000000000000000081525081565b604051610229919061380f565b3480156103c457600080fd5b506103ab610a0e565b3480156103d957600080fd5b506101ee6103e8366004613844565b610a21565b6101ee6103fb36600461387d565b610bcd565b34801561040c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013561021f565b34801561044c57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b6101ee611444565b34801561048757600080fd5b5060015461021f565b34801561049c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013561021f565b3480156104dc57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b34801561050f57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610229565b34801561055057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033561021f565b34801561058d57600080fd5b5061021f61059c3660046138b2565b50662386f26fc1000090565b6101ee6105b6366004613782565b61185f565b3480156105c757600080fd5b506105db6105d63660046138e4565b61186b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610229565b34801561065157600080fd5b5060005461025f9067ffffffffffffffff1681565b34801561067257600080fd5b5061021f610681366004613844565b60026020526000908152604090205481565b34801561069f57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b3480156106d257600080fd5b506101ee6106e1366004613946565b611902565b3480156106f257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061025f565b34801561072557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b34801561075857600080fd5b506040516fffffffffffffffffffffffffffffffff8152602001610229565b34801561078357600080fd5b506101ee6107923660046139d0565b611f37565b3480156107a357600080fd5b506107ac6123b1565b604051610229939291906139fc565b3480156107c757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b6101ee6107fc3660046138e4565b61240e565b600080600054700100000000000000000000000000000000900460ff16600281111561082f5761082f613712565b14610866576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff166108a2576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660016000815481106108ce576108ce613a2a565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff161461090957600161090c565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156109bd576109bd613712565b0217905560028111156109d2576109d2613712565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b610a0a82826000610bcd565b5050565b6060610a1c6040602061286f565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080549082905590819003610a86576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610b88576040519150601f19603f3d011682016040523d82523d6000602084013e610b8d565b606091505b5050905080610bc8576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610bf957610bf9613712565b14610c30576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610c4557610c45613a2a565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610d0a908390869061290616565b90506000610daa826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610dec5750610de97f00000000000000000000000000000000000000000000000000000000000000006002613a88565b81145b8015610df6575084155b15610e2d576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610e87576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eb27f00000000000000000000000000000000000000000000000000000000000000006001613a88565b8103610ec457610ec48688858861290e565b34662386f26fc100001115610f05576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835160009063ffffffff90811614610f65576001856000015163ffffffff1681548110610f3457610f34613a2a565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60c0850151600090610f899067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610fb3610f7c856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610fc79190613a88565b610fd19190613aa0565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82161115611044576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526003602052604090205490915060ff16156110c2576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808d63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008c8152602001908152602001600020600180805490506113579190613aa0565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b1580156113ef57600080fd5b505af1158015611403573d6000803e3d6000fd5b50506040513393508d92508e91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b600554610100900460ff1615611486576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001351161153d576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b60663611156115545763c407e0256000526004601cfd5b6040805160e08101825263ffffffff808252600060208301818152328486019081526fffffffffffffffffffffffffffffffff34818116606088019081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033560808901908152600160a08a0181815242861660c08c0190815282548084018455928a529a5160059092027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915594517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf787018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8860180549185167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9850155915195518116700100000000000000000000000000000000029516949094177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9091015583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b1580156117e257600080fd5b505af11580156117f6573d6000803e3d6000fd5b50506000805467ffffffffffffffff42167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009091161790555050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905550565b610a0a82826001610bcd565b6001818154811061187b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff16600281111561192e5761192e613712565b14611965576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001878154811061197a5761197a613a2a565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506119d97f00000000000000000000000000000000000000000000000000000000000000006001613a88565b611a75826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611ab6576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611ba557611b097f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613aa0565b6001901b611b28846fffffffffffffffffffffffffffffffff16612acf565b67ffffffffffffffff16611b3c9190613ae6565b15611b7957611b70611b6160016fffffffffffffffffffffffffffffffff8716613afa565b865463ffffffff166000612b75565b60030154611b9b565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611bcf565b60038501549150611bcc611b616fffffffffffffffffffffffffffffffff86166001613b2b565b90505b600882901b60088a8a604051611be6929190613b5f565b6040518091039020901b14611c27576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611c328c612c59565b90506000611c41836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290611cbb908f908f908f908f908a90600401613bb8565b6020604051808303816000875af1158015611cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfe9190613bf2565b600485015491149150600090600290611da9906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e45896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e4f9190613c0b565b611e599190613c2c565b67ffffffffffffffff161590508115158103611ea1576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615611ef8576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff166002811115611f6357611f63613712565b14611f9a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080611fa986612c88565b93509350935093506000611fbf858585856130b5565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561202e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120529190613c53565b90506001890361214a5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a846120ae367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015612120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121449190613bf2565b506123a6565b600289036121765773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84896120ae565b600389036121a25773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84876120ae565b600489036122db5760006121e86fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000613174565b612212907f0000000000000000000000000000000000000000000000000000000000000000613a88565b61221d906001613a88565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af11580156122b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d49190613bf2565b50506123a6565b60058903612374576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401612101565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060612407610a0e565b9050909192565b60008054700100000000000000000000000000000000900460ff16600281111561243a5761243a613712565b14612471576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001828154811061248657612486613a2a565b6000918252602082206005919091020160048101549092506124c890700100000000000000000000000000000000900460401c67ffffffffffffffff16610f7c565b60048301549091506000906124fa90700100000000000000000000000000000000900467ffffffffffffffff16610f7c565b6125049042613c0b565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1661253e8284613c70565b67ffffffffffffffff161161257f576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260046020526040902080548515801561259f575060055460ff165b156125d6576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580156125e357508515155b15612648578454640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156126165781612632565b600187015473ffffffffffffffffffffffffffffffffffffffff165b905061263e8188613229565b5050505050505050565b60006fffffffffffffffffffffffffffffffff815b8381101561278e57600085828154811061267957612679613a2a565b60009182526020808320909101548083526004909152604090912054909150156126cf576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600182815481106126e4576126e4613a2a565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff1615801561273d575060048101546fffffffffffffffffffffffffffffffff908116908516115b1561277b576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b50508061278790613c93565b905061265d565b506127d673ffffffffffffffffffffffffffffffffffffffff8316156127b457826127d0565b600188015473ffffffffffffffffffffffffffffffffffffffff165b88613229565b86547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8416021787556000888152600460205260408120612832916136d8565b8760000361263e57600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050565b606060006128a684367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003613a88565b90508267ffffffffffffffff1667ffffffffffffffff8111156128cb576128cb613ccb565b6040519080825280601f01601f1916602001820160405280156128f5576020820181803683370190505b509150828160208401375092915050565b151760011b90565b600061292d6fffffffffffffffffffffffffffffffff84166001613b2b565b9050600061293d82866001612b75565b9050600086901a8380612a30575061297660027f0000000000000000000000000000000000000000000000000000000000000000613ae6565b6004830154600290612a1a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612a249190613c2c565b67ffffffffffffffff16145b15612a885760ff811660011480612a4a575060ff81166002145b612a83576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611534565b612ac6565b60ff811615612ac6576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611534565b50505050505050565b600080612b5c837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b60008082612bbe57612bb96fffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000006133b5565b612bd9565b612bd9856fffffffffffffffffffffffffffffffff1661357c565b905060018481548110612bee57612bee613a2a565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff828116911614612c5157815460018054909163ffffffff16908110612c3c57612c3c613a2a565b90600052602060002090600502019150612bff565b509392505050565b6000806000806000612c6a86612c88565b9350935093509350612c7e848484846130b5565b9695505050505050565b6000806000806000859050600060018281548110612ca857612ca8613a2a565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090612d7f906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612dc0576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090612e87906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169250821115612f0357825463ffffffff16612ecd7f00000000000000000000000000000000000000000000000000000000000000006001613a88565b8303612ed7578391505b60018181548110612eea57612eea613a2a565b9060005260206000209060050201935080945050612dc4565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16612f6c612f57856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015613051576000612fa4836fffffffffffffffffffffffffffffffff16612acf565b67ffffffffffffffff161115613007576000612fde612fd660016fffffffffffffffffffffffffffffffff8616613afa565b896001612b75565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a5061302b9050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600386015460048701549099506fffffffffffffffffffffffffffffffff1697506130a7565b6000613073612fd66fffffffffffffffffffffffffffffffff85166001613b2b565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416810361311b5782826040516020016130fe9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b60405160208183030381529060405280519060200120905061316c565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080613201847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028101546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff000000000000000000000000000000018101613299576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280830180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff17905573ffffffffffffffffffffffffffffffffffffffff8416600090815260209190915260408120805483929061330c908490613a88565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b1580156133a157600080fd5b505af1158015612ac6573d6000803e3d6000fd5b600081613454846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613495576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61349e8361357c565b90508161353d826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116135765761357361355a836001613a88565b6fffffffffffffffffffffffffffffffff831690613628565b90505b92915050565b60008119600183011681613610827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806136b5847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b50805460008255906000526020600020908101906136f691906136f9565b50565b5b8082111561370e57600081556001016136fa565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061377c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561379557600080fd5b50508035926020909101359150565b6000815180845260005b818110156137ca576020818501810151868301820152016137ae565b818111156137dc576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061357360208301846137a4565b73ffffffffffffffffffffffffffffffffffffffff811681146136f657600080fd5b60006020828403121561385657600080fd5b813561386181613822565b9392505050565b8035801515811461387857600080fd5b919050565b60008060006060848603121561389257600080fd5b83359250602084013591506138a960408501613868565b90509250925092565b6000602082840312156138c457600080fd5b81356fffffffffffffffffffffffffffffffff8116811461386157600080fd5b6000602082840312156138f657600080fd5b5035919050565b60008083601f84011261390f57600080fd5b50813567ffffffffffffffff81111561392757600080fd5b60208301915083602082850101111561393f57600080fd5b9250929050565b6000806000806000806080878903121561395f57600080fd5b8635955061396f60208801613868565b9450604087013567ffffffffffffffff8082111561398c57600080fd5b6139988a838b016138fd565b909650945060608901359150808211156139b157600080fd5b506139be89828a016138fd565b979a9699509497509295939492505050565b6000806000606084860312156139e557600080fd5b505081359360208301359350604090920135919050565b63ffffffff84168152826020820152606060408201526000613a2160608301846137a4565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613a9b57613a9b613a59565b500190565b600082821015613ab257613ab2613a59565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613af557613af5613ab7565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015613b2357613b23613a59565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613b5657613b56613a59565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000613bcc606083018789613b6f565b8281036020840152613bdf818688613b6f565b9150508260408301529695505050505050565b600060208284031215613c0457600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015613b2357613b23613a59565b600067ffffffffffffffff80841680613c4757613c47613ab7565b92169190910692915050565b600060208284031215613c6557600080fd5b815161386181613822565b600067ffffffffffffffff808316818516808303821115613b5657613b56613a59565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cc457613cc4613a59565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a",
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_absolutePrestate\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_genesisBlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_genesisOutputRoot\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"_maxGameDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_splitDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gameDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_vm\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"},{\"name\":\"_weth\",\"type\":\"address\",\"internalType\":\"contractIDelayedWETH\"},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"absolutePrestate\",\"inputs\":[],\"outputs\":[{\"name\":\"absolutePrestate_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_execLeafIdx\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"attack\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"claimCredit\",\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimData\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"parentIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"counteredBy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bond\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"position\",\"type\":\"uint128\",\"internalType\":\"Position\"},{\"name\":\"clock\",\"type\":\"uint128\",\"internalType\":\"Clock\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDataLen\",\"inputs\":[],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimedBondFlag\",\"inputs\":[],\"outputs\":[{\"name\":\"claimedBondFlag_\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"createdAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"credit\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defend\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"extraData\",\"inputs\":[],\"outputs\":[{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameData\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"gameDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameType\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisBlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisOutputRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisOutputRoot_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredBond\",\"inputs\":[{\"name\":\"_position\",\"type\":\"uint128\",\"internalType\":\"Position\"}],\"outputs\":[{\"name\":\"requiredBond_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"l1Head\",\"inputs\":[],\"outputs\":[{\"name\":\"l1Head_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2BlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2BlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"l2ChainId_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxGameDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"maxGameDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"move\",\"inputs\":[{\"name\":\"_challengeIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[],\"outputs\":[{\"name\":\"status_\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolveClaim\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolvedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rootClaim\",\"inputs\":[],\"outputs\":[{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"splitDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"splitDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"status\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"step\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_stateData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"vm\",\"inputs\":[],\"outputs\":[{\"name\":\"vm_\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"weth\",\"inputs\":[],\"outputs\":[{\"name\":\"weth_\",\"type\":\"address\",\"internalType\":\"contractIDelayedWETH\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Move\",\"inputs\":[{\"name\":\"parentIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"Claim\"},{\"name\":\"claimant\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Resolved\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumGameStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BondTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotDefendRootClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAboveSplit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockNotExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockTimeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DuplicateStep\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameDepthExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotInProgress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBond\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidLocalIdent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPrestate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSplitDepth\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoCreditToClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfOrderResolution\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRootClaim\",\"inputs\":[{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}]},{\"type\":\"error\",\"name\":\"ValidStep\",\"inputs\":[]}]",
Bin: "0x6101c06040523480156200001257600080fd5b5060405162004808380380620048088339810160408190526200003591620000c6565b858510620000565760405163e62ccf3960e01b815260040160405180910390fd5b63ffffffff90991661016052608097909752610120959095526101409390935260a09190915260c0526001600160401b031660e0526001600160a01b039081166101005216610180526101a05262000177565b80516001600160a01b0381168114620000c157600080fd5b919050565b6000806000806000806000806000806101408b8d031215620000e757600080fd5b8a5163ffffffff81168114620000fc57600080fd5b809a505060208b0151985060408b0151975060608b0151965060808b0151955060a08b0151945060c08b015160018060401b03811681146200013d57600080fd5b93506200014d60e08c01620000a9565b92506200015e6101008c01620000a9565b91506101208b015190509295989b9194979a5092959850565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051614551620002b76000396000818161069b01526124fd01526000818161033e01528181610acb015281816113a4015281816117960152613a3b01526000818161051a015261259701526000818161044f01526136e70152600081816101ff0152818161148201526123d20152600081816102ea01528181611e4d01526121a90152600081816106ee01528181610fcf01526126f501526000818161072101528181610dbc01528181610e8501528181611ca8015281816123a801528181612b3601528181613273015281816133a1015281816134a901526135850152600081816107c301528181610e28015281816119060152818161198c01528181611b970152611cc90152600081816104df0152611d5f01526145516000f3fe6080604052600436106101e75760003560e01c80638d450a951161010e578063d6ae3cd5116100a7578063f3f7214e11610079578063fa24f74311610061578063fa24f74314610790578063fa315aa9146107b4578063fdffbb28146107e757005b8063f3f7214e14610745578063f8f43ff61461077057005b8063d6ae3cd51461068c578063d8cc1a3c146106bf578063e1f0c376146106df578063ec5e63081461071257005b8063c55cd0c7116100e0578063c55cd0c7146105a1578063c6f0308c146105b4578063cf09e0d01461063e578063d5d44d801461065f57005b80638d450a95146104d0578063bbdc02db14610503578063bcef3b5514610544578063c395e1ca1461058157005b8063609d33341161018057806368800abf1161015257806368800abf146104405780638129fc1c146104735780638980e0cc1461047b5780638b85902b1461049057005b8063609d3334146103b857806360e27464146103cd578063632247ea146103ed5780636361506d1461040057005b806335fef567116101b957806335fef567146102c85780633a768463146102db5780633fc8cef31461032f57806354fd4d501461036257005b80630356fe3a146101f057806319effeb414610232578063200d2ed2146102785780632810e1d6146102b357005b366101ee57005b005b3480156101fc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561023e57600080fd5b5060005461025f9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610229565b34801561028457600080fd5b506000546102a690700100000000000000000000000000000000900460ff1681565b6040516102299190613e16565b3480156102bf57600080fd5b506102a66107fa565b6101ee6102d6366004613e57565b6109f7565b3480156102e757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610229565b34801561033b57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030a565b34801561036e57600080fd5b506103ab6040518060400160405280600581526020017f302e372e3100000000000000000000000000000000000000000000000000000081525081565b6040516102299190613ee4565b3480156103c457600080fd5b506103ab610a07565b3480156103d957600080fd5b506101ee6103e8366004613f19565b610a1a565b6101ee6103fb366004613f52565b610bc6565b34801561040c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013561021f565b34801561044c57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b6101ee61143e565b34801561048757600080fd5b5060015461021f565b34801561049c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013561021f565b3480156104dc57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b34801561050f57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610229565b34801561055057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033561021f565b34801561058d57600080fd5b5061021f61059c366004613f87565b611859565b6101ee6105af366004613e57565b611a43565b3480156105c057600080fd5b506105d46105cf366004613fb9565b611a4f565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610229565b34801561064a57600080fd5b5060005461025f9067ffffffffffffffff1681565b34801561066b57600080fd5b5061021f61067a366004613f19565b60026020526000908152604090205481565b34801561069857600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b3480156106cb57600080fd5b506101ee6106da36600461401b565b611ae6565b3480156106eb57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061025f565b34801561071e57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b34801561075157600080fd5b506040516fffffffffffffffffffffffffffffffff8152602001610229565b34801561077c57600080fd5b506101ee61078b3660046140a5565b61211b565b34801561079c57600080fd5b506107a5612595565b604051610229939291906140d1565b3480156107c057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b6101ee6107f5366004613fb9565b6125f2565b600080600054700100000000000000000000000000000000900460ff16600281111561082857610828613de7565b1461085f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff1661089b576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660016000815481106108c7576108c76140ff565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614610902576001610905565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156109b6576109b6613de7565b0217905560028111156109cb576109cb613de7565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b610a0382826000610bc6565b5050565b6060610a1560406020612a53565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080549082905590819003610a7f576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015610b0f57600080fd5b505af1158015610b23573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610b81576040519150601f19603f3d011682016040523d82523d6000602084013e610b86565b606091505b5050905080610bc1576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610bf257610bf2613de7565b14610c29576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610c3e57610c3e6140ff565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610d039083908690612aea16565b90506000610da3826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610de55750610de27f0000000000000000000000000000000000000000000000000000000000000000600261415d565b81145b8015610def575084155b15610e26576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610e80576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eab7f0000000000000000000000000000000000000000000000000000000000000000600161415d565b8103610ebd57610ebd86888588612af2565b34610ec783611859565b1115610eff576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835160009063ffffffff90811614610f5f576001856000015163ffffffff1681548110610f2e57610f2e6140ff565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60c0850151600090610f839067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610fad610f76856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610fc1919061415d565b610fcb9190614175565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff8216111561103e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526003602052604090205490915060ff16156110bc576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808d63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008c8152602001908152602001600020600180805490506113519190614175565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b1580156113e957600080fd5b505af11580156113fd573d6000803e3d6000fd5b50506040513393508d92508e91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b600554610100900460ff1615611480576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013511611537576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b606636111561154e5763c407e0256000526004601cfd5b6040805160e08101825263ffffffff808252600060208301818152328486019081526fffffffffffffffffffffffffffffffff34818116606088019081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033560808901908152600160a08a0181815242861660c08c0190815282548084018455928a529a5160059092027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915594517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf787018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8860180549185167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9850155915195518116700100000000000000000000000000000000029516949094177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9091015583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b1580156117dc57600080fd5b505af11580156117f0573d6000803e3d6000fd5b50506000805467ffffffffffffffff42167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009091161790555050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905550565b6000806118f8836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690507f000000000000000000000000000000000000000000000000000000000000000081111561195e576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a80630bebc200600061197983836141bb565b9050670de0b6b3a764000060006119b0827f00000000000000000000000000000000000000000000000000000000000000006141cf565b905060006119ce6119c9670de0b6b3a7640000866141cf565b612cb3565b905060006119dc8484612f0e565b905060006119ea8383612f5d565b905060006119f782612f8b565b90506000611a1682611a11670de0b6b3a76400008f6141cf565b613173565b90506000611a248b83612f5d565b9050611a30818d6141cf565b9f9e505050505050505050505050505050565b610a0382826001610bc6565b60018181548110611a5f57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115611b1257611b12613de7565b14611b49576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018781548110611b5e57611b5e6140ff565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611bbd7f0000000000000000000000000000000000000000000000000000000000000000600161415d565b611c59826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611c9a576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611d8957611ced7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614175565b6001901b611d0c846fffffffffffffffffffffffffffffffff166131ad565b67ffffffffffffffff16611d20919061420c565b15611d5d57611d54611d4560016fffffffffffffffffffffffffffffffff8716614220565b865463ffffffff166000613253565b60030154611d7f565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611db3565b60038501549150611db0611d456fffffffffffffffffffffffffffffffff86166001614251565b90505b600882901b60088a8a604051611dca929190614285565b6040518091039020901b14611e0b576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e168c613337565b90506000611e25836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290611e9f908f908f908f908f908a906004016142de565b6020604051808303816000875af1158015611ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee29190614318565b600485015491149150600090600290611f8d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612029896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6120339190614331565b61203d9190614352565b67ffffffffffffffff161590508115158103612085576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff16156120dc576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214757612147613de7565b1461217e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061218d86613366565b935093509350935060006121a385858585613793565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122369190614379565b90506001890361232e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84612292367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015612304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123289190614318565b5061258a565b6002890361235a5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489612292565b600389036123865773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487612292565b600489036124bf5760006123cc6fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000613852565b6123f6907f000000000000000000000000000000000000000000000000000000000000000061415d565b61240190600161415d565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015612494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b89190614318565b505061258a565b60058903612558576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122e5565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560606125eb610a07565b9050909192565b60008054700100000000000000000000000000000000900460ff16600281111561261e5761261e613de7565b14612655576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001828154811061266a5761266a6140ff565b6000918252602082206005919091020160048101549092506126ac90700100000000000000000000000000000000900460401c67ffffffffffffffff16610f76565b60048301549091506000906126de90700100000000000000000000000000000000900467ffffffffffffffff16610f76565b6126e89042614331565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c166127228284614396565b67ffffffffffffffff1611612763576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600460205260409020805485158015612783575060055460ff165b156127ba576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580156127c757508515155b1561282c578454640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156127fa5781612816565b600187015473ffffffffffffffffffffffffffffffffffffffff165b90506128228188613907565b5050505050505050565b60006fffffffffffffffffffffffffffffffff815b8381101561297257600085828154811061285d5761285d6140ff565b60009182526020808320909101548083526004909152604090912054909150156128b3576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600182815481106128c8576128c86140ff565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612921575060048101546fffffffffffffffffffffffffffffffff908116908516115b1561295f576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b50508061296b906143b9565b9050612841565b506129ba73ffffffffffffffffffffffffffffffffffffffff83161561299857826129b4565b600188015473ffffffffffffffffffffffffffffffffffffffff165b88613907565b86547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8416021787556000888152600460205260408120612a1691613dad565b8760000361282257600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050565b60606000612a8a84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900361415d565b90508267ffffffffffffffff1667ffffffffffffffff811115612aaf57612aaf6143f1565b6040519080825280601f01601f191660200182016040528015612ad9576020820181803683370190505b509150828160208401375092915050565b151760011b90565b6000612b116fffffffffffffffffffffffffffffffff84166001614251565b90506000612b2182866001613253565b9050600086901a8380612c145750612b5a60027f000000000000000000000000000000000000000000000000000000000000000061420c565b6004830154600290612bfe906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612c089190614352565b67ffffffffffffffff16145b15612c6c5760ff811660011480612c2e575060ff81166002145b612c67576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161152e565b612caa565b60ff811615612caa576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161152e565b50505050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213612d1257631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202612f4b57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215612f7b5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213612fb957919050565b680755bf798b4a1bf1e58212612fd75763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006131a4670de0b6b3a76400008361318b86612cb3565b6131959190614420565b61319f91906144dc565b612f8b565b90505b92915050565b60008061323a837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000808261329c576132976fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000613a93565b6132b7565b6132b7856fffffffffffffffffffffffffffffffff16613c51565b9050600184815481106132cc576132cc6140ff565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461332f57815460018054909163ffffffff1690811061331a5761331a6140ff565b906000526020600020906005020191506132dd565b509392505050565b600080600080600061334886613366565b935093509350935061335c84848484613793565b9695505050505050565b6000806000806000859050600060018281548110613386576133866140ff565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000009061345d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161161349e576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090613565906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1692508211156135e157825463ffffffff166135ab7f0000000000000000000000000000000000000000000000000000000000000000600161415d565b83036135b5578391505b600181815481106135c8576135c86140ff565b90600052602060002090600502019350809450506134a2565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661364a613635856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561372f576000613682836fffffffffffffffffffffffffffffffff166131ad565b67ffffffffffffffff1611156136e55760006136bc6136b460016fffffffffffffffffffffffffffffffff8616614220565b896001613253565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506137099050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750613785565b60006137516136b46fffffffffffffffffffffffffffffffff85166001614251565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff841681036137f95782826040516020016137dc9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b60405160208183030381529060405280519060200120905061384a565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b6000806138df847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028101546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff000000000000000000000000000000018101613977576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280830180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff17905573ffffffffffffffffffffffffffffffffffffffff841660009081526020919091526040812080548392906139ea90849061415d565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b158015613a7f57600080fd5b505af1158015612caa573d6000803e3d6000fd5b600081613b32846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613b73576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b7c83613c51565b905081613c1b826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116131a7576131a4613c3883600161415d565b6fffffffffffffffffffffffffffffffff831690613cfd565b60008119600183011681613ce5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080613d8a847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b5080546000825590600052602060002090810190613dcb9190613dce565b50565b5b80821115613de35760008155600101613dcf565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613e51577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215613e6a57600080fd5b50508035926020909101359150565b6000815180845260005b81811015613e9f57602081850181015186830182015201613e83565b81811115613eb1576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006131a46020830184613e79565b73ffffffffffffffffffffffffffffffffffffffff81168114613dcb57600080fd5b600060208284031215613f2b57600080fd5b8135613f3681613ef7565b9392505050565b80358015158114613f4d57600080fd5b919050565b600080600060608486031215613f6757600080fd5b8335925060208401359150613f7e60408501613f3d565b90509250925092565b600060208284031215613f9957600080fd5b81356fffffffffffffffffffffffffffffffff81168114613f3657600080fd5b600060208284031215613fcb57600080fd5b5035919050565b60008083601f840112613fe457600080fd5b50813567ffffffffffffffff811115613ffc57600080fd5b60208301915083602082850101111561401457600080fd5b9250929050565b6000806000806000806080878903121561403457600080fd5b8635955061404460208801613f3d565b9450604087013567ffffffffffffffff8082111561406157600080fd5b61406d8a838b01613fd2565b9096509450606089013591508082111561408657600080fd5b5061409389828a01613fd2565b979a9699509497509295939492505050565b6000806000606084860312156140ba57600080fd5b505081359360208301359350604090920135919050565b63ffffffff841681528260208201526060604082015260006140f66060830184613e79565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156141705761417061412e565b500190565b6000828210156141875761418761412e565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826141ca576141ca61418c565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142075761420761412e565b500290565b60008261421b5761421b61418c565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156142495761424961412e565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561427c5761427c61412e565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006142f2606083018789614295565b8281036020840152614305818688614295565b9150508260408301529695505050505050565b60006020828403121561432a57600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156142495761424961412e565b600067ffffffffffffffff8084168061436d5761436d61418c565b92169190910692915050565b60006020828403121561438b57600080fd5b8151613f3681613ef7565b600067ffffffffffffffff80831681851680830382111561427c5761427c61412e565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143ea576143ea61412e565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156144615761446161412e565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561449c5761449c61412e565b600087129250878205871284841616156144b8576144b861412e565b878505871281841616156144ce576144ce61412e565b505050929093029392505050565b6000826144eb576144eb61418c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561453f5761453f61412e565b50059056fea164736f6c634300080f000a",
}
// FaultDisputeGameABI is the input ABI used to generate the binding from.
......@@ -633,7 +633,7 @@ func (_FaultDisputeGame *FaultDisputeGameCallerSession) GenesisOutputRoot() ([32
// GetRequiredBond is a free data retrieval call binding the contract method 0xc395e1ca.
//
// Solidity: function getRequiredBond(uint128 _position) pure returns(uint256 requiredBond_)
// Solidity: function getRequiredBond(uint128 _position) view returns(uint256 requiredBond_)
func (_FaultDisputeGame *FaultDisputeGameCaller) GetRequiredBond(opts *bind.CallOpts, _position *big.Int) (*big.Int, error) {
var out []interface{}
err := _FaultDisputeGame.contract.Call(opts, &out, "getRequiredBond", _position)
......@@ -650,14 +650,14 @@ func (_FaultDisputeGame *FaultDisputeGameCaller) GetRequiredBond(opts *bind.Call
// GetRequiredBond is a free data retrieval call binding the contract method 0xc395e1ca.
//
// Solidity: function getRequiredBond(uint128 _position) pure returns(uint256 requiredBond_)
// Solidity: function getRequiredBond(uint128 _position) view returns(uint256 requiredBond_)
func (_FaultDisputeGame *FaultDisputeGameSession) GetRequiredBond(_position *big.Int) (*big.Int, error) {
return _FaultDisputeGame.Contract.GetRequiredBond(&_FaultDisputeGame.CallOpts, _position)
}
// GetRequiredBond is a free data retrieval call binding the contract method 0xc395e1ca.
//
// Solidity: function getRequiredBond(uint128 _position) pure returns(uint256 requiredBond_)
// Solidity: function getRequiredBond(uint128 _position) view returns(uint256 requiredBond_)
func (_FaultDisputeGame *FaultDisputeGameCallerSession) GetRequiredBond(_position *big.Int) (*big.Int, error) {
return _FaultDisputeGame.Contract.GetRequiredBond(&_FaultDisputeGame.CallOpts, _position)
}
......
......@@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr
var FaultDisputeGameStorageLayout = new(solc.StorageLayout)
var FaultDisputeGameDeployedBin = "0x6080604052600436106101e75760003560e01c80638d450a951161010e578063d6ae3cd5116100a7578063f3f7214e11610079578063fa24f74311610061578063fa24f74314610797578063fa315aa9146107bb578063fdffbb28146107ee57005b8063f3f7214e1461074c578063f8f43ff61461077757005b8063d6ae3cd514610693578063d8cc1a3c146106c6578063e1f0c376146106e6578063ec5e63081461071957005b8063c55cd0c7116100e0578063c55cd0c7146105a8578063c6f0308c146105bb578063cf09e0d014610645578063d5d44d801461066657005b80638d450a95146104d0578063bbdc02db14610503578063bcef3b5514610544578063c395e1ca1461058157005b8063609d33341161018057806368800abf1161015257806368800abf146104405780638129fc1c146104735780638980e0cc1461047b5780638b85902b1461049057005b8063609d3334146103b857806360e27464146103cd578063632247ea146103ed5780636361506d1461040057005b806335fef567116101b957806335fef567146102c85780633a768463146102db5780633fc8cef31461032f57806354fd4d501461036257005b80630356fe3a146101f057806319effeb414610232578063200d2ed2146102785780632810e1d6146102b357005b366101ee57005b005b3480156101fc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561023e57600080fd5b5060005461025f9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610229565b34801561028457600080fd5b506000546102a690700100000000000000000000000000000000900460ff1681565b6040516102299190613741565b3480156102bf57600080fd5b506102a6610801565b6101ee6102d6366004613782565b6109fe565b3480156102e757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610229565b34801561033b57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030a565b34801561036e57600080fd5b506103ab6040518060400160405280600581526020017f302e372e3000000000000000000000000000000000000000000000000000000081525081565b604051610229919061380f565b3480156103c457600080fd5b506103ab610a0e565b3480156103d957600080fd5b506101ee6103e8366004613844565b610a21565b6101ee6103fb36600461387d565b610bcd565b34801561040c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013561021f565b34801561044c57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b6101ee611444565b34801561048757600080fd5b5060015461021f565b34801561049c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013561021f565b3480156104dc57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b34801561050f57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610229565b34801561055057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033561021f565b34801561058d57600080fd5b5061021f61059c3660046138b2565b50662386f26fc1000090565b6101ee6105b6366004613782565b61185f565b3480156105c757600080fd5b506105db6105d63660046138e4565b61186b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610229565b34801561065157600080fd5b5060005461025f9067ffffffffffffffff1681565b34801561067257600080fd5b5061021f610681366004613844565b60026020526000908152604090205481565b34801561069f57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b3480156106d257600080fd5b506101ee6106e1366004613946565b611902565b3480156106f257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061025f565b34801561072557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b34801561075857600080fd5b506040516fffffffffffffffffffffffffffffffff8152602001610229565b34801561078357600080fd5b506101ee6107923660046139d0565b611f37565b3480156107a357600080fd5b506107ac6123b1565b604051610229939291906139fc565b3480156107c757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b6101ee6107fc3660046138e4565b61240e565b600080600054700100000000000000000000000000000000900460ff16600281111561082f5761082f613712565b14610866576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff166108a2576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660016000815481106108ce576108ce613a2a565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff161461090957600161090c565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156109bd576109bd613712565b0217905560028111156109d2576109d2613712565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b610a0a82826000610bcd565b5050565b6060610a1c6040602061286f565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080549082905590819003610a86576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610b88576040519150601f19603f3d011682016040523d82523d6000602084013e610b8d565b606091505b5050905080610bc8576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610bf957610bf9613712565b14610c30576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610c4557610c45613a2a565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610d0a908390869061290616565b90506000610daa826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610dec5750610de97f00000000000000000000000000000000000000000000000000000000000000006002613a88565b81145b8015610df6575084155b15610e2d576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610e87576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eb27f00000000000000000000000000000000000000000000000000000000000000006001613a88565b8103610ec457610ec48688858861290e565b34662386f26fc100001115610f05576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835160009063ffffffff90811614610f65576001856000015163ffffffff1681548110610f3457610f34613a2a565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60c0850151600090610f899067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610fb3610f7c856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610fc79190613a88565b610fd19190613aa0565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff82161115611044576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526003602052604090205490915060ff16156110c2576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808d63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008c8152602001908152602001600020600180805490506113579190613aa0565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b1580156113ef57600080fd5b505af1158015611403573d6000803e3d6000fd5b50506040513393508d92508e91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b600554610100900460ff1615611486576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001351161153d576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b60663611156115545763c407e0256000526004601cfd5b6040805160e08101825263ffffffff808252600060208301818152328486019081526fffffffffffffffffffffffffffffffff34818116606088019081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033560808901908152600160a08a0181815242861660c08c0190815282548084018455928a529a5160059092027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915594517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf787018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8860180549185167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9850155915195518116700100000000000000000000000000000000029516949094177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9091015583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b1580156117e257600080fd5b505af11580156117f6573d6000803e3d6000fd5b50506000805467ffffffffffffffff42167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009091161790555050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905550565b610a0a82826001610bcd565b6001818154811061187b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff16600281111561192e5761192e613712565b14611965576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001878154811061197a5761197a613a2a565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506119d97f00000000000000000000000000000000000000000000000000000000000000006001613a88565b611a75826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611ab6576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611ba557611b097f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613aa0565b6001901b611b28846fffffffffffffffffffffffffffffffff16612acf565b67ffffffffffffffff16611b3c9190613ae6565b15611b7957611b70611b6160016fffffffffffffffffffffffffffffffff8716613afa565b865463ffffffff166000612b75565b60030154611b9b565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611bcf565b60038501549150611bcc611b616fffffffffffffffffffffffffffffffff86166001613b2b565b90505b600882901b60088a8a604051611be6929190613b5f565b6040518091039020901b14611c27576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611c328c612c59565b90506000611c41836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290611cbb908f908f908f908f908a90600401613bb8565b6020604051808303816000875af1158015611cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfe9190613bf2565b600485015491149150600090600290611da9906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e45896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611e4f9190613c0b565b611e599190613c2c565b67ffffffffffffffff161590508115158103611ea1576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615611ef8576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff166002811115611f6357611f63613712565b14611f9a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080611fa986612c88565b93509350935093506000611fbf858585856130b5565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561202e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120529190613c53565b90506001890361214a5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a846120ae367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015612120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121449190613bf2565b506123a6565b600289036121765773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84896120ae565b600389036121a25773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84876120ae565b600489036122db5760006121e86fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000613174565b612212907f0000000000000000000000000000000000000000000000000000000000000000613a88565b61221d906001613a88565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af11580156122b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d49190613bf2565b50506123a6565b60058903612374576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401612101565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060612407610a0e565b9050909192565b60008054700100000000000000000000000000000000900460ff16600281111561243a5761243a613712565b14612471576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001828154811061248657612486613a2a565b6000918252602082206005919091020160048101549092506124c890700100000000000000000000000000000000900460401c67ffffffffffffffff16610f7c565b60048301549091506000906124fa90700100000000000000000000000000000000900467ffffffffffffffff16610f7c565b6125049042613c0b565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1661253e8284613c70565b67ffffffffffffffff161161257f576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260046020526040902080548515801561259f575060055460ff165b156125d6576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580156125e357508515155b15612648578454640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156126165781612632565b600187015473ffffffffffffffffffffffffffffffffffffffff165b905061263e8188613229565b5050505050505050565b60006fffffffffffffffffffffffffffffffff815b8381101561278e57600085828154811061267957612679613a2a565b60009182526020808320909101548083526004909152604090912054909150156126cf576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600182815481106126e4576126e4613a2a565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff1615801561273d575060048101546fffffffffffffffffffffffffffffffff908116908516115b1561277b576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b50508061278790613c93565b905061265d565b506127d673ffffffffffffffffffffffffffffffffffffffff8316156127b457826127d0565b600188015473ffffffffffffffffffffffffffffffffffffffff165b88613229565b86547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8416021787556000888152600460205260408120612832916136d8565b8760000361263e57600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050565b606060006128a684367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003613a88565b90508267ffffffffffffffff1667ffffffffffffffff8111156128cb576128cb613ccb565b6040519080825280601f01601f1916602001820160405280156128f5576020820181803683370190505b509150828160208401375092915050565b151760011b90565b600061292d6fffffffffffffffffffffffffffffffff84166001613b2b565b9050600061293d82866001612b75565b9050600086901a8380612a30575061297660027f0000000000000000000000000000000000000000000000000000000000000000613ae6565b6004830154600290612a1a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612a249190613c2c565b67ffffffffffffffff16145b15612a885760ff811660011480612a4a575060ff81166002145b612a83576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611534565b612ac6565b60ff811615612ac6576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611534565b50505050505050565b600080612b5c837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b60008082612bbe57612bb96fffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000006133b5565b612bd9565b612bd9856fffffffffffffffffffffffffffffffff1661357c565b905060018481548110612bee57612bee613a2a565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff828116911614612c5157815460018054909163ffffffff16908110612c3c57612c3c613a2a565b90600052602060002090600502019150612bff565b509392505050565b6000806000806000612c6a86612c88565b9350935093509350612c7e848484846130b5565b9695505050505050565b6000806000806000859050600060018281548110612ca857612ca8613a2a565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090612d7f906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612dc0576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090612e87906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169250821115612f0357825463ffffffff16612ecd7f00000000000000000000000000000000000000000000000000000000000000006001613a88565b8303612ed7578391505b60018181548110612eea57612eea613a2a565b9060005260206000209060050201935080945050612dc4565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16612f6c612f57856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015613051576000612fa4836fffffffffffffffffffffffffffffffff16612acf565b67ffffffffffffffff161115613007576000612fde612fd660016fffffffffffffffffffffffffffffffff8616613afa565b896001612b75565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a5061302b9050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600386015460048701549099506fffffffffffffffffffffffffffffffff1697506130a7565b6000613073612fd66fffffffffffffffffffffffffffffffff85166001613b2b565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416810361311b5782826040516020016130fe9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b60405160208183030381529060405280519060200120905061316c565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080613201847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028101546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff000000000000000000000000000000018101613299576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280830180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff17905573ffffffffffffffffffffffffffffffffffffffff8416600090815260209190915260408120805483929061330c908490613a88565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b1580156133a157600080fd5b505af1158015612ac6573d6000803e3d6000fd5b600081613454846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613495576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61349e8361357c565b90508161353d826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116135765761357361355a836001613a88565b6fffffffffffffffffffffffffffffffff831690613628565b90505b92915050565b60008119600183011681613610827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b6000806136b5847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b50805460008255906000526020600020908101906136f691906136f9565b50565b5b8082111561370e57600081556001016136fa565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061377c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561379557600080fd5b50508035926020909101359150565b6000815180845260005b818110156137ca576020818501810151868301820152016137ae565b818111156137dc576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061357360208301846137a4565b73ffffffffffffffffffffffffffffffffffffffff811681146136f657600080fd5b60006020828403121561385657600080fd5b813561386181613822565b9392505050565b8035801515811461387857600080fd5b919050565b60008060006060848603121561389257600080fd5b83359250602084013591506138a960408501613868565b90509250925092565b6000602082840312156138c457600080fd5b81356fffffffffffffffffffffffffffffffff8116811461386157600080fd5b6000602082840312156138f657600080fd5b5035919050565b60008083601f84011261390f57600080fd5b50813567ffffffffffffffff81111561392757600080fd5b60208301915083602082850101111561393f57600080fd5b9250929050565b6000806000806000806080878903121561395f57600080fd5b8635955061396f60208801613868565b9450604087013567ffffffffffffffff8082111561398c57600080fd5b6139988a838b016138fd565b909650945060608901359150808211156139b157600080fd5b506139be89828a016138fd565b979a9699509497509295939492505050565b6000806000606084860312156139e557600080fd5b505081359360208301359350604090920135919050565b63ffffffff84168152826020820152606060408201526000613a2160608301846137a4565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613a9b57613a9b613a59565b500190565b600082821015613ab257613ab2613a59565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613af557613af5613ab7565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015613b2357613b23613a59565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613b5657613b56613a59565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000613bcc606083018789613b6f565b8281036020840152613bdf818688613b6f565b9150508260408301529695505050505050565b600060208284031215613c0457600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015613b2357613b23613a59565b600067ffffffffffffffff80841680613c4757613c47613ab7565b92169190910692915050565b600060208284031215613c6557600080fd5b815161386181613822565b600067ffffffffffffffff808316818516808303821115613b5657613b56613a59565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cc457613cc4613a59565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a"
var FaultDisputeGameDeployedBin = "0x6080604052600436106101e75760003560e01c80638d450a951161010e578063d6ae3cd5116100a7578063f3f7214e11610079578063fa24f74311610061578063fa24f74314610790578063fa315aa9146107b4578063fdffbb28146107e757005b8063f3f7214e14610745578063f8f43ff61461077057005b8063d6ae3cd51461068c578063d8cc1a3c146106bf578063e1f0c376146106df578063ec5e63081461071257005b8063c55cd0c7116100e0578063c55cd0c7146105a1578063c6f0308c146105b4578063cf09e0d01461063e578063d5d44d801461065f57005b80638d450a95146104d0578063bbdc02db14610503578063bcef3b5514610544578063c395e1ca1461058157005b8063609d33341161018057806368800abf1161015257806368800abf146104405780638129fc1c146104735780638980e0cc1461047b5780638b85902b1461049057005b8063609d3334146103b857806360e27464146103cd578063632247ea146103ed5780636361506d1461040057005b806335fef567116101b957806335fef567146102c85780633a768463146102db5780633fc8cef31461032f57806354fd4d501461036257005b80630356fe3a146101f057806319effeb414610232578063200d2ed2146102785780632810e1d6146102b357005b366101ee57005b005b3480156101fc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561023e57600080fd5b5060005461025f9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610229565b34801561028457600080fd5b506000546102a690700100000000000000000000000000000000900460ff1681565b6040516102299190613e16565b3480156102bf57600080fd5b506102a66107fa565b6101ee6102d6366004613e57565b6109f7565b3480156102e757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610229565b34801561033b57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030a565b34801561036e57600080fd5b506103ab6040518060400160405280600581526020017f302e372e3100000000000000000000000000000000000000000000000000000081525081565b6040516102299190613ee4565b3480156103c457600080fd5b506103ab610a07565b3480156103d957600080fd5b506101ee6103e8366004613f19565b610a1a565b6101ee6103fb366004613f52565b610bc6565b34801561040c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013561021f565b34801561044c57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b6101ee61143e565b34801561048757600080fd5b5060015461021f565b34801561049c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013561021f565b3480156104dc57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b34801561050f57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610229565b34801561055057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033561021f565b34801561058d57600080fd5b5061021f61059c366004613f87565b611859565b6101ee6105af366004613e57565b611a43565b3480156105c057600080fd5b506105d46105cf366004613fb9565b611a4f565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610229565b34801561064a57600080fd5b5060005461025f9067ffffffffffffffff1681565b34801561066b57600080fd5b5061021f61067a366004613f19565b60026020526000908152604090205481565b34801561069857600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b3480156106cb57600080fd5b506101ee6106da36600461401b565b611ae6565b3480156106eb57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061025f565b34801561071e57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b34801561075157600080fd5b506040516fffffffffffffffffffffffffffffffff8152602001610229565b34801561077c57600080fd5b506101ee61078b3660046140a5565b61211b565b34801561079c57600080fd5b506107a5612595565b604051610229939291906140d1565b3480156107c057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061021f565b6101ee6107f5366004613fb9565b6125f2565b600080600054700100000000000000000000000000000000900460ff16600281111561082857610828613de7565b1461085f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460ff1661089b576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660016000815481106108c7576108c76140ff565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614610902576001610905565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156109b6576109b6613de7565b0217905560028111156109cb576109cb613de7565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b610a0382826000610bc6565b5050565b6060610a1560406020612a53565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080549082905590819003610a7f576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015610b0f57600080fd5b505af1158015610b23573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610b81576040519150601f19603f3d011682016040523d82523d6000602084013e610b86565b606091505b5050905080610bc1576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610bf257610bf2613de7565b14610c29576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610c3e57610c3e6140ff565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610d039083908690612aea16565b90506000610da3826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610de55750610de27f0000000000000000000000000000000000000000000000000000000000000000600261415d565b81145b8015610def575084155b15610e26576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610e80576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eab7f0000000000000000000000000000000000000000000000000000000000000000600161415d565b8103610ebd57610ebd86888588612af2565b34610ec783611859565b1115610eff576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835160009063ffffffff90811614610f5f576001856000015163ffffffff1681548110610f2e57610f2e6140ff565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60c0850151600090610f839067ffffffffffffffff165b67ffffffffffffffff1690565b67ffffffffffffffff1642610fad610f76856fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610fc1919061415d565b610fcb9190614175565b90507f000000000000000000000000000000000000000000000000000000000000000060011c677fffffffffffffff1667ffffffffffffffff8216111561103e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526003602052604090205490915060ff16156110bc576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808d63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008c8152602001908152602001600020600180805490506113519190614175565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b1580156113e957600080fd5b505af11580156113fd573d6000803e3d6000fd5b50506040513393508d92508e91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b600554610100900460ff1615611480576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013511611537576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b606636111561154e5763c407e0256000526004601cfd5b6040805160e08101825263ffffffff808252600060208301818152328486019081526fffffffffffffffffffffffffffffffff34818116606088019081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033560808901908152600160a08a0181815242861660c08c0190815282548084018455928a529a5160059092027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915594517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf787018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8860180549185167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9850155915195518116700100000000000000000000000000000000029516949094177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9091015583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b1580156117dc57600080fd5b505af11580156117f0573d6000803e3d6000fd5b50506000805467ffffffffffffffff42167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009091161790555050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905550565b6000806118f8836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690507f000000000000000000000000000000000000000000000000000000000000000081111561195e576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a80630bebc200600061197983836141bb565b9050670de0b6b3a764000060006119b0827f00000000000000000000000000000000000000000000000000000000000000006141cf565b905060006119ce6119c9670de0b6b3a7640000866141cf565b612cb3565b905060006119dc8484612f0e565b905060006119ea8383612f5d565b905060006119f782612f8b565b90506000611a1682611a11670de0b6b3a76400008f6141cf565b613173565b90506000611a248b83612f5d565b9050611a30818d6141cf565b9f9e505050505050505050505050505050565b610a0382826001610bc6565b60018181548110611a5f57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115611b1257611b12613de7565b14611b49576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018781548110611b5e57611b5e6140ff565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050611bbd7f0000000000000000000000000000000000000000000000000000000000000000600161415d565b611c59826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611c9a576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611d8957611ced7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614175565b6001901b611d0c846fffffffffffffffffffffffffffffffff166131ad565b67ffffffffffffffff16611d20919061420c565b15611d5d57611d54611d4560016fffffffffffffffffffffffffffffffff8716614220565b865463ffffffff166000613253565b60030154611d7f565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611db3565b60038501549150611db0611d456fffffffffffffffffffffffffffffffff86166001614251565b90505b600882901b60088a8a604051611dca929190614285565b6040518091039020901b14611e0b576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e168c613337565b90506000611e25836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290611e9f908f908f908f908f908a906004016142de565b6020604051808303816000875af1158015611ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee29190614318565b600485015491149150600090600290611f8d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612029896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6120339190614331565b61203d9190614352565b67ffffffffffffffff161590508115158103612085576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff16156120dc576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214757612147613de7565b1461217e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061218d86613366565b935093509350935060006121a385858585613793565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122369190614379565b90506001890361232e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84612292367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015612304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123289190614318565b5061258a565b6002890361235a5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489612292565b600389036123865773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487612292565b600489036124bf5760006123cc6fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000613852565b6123f6907f000000000000000000000000000000000000000000000000000000000000000061415d565b61240190600161415d565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015612494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b89190614318565b505061258a565b60058903612558576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122e5565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560606125eb610a07565b9050909192565b60008054700100000000000000000000000000000000900460ff16600281111561261e5761261e613de7565b14612655576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001828154811061266a5761266a6140ff565b6000918252602082206005919091020160048101549092506126ac90700100000000000000000000000000000000900460401c67ffffffffffffffff16610f76565b60048301549091506000906126de90700100000000000000000000000000000000900467ffffffffffffffff16610f76565b6126e89042614331565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c166127228284614396565b67ffffffffffffffff1611612763576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600460205260409020805485158015612783575060055460ff165b156127ba576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580156127c757508515155b1561282c578454640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156127fa5781612816565b600187015473ffffffffffffffffffffffffffffffffffffffff165b90506128228188613907565b5050505050505050565b60006fffffffffffffffffffffffffffffffff815b8381101561297257600085828154811061285d5761285d6140ff565b60009182526020808320909101548083526004909152604090912054909150156128b3576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600182815481106128c8576128c86140ff565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612921575060048101546fffffffffffffffffffffffffffffffff908116908516115b1561295f576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b50508061296b906143b9565b9050612841565b506129ba73ffffffffffffffffffffffffffffffffffffffff83161561299857826129b4565b600188015473ffffffffffffffffffffffffffffffffffffffff165b88613907565b86547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8416021787556000888152600460205260408120612a1691613dad565b8760000361282257600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050505050505050565b60606000612a8a84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900361415d565b90508267ffffffffffffffff1667ffffffffffffffff811115612aaf57612aaf6143f1565b6040519080825280601f01601f191660200182016040528015612ad9576020820181803683370190505b509150828160208401375092915050565b151760011b90565b6000612b116fffffffffffffffffffffffffffffffff84166001614251565b90506000612b2182866001613253565b9050600086901a8380612c145750612b5a60027f000000000000000000000000000000000000000000000000000000000000000061420c565b6004830154600290612bfe906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612c089190614352565b67ffffffffffffffff16145b15612c6c5760ff811660011480612c2e575060ff81166002145b612c67576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161152e565b612caa565b60ff811615612caa576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161152e565b50505050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213612d1257631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202612f4b57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215612f7b5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213612fb957919050565b680755bf798b4a1bf1e58212612fd75763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006131a4670de0b6b3a76400008361318b86612cb3565b6131959190614420565b61319f91906144dc565b612f8b565b90505b92915050565b60008061323a837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000808261329c576132976fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000613a93565b6132b7565b6132b7856fffffffffffffffffffffffffffffffff16613c51565b9050600184815481106132cc576132cc6140ff565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461332f57815460018054909163ffffffff1690811061331a5761331a6140ff565b906000526020600020906005020191506132dd565b509392505050565b600080600080600061334886613366565b935093509350935061335c84848484613793565b9695505050505050565b6000806000806000859050600060018281548110613386576133866140ff565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000009061345d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161161349e576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090613565906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1692508211156135e157825463ffffffff166135ab7f0000000000000000000000000000000000000000000000000000000000000000600161415d565b83036135b5578391505b600181815481106135c8576135c86140ff565b90600052602060002090600502019350809450506134a2565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661364a613635856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561372f576000613682836fffffffffffffffffffffffffffffffff166131ad565b67ffffffffffffffff1611156136e55760006136bc6136b460016fffffffffffffffffffffffffffffffff8616614220565b896001613253565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506137099050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750613785565b60006137516136b46fffffffffffffffffffffffffffffffff85166001614251565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff841681036137f95782826040516020016137dc9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b60405160208183030381529060405280519060200120905061384a565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b6000806138df847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60028101546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff000000000000000000000000000000018101613977576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280830180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff17905573ffffffffffffffffffffffffffffffffffffffff841660009081526020919091526040812080548392906139ea90849061415d565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b158015613a7f57600080fd5b505af1158015612caa573d6000803e3d6000fd5b600081613b32846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611613b73576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b7c83613c51565b905081613c1b826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16116131a7576131a4613c3883600161415d565b6fffffffffffffffffffffffffffffffff831690613cfd565b60008119600183011681613ce5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080613d8a847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b5080546000825590600052602060002090810190613dcb9190613dce565b50565b5b80821115613de35760008155600101613dcf565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613e51577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215613e6a57600080fd5b50508035926020909101359150565b6000815180845260005b81811015613e9f57602081850181015186830182015201613e83565b81811115613eb1576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006131a46020830184613e79565b73ffffffffffffffffffffffffffffffffffffffff81168114613dcb57600080fd5b600060208284031215613f2b57600080fd5b8135613f3681613ef7565b9392505050565b80358015158114613f4d57600080fd5b919050565b600080600060608486031215613f6757600080fd5b8335925060208401359150613f7e60408501613f3d565b90509250925092565b600060208284031215613f9957600080fd5b81356fffffffffffffffffffffffffffffffff81168114613f3657600080fd5b600060208284031215613fcb57600080fd5b5035919050565b60008083601f840112613fe457600080fd5b50813567ffffffffffffffff811115613ffc57600080fd5b60208301915083602082850101111561401457600080fd5b9250929050565b6000806000806000806080878903121561403457600080fd5b8635955061404460208801613f3d565b9450604087013567ffffffffffffffff8082111561406157600080fd5b61406d8a838b01613fd2565b9096509450606089013591508082111561408657600080fd5b5061409389828a01613fd2565b979a9699509497509295939492505050565b6000806000606084860312156140ba57600080fd5b505081359360208301359350604090920135919050565b63ffffffff841681528260208201526060604082015260006140f66060830184613e79565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156141705761417061412e565b500190565b6000828210156141875761418761412e565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826141ca576141ca61418c565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142075761420761412e565b500290565b60008261421b5761421b61418c565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156142495761424961412e565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561427c5761427c61412e565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006142f2606083018789614295565b8281036020840152614305818688614295565b9150508260408301529695505050505050565b60006020828403121561432a57600080fd5b5051919050565b600067ffffffffffffffff838116908316818110156142495761424961412e565b600067ffffffffffffffff8084168061436d5761436d61418c565b92169190910692915050565b60006020828403121561438b57600080fd5b8151613f3681613ef7565b600067ffffffffffffffff80831681851680830382111561427c5761427c61412e565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143ea576143ea61412e565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156144615761446161412e565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561449c5761449c61412e565b600087129250878205871284841616156144b8576144b861412e565b878505871281841616156144ce576144ce61412e565b505050929093029392505050565b6000826144eb576144eb61418c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561453f5761453f61412e565b50059056fea164736f6c634300080f000a"
func init() {
......
......@@ -100,8 +100,8 @@
"sourceCodeHash": "0x1e5a6deded88804971fc1847c9eac65921771bff353437c0b29ed2f55513b984"
},
"src/dispute/FaultDisputeGame.sol": {
"initCodeHash": "0xe78a025dc7e95b4767ec683b0f188565c45cc5f0236e8706fd86d2fddcee59d5",
"sourceCodeHash": "0xb70cd464f9b6f444b489b2cdd6a2d69fd7f14db8eba535b2289974f51061b3c2"
"initCodeHash": "0x9f8e47a4073639af201991a075c7eb03a73055750b3808281e7615b46d47a104",
"sourceCodeHash": "0xef3dee1a6dd89270b67c7e6a54862de9d11b9059cf053127bd26704e7e6b1fbf"
},
"src/dispute/weth/DelayedWETH.sol": {
"initCodeHash": "0x41e274b12dc48658d073dfea67ef694c5cce3963757911ee4cecc9f4c312e4bb",
......
......@@ -359,7 +359,7 @@
"type": "uint256"
}
],
"stateMutability": "pure",
"stateMutability": "view",
"type": "function"
},
{
......
......@@ -369,7 +369,7 @@
"type": "uint256"
}
],
"stateMutability": "pure",
"stateMutability": "view",
"type": "function"
},
{
......
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
import { FixedPointMathLib } from "solady/utils/FixedPointMathLib.sol";
import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol";
import { IDisputeGame } from "src/dispute/interfaces/IDisputeGame.sol";
import { IFaultDisputeGame } from "src/dispute/interfaces/IFaultDisputeGame.sol";
......@@ -88,8 +90,8 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
bool internal initialized;
/// @notice Semantic version.
/// @custom:semver 0.7.0
string public constant version = "0.7.0";
/// @custom:semver 0.7.1
string public constant version = "0.7.1";
/// @param _gameType The type ID of the game.
/// @param _absolutePrestate The absolute prestate of the instruction trace.
......@@ -558,10 +560,47 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
/// @notice Returns the required bond for a given move kind.
/// @param _position The position of the bonded interaction.
/// @return requiredBond_ The required ETH bond for the given move, in wei.
function getRequiredBond(Position _position) public pure returns (uint256 requiredBond_) {
// TODO(client-pod#551): For now use a non-zero bond amount to unblock functional tests.
_position;
requiredBond_ = 0.01 ether;
function getRequiredBond(Position _position) public view returns (uint256 requiredBond_) {
uint256 depth = uint256(_position.depth());
if (depth > MAX_GAME_DEPTH) revert GameDepthExceeded();
// Values taken from Big Bonds v1.5 (TM) spec.
uint256 assumedBaseFee = 200 gwei;
uint256 baseGasCharged = 400_000;
uint256 highGasCharged = 200_000_000;
// Goal here is to compute the fixed multiplier that will be applied to the base gas
// charged to get the required gas amount for the given depth. We apply this multiplier
// some `n` times where `n` is the depth of the position. We are looking for some number
// that, when multiplied by itself `MAX_GAME_DEPTH` times and then multiplied by the base
// gas charged, will give us the maximum gas that we want to charge.
// We want to solve for (highGasCharged/baseGasCharged) ** (1/MAX_GAME_DEPTH).
// We know that a ** (b/c) is equal to e ** (ln(a) * (b/c)).
// We can compute e ** (ln(a) * (b/c)) quite easily with FixedPointMathLib.
// Set up a, b, and c.
uint256 a = highGasCharged / baseGasCharged;
uint256 b = FixedPointMathLib.WAD;
uint256 c = MAX_GAME_DEPTH * FixedPointMathLib.WAD;
// Compute ln(a).
// slither-disable-next-line divide-before-multiply
uint256 lnA = uint256(FixedPointMathLib.lnWad(int256(a * FixedPointMathLib.WAD)));
// Computes (b / c) with full precision using WAD = 1e18.
uint256 bOverC = FixedPointMathLib.divWad(b, c);
// Compute e ** (ln(a) * (b/c))
// sMulWad can be used here since WAD = 1e18 maintains the same precision.
uint256 numerator = FixedPointMathLib.mulWad(lnA, bOverC);
int256 base = FixedPointMathLib.expWad(int256(numerator));
// Compute the required gas amount.
int256 rawGas = FixedPointMathLib.powWad(base, int256(depth * FixedPointMathLib.WAD));
uint256 requiredGas = FixedPointMathLib.mulWad(baseGasCharged, uint256(rawGas));
// Compute the required bond.
requiredBond_ = assumedBaseFee * requiredGas;
}
/// @notice Claim the credit belonging to the recipient address.
......
......@@ -96,7 +96,7 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
Claim internal absolutePrestate;
/// @dev Minimum bond value that covers all possible moves.
uint256 internal constant MIN_BOND = 0.01 ether;
uint256 internal constant MIN_BOND = 50 ether;
function setUp() public override {
absolutePrestateData = abi.encode(0);
......@@ -251,6 +251,30 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
gameProxy.initialize();
}
/// @dev Tests that the bond during the bisection game depths is correct.
function test_getRequiredBond_succeeds() public {
for (uint64 i = 0; i < uint64(gameProxy.splitDepth()); i++) {
Position pos = LibPosition.wrap(i, 0);
uint256 bond = gameProxy.getRequiredBond(pos);
// Reasonable approximation for a max depth of 8.
uint256 expected = 0.08 ether;
for (uint64 j = 0; j < i; j++) {
expected = expected * 217456;
expected = expected / 100000;
}
assertApproxEqAbs(bond, expected, 0.01 ether);
}
}
/// @dev Tests that the bond at a depth greater than the maximum game depth reverts.
function test_getRequiredBond_outOfBounds_reverts() public {
Position pos = LibPosition.wrap(uint64(gameProxy.maxGameDepth() + 1), 0);
vm.expectRevert(GameDepthExceeded.selector);
gameProxy.getRequiredBond(pos);
}
/// @dev Tests that a move while the game status is not `IN_PROGRESS` causes the call to revert
/// with the `GameNotInProgress` error
function test_move_gameNotInProgress_reverts() public {
......@@ -453,17 +477,17 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
/// @dev Tests that a claim cannot be stepped against twice.
function test_step_duplicateStep_reverts() public {
// Give the test contract some ether
vm.deal(address(this), 100 ether);
vm.deal(address(this), 1000 ether);
// Make claims all the way down the tree.
gameProxy.attack{ value: 1 ether }(0, _dummyClaim());
gameProxy.attack{ value: 1 ether }(1, _dummyClaim());
gameProxy.attack{ value: 1 ether }(2, _dummyClaim());
gameProxy.attack{ value: 1 ether }(3, _dummyClaim());
gameProxy.attack{ value: 1 ether }(4, _changeClaimStatus(_dummyClaim(), VMStatuses.PANIC));
gameProxy.attack{ value: 1 ether }(5, _dummyClaim());
gameProxy.attack{ value: 1 ether }(6, _dummyClaim());
gameProxy.attack{ value: 1 ether }(7, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(0, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(1, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(2, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(3, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(4, _changeClaimStatus(_dummyClaim(), VMStatuses.PANIC));
gameProxy.attack{ value: MIN_BOND }(5, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(6, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(7, _dummyClaim());
gameProxy.addLocalData(LocalPreimageKey.DISPUTED_L2_BLOCK_NUMBER, 8, 0);
gameProxy.step(8, true, absolutePrestateData, hex"");
......@@ -598,7 +622,7 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
gameProxy.attack{ value: MIN_BOND }(i, claim);
}
vm.deal(address(this), 100 ether);
vm.deal(address(this), 10000 ether);
claim = _changeClaimStatus(claim, VMStatuses.PANIC);
for (uint256 i = gameProxy.claimDataLen() - 1; i < gameProxy.maxGameDepth(); i++) {
gameProxy.attack{ value: MIN_BOND }(i, claim);
......@@ -635,17 +659,18 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
/// moves.
function test_resolve_bondPayouts_succeeds() public {
// Give the test contract some ether
vm.deal(address(this), 100 ether);
uint256 bal = 1000 ether;
vm.deal(address(this), bal);
// Make claims all the way down the tree.
gameProxy.attack{ value: 1 ether }(0, _dummyClaim());
gameProxy.attack{ value: 1 ether }(1, _dummyClaim());
gameProxy.attack{ value: 1 ether }(2, _dummyClaim());
gameProxy.attack{ value: 1 ether }(3, _dummyClaim());
gameProxy.attack{ value: 1 ether }(4, _changeClaimStatus(_dummyClaim(), VMStatuses.PANIC));
gameProxy.attack{ value: 1 ether }(5, _dummyClaim());
gameProxy.attack{ value: 1 ether }(6, _dummyClaim());
gameProxy.attack{ value: 1 ether }(7, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(0, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(1, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(2, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(3, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(4, _changeClaimStatus(_dummyClaim(), VMStatuses.PANIC));
gameProxy.attack{ value: MIN_BOND }(5, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(6, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(7, _dummyClaim());
gameProxy.addLocalData(LocalPreimageKey.DISPUTED_L2_BLOCK_NUMBER, 8, 0);
gameProxy.step(8, true, absolutePrestateData, hex"");
......@@ -654,8 +679,8 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
assertEq(counteredBy, address(this));
// Ensure we bonded the correct amounts
uint256 bonded = (gameProxy.claimDataLen() - 1) * 1 ether;
assertEq(address(this).balance, 100 ether - bonded);
uint256 bonded = (gameProxy.claimDataLen() - 1) * MIN_BOND;
assertEq(address(this).balance, bal - bonded);
assertEq(address(gameProxy).balance, 0);
assertEq(delayedWeth.balanceOf(address(gameProxy)), bonded);
......@@ -673,7 +698,7 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
gameProxy.claimCredit(address(this));
// Ensure that bonds were paid out correctly.
assertEq(address(this).balance, 100 ether);
assertEq(address(this).balance, bal);
assertEq(address(gameProxy).balance, 0);
assertEq(delayedWeth.balanceOf(address(gameProxy)), 0);
......@@ -685,30 +710,31 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
/// moves with 2 actors and a dishonest root claim.
function test_resolve_bondPayoutsSeveralActors_succeeds() public {
// Give the test contract and bob some ether
uint256 bal = 1000 ether;
address bob = address(0xb0b);
vm.deal(address(this), 100 ether);
vm.deal(bob, 100 ether);
vm.deal(address(this), bal);
vm.deal(bob, bal);
// Make claims all the way down the tree, trading off between bob and the test contract.
gameProxy.attack{ value: 1 ether }(0, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(0, _dummyClaim());
vm.prank(bob);
gameProxy.attack{ value: 1 ether }(1, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(1, _dummyClaim());
gameProxy.attack{ value: 1 ether }(2, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(2, _dummyClaim());
vm.prank(bob);
gameProxy.attack{ value: 1 ether }(3, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(3, _dummyClaim());
gameProxy.attack{ value: 1 ether }(4, _changeClaimStatus(_dummyClaim(), VMStatuses.PANIC));
gameProxy.attack{ value: MIN_BOND }(4, _changeClaimStatus(_dummyClaim(), VMStatuses.PANIC));
vm.prank(bob);
gameProxy.attack{ value: 1 ether }(5, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(5, _dummyClaim());
gameProxy.attack{ value: 1 ether }(6, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(6, _dummyClaim());
vm.prank(bob);
gameProxy.attack{ value: 1 ether }(7, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(7, _dummyClaim());
gameProxy.addLocalData(LocalPreimageKey.DISPUTED_L2_BLOCK_NUMBER, 8, 0);
gameProxy.step(8, true, absolutePrestateData, hex"");
......@@ -718,9 +744,9 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
assertEq(counteredBy, address(this));
// Ensure we bonded the correct amounts
uint256 bonded = ((gameProxy.claimDataLen() - 1) / 2) * 1 ether;
assertEq(address(this).balance, 100 ether - bonded);
assertEq(bob.balance, 100 ether - bonded);
uint256 bonded = ((gameProxy.claimDataLen() - 1) / 2) * MIN_BOND;
assertEq(address(this).balance, bal - bonded);
assertEq(bob.balance, bal - bonded);
assertEq(address(gameProxy).balance, 0);
assertEq(delayedWeth.balanceOf(address(gameProxy)), bonded * 2);
......@@ -742,8 +768,8 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
gameProxy.claimCredit(bob);
// Ensure that bonds were paid out correctly.
assertEq(address(this).balance, 100 ether + bonded);
assertEq(bob.balance, 100 ether - bonded);
assertEq(address(this).balance, bal + bonded);
assertEq(bob.balance, bal - bonded);
assertEq(address(gameProxy).balance, 0);
assertEq(delayedWeth.balanceOf(address(gameProxy)), 0);
......@@ -754,28 +780,29 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
/// @dev Static unit test asserting that resolve pays out bonds on moves to the leftmost actor
/// in subgames containing successful counters.
function test_resolve_leftmostBondPayout_succeeds() public {
uint256 bal = 1000 ether;
address alice = address(0xa11ce);
address bob = address(0xb0b);
address charlie = address(0xc0c);
vm.deal(address(this), 100 ether);
vm.deal(alice, 100 ether);
vm.deal(bob, 100 ether);
vm.deal(charlie, 100 ether);
vm.deal(address(this), bal);
vm.deal(alice, bal);
vm.deal(bob, bal);
vm.deal(charlie, bal);
// Make claims with bob, charlie and the test contract on defense, and alice as the challenger
// charlie is successfully countered by alice
// alice is successfully countered by both bob and the test contract
vm.prank(alice);
gameProxy.attack{ value: 1 ether }(0, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(0, _dummyClaim());
vm.prank(bob);
gameProxy.defend{ value: 1 ether }(1, _dummyClaim());
gameProxy.defend{ value: MIN_BOND }(1, _dummyClaim());
vm.prank(charlie);
gameProxy.attack{ value: 1 ether }(1, _dummyClaim());
gameProxy.attack{ value: 1 ether }(1, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(1, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(1, _dummyClaim());
vm.prank(alice);
gameProxy.attack{ value: 1 ether }(3, _dummyClaim());
gameProxy.attack{ value: MIN_BOND }(3, _dummyClaim());
// Resolve all claims
vm.warp(block.timestamp + 3 days + 12 hours + 1 seconds);
......@@ -797,12 +824,12 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
gameProxy.claimCredit(charlie);
// Ensure that bonds were paid out correctly.
uint256 aliceLosses = 1 ether;
uint256 charlieLosses = 1 ether;
assertEq(address(this).balance, 100 ether + aliceLosses, "incorrect this balance");
assertEq(alice.balance, 100 ether - aliceLosses + charlieLosses, "incorrect alice balance");
assertEq(bob.balance, 100 ether, "incorrect bob balance");
assertEq(charlie.balance, 100 ether - charlieLosses, "incorrect charlie balance");
uint256 aliceLosses = MIN_BOND;
uint256 charlieLosses = MIN_BOND;
assertEq(address(this).balance, bal + aliceLosses, "incorrect this balance");
assertEq(alice.balance, bal - aliceLosses + charlieLosses, "incorrect alice balance");
assertEq(bob.balance, bal, "incorrect bob balance");
assertEq(charlie.balance, bal - charlieLosses, "incorrect charlie balance");
assertEq(address(gameProxy).balance, 0);
// Ensure that the init bond for the game is 0, in case we change it in the test suite in the future.
......
......@@ -104,7 +104,7 @@ contract PermissionedDisputeGame_Test is PermissionedDisputeGame_Init {
/// @dev The root claim of the game.
Claim internal constant ROOT_CLAIM = Claim.wrap(bytes32((uint256(1) << 248) | uint256(10)));
/// @dev Minimum bond value that covers all possible moves.
uint256 internal constant MIN_BOND = 0.01 ether;
uint256 internal constant MIN_BOND = 50 ether;
/// @dev The preimage of the absolute prestate claim
bytes internal absolutePrestateData;
......
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