diff --git a/contract-bindings-alloy/src/staketable.rs b/contract-bindings-alloy/src/staketable.rs index 10dd52994f..cbb69b978a 100644 --- a/contract-bindings-alloy/src/staketable.rs +++ b/contract-bindings-alloy/src/staketable.rs @@ -985,6 +985,7 @@ interface StakeTable { error BlsKeyAlreadyUsed(); error InsufficientAllowance(uint256, uint256); error InsufficientBalance(uint256); + error InvalidAddress(); error InvalidCommission(); error InvalidInitialization(); error InvalidSchnorrVK(); @@ -1007,7 +1008,7 @@ interface StakeTable { event ValidatorRegistered(address account, BN254.G2Point blsVk, EdOnBN254.EdOnBN254Point schnorrVk, uint16 commission); event Withdrawal(address account, uint256 amount); - constructor(address _tokenAddress, uint256 _exitEscrowPeriod, address _initialOwner); + constructor(address _tokenAddress, address _lightClientAddress, uint256 _exitEscrowPeriod, address _initialOwner); function _hashBlsKey(BN254.G2Point memory blsVK) external pure returns (bytes32); function admin() external view returns (address); @@ -1019,6 +1020,7 @@ interface StakeTable { function exitEscrowPeriod() external view returns (uint256); function initialize() external; function initializedAtBlock() external view returns (uint256); + function lightClient() external view returns (address); function owner() external view returns (address); function registerValidator(BN254.G2Point memory blsVK, EdOnBN254.EdOnBN254Point memory schnorrVK, BN254.G1Point memory blsSig, uint16 commission) external; function renounceOwnership() external; @@ -1042,6 +1044,11 @@ interface StakeTable { "type": "address", "internalType": "address" }, + { + "name": "_lightClientAddress", + "type": "address", + "internalType": "address" + }, { "name": "_exitEscrowPeriod", "type": "uint256", @@ -1212,6 +1219,19 @@ interface StakeTable { ], "stateMutability": "view" }, + { + "type": "function", + "name": "lightClient", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract LightClient" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "owner", @@ -1742,6 +1762,11 @@ interface StakeTable { } ] }, + { + "type": "error", + "name": "InvalidAddress", + "inputs": [] + }, { "type": "error", "name": "InvalidCommission", @@ -1829,22 +1854,22 @@ pub mod StakeTable { /// The creation / init bytecode of the contract. /// /// ```text - ///0x608060405234801562000010575f80fd5b506040516200222b3803806200222b83398101604081905262000033916200022b565b806001600160a01b0381166200006257604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200006d81620000ab565b5062000078620000fa565b50600780546001600160a01b039093166001600160a01b0319938416179055600855600980549091163317905562000269565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff1615906001600160401b03165f81158015620001445750825b90505f826001600160401b03166001148015620001605750303b155b9050811580156200016f575080155b156200018e5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315620001bd57845460ff60401b1916680100000000000000001785555b4360015583156200020857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b80516001600160a01b038116811462000226575f80fd5b919050565b5f805f606084860312156200023e575f80fd5b62000249846200020f565b92506020840151915062000260604085016200020f565b90509250925092565b611fb480620002775f395ff3fe608060405234801561000f575f80fd5b506004361061011c575f3560e01c80638da5cb5b116100a9578063b3e6ebd51161006e578063b3e6ebd51461021b578063b5ecb3441461024d578063f2fde38b1461026c578063f851a4401461027f578063fa52c7d814610292575f80fd5b80638da5cb5b146101b55780639b30a5e6146101d95780639d76ea58146101ec5780639e9a8f31146101ff578063a3066aab14610208575f80fd5b80634d99dd16116100ef5780634d99dd16146101775780635544c2f11461018a5780636a911ccf1461019d578063715018a6146101a55780638129fc1c146101ad575f80fd5b8063026e402b1461012057806313b9057a146101355780632140fecd146101485780633e9df9b51461015b575b5f80fd5b61013361012e3660046119c5565b6102d4565b005b610133610143366004611aca565b61041e565b610133610156366004611b28565b610586565b61016460015481565b6040519081526020015b60405180910390f35b6101336101853660046119c5565b610687565b610133610198366004611b41565b6107f3565b6101336108b2565b610133610933565b610133610946565b5f546001600160a01b03165b6040516001600160a01b03909116815260200161016e565b6101646101e7366004611b85565b610a4a565b6007546101c1906001600160a01b031681565b61016460085481565b610133610216366004611b28565b610aa4565b61023d610229366004611b9f565b60036020525f908152604090205460ff1681565b604051901515815260200161016e565b61016461025b366004611b28565b60046020525f908152604090205481565b61013361027a366004611b28565b610ba7565b6009546101c1906001600160a01b031681565b6102c56102a0366004611b28565b60026020525f90815260409020805460019091015460ff808316926101009004169083565b60405161016e93929190611bca565b6102dd82610be4565b6102e682610c1c565b600754604051636eb1769f60e11b81523360048201523060248201525f916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610332573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103569190611c00565b9050818110156103885760405163054365bb60e31b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0383165f90815260026020526040812060010180548492906103b2908490611c2b565b90915550506007546103cf906001600160a01b0316333085610c52565b604080513381526001600160a01b03851660208201529081018390527fe5541a6b6103d4fa7e021ed54fad39c66f27a76bd13d374cf6240ae6bd0bb72b906060015b60405180910390a1505050565b61042733610ce3565b61043083610d1c565b61043984610d5b565b604080513360208201525f91016040516020818303038152906040529050610462818487610d97565b6127108261ffff1611156104895760405163dc81db8560e01b815260040160405180910390fd5b600160035f61049788610a4a565b81526020019081526020015f205f6101000a81548160ff02191690831515021790555060405180606001604052806001151581526020015f60018111156104e0576104e0611bb6565b81525f602091820181905233815260028252604090208251815490151560ff19821681178355928401519192839161ff001990911661ffff199091161761010083600181111561053257610532611bb6565b0217905550604091820151600190910155517ff6e8359c57520b469634736bfc3bb7ec5cbd1a0bd28b10a8275793bb730b797f90610577903390889088908790611c3e565b60405180910390a15050505050565b335f90815260046020526040812054908190036105b6576040516379298a5360e11b815260040160405180910390fd5b804210156105d757604051635a77435760e01b815260040160405180910390fd5b6001600160a01b0382165f9081526005602090815260408083203384529091528120549081900361061b57604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038084165f90815260056020908152604080832033808552925282209190915560075461065192169083610e2c565b60408051338152602081018390527f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659101610411565b61069082610be4565b61069982610c1c565b6001335f90815260026020526040902054610100900460ff1660018111156106c3576106c3611bb6565b036106e15760405163eab4a96360e01b815260040160405180910390fd5b6001600160a01b0382165f9081526005602090815260408083203384529091529020548181101561072857604051639266535160e01b81526004810183905260240161037f565b6001600160a01b0383165f9081526005602090815260408083203384529091528120805484929061075a908490611ca1565b925050819055506040518060400160405280838152602001600854426107809190611c2b565b90526001600160a01b0384165f8181526006602090815260408083203380855290835292819020855181559482015160019095019490945583519182528101919091529081018390527f4d10bd049775c77bd7f255195afba5088028ecb3c7c277d393ccff7934f2f92c90606001610411565b6107fc33610be4565b61080533610c1c565b61080e82610d1c565b61081783610d5b565b604080513360208201525f91016040516020818303038152906040529050610840818386610d97565b600160035f61084e87610a4a565b81526020019081526020015f205f6101000a81548160ff0219169083151502179055507f80d8a4a1663328a998d4555ba21d8bba6ef1576a8c5e9d27f9c545f1a3d52b1d3385856040516108a493929190611cb4565b60405180910390a150505050565b6108bb33610be4565b6108c433610c1c565b335f908152600260205260409020805461ff0019166101001790556008546108ec9042611c2b565b335f8181526004602090815260409182902093909355519081527ffb24305354c87762d557487ae4a564e8d03ecbb9a97dd8afff8e1f6fcaf0dd16910160405180910390a1565b61093b610eaf565b6109445f610edb565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561098b5750825b90505f8267ffffffffffffffff1660011480156109a75750303b155b9050811580156109b5575080155b156109d35760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156109fd57845460ff60401b1916600160401b1785555b436001558315610a4357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610577565b5050505050565b5f815f0151826020015183604001518460600151604051602001610a87949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6001600160a01b0381165f908152600660209081526040808320338452909152902060010154421015610aea57604051635a77435760e01b815260040160405180910390fd5b6001600160a01b0381165f90815260066020908152604080832033845290915281205490819003610b2e57604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038083165f908152600660209081526040808320338085529252822082815560010191909155600754610b6a92169083610e2c565b60408051338152602081018390527f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65910160405180910390a15050565b610baf610eaf565b6001600160a01b038116610bd857604051631e4fbdf760e01b81525f600482015260240161037f565b610be181610edb565b50565b6001600160a01b0381165f9081526002602052604090205460ff16610be1576040516357fdf40b60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526004602052604090205415610be15760405163eab4a96360e01b815260040160405180910390fd5b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af13d15601f3d1160015f511416171691505080610a435760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b604482015260640161037f565b6001600160a01b0381165f9081526002602052604090205460ff1615610be15760405163132e7efb60e31b815260040160405180910390fd5b604080518082019091525f8082526020820152610d398282610f2a565b15610d57576040516306cf438f60e01b815260040160405180910390fd5b5050565b60035f610d6783610a4a565b815260208101919091526040015f205460ff1615610be15760405162da8a5760e11b815260040160405180910390fd5b610da082610f4d565b5f604051806060016040528060248152602001611f646024913990505f8482604051602001610dd0929190611d35565b60405160208183030381529060405290505f610deb82610fe8565b9050610e088185610dfb886110d5565b610e0361114c565b611219565b610e245760405162ced3e560e41b815260040160405180910390fd5b505050505050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505080610ea95760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161037f565b50505050565b5f546001600160a01b031633146109445760405163118cdaa760e01b815233600482015260240161037f565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b805182515f91148015610f44575081602001518360200151145b90505b92915050565b805160208201515f915f80516020611f88833981519152911590151615610f7357505050565b825160208401518260038485858609850908838283091483821084841016169350505081610fe35760405162461bcd60e51b815260206004820152601760248201527f426e3235343a20696e76616c696420473120706f696e74000000000000000000604482015260640161037f565b505050565b604080518082019091525f80825260208201525f611005836112f9565b90505f80516020611f8883398151915260035f828485099050828061102c5761102c611d49565b8482099050828061103f5761103f611d49565b82820890505f8061104f83611502565b925090505b806110b857848061106757611067611d49565b600187089550848061107b5761107b611d49565b8687099250848061108e5761108e611d49565b868409925084806110a1576110a1611d49565b84840892506110af83611502565b92509050611054565b506040805180820190915294855260208501525091949350505050565b604080518082019091525f80825260208201528151602083015115901516156110fc575090565b6040518060400160405280835f015181526020015f80516020611f88833981519152846020015161112d9190611d5d565b611144905f80516020611f88833981519152611ca1565b905292915050565b61117360405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f805f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f519150806112eb5760405162461bcd60e51b815260206004820152601c60248201527f426e3235343a2050616972696e6720636865636b206661696c65642100000000604482015260640161037f565b50151590505b949350505050565b5f80611304836115f9565b80519091506030811461131957611319611d7c565b5f8167ffffffffffffffff811115611333576113336119ed565b6040519080825280601f01601f19166020018201604052801561135d576020820181803683370190505b5090505f5b828110156113cc578360016113778386611ca1565b6113819190611ca1565b8151811061139157611391611d90565b602001015160f81c60f81b8282815181106113ae576113ae611d90565b60200101906001600160f81b03191690815f1a905350600101611362565b5060408051601f80825261040082019092525f9082602082016103e0803683370190505090505f5b8281101561145c5783816114088588611ca1565b6114129190611c2b565b8151811061142257611422611d90565b602001015160f81c60f81b60f81c82828151811061144257611442611d90565b60ff909216602092830291909101909101526001016113f4565b505f61146782611943565b90506101005f80516020611f888339815191525f6114858689611ca1565b90505f5b818110156114f2575f88600161149f8486611ca1565b6114a99190611ca1565b815181106114b9576114b9611d90565b016020015160f81c905083806114d1576114d1611d49565b858709955083806114e4576114e4611d49565b818708955050600101611489565b50929a9950505050505050505050565b5f805f805f7f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5290505f5f80516020611f88833981519152905060405160208152602080820152602060408201528760608201528260808201528160a082015260205f60c08360055afa9450505f519250836115bf5760405162461bcd60e51b815260206004820152601b60248201527f706f7720707265636f6d70696c652063616c6c206661696c6564210000000000604482015260640161037f565b80600184901b11156115d8576115d58382611ca1565b92505b80806115e6576115e6611d49565b8384099690961496919550909350505050565b604080516030808252606082810190935290602090600160f91b905f90846020820181803683370190505090508086604051602001611639929190611d35565b6040516020818303038152906040529050808460f81b604051602001611660929190611da4565b6040516020818303038152906040529050806040516020016116829190611dce565b60408051601f1981840301815290829052915061010160f01b906116ac9083908390602001611de6565b60408051808303601f190181528282528051602091820120818401819052600160f81b848401526001600160f01b031985166041850152825160238186030181526043909401909252825190830120919350905f60ff881667ffffffffffffffff81111561171c5761171c6119ed565b6040519080825280601f01601f191660200182016040528015611746576020820181803683370190505b5090505f8260405160200161175d91815260200190565b60405160208183030381529060405290505f5b81518110156117c65781818151811061178b5761178b611d90565b602001015160f81c60f81b8382815181106117a8576117a8611d90565b60200101906001600160f81b03191690815f1a905350600101611770565b505f846040516020016117db91815260200190565b60408051601f19818403018152602083019091525f80835291985091505b8981101561186d575f83828151811061181457611814611d90565b602001015160f81c60f81b83838151811061183157611831611d90565b602001015160f81c60f81b1890508881604051602001611852929190611e0a565b60408051601f198184030181529190529850506001016117f9565b5086888760405160200161188393929190611e2e565b604051602081830303815290604052965086805190602001209350836040516020016118b191815260200190565b60405160208183030381529060405291505f5b6118d18a60ff8d16611ca1565b811015611932578281815181106118ea576118ea611d90565b01602001516001600160f81b03191684611904838d611c2b565b8151811061191457611914611d90565b60200101906001600160f81b03191690815f1a9053506001016118c4565b50919b9a5050505050505050505050565b5f80805b83518110156119a35783818151811061196257611962611d90565b602002602001015160ff1681600861197a9190611e61565b611985906002611f58565b61198f9190611e61565b6119999083611c2b565b9150600101611947565b5092915050565b80356001600160a01b03811681146119c0575f80fd5b919050565b5f80604083850312156119d6575f80fd5b6119df836119aa565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f60808284031215611a11575f80fd5b6040516080810181811067ffffffffffffffff82111715611a4057634e487b7160e01b5f52604160045260245ffd5b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b5f60408284031215611a81575f80fd5b6040516040810181811067ffffffffffffffff82111715611ab057634e487b7160e01b5f52604160045260245ffd5b604052823581526020928301359281019290925250919050565b5f805f806101208587031215611ade575f80fd5b611ae88686611a01565b9350611af78660808701611a71565b9250611b068660c08701611a71565b915061010085013561ffff81168114611b1d575f80fd5b939692955090935050565b5f60208284031215611b38575f80fd5b610f44826119aa565b5f805f6101008486031215611b54575f80fd5b611b5e8585611a01565b9250611b6d8560808601611a71565b9150611b7c8560c08601611a71565b90509250925092565b5f60808284031215611b95575f80fd5b610f448383611a01565b5f60208284031215611baf575f80fd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b83151581526060810160028410611bef57634e487b7160e01b5f52602160045260245ffd5b602082019390935260400152919050565b5f60208284031215611c10575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f4757610f47611c17565b6001600160a01b03851681526101008101611c7d6020830186805182526020810151602083015260408101516040830152606081015160608301525050565b835160a0830152602084015160c083015261ffff831660e083015295945050505050565b81810381811115610f4757610f47611c17565b6001600160a01b038416815260e08101611cf26020830185805182526020810151602083015260408101516040830152606081015160608301525050565b825160a0830152602083015160c08301526112f1565b5f81515f5b81811015611d275760208185018101518683015201611d0d565b505f93019283525090919050565b5f6112f1611d438386611d08565b84611d08565b634e487b7160e01b5f52601260045260245ffd5b5f82611d7757634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f611daf8285611d08565b5f81526001600160f81b03199390931660018401525050600201919050565b5f611dd98284611d08565b5f81526001019392505050565b5f611df18285611d08565b6001600160f01b03199390931683525050600201919050565b5f611e158285611d08565b6001600160f81b03199390931683525050600101919050565b5f611e398286611d08565b6001600160f81b031994909416845250506001600160f01b0319166001820152600301919050565b8082028115828204841417610f4757610f47611c17565b600181815b80851115611eb257815f1904821115611e9857611e98611c17565b80851615611ea557918102915b93841c9390800290611e7d565b509250929050565b5f82611ec857506001610f47565b81611ed457505f610f47565b8160018114611eea5760028114611ef457611f10565b6001915050610f47565b60ff841115611f0557611f05611c17565b50506001821b610f47565b5060208310610133831016604e8410600b8410161715611f33575081810a610f47565b611f3d8383611e78565b805f1904821115611f5057611f50611c17565b029392505050565b5f610f448383611eba56fe424c535f5349475f424e32353447315f584d443a4b454343414b5f4e4354485f4e554c5f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a164736f6c6343000817000a + ///0x608060405234801562000010575f80fd5b50604051620022a9380380620022a9833981016040819052620000339162000241565b806001600160a01b0381166200006257604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200006d81620000c1565b506200007862000110565b50600880546001600160a01b039485166001600160a01b031991821617909155600280549390941692811692909217909255600991909155600a80549091163317905562000292565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff1615906001600160401b03165f811580156200015a5750825b90505f826001600160401b03166001148015620001765750303b155b90508115801562000185575080155b15620001a45760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315620001d357845460ff60401b1916680100000000000000001785555b4360015583156200021e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b80516001600160a01b03811681146200023c575f80fd5b919050565b5f805f806080858703121562000255575f80fd5b620002608562000225565b9350620002706020860162000225565b925060408501519150620002876060860162000225565b905092959194509250565b61200980620002a05f395ff3fe608060405234801561000f575f80fd5b5060043610610127575f3560e01c80639b30a5e6116100a9578063b5700e681161006e578063b5700e6814610258578063b5ecb3441461026b578063f2fde38b1461028a578063f851a4401461029d578063fa52c7d8146102b0575f80fd5b80639b30a5e6146101e45780639d76ea58146101f75780639e9a8f311461020a578063a3066aab14610213578063b3e6ebd514610226575f80fd5b80635544c2f1116100ef5780635544c2f1146101955780636a911ccf146101a8578063715018a6146101b05780638129fc1c146101b85780638da5cb5b146101c0575f80fd5b8063026e402b1461012b57806313b9057a146101405780632140fecd146101535780633e9df9b5146101665780634d99dd1614610182575b5f80fd5b61013e610139366004611a1a565b6102f2565b005b61013e61014e366004611b1f565b610473565b61013e610161366004611b7d565b6105db565b61016f60015481565b6040519081526020015b60405180910390f35b61013e610190366004611a1a565b6106dc565b61013e6101a3366004611b96565b610848565b61013e610907565b61013e610988565b61013e61099b565b5f546001600160a01b03165b6040516001600160a01b039091168152602001610179565b61016f6101f2366004611bda565b610a9f565b6008546101cc906001600160a01b031681565b61016f60095481565b61013e610221366004611b7d565b610af9565b610248610234366004611bf4565b60046020525f908152604090205460ff1681565b6040519015158152602001610179565b6002546101cc906001600160a01b031681565b61016f610279366004611b7d565b60056020525f908152604090205481565b61013e610298366004611b7d565b610bfc565b600a546101cc906001600160a01b031681565b6102e36102be366004611b7d565b60036020525f90815260409020805460019091015460ff808316926101009004169083565b60405161017993929190611c1f565b6102fb82610c39565b61030482610c71565b600854604051636eb1769f60e11b81523360048201523060248201525f916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610350573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103749190611c55565b9050818110156103a65760405163054365bb60e31b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0383165f90815260036020526040812060010180548492906103d0908490611c80565b90915550506001600160a01b0383165f90815260066020908152604080832033845290915281208054849290610407908490611c80565b9091555050600854610424906001600160a01b0316333085610ca7565b604080513381526001600160a01b03851660208201529081018390527fe5541a6b6103d4fa7e021ed54fad39c66f27a76bd13d374cf6240ae6bd0bb72b906060015b60405180910390a1505050565b61047c33610d38565b61048583610d71565b61048e84610db0565b604080513360208201525f910160405160208183030381529060405290506104b7818487610dec565b6127108261ffff1611156104de5760405163dc81db8560e01b815260040160405180910390fd5b600160045f6104ec88610a9f565b81526020019081526020015f205f6101000a81548160ff02191690831515021790555060405180606001604052806001151581526020015f600181111561053557610535611c0b565b81525f602091820181905233815260038252604090208251815490151560ff19821681178355928401519192839161ff001990911661ffff199091161761010083600181111561058757610587611c0b565b0217905550604091820151600190910155517ff6e8359c57520b469634736bfc3bb7ec5cbd1a0bd28b10a8275793bb730b797f906105cc903390889088908790611c93565b60405180910390a15050505050565b335f908152600560205260408120549081900361060b576040516379298a5360e11b815260040160405180910390fd5b8042101561062c57604051635a77435760e01b815260040160405180910390fd5b6001600160a01b0382165f9081526006602090815260408083203384529091528120549081900361067057604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038084165f9081526006602090815260408083203380855292528220919091556008546106a692169083610e81565b60408051338152602081018390527f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659101610466565b6106e582610c39565b6106ee82610c71565b6001335f90815260036020526040902054610100900460ff16600181111561071857610718611c0b565b036107365760405163eab4a96360e01b815260040160405180910390fd5b6001600160a01b0382165f9081526006602090815260408083203384529091529020548181101561077d57604051639266535160e01b81526004810182905260240161039d565b6001600160a01b0383165f908152600660209081526040808320338452909152812080548492906107af908490611cf6565b925050819055506040518060400160405280838152602001600954426107d59190611c80565b90526001600160a01b0384165f8181526007602090815260408083203380855290835292819020855181559482015160019095019490945583519182528101919091529081018390527f4d10bd049775c77bd7f255195afba5088028ecb3c7c277d393ccff7934f2f92c90606001610466565b61085133610c39565b61085a33610c71565b61086382610d71565b61086c83610db0565b604080513360208201525f91016040516020818303038152906040529050610895818386610dec565b600160045f6108a387610a9f565b81526020019081526020015f205f6101000a81548160ff0219169083151502179055507f80d8a4a1663328a998d4555ba21d8bba6ef1576a8c5e9d27f9c545f1a3d52b1d3385856040516108f993929190611d09565b60405180910390a150505050565b61091033610c39565b61091933610c71565b335f908152600360205260409020805461ff0019166101001790556009546109419042611c80565b335f8181526005602090815260409182902093909355519081527ffb24305354c87762d557487ae4a564e8d03ecbb9a97dd8afff8e1f6fcaf0dd16910160405180910390a1565b610990610f04565b6109995f610f30565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156109e05750825b90505f8267ffffffffffffffff1660011480156109fc5750303b155b905081158015610a0a575080155b15610a285760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a5257845460ff60401b1916600160401b1785555b436001558315610a9857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016105cc565b5050505050565b5f815f0151826020015183604001518460600151604051602001610adc949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6001600160a01b0381165f908152600760209081526040808320338452909152902060010154421015610b3f57604051635a77435760e01b815260040160405180910390fd5b6001600160a01b0381165f90815260076020908152604080832033845290915281205490819003610b8357604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038083165f908152600760209081526040808320338085529252822082815560010191909155600854610bbf92169083610e81565b60408051338152602081018390527f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65910160405180910390a15050565b610c04610f04565b6001600160a01b038116610c2d57604051631e4fbdf760e01b81525f600482015260240161039d565b610c3681610f30565b50565b6001600160a01b0381165f9081526003602052604090205460ff16610c36576040516357fdf40b60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205415610c365760405163eab4a96360e01b815260040160405180910390fd5b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af13d15601f3d1160015f511416171691505080610a985760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b604482015260640161039d565b6001600160a01b0381165f9081526003602052604090205460ff1615610c365760405163132e7efb60e31b815260040160405180910390fd5b604080518082019091525f8082526020820152610d8e8282610f7f565b15610dac576040516306cf438f60e01b815260040160405180910390fd5b5050565b60045f610dbc83610a9f565b815260208101919091526040015f205460ff1615610c365760405162da8a5760e11b815260040160405180910390fd5b610df582610fa2565b5f604051806060016040528060248152602001611fb96024913990505f8482604051602001610e25929190611d8a565b60405160208183030381529060405290505f610e408261103d565b9050610e5d8185610e508861112a565b610e586111a1565b61126e565b610e795760405162ced3e560e41b815260040160405180910390fd5b505050505050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505080610efe5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161039d565b50505050565b5f546001600160a01b031633146109995760405163118cdaa760e01b815233600482015260240161039d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b805182515f91148015610f99575081602001518360200151145b90505b92915050565b805160208201515f915f80516020611fdd833981519152911590151615610fc857505050565b8251602084015182600384858586098509088382830914838210848410161693505050816110385760405162461bcd60e51b815260206004820152601760248201527f426e3235343a20696e76616c696420473120706f696e74000000000000000000604482015260640161039d565b505050565b604080518082019091525f80825260208201525f61105a8361134e565b90505f80516020611fdd83398151915260035f828485099050828061108157611081611d9e565b8482099050828061109457611094611d9e565b82820890505f806110a483611557565b925090505b8061110d5784806110bc576110bc611d9e565b60018708955084806110d0576110d0611d9e565b868709925084806110e3576110e3611d9e565b868409925084806110f6576110f6611d9e565b848408925061110483611557565b925090506110a9565b506040805180820190915294855260208501525091949350505050565b604080518082019091525f8082526020820152815160208301511590151615611151575090565b6040518060400160405280835f015181526020015f80516020611fdd83398151915284602001516111829190611db2565b611199905f80516020611fdd833981519152611cf6565b905292915050565b6111c860405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f805f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f519150806113405760405162461bcd60e51b815260206004820152601c60248201527f426e3235343a2050616972696e6720636865636b206661696c65642100000000604482015260640161039d565b50151590505b949350505050565b5f806113598361164e565b80519091506030811461136e5761136e611dd1565b5f8167ffffffffffffffff81111561138857611388611a42565b6040519080825280601f01601f1916602001820160405280156113b2576020820181803683370190505b5090505f5b82811015611421578360016113cc8386611cf6565b6113d69190611cf6565b815181106113e6576113e6611de5565b602001015160f81c60f81b82828151811061140357611403611de5565b60200101906001600160f81b03191690815f1a9053506001016113b7565b5060408051601f80825261040082019092525f9082602082016103e0803683370190505090505f5b828110156114b157838161145d8588611cf6565b6114679190611c80565b8151811061147757611477611de5565b602001015160f81c60f81b60f81c82828151811061149757611497611de5565b60ff90921660209283029190910190910152600101611449565b505f6114bc82611998565b90506101005f80516020611fdd8339815191525f6114da8689611cf6565b90505f5b81811015611547575f8860016114f48486611cf6565b6114fe9190611cf6565b8151811061150e5761150e611de5565b016020015160f81c9050838061152657611526611d9e565b8587099550838061153957611539611d9e565b8187089550506001016114de565b50929a9950505050505050505050565b5f805f805f7f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5290505f5f80516020611fdd833981519152905060405160208152602080820152602060408201528760608201528260808201528160a082015260205f60c08360055afa9450505f519250836116145760405162461bcd60e51b815260206004820152601b60248201527f706f7720707265636f6d70696c652063616c6c206661696c6564210000000000604482015260640161039d565b80600184901b111561162d5761162a8382611cf6565b92505b808061163b5761163b611d9e565b8384099690961496919550909350505050565b604080516030808252606082810190935290602090600160f91b905f9084602082018180368337019050509050808660405160200161168e929190611d8a565b6040516020818303038152906040529050808460f81b6040516020016116b5929190611df9565b6040516020818303038152906040529050806040516020016116d79190611e23565b60408051601f1981840301815290829052915061010160f01b906117019083908390602001611e3b565b60408051808303601f190181528282528051602091820120818401819052600160f81b848401526001600160f01b031985166041850152825160238186030181526043909401909252825190830120919350905f60ff881667ffffffffffffffff81111561177157611771611a42565b6040519080825280601f01601f19166020018201604052801561179b576020820181803683370190505b5090505f826040516020016117b291815260200190565b60405160208183030381529060405290505f5b815181101561181b578181815181106117e0576117e0611de5565b602001015160f81c60f81b8382815181106117fd576117fd611de5565b60200101906001600160f81b03191690815f1a9053506001016117c5565b505f8460405160200161183091815260200190565b60408051601f19818403018152602083019091525f80835291985091505b898110156118c2575f83828151811061186957611869611de5565b602001015160f81c60f81b83838151811061188657611886611de5565b602001015160f81c60f81b18905088816040516020016118a7929190611e5f565b60408051601f1981840301815291905298505060010161184e565b508688876040516020016118d893929190611e83565b6040516020818303038152906040529650868051906020012093508360405160200161190691815260200190565b60405160208183030381529060405291505f5b6119268a60ff8d16611cf6565b8110156119875782818151811061193f5761193f611de5565b01602001516001600160f81b03191684611959838d611c80565b8151811061196957611969611de5565b60200101906001600160f81b03191690815f1a905350600101611919565b50919b9a5050505050505050505050565b5f80805b83518110156119f8578381815181106119b7576119b7611de5565b602002602001015160ff168160086119cf9190611eb6565b6119da906002611fad565b6119e49190611eb6565b6119ee9083611c80565b915060010161199c565b5092915050565b80356001600160a01b0381168114611a15575f80fd5b919050565b5f8060408385031215611a2b575f80fd5b611a34836119ff565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f60808284031215611a66575f80fd5b6040516080810181811067ffffffffffffffff82111715611a9557634e487b7160e01b5f52604160045260245ffd5b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b5f60408284031215611ad6575f80fd5b6040516040810181811067ffffffffffffffff82111715611b0557634e487b7160e01b5f52604160045260245ffd5b604052823581526020928301359281019290925250919050565b5f805f806101208587031215611b33575f80fd5b611b3d8686611a56565b9350611b4c8660808701611ac6565b9250611b5b8660c08701611ac6565b915061010085013561ffff81168114611b72575f80fd5b939692955090935050565b5f60208284031215611b8d575f80fd5b610f99826119ff565b5f805f6101008486031215611ba9575f80fd5b611bb38585611a56565b9250611bc28560808601611ac6565b9150611bd18560c08601611ac6565b90509250925092565b5f60808284031215611bea575f80fd5b610f998383611a56565b5f60208284031215611c04575f80fd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b83151581526060810160028410611c4457634e487b7160e01b5f52602160045260245ffd5b602082019390935260400152919050565b5f60208284031215611c65575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f9c57610f9c611c6c565b6001600160a01b03851681526101008101611cd26020830186805182526020810151602083015260408101516040830152606081015160608301525050565b835160a0830152602084015160c083015261ffff831660e083015295945050505050565b81810381811115610f9c57610f9c611c6c565b6001600160a01b038416815260e08101611d476020830185805182526020810151602083015260408101516040830152606081015160608301525050565b825160a0830152602083015160c0830152611346565b5f81515f5b81811015611d7c5760208185018101518683015201611d62565b505f93019283525090919050565b5f611346611d988386611d5d565b84611d5d565b634e487b7160e01b5f52601260045260245ffd5b5f82611dcc57634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f611e048285611d5d565b5f81526001600160f81b03199390931660018401525050600201919050565b5f611e2e8284611d5d565b5f81526001019392505050565b5f611e468285611d5d565b6001600160f01b03199390931683525050600201919050565b5f611e6a8285611d5d565b6001600160f81b03199390931683525050600101919050565b5f611e8e8286611d5d565b6001600160f81b031994909416845250506001600160f01b0319166001820152600301919050565b8082028115828204841417610f9c57610f9c611c6c565b600181815b80851115611f0757815f1904821115611eed57611eed611c6c565b80851615611efa57918102915b93841c9390800290611ed2565b509250929050565b5f82611f1d57506001610f9c565b81611f2957505f610f9c565b8160018114611f3f5760028114611f4957611f65565b6001915050610f9c565b60ff841115611f5a57611f5a611c6c565b50506001821b610f9c565b5060208310610133831016604e8410600b8410161715611f88575081810a610f9c565b611f928383611ecd565b805f1904821115611fa557611fa5611c6c565b029392505050565b5f610f998383611f0f56fe424c535f5349475f424e32353447315f584d443a4b454343414b5f4e4354485f4e554c5f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a164736f6c6343000817000a /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R4\x80\x15b\0\0\x10W_\x80\xFD[P`@Qb\0\"+8\x03\x80b\0\"+\x839\x81\x01`@\x81\x90Rb\0\x003\x91b\0\x02+V[\x80`\x01`\x01`\xA0\x1B\x03\x81\x16b\0\0bW`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R_`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[b\0\0m\x81b\0\0\xABV[Pb\0\0xb\0\0\xFAV[P`\x07\x80T`\x01`\x01`\xA0\x1B\x03\x90\x93\x16`\x01`\x01`\xA0\x1B\x03\x19\x93\x84\x16\x17\x90U`\x08U`\t\x80T\x90\x91\x163\x17\x90Ub\0\x02iV[_\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x80Th\x01\0\0\0\0\0\0\0\0\x81\x04`\xFF\x16\x15\x90`\x01`\x01`@\x1B\x03\x16_\x81\x15\x80\x15b\0\x01DWP\x82[\x90P_\x82`\x01`\x01`@\x1B\x03\x16`\x01\x14\x80\x15b\0\x01`WP0;\x15[\x90P\x81\x15\x80\x15b\0\x01oWP\x80\x15[\x15b\0\x01\x8EW`@Qc\xF9.\xE8\xA9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84T`\x01`\x01`@\x1B\x03\x19\x16`\x01\x17\x85U\x83\x15b\0\x01\xBDW\x84T`\xFF`@\x1B\x19\x16h\x01\0\0\0\0\0\0\0\0\x17\x85U[C`\x01U\x83\x15b\0\x02\x08W\x84T`\xFF`@\x1B\x19\x16\x85U`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x01`@Q\x80\x91\x03\x90\xA1[PPPPPV[\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14b\0\x02&W_\x80\xFD[\x91\x90PV[_\x80_``\x84\x86\x03\x12\x15b\0\x02>W_\x80\xFD[b\0\x02I\x84b\0\x02\x0FV[\x92P` \x84\x01Q\x91Pb\0\x02``@\x85\x01b\0\x02\x0FV[\x90P\x92P\x92P\x92V[a\x1F\xB4\x80b\0\x02w_9_\xF3\xFE`\x80`@R4\x80\x15a\0\x0FW_\x80\xFD[P`\x046\x10a\x01\x1CW_5`\xE0\x1C\x80c\x8D\xA5\xCB[\x11a\0\xA9W\x80c\xB3\xE6\xEB\xD5\x11a\0nW\x80c\xB3\xE6\xEB\xD5\x14a\x02\x1BW\x80c\xB5\xEC\xB3D\x14a\x02MW\x80c\xF2\xFD\xE3\x8B\x14a\x02lW\x80c\xF8Q\xA4@\x14a\x02\x7FW\x80c\xFAR\xC7\xD8\x14a\x02\x92W_\x80\xFD[\x80c\x8D\xA5\xCB[\x14a\x01\xB5W\x80c\x9B0\xA5\xE6\x14a\x01\xD9W\x80c\x9Dv\xEAX\x14a\x01\xECW\x80c\x9E\x9A\x8F1\x14a\x01\xFFW\x80c\xA3\x06j\xAB\x14a\x02\x08W_\x80\xFD[\x80cM\x99\xDD\x16\x11a\0\xEFW\x80cM\x99\xDD\x16\x14a\x01wW\x80cUD\xC2\xF1\x14a\x01\x8AW\x80cj\x91\x1C\xCF\x14a\x01\x9DW\x80cqP\x18\xA6\x14a\x01\xA5W\x80c\x81)\xFC\x1C\x14a\x01\xADW_\x80\xFD[\x80c\x02n@+\x14a\x01 W\x80c\x13\xB9\x05z\x14a\x015W\x80c!@\xFE\xCD\x14a\x01HW\x80c>\x9D\xF9\xB5\x14a\x01[W[_\x80\xFD[a\x013a\x01.6`\x04a\x19\xC5V[a\x02\xD4V[\0[a\x013a\x01C6`\x04a\x1A\xCAV[a\x04\x1EV[a\x013a\x01V6`\x04a\x1B(V[a\x05\x86V[a\x01d`\x01T\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x013a\x01\x856`\x04a\x19\xC5V[a\x06\x87V[a\x013a\x01\x986`\x04a\x1BAV[a\x07\xF3V[a\x013a\x08\xB2V[a\x013a\t3V[a\x013a\tFV[_T`\x01`\x01`\xA0\x1B\x03\x16[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01nV[a\x01da\x01\xE76`\x04a\x1B\x85V[a\nJV[`\x07Ta\x01\xC1\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x01d`\x08T\x81V[a\x013a\x02\x166`\x04a\x1B(V[a\n\xA4V[a\x02=a\x02)6`\x04a\x1B\x9FV[`\x03` R_\x90\x81R`@\x90 T`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01a\x01nV[a\x01da\x02[6`\x04a\x1B(V[`\x04` R_\x90\x81R`@\x90 T\x81V[a\x013a\x02z6`\x04a\x1B(V[a\x0B\xA7V[`\tTa\x01\xC1\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x02\xC5a\x02\xA06`\x04a\x1B(V[`\x02` R_\x90\x81R`@\x90 \x80T`\x01\x90\x91\x01T`\xFF\x80\x83\x16\x92a\x01\0\x90\x04\x16\x90\x83V[`@Qa\x01n\x93\x92\x91\x90a\x1B\xCAV[a\x02\xDD\x82a\x0B\xE4V[a\x02\xE6\x82a\x0C\x1CV[`\x07T`@Qcn\xB1v\x9F`\xE1\x1B\x81R3`\x04\x82\x01R0`$\x82\x01R_\x91`\x01`\x01`\xA0\x1B\x03\x16\x90c\xDDb\xED>\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x032W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03V\x91\x90a\x1C\0V[\x90P\x81\x81\x10\x15a\x03\x88W`@Qc\x05Ce\xBB`\xE3\x1B\x81R`\x04\x81\x01\x82\x90R`$\x81\x01\x83\x90R`D\x01[`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x02` R`@\x81 `\x01\x01\x80T\x84\x92\x90a\x03\xB2\x90\x84\x90a\x1C+V[\x90\x91UPP`\x07Ta\x03\xCF\x90`\x01`\x01`\xA0\x1B\x03\x1630\x85a\x0CRV[`@\x80Q3\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R\x90\x81\x01\x83\x90R\x7F\xE5T\x1Aka\x03\xD4\xFA~\x02\x1E\xD5O\xAD9\xC6o'\xA7k\xD1=7L\xF6$\n\xE6\xBD\x0B\xB7+\x90``\x01[`@Q\x80\x91\x03\x90\xA1PPPV[a\x04'3a\x0C\xE3V[a\x040\x83a\r\x1CV[a\x049\x84a\r[V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x04b\x81\x84\x87a\r\x97V[a'\x10\x82a\xFF\xFF\x16\x11\x15a\x04\x89W`@Qc\xDC\x81\xDB\x85`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x03_a\x04\x97\x88a\nJV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP`@Q\x80``\x01`@R\x80`\x01\x15\x15\x81R` \x01_`\x01\x81\x11\x15a\x04\xE0Wa\x04\xE0a\x1B\xB6V[\x81R_` \x91\x82\x01\x81\x90R3\x81R`\x02\x82R`@\x90 \x82Q\x81T\x90\x15\x15`\xFF\x19\x82\x16\x81\x17\x83U\x92\x84\x01Q\x91\x92\x83\x91a\xFF\0\x19\x90\x91\x16a\xFF\xFF\x19\x90\x91\x16\x17a\x01\0\x83`\x01\x81\x11\x15a\x052Wa\x052a\x1B\xB6V[\x02\x17\x90UP`@\x91\x82\x01Q`\x01\x90\x91\x01UQ\x7F\xF6\xE85\x9CWR\x0BF\x964sk\xFC;\xB7\xEC\\\xBD\x1A\x0B\xD2\x8B\x10\xA8'W\x93\xBBs\x0By\x7F\x90a\x05w\x903\x90\x88\x90\x88\x90\x87\x90a\x1C>V[`@Q\x80\x91\x03\x90\xA1PPPPPV[3_\x90\x81R`\x04` R`@\x81 T\x90\x81\x90\x03a\x05\xB6W`@Qcy)\x8AS`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x80B\x10\x15a\x05\xD7W`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x06\x1BW`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x84\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x91\x90\x91U`\x07Ta\x06Q\x92\x16\x90\x83a\x0E,V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01a\x04\x11V[a\x06\x90\x82a\x0B\xE4V[a\x06\x99\x82a\x0C\x1CV[`\x013_\x90\x81R`\x02` R`@\x90 Ta\x01\0\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x06\xC3Wa\x06\xC3a\x1B\xB6V[\x03a\x06\xE1W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 T\x81\x81\x10\x15a\x07(W`@Qc\x92fSQ`\xE0\x1B\x81R`\x04\x81\x01\x83\x90R`$\x01a\x03\x7FV[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 \x80T\x84\x92\x90a\x07Z\x90\x84\x90a\x1C\xA1V[\x92PP\x81\x90UP`@Q\x80`@\x01`@R\x80\x83\x81R` \x01`\x08TBa\x07\x80\x91\x90a\x1C+V[\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16_\x81\x81R`\x06` \x90\x81R`@\x80\x83 3\x80\x85R\x90\x83R\x92\x81\x90 \x85Q\x81U\x94\x82\x01Q`\x01\x90\x95\x01\x94\x90\x94U\x83Q\x91\x82R\x81\x01\x91\x90\x91R\x90\x81\x01\x83\x90R\x7FM\x10\xBD\x04\x97u\xC7{\xD7\xF2U\x19Z\xFB\xA5\x08\x80(\xEC\xB3\xC7\xC2w\xD3\x93\xCC\xFFy4\xF2\xF9,\x90``\x01a\x04\x11V[a\x07\xFC3a\x0B\xE4V[a\x08\x053a\x0C\x1CV[a\x08\x0E\x82a\r\x1CV[a\x08\x17\x83a\r[V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x08@\x81\x83\x86a\r\x97V[`\x01`\x03_a\x08N\x87a\nJV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x80\xD8\xA4\xA1f3(\xA9\x98\xD4U[\xA2\x1D\x8B\xBAn\xF1Wj\x8C^\x9D'\xF9\xC5E\xF1\xA3\xD5+\x1D3\x85\x85`@Qa\x08\xA4\x93\x92\x91\x90a\x1C\xB4V[`@Q\x80\x91\x03\x90\xA1PPPPV[a\x08\xBB3a\x0B\xE4V[a\x08\xC43a\x0C\x1CV[3_\x90\x81R`\x02` R`@\x90 \x80Ta\xFF\0\x19\x16a\x01\0\x17\x90U`\x08Ta\x08\xEC\x90Ba\x1C+V[3_\x81\x81R`\x04` \x90\x81R`@\x91\x82\x90 \x93\x90\x93UQ\x90\x81R\x7F\xFB$0ST\xC8wb\xD5WHz\xE4\xA5d\xE8\xD0>\xCB\xB9\xA9}\xD8\xAF\xFF\x8E\x1Fo\xCA\xF0\xDD\x16\x91\x01`@Q\x80\x91\x03\x90\xA1V[a\t;a\x0E\xAFV[a\tD_a\x0E\xDBV[V[\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x80T`\x01`@\x1B\x81\x04`\xFF\x16\x15\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x81\x15\x80\x15a\t\x8BWP\x82[\x90P_\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01\x14\x80\x15a\t\xA7WP0;\x15[\x90P\x81\x15\x80\x15a\t\xB5WP\x80\x15[\x15a\t\xD3W`@Qc\xF9.\xE8\xA9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16`\x01\x17\x85U\x83\x15a\t\xFDW\x84T`\xFF`@\x1B\x19\x16`\x01`@\x1B\x17\x85U[C`\x01U\x83\x15a\nCW\x84T`\xFF`@\x1B\x19\x16\x85U`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x01a\x05wV[PPPPPV[_\x81_\x01Q\x82` \x01Q\x83`@\x01Q\x84``\x01Q`@Q` \x01a\n\x87\x94\x93\x92\x91\x90\x93\x84R` \x84\x01\x92\x90\x92R`@\x83\x01R``\x82\x01R`\x80\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 `\x01\x01TB\x10\x15a\n\xEAW`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x0B.W`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x83\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x82\x81U`\x01\x01\x91\x90\x91U`\x07Ta\x0Bj\x92\x16\x90\x83a\x0E,V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01`@Q\x80\x91\x03\x90\xA1PPV[a\x0B\xAFa\x0E\xAFV[`\x01`\x01`\xA0\x1B\x03\x81\x16a\x0B\xD8W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R_`\x04\x82\x01R`$\x01a\x03\x7FV[a\x0B\xE1\x81a\x0E\xDBV[PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x02` R`@\x90 T`\xFF\x16a\x0B\xE1W`@QcW\xFD\xF4\x0B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x04` R`@\x90 T\x15a\x0B\xE1W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R\x82`D\x82\x01R` _`d\x83_\x8AZ\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\nCW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x94\x93\xD3W\xD1\x90RS\x11Q`b\x1B`D\x82\x01R`d\x01a\x03\x7FV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x02` R`@\x90 T`\xFF\x16\x15a\x0B\xE1W`@Qc\x13.~\xFB`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\r9\x82\x82a\x0F*V[\x15a\rWW`@Qc\x06\xCFC\x8F`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[`\x03_a\rg\x83a\nJV[\x81R` \x81\x01\x91\x90\x91R`@\x01_ T`\xFF\x16\x15a\x0B\xE1W`@Qb\xDA\x8AW`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\r\xA0\x82a\x0FMV[_`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x1Fd`$\x919\x90P_\x84\x82`@Q` \x01a\r\xD0\x92\x91\x90a\x1D5V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_a\r\xEB\x82a\x0F\xE8V[\x90Pa\x0E\x08\x81\x85a\r\xFB\x88a\x10\xD5V[a\x0E\x03a\x11LV[a\x12\x19V[a\x0E$W`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPV[_`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` _`D\x83_\x89Z\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\x0E\xA9W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0F`$\x82\x01Rn\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x90RS\x11Q`\x8A\x1B`D\x82\x01R`d\x01a\x03\x7FV[PPPPV[_T`\x01`\x01`\xA0\x1B\x03\x163\x14a\tDW`@Qc\x11\x8C\xDA\xA7`\xE0\x1B\x81R3`\x04\x82\x01R`$\x01a\x03\x7FV[_\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x80Q\x82Q_\x91\x14\x80\x15a\x0FDWP\x81` \x01Q\x83` \x01Q\x14[\x90P[\x92\x91PPV[\x80Q` \x82\x01Q_\x91_\x80Q` a\x1F\x88\x839\x81Q\x91R\x91\x15\x90\x15\x16\x15a\x0FsWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x0F\xE3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x7FV[PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x10\x05\x83a\x12\xF9V[\x90P_\x80Q` a\x1F\x88\x839\x81Q\x91R`\x03_\x82\x84\x85\t\x90P\x82\x80a\x10,Wa\x10,a\x1DIV[\x84\x82\t\x90P\x82\x80a\x10?Wa\x10?a\x1DIV[\x82\x82\x08\x90P_\x80a\x10O\x83a\x15\x02V[\x92P\x90P[\x80a\x10\xB8W\x84\x80a\x10gWa\x10ga\x1DIV[`\x01\x87\x08\x95P\x84\x80a\x10{Wa\x10{a\x1DIV[\x86\x87\t\x92P\x84\x80a\x10\x8EWa\x10\x8Ea\x1DIV[\x86\x84\t\x92P\x84\x80a\x10\xA1Wa\x10\xA1a\x1DIV[\x84\x84\x08\x92Pa\x10\xAF\x83a\x15\x02V[\x92P\x90Pa\x10TV[P`@\x80Q\x80\x82\x01\x90\x91R\x94\x85R` \x85\x01RP\x91\x94\x93PPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x10\xFCWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01_\x80Q` a\x1F\x88\x839\x81Q\x91R\x84` \x01Qa\x11-\x91\x90a\x1D]V[a\x11D\x90_\x80Q` a\x1F\x88\x839\x81Q\x91Ra\x1C\xA1V[\x90R\x92\x91PPV[a\x11s`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[_\x80_`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x12\xEBW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x03\x7FV[P\x15\x15\x90P[\x94\x93PPPPV[_\x80a\x13\x04\x83a\x15\xF9V[\x80Q\x90\x91P`0\x81\x14a\x13\x19Wa\x13\x19a\x1D|V[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x133Wa\x133a\x19\xEDV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x13]W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_[\x82\x81\x10\x15a\x13\xCCW\x83`\x01a\x13w\x83\x86a\x1C\xA1V[a\x13\x81\x91\x90a\x1C\xA1V[\x81Q\x81\x10a\x13\x91Wa\x13\x91a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x13\xAEWa\x13\xAEa\x1D\x90V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x13bV[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R_\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P_[\x82\x81\x10\x15a\x14\\W\x83\x81a\x14\x08\x85\x88a\x1C\xA1V[a\x14\x12\x91\x90a\x1C+V[\x81Q\x81\x10a\x14\"Wa\x14\"a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x14BWa\x14Ba\x1D\x90V[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x13\xF4V[P_a\x14g\x82a\x19CV[\x90Pa\x01\0_\x80Q` a\x1F\x88\x839\x81Q\x91R_a\x14\x85\x86\x89a\x1C\xA1V[\x90P_[\x81\x81\x10\x15a\x14\xF2W_\x88`\x01a\x14\x9F\x84\x86a\x1C\xA1V[a\x14\xA9\x91\x90a\x1C\xA1V[\x81Q\x81\x10a\x14\xB9Wa\x14\xB9a\x1D\x90V[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x14\xD1Wa\x14\xD1a\x1DIV[\x85\x87\t\x95P\x83\x80a\x14\xE4Wa\x14\xE4a\x1DIV[\x81\x87\x08\x95PP`\x01\x01a\x14\x89V[P\x92\x9A\x99PPPPPPPPPPV[_\x80_\x80_\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P__\x80Q` a\x1F\x88\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x87``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x94PP_Q\x92P\x83a\x15\xBFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x7FV[\x80`\x01\x84\x90\x1B\x11\x15a\x15\xD8Wa\x15\xD5\x83\x82a\x1C\xA1V[\x92P[\x80\x80a\x15\xE6Wa\x15\xE6a\x1DIV[\x83\x84\t\x96\x90\x96\x14\x96\x91\x95P\x90\x93PPPPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90_\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x169\x92\x91\x90a\x1D5V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x16`\x92\x91\x90a\x1D\xA4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x16\x82\x91\x90a\x1D\xCEV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x16\xAC\x90\x83\x90\x83\x90` \x01a\x1D\xE6V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90_`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17\x1CWa\x17\x1Ca\x19\xEDV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17FW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_\x82`@Q` \x01a\x17]\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_[\x81Q\x81\x10\x15a\x17\xC6W\x81\x81\x81Q\x81\x10a\x17\x8BWa\x17\x8Ba\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x17\xA8Wa\x17\xA8a\x1D\x90V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x17pV[P_\x84`@Q` \x01a\x17\xDB\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R_\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x18mW_\x83\x82\x81Q\x81\x10a\x18\x14Wa\x18\x14a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x181Wa\x181a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x18R\x92\x91\x90a\x1E\nV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x17\xF9V[P\x86\x88\x87`@Q` \x01a\x18\x83\x93\x92\x91\x90a\x1E.V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x18\xB1\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P_[a\x18\xD1\x8A`\xFF\x8D\x16a\x1C\xA1V[\x81\x10\x15a\x192W\x82\x81\x81Q\x81\x10a\x18\xEAWa\x18\xEAa\x1D\x90V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x19\x04\x83\x8Da\x1C+V[\x81Q\x81\x10a\x19\x14Wa\x19\x14a\x1D\x90V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x18\xC4V[P\x91\x9B\x9APPPPPPPPPPPV[_\x80\x80[\x83Q\x81\x10\x15a\x19\xA3W\x83\x81\x81Q\x81\x10a\x19bWa\x19ba\x1D\x90V[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x19z\x91\x90a\x1EaV[a\x19\x85\x90`\x02a\x1FXV[a\x19\x8F\x91\x90a\x1EaV[a\x19\x99\x90\x83a\x1C+V[\x91P`\x01\x01a\x19GV[P\x92\x91PPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x19\xC0W_\x80\xFD[\x91\x90PV[_\x80`@\x83\x85\x03\x12\x15a\x19\xD6W_\x80\xFD[a\x19\xDF\x83a\x19\xAAV[\x94` \x93\x90\x93\x015\x93PPPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[_`\x80\x82\x84\x03\x12\x15a\x1A\x11W_\x80\xFD[`@Q`\x80\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A@WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[\x80`@RP\x80\x91P\x825\x81R` \x83\x015` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[_`@\x82\x84\x03\x12\x15a\x1A\x81W_\x80\xFD[`@Q`@\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A\xB0WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x80_\x80a\x01 \x85\x87\x03\x12\x15a\x1A\xDEW_\x80\xFD[a\x1A\xE8\x86\x86a\x1A\x01V[\x93Pa\x1A\xF7\x86`\x80\x87\x01a\x1AqV[\x92Pa\x1B\x06\x86`\xC0\x87\x01a\x1AqV[\x91Pa\x01\0\x85\x015a\xFF\xFF\x81\x16\x81\x14a\x1B\x1DW_\x80\xFD[\x93\x96\x92\x95P\x90\x93PPV[_` \x82\x84\x03\x12\x15a\x1B8W_\x80\xFD[a\x0FD\x82a\x19\xAAV[_\x80_a\x01\0\x84\x86\x03\x12\x15a\x1BTW_\x80\xFD[a\x1B^\x85\x85a\x1A\x01V[\x92Pa\x1Bm\x85`\x80\x86\x01a\x1AqV[\x91Pa\x1B|\x85`\xC0\x86\x01a\x1AqV[\x90P\x92P\x92P\x92V[_`\x80\x82\x84\x03\x12\x15a\x1B\x95W_\x80\xFD[a\x0FD\x83\x83a\x1A\x01V[_` \x82\x84\x03\x12\x15a\x1B\xAFW_\x80\xFD[P5\x91\x90PV[cNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[\x83\x15\x15\x81R``\x81\x01`\x02\x84\x10a\x1B\xEFWcNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[` \x82\x01\x93\x90\x93R`@\x01R\x91\x90PV[_` \x82\x84\x03\x12\x15a\x1C\x10W_\x80\xFD[PQ\x91\x90PV[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x80\x82\x01\x80\x82\x11\x15a\x0FGWa\x0FGa\x1C\x17V[`\x01`\x01`\xA0\x1B\x03\x85\x16\x81Ra\x01\0\x81\x01a\x1C}` \x83\x01\x86\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x83Q`\xA0\x83\x01R` \x84\x01Q`\xC0\x83\x01Ra\xFF\xFF\x83\x16`\xE0\x83\x01R\x95\x94PPPPPV[\x81\x81\x03\x81\x81\x11\x15a\x0FGWa\x0FGa\x1C\x17V[`\x01`\x01`\xA0\x1B\x03\x84\x16\x81R`\xE0\x81\x01a\x1C\xF2` \x83\x01\x85\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x82Q`\xA0\x83\x01R` \x83\x01Q`\xC0\x83\x01Ra\x12\xF1V[_\x81Q_[\x81\x81\x10\x15a\x1D'W` \x81\x85\x01\x81\x01Q\x86\x83\x01R\x01a\x1D\rV[P_\x93\x01\x92\x83RP\x90\x91\x90PV[_a\x12\xF1a\x1DC\x83\x86a\x1D\x08V[\x84a\x1D\x08V[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a\x1DwWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V[cNH{q`\xE0\x1B_R`\x01`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[_a\x1D\xAF\x82\x85a\x1D\x08V[_\x81R`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16`\x01\x84\x01RPP`\x02\x01\x91\x90PV[_a\x1D\xD9\x82\x84a\x1D\x08V[_\x81R`\x01\x01\x93\x92PPPV[_a\x1D\xF1\x82\x85a\x1D\x08V[`\x01`\x01`\xF0\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x02\x01\x91\x90PV[_a\x1E\x15\x82\x85a\x1D\x08V[`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x01\x01\x91\x90PV[_a\x1E9\x82\x86a\x1D\x08V[`\x01`\x01`\xF8\x1B\x03\x19\x94\x90\x94\x16\x84RPP`\x01`\x01`\xF0\x1B\x03\x19\x16`\x01\x82\x01R`\x03\x01\x91\x90PV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0FGWa\x0FGa\x1C\x17V[`\x01\x81\x81[\x80\x85\x11\x15a\x1E\xB2W\x81_\x19\x04\x82\x11\x15a\x1E\x98Wa\x1E\x98a\x1C\x17V[\x80\x85\x16\x15a\x1E\xA5W\x91\x81\x02\x91[\x93\x84\x1C\x93\x90\x80\x02\x90a\x1E}V[P\x92P\x92\x90PV[_\x82a\x1E\xC8WP`\x01a\x0FGV[\x81a\x1E\xD4WP_a\x0FGV[\x81`\x01\x81\x14a\x1E\xEAW`\x02\x81\x14a\x1E\xF4Wa\x1F\x10V[`\x01\x91PPa\x0FGV[`\xFF\x84\x11\x15a\x1F\x05Wa\x1F\x05a\x1C\x17V[PP`\x01\x82\x1Ba\x0FGV[P` \x83\x10a\x013\x83\x10\x16`N\x84\x10`\x0B\x84\x10\x16\x17\x15a\x1F3WP\x81\x81\na\x0FGV[a\x1F=\x83\x83a\x1ExV[\x80_\x19\x04\x82\x11\x15a\x1FPWa\x1FPa\x1C\x17V[\x02\x93\x92PPPV[_a\x0FD\x83\x83a\x1E\xBAV\xFEBLS_SIG_BN254G1_XMD:KECCAK_NCTH_NUL_0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\xA1dsolcC\0\x08\x17\0\n", + b"`\x80`@R4\x80\x15b\0\0\x10W_\x80\xFD[P`@Qb\0\"\xA98\x03\x80b\0\"\xA9\x839\x81\x01`@\x81\x90Rb\0\x003\x91b\0\x02AV[\x80`\x01`\x01`\xA0\x1B\x03\x81\x16b\0\0bW`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R_`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[b\0\0m\x81b\0\0\xC1V[Pb\0\0xb\0\x01\x10V[P`\x08\x80T`\x01`\x01`\xA0\x1B\x03\x94\x85\x16`\x01`\x01`\xA0\x1B\x03\x19\x91\x82\x16\x17\x90\x91U`\x02\x80T\x93\x90\x94\x16\x92\x81\x16\x92\x90\x92\x17\x90\x92U`\t\x91\x90\x91U`\n\x80T\x90\x91\x163\x17\x90Ub\0\x02\x92V[_\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x80Th\x01\0\0\0\0\0\0\0\0\x81\x04`\xFF\x16\x15\x90`\x01`\x01`@\x1B\x03\x16_\x81\x15\x80\x15b\0\x01ZWP\x82[\x90P_\x82`\x01`\x01`@\x1B\x03\x16`\x01\x14\x80\x15b\0\x01vWP0;\x15[\x90P\x81\x15\x80\x15b\0\x01\x85WP\x80\x15[\x15b\0\x01\xA4W`@Qc\xF9.\xE8\xA9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84T`\x01`\x01`@\x1B\x03\x19\x16`\x01\x17\x85U\x83\x15b\0\x01\xD3W\x84T`\xFF`@\x1B\x19\x16h\x01\0\0\0\0\0\0\0\0\x17\x85U[C`\x01U\x83\x15b\0\x02\x1EW\x84T`\xFF`@\x1B\x19\x16\x85U`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x01`@Q\x80\x91\x03\x90\xA1[PPPPPV[\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14b\0\x02\x9D\xF9\xB5\x14a\x01fW\x80cM\x99\xDD\x16\x14a\x01\x82W[_\x80\xFD[a\x01>a\x0196`\x04a\x1A\x1AV[a\x02\xF2V[\0[a\x01>a\x01N6`\x04a\x1B\x1FV[a\x04sV[a\x01>a\x01a6`\x04a\x1B}V[a\x05\xDBV[a\x01o`\x01T\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x01>a\x01\x906`\x04a\x1A\x1AV[a\x06\xDCV[a\x01>a\x01\xA36`\x04a\x1B\x96V[a\x08HV[a\x01>a\t\x07V[a\x01>a\t\x88V[a\x01>a\t\x9BV[_T`\x01`\x01`\xA0\x1B\x03\x16[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01yV[a\x01oa\x01\xF26`\x04a\x1B\xDAV[a\n\x9FV[`\x08Ta\x01\xCC\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x01o`\tT\x81V[a\x01>a\x02!6`\x04a\x1B}V[a\n\xF9V[a\x02Ha\x0246`\x04a\x1B\xF4V[`\x04` R_\x90\x81R`@\x90 T`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01a\x01yV[`\x02Ta\x01\xCC\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x01oa\x02y6`\x04a\x1B}V[`\x05` R_\x90\x81R`@\x90 T\x81V[a\x01>a\x02\x986`\x04a\x1B}V[a\x0B\xFCV[`\nTa\x01\xCC\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x02\xE3a\x02\xBE6`\x04a\x1B}V[`\x03` R_\x90\x81R`@\x90 \x80T`\x01\x90\x91\x01T`\xFF\x80\x83\x16\x92a\x01\0\x90\x04\x16\x90\x83V[`@Qa\x01y\x93\x92\x91\x90a\x1C\x1FV[a\x02\xFB\x82a\x0C9V[a\x03\x04\x82a\x0CqV[`\x08T`@Qcn\xB1v\x9F`\xE1\x1B\x81R3`\x04\x82\x01R0`$\x82\x01R_\x91`\x01`\x01`\xA0\x1B\x03\x16\x90c\xDDb\xED>\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03PW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03t\x91\x90a\x1CUV[\x90P\x81\x81\x10\x15a\x03\xA6W`@Qc\x05Ce\xBB`\xE3\x1B\x81R`\x04\x81\x01\x82\x90R`$\x81\x01\x83\x90R`D\x01[`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x03` R`@\x81 `\x01\x01\x80T\x84\x92\x90a\x03\xD0\x90\x84\x90a\x1C\x80V[\x90\x91UPP`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 \x80T\x84\x92\x90a\x04\x07\x90\x84\x90a\x1C\x80V[\x90\x91UPP`\x08Ta\x04$\x90`\x01`\x01`\xA0\x1B\x03\x1630\x85a\x0C\xA7V[`@\x80Q3\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R\x90\x81\x01\x83\x90R\x7F\xE5T\x1Aka\x03\xD4\xFA~\x02\x1E\xD5O\xAD9\xC6o'\xA7k\xD1=7L\xF6$\n\xE6\xBD\x0B\xB7+\x90``\x01[`@Q\x80\x91\x03\x90\xA1PPPV[a\x04|3a\r8V[a\x04\x85\x83a\rqV[a\x04\x8E\x84a\r\xB0V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x04\xB7\x81\x84\x87a\r\xECV[a'\x10\x82a\xFF\xFF\x16\x11\x15a\x04\xDEW`@Qc\xDC\x81\xDB\x85`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x04_a\x04\xEC\x88a\n\x9FV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP`@Q\x80``\x01`@R\x80`\x01\x15\x15\x81R` \x01_`\x01\x81\x11\x15a\x055Wa\x055a\x1C\x0BV[\x81R_` \x91\x82\x01\x81\x90R3\x81R`\x03\x82R`@\x90 \x82Q\x81T\x90\x15\x15`\xFF\x19\x82\x16\x81\x17\x83U\x92\x84\x01Q\x91\x92\x83\x91a\xFF\0\x19\x90\x91\x16a\xFF\xFF\x19\x90\x91\x16\x17a\x01\0\x83`\x01\x81\x11\x15a\x05\x87Wa\x05\x87a\x1C\x0BV[\x02\x17\x90UP`@\x91\x82\x01Q`\x01\x90\x91\x01UQ\x7F\xF6\xE85\x9CWR\x0BF\x964sk\xFC;\xB7\xEC\\\xBD\x1A\x0B\xD2\x8B\x10\xA8'W\x93\xBBs\x0By\x7F\x90a\x05\xCC\x903\x90\x88\x90\x88\x90\x87\x90a\x1C\x93V[`@Q\x80\x91\x03\x90\xA1PPPPPV[3_\x90\x81R`\x05` R`@\x81 T\x90\x81\x90\x03a\x06\x0BW`@Qcy)\x8AS`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x80B\x10\x15a\x06,W`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x06pW`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x84\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x91\x90\x91U`\x08Ta\x06\xA6\x92\x16\x90\x83a\x0E\x81V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01a\x04fV[a\x06\xE5\x82a\x0C9V[a\x06\xEE\x82a\x0CqV[`\x013_\x90\x81R`\x03` R`@\x90 Ta\x01\0\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x07\x18Wa\x07\x18a\x1C\x0BV[\x03a\x076W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 T\x81\x81\x10\x15a\x07}W`@Qc\x92fSQ`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01a\x03\x9DV[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 \x80T\x84\x92\x90a\x07\xAF\x90\x84\x90a\x1C\xF6V[\x92PP\x81\x90UP`@Q\x80`@\x01`@R\x80\x83\x81R` \x01`\tTBa\x07\xD5\x91\x90a\x1C\x80V[\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16_\x81\x81R`\x07` \x90\x81R`@\x80\x83 3\x80\x85R\x90\x83R\x92\x81\x90 \x85Q\x81U\x94\x82\x01Q`\x01\x90\x95\x01\x94\x90\x94U\x83Q\x91\x82R\x81\x01\x91\x90\x91R\x90\x81\x01\x83\x90R\x7FM\x10\xBD\x04\x97u\xC7{\xD7\xF2U\x19Z\xFB\xA5\x08\x80(\xEC\xB3\xC7\xC2w\xD3\x93\xCC\xFFy4\xF2\xF9,\x90``\x01a\x04fV[a\x08Q3a\x0C9V[a\x08Z3a\x0CqV[a\x08c\x82a\rqV[a\x08l\x83a\r\xB0V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x08\x95\x81\x83\x86a\r\xECV[`\x01`\x04_a\x08\xA3\x87a\n\x9FV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x80\xD8\xA4\xA1f3(\xA9\x98\xD4U[\xA2\x1D\x8B\xBAn\xF1Wj\x8C^\x9D'\xF9\xC5E\xF1\xA3\xD5+\x1D3\x85\x85`@Qa\x08\xF9\x93\x92\x91\x90a\x1D\tV[`@Q\x80\x91\x03\x90\xA1PPPPV[a\t\x103a\x0C9V[a\t\x193a\x0CqV[3_\x90\x81R`\x03` R`@\x90 \x80Ta\xFF\0\x19\x16a\x01\0\x17\x90U`\tTa\tA\x90Ba\x1C\x80V[3_\x81\x81R`\x05` \x90\x81R`@\x91\x82\x90 \x93\x90\x93UQ\x90\x81R\x7F\xFB$0ST\xC8wb\xD5WHz\xE4\xA5d\xE8\xD0>\xCB\xB9\xA9}\xD8\xAF\xFF\x8E\x1Fo\xCA\xF0\xDD\x16\x91\x01`@Q\x80\x91\x03\x90\xA1V[a\t\x90a\x0F\x04V[a\t\x99_a\x0F0V[V[\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x80T`\x01`@\x1B\x81\x04`\xFF\x16\x15\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x81\x15\x80\x15a\t\xE0WP\x82[\x90P_\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01\x14\x80\x15a\t\xFCWP0;\x15[\x90P\x81\x15\x80\x15a\n\nWP\x80\x15[\x15a\n(W`@Qc\xF9.\xE8\xA9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16`\x01\x17\x85U\x83\x15a\nRW\x84T`\xFF`@\x1B\x19\x16`\x01`@\x1B\x17\x85U[C`\x01U\x83\x15a\n\x98W\x84T`\xFF`@\x1B\x19\x16\x85U`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x01a\x05\xCCV[PPPPPV[_\x81_\x01Q\x82` \x01Q\x83`@\x01Q\x84``\x01Q`@Q` \x01a\n\xDC\x94\x93\x92\x91\x90\x93\x84R` \x84\x01\x92\x90\x92R`@\x83\x01R``\x82\x01R`\x80\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x07` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 `\x01\x01TB\x10\x15a\x0B?W`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x07` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x0B\x83W`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x83\x16_\x90\x81R`\x07` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x82\x81U`\x01\x01\x91\x90\x91U`\x08Ta\x0B\xBF\x92\x16\x90\x83a\x0E\x81V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01`@Q\x80\x91\x03\x90\xA1PPV[a\x0C\x04a\x0F\x04V[`\x01`\x01`\xA0\x1B\x03\x81\x16a\x0C-W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R_`\x04\x82\x01R`$\x01a\x03\x9DV[a\x0C6\x81a\x0F0V[PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x03` R`@\x90 T`\xFF\x16a\x0C6W`@QcW\xFD\xF4\x0B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x05` R`@\x90 T\x15a\x0C6W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R\x82`D\x82\x01R` _`d\x83_\x8AZ\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\n\x98W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x94\x93\xD3W\xD1\x90RS\x11Q`b\x1B`D\x82\x01R`d\x01a\x03\x9DV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x03` R`@\x90 T`\xFF\x16\x15a\x0C6W`@Qc\x13.~\xFB`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\r\x8E\x82\x82a\x0F\x7FV[\x15a\r\xACW`@Qc\x06\xCFC\x8F`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[`\x04_a\r\xBC\x83a\n\x9FV[\x81R` \x81\x01\x91\x90\x91R`@\x01_ T`\xFF\x16\x15a\x0C6W`@Qb\xDA\x8AW`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\r\xF5\x82a\x0F\xA2V[_`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x1F\xB9`$\x919\x90P_\x84\x82`@Q` \x01a\x0E%\x92\x91\x90a\x1D\x8AV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_a\x0E@\x82a\x10=V[\x90Pa\x0E]\x81\x85a\x0EP\x88a\x11*V[a\x0EXa\x11\xA1V[a\x12nV[a\x0EyW`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPV[_`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` _`D\x83_\x89Z\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\x0E\xFEW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0F`$\x82\x01Rn\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x90RS\x11Q`\x8A\x1B`D\x82\x01R`d\x01a\x03\x9DV[PPPPV[_T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t\x99W`@Qc\x11\x8C\xDA\xA7`\xE0\x1B\x81R3`\x04\x82\x01R`$\x01a\x03\x9DV[_\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x80Q\x82Q_\x91\x14\x80\x15a\x0F\x99WP\x81` \x01Q\x83` \x01Q\x14[\x90P[\x92\x91PPV[\x80Q` \x82\x01Q_\x91_\x80Q` a\x1F\xDD\x839\x81Q\x91R\x91\x15\x90\x15\x16\x15a\x0F\xC8WPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x108W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x9DV[PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x10Z\x83a\x13NV[\x90P_\x80Q` a\x1F\xDD\x839\x81Q\x91R`\x03_\x82\x84\x85\t\x90P\x82\x80a\x10\x81Wa\x10\x81a\x1D\x9EV[\x84\x82\t\x90P\x82\x80a\x10\x94Wa\x10\x94a\x1D\x9EV[\x82\x82\x08\x90P_\x80a\x10\xA4\x83a\x15WV[\x92P\x90P[\x80a\x11\rW\x84\x80a\x10\xBCWa\x10\xBCa\x1D\x9EV[`\x01\x87\x08\x95P\x84\x80a\x10\xD0Wa\x10\xD0a\x1D\x9EV[\x86\x87\t\x92P\x84\x80a\x10\xE3Wa\x10\xE3a\x1D\x9EV[\x86\x84\t\x92P\x84\x80a\x10\xF6Wa\x10\xF6a\x1D\x9EV[\x84\x84\x08\x92Pa\x11\x04\x83a\x15WV[\x92P\x90Pa\x10\xA9V[P`@\x80Q\x80\x82\x01\x90\x91R\x94\x85R` \x85\x01RP\x91\x94\x93PPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x11QWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01_\x80Q` a\x1F\xDD\x839\x81Q\x91R\x84` \x01Qa\x11\x82\x91\x90a\x1D\xB2V[a\x11\x99\x90_\x80Q` a\x1F\xDD\x839\x81Q\x91Ra\x1C\xF6V[\x90R\x92\x91PPV[a\x11\xC8`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[_\x80_`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x13@W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x03\x9DV[P\x15\x15\x90P[\x94\x93PPPPV[_\x80a\x13Y\x83a\x16NV[\x80Q\x90\x91P`0\x81\x14a\x13nWa\x13na\x1D\xD1V[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x13\x88Wa\x13\x88a\x1ABV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x13\xB2W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_[\x82\x81\x10\x15a\x14!W\x83`\x01a\x13\xCC\x83\x86a\x1C\xF6V[a\x13\xD6\x91\x90a\x1C\xF6V[\x81Q\x81\x10a\x13\xE6Wa\x13\xE6a\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x14\x03Wa\x14\x03a\x1D\xE5V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x13\xB7V[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R_\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P_[\x82\x81\x10\x15a\x14\xB1W\x83\x81a\x14]\x85\x88a\x1C\xF6V[a\x14g\x91\x90a\x1C\x80V[\x81Q\x81\x10a\x14wWa\x14wa\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x14\x97Wa\x14\x97a\x1D\xE5V[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x14IV[P_a\x14\xBC\x82a\x19\x98V[\x90Pa\x01\0_\x80Q` a\x1F\xDD\x839\x81Q\x91R_a\x14\xDA\x86\x89a\x1C\xF6V[\x90P_[\x81\x81\x10\x15a\x15GW_\x88`\x01a\x14\xF4\x84\x86a\x1C\xF6V[a\x14\xFE\x91\x90a\x1C\xF6V[\x81Q\x81\x10a\x15\x0EWa\x15\x0Ea\x1D\xE5V[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x15&Wa\x15&a\x1D\x9EV[\x85\x87\t\x95P\x83\x80a\x159Wa\x159a\x1D\x9EV[\x81\x87\x08\x95PP`\x01\x01a\x14\xDEV[P\x92\x9A\x99PPPPPPPPPPV[_\x80_\x80_\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P__\x80Q` a\x1F\xDD\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x87``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x94PP_Q\x92P\x83a\x16\x14W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x9DV[\x80`\x01\x84\x90\x1B\x11\x15a\x16-Wa\x16*\x83\x82a\x1C\xF6V[\x92P[\x80\x80a\x16;Wa\x16;a\x1D\x9EV[\x83\x84\t\x96\x90\x96\x14\x96\x91\x95P\x90\x93PPPPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90_\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x16\x8E\x92\x91\x90a\x1D\x8AV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x16\xB5\x92\x91\x90a\x1D\xF9V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x16\xD7\x91\x90a\x1E#V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x17\x01\x90\x83\x90\x83\x90` \x01a\x1E;V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90_`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17qWa\x17qa\x1ABV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17\x9BW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_\x82`@Q` \x01a\x17\xB2\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_[\x81Q\x81\x10\x15a\x18\x1BW\x81\x81\x81Q\x81\x10a\x17\xE0Wa\x17\xE0a\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x17\xFDWa\x17\xFDa\x1D\xE5V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x17\xC5V[P_\x84`@Q` \x01a\x180\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R_\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x18\xC2W_\x83\x82\x81Q\x81\x10a\x18iWa\x18ia\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x18\x86Wa\x18\x86a\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x18\xA7\x92\x91\x90a\x1E_V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x18NV[P\x86\x88\x87`@Q` \x01a\x18\xD8\x93\x92\x91\x90a\x1E\x83V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x19\x06\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P_[a\x19&\x8A`\xFF\x8D\x16a\x1C\xF6V[\x81\x10\x15a\x19\x87W\x82\x81\x81Q\x81\x10a\x19?Wa\x19?a\x1D\xE5V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x19Y\x83\x8Da\x1C\x80V[\x81Q\x81\x10a\x19iWa\x19ia\x1D\xE5V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x19\x19V[P\x91\x9B\x9APPPPPPPPPPPV[_\x80\x80[\x83Q\x81\x10\x15a\x19\xF8W\x83\x81\x81Q\x81\x10a\x19\xB7Wa\x19\xB7a\x1D\xE5V[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x19\xCF\x91\x90a\x1E\xB6V[a\x19\xDA\x90`\x02a\x1F\xADV[a\x19\xE4\x91\x90a\x1E\xB6V[a\x19\xEE\x90\x83a\x1C\x80V[\x91P`\x01\x01a\x19\x9CV[P\x92\x91PPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x1A\x15W_\x80\xFD[\x91\x90PV[_\x80`@\x83\x85\x03\x12\x15a\x1A+W_\x80\xFD[a\x1A4\x83a\x19\xFFV[\x94` \x93\x90\x93\x015\x93PPPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[_`\x80\x82\x84\x03\x12\x15a\x1AfW_\x80\xFD[`@Q`\x80\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A\x95WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[\x80`@RP\x80\x91P\x825\x81R` \x83\x015` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[_`@\x82\x84\x03\x12\x15a\x1A\xD6W_\x80\xFD[`@Q`@\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1B\x05WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x80_\x80a\x01 \x85\x87\x03\x12\x15a\x1B3W_\x80\xFD[a\x1B=\x86\x86a\x1AVV[\x93Pa\x1BL\x86`\x80\x87\x01a\x1A\xC6V[\x92Pa\x1B[\x86`\xC0\x87\x01a\x1A\xC6V[\x91Pa\x01\0\x85\x015a\xFF\xFF\x81\x16\x81\x14a\x1BrW_\x80\xFD[\x93\x96\x92\x95P\x90\x93PPV[_` \x82\x84\x03\x12\x15a\x1B\x8DW_\x80\xFD[a\x0F\x99\x82a\x19\xFFV[_\x80_a\x01\0\x84\x86\x03\x12\x15a\x1B\xA9W_\x80\xFD[a\x1B\xB3\x85\x85a\x1AVV[\x92Pa\x1B\xC2\x85`\x80\x86\x01a\x1A\xC6V[\x91Pa\x1B\xD1\x85`\xC0\x86\x01a\x1A\xC6V[\x90P\x92P\x92P\x92V[_`\x80\x82\x84\x03\x12\x15a\x1B\xEAW_\x80\xFD[a\x0F\x99\x83\x83a\x1AVV[_` \x82\x84\x03\x12\x15a\x1C\x04W_\x80\xFD[P5\x91\x90PV[cNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[\x83\x15\x15\x81R``\x81\x01`\x02\x84\x10a\x1CDWcNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[` \x82\x01\x93\x90\x93R`@\x01R\x91\x90PV[_` \x82\x84\x03\x12\x15a\x1CeW_\x80\xFD[PQ\x91\x90PV[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x80\x82\x01\x80\x82\x11\x15a\x0F\x9CWa\x0F\x9Ca\x1ClV[`\x01`\x01`\xA0\x1B\x03\x85\x16\x81Ra\x01\0\x81\x01a\x1C\xD2` \x83\x01\x86\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x83Q`\xA0\x83\x01R` \x84\x01Q`\xC0\x83\x01Ra\xFF\xFF\x83\x16`\xE0\x83\x01R\x95\x94PPPPPV[\x81\x81\x03\x81\x81\x11\x15a\x0F\x9CWa\x0F\x9Ca\x1ClV[`\x01`\x01`\xA0\x1B\x03\x84\x16\x81R`\xE0\x81\x01a\x1DG` \x83\x01\x85\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x82Q`\xA0\x83\x01R` \x83\x01Q`\xC0\x83\x01Ra\x13FV[_\x81Q_[\x81\x81\x10\x15a\x1D|W` \x81\x85\x01\x81\x01Q\x86\x83\x01R\x01a\x1DbV[P_\x93\x01\x92\x83RP\x90\x91\x90PV[_a\x13Fa\x1D\x98\x83\x86a\x1D]V[\x84a\x1D]V[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a\x1D\xCCWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V[cNH{q`\xE0\x1B_R`\x01`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[_a\x1E\x04\x82\x85a\x1D]V[_\x81R`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16`\x01\x84\x01RPP`\x02\x01\x91\x90PV[_a\x1E.\x82\x84a\x1D]V[_\x81R`\x01\x01\x93\x92PPPV[_a\x1EF\x82\x85a\x1D]V[`\x01`\x01`\xF0\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x02\x01\x91\x90PV[_a\x1Ej\x82\x85a\x1D]V[`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x01\x01\x91\x90PV[_a\x1E\x8E\x82\x86a\x1D]V[`\x01`\x01`\xF8\x1B\x03\x19\x94\x90\x94\x16\x84RPP`\x01`\x01`\xF0\x1B\x03\x19\x16`\x01\x82\x01R`\x03\x01\x91\x90PV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0F\x9CWa\x0F\x9Ca\x1ClV[`\x01\x81\x81[\x80\x85\x11\x15a\x1F\x07W\x81_\x19\x04\x82\x11\x15a\x1E\xEDWa\x1E\xEDa\x1ClV[\x80\x85\x16\x15a\x1E\xFAW\x91\x81\x02\x91[\x93\x84\x1C\x93\x90\x80\x02\x90a\x1E\xD2V[P\x92P\x92\x90PV[_\x82a\x1F\x1DWP`\x01a\x0F\x9CV[\x81a\x1F)WP_a\x0F\x9CV[\x81`\x01\x81\x14a\x1F?W`\x02\x81\x14a\x1FIWa\x1FeV[`\x01\x91PPa\x0F\x9CV[`\xFF\x84\x11\x15a\x1FZWa\x1FZa\x1ClV[PP`\x01\x82\x1Ba\x0F\x9CV[P` \x83\x10a\x013\x83\x10\x16`N\x84\x10`\x0B\x84\x10\x16\x17\x15a\x1F\x88WP\x81\x81\na\x0F\x9CV[a\x1F\x92\x83\x83a\x1E\xCDV[\x80_\x19\x04\x82\x11\x15a\x1F\xA5Wa\x1F\xA5a\x1ClV[\x02\x93\x92PPPV[_a\x0F\x99\x83\x83a\x1F\x0FV\xFEBLS_SIG_BN254G1_XMD:KECCAK_NCTH_NUL_0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\xA1dsolcC\0\x08\x17\0\n", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x608060405234801561000f575f80fd5b506004361061011c575f3560e01c80638da5cb5b116100a9578063b3e6ebd51161006e578063b3e6ebd51461021b578063b5ecb3441461024d578063f2fde38b1461026c578063f851a4401461027f578063fa52c7d814610292575f80fd5b80638da5cb5b146101b55780639b30a5e6146101d95780639d76ea58146101ec5780639e9a8f31146101ff578063a3066aab14610208575f80fd5b80634d99dd16116100ef5780634d99dd16146101775780635544c2f11461018a5780636a911ccf1461019d578063715018a6146101a55780638129fc1c146101ad575f80fd5b8063026e402b1461012057806313b9057a146101355780632140fecd146101485780633e9df9b51461015b575b5f80fd5b61013361012e3660046119c5565b6102d4565b005b610133610143366004611aca565b61041e565b610133610156366004611b28565b610586565b61016460015481565b6040519081526020015b60405180910390f35b6101336101853660046119c5565b610687565b610133610198366004611b41565b6107f3565b6101336108b2565b610133610933565b610133610946565b5f546001600160a01b03165b6040516001600160a01b03909116815260200161016e565b6101646101e7366004611b85565b610a4a565b6007546101c1906001600160a01b031681565b61016460085481565b610133610216366004611b28565b610aa4565b61023d610229366004611b9f565b60036020525f908152604090205460ff1681565b604051901515815260200161016e565b61016461025b366004611b28565b60046020525f908152604090205481565b61013361027a366004611b28565b610ba7565b6009546101c1906001600160a01b031681565b6102c56102a0366004611b28565b60026020525f90815260409020805460019091015460ff808316926101009004169083565b60405161016e93929190611bca565b6102dd82610be4565b6102e682610c1c565b600754604051636eb1769f60e11b81523360048201523060248201525f916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610332573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103569190611c00565b9050818110156103885760405163054365bb60e31b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0383165f90815260026020526040812060010180548492906103b2908490611c2b565b90915550506007546103cf906001600160a01b0316333085610c52565b604080513381526001600160a01b03851660208201529081018390527fe5541a6b6103d4fa7e021ed54fad39c66f27a76bd13d374cf6240ae6bd0bb72b906060015b60405180910390a1505050565b61042733610ce3565b61043083610d1c565b61043984610d5b565b604080513360208201525f91016040516020818303038152906040529050610462818487610d97565b6127108261ffff1611156104895760405163dc81db8560e01b815260040160405180910390fd5b600160035f61049788610a4a565b81526020019081526020015f205f6101000a81548160ff02191690831515021790555060405180606001604052806001151581526020015f60018111156104e0576104e0611bb6565b81525f602091820181905233815260028252604090208251815490151560ff19821681178355928401519192839161ff001990911661ffff199091161761010083600181111561053257610532611bb6565b0217905550604091820151600190910155517ff6e8359c57520b469634736bfc3bb7ec5cbd1a0bd28b10a8275793bb730b797f90610577903390889088908790611c3e565b60405180910390a15050505050565b335f90815260046020526040812054908190036105b6576040516379298a5360e11b815260040160405180910390fd5b804210156105d757604051635a77435760e01b815260040160405180910390fd5b6001600160a01b0382165f9081526005602090815260408083203384529091528120549081900361061b57604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038084165f90815260056020908152604080832033808552925282209190915560075461065192169083610e2c565b60408051338152602081018390527f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659101610411565b61069082610be4565b61069982610c1c565b6001335f90815260026020526040902054610100900460ff1660018111156106c3576106c3611bb6565b036106e15760405163eab4a96360e01b815260040160405180910390fd5b6001600160a01b0382165f9081526005602090815260408083203384529091529020548181101561072857604051639266535160e01b81526004810183905260240161037f565b6001600160a01b0383165f9081526005602090815260408083203384529091528120805484929061075a908490611ca1565b925050819055506040518060400160405280838152602001600854426107809190611c2b565b90526001600160a01b0384165f8181526006602090815260408083203380855290835292819020855181559482015160019095019490945583519182528101919091529081018390527f4d10bd049775c77bd7f255195afba5088028ecb3c7c277d393ccff7934f2f92c90606001610411565b6107fc33610be4565b61080533610c1c565b61080e82610d1c565b61081783610d5b565b604080513360208201525f91016040516020818303038152906040529050610840818386610d97565b600160035f61084e87610a4a565b81526020019081526020015f205f6101000a81548160ff0219169083151502179055507f80d8a4a1663328a998d4555ba21d8bba6ef1576a8c5e9d27f9c545f1a3d52b1d3385856040516108a493929190611cb4565b60405180910390a150505050565b6108bb33610be4565b6108c433610c1c565b335f908152600260205260409020805461ff0019166101001790556008546108ec9042611c2b565b335f8181526004602090815260409182902093909355519081527ffb24305354c87762d557487ae4a564e8d03ecbb9a97dd8afff8e1f6fcaf0dd16910160405180910390a1565b61093b610eaf565b6109445f610edb565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561098b5750825b90505f8267ffffffffffffffff1660011480156109a75750303b155b9050811580156109b5575080155b156109d35760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156109fd57845460ff60401b1916600160401b1785555b436001558315610a4357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610577565b5050505050565b5f815f0151826020015183604001518460600151604051602001610a87949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6001600160a01b0381165f908152600660209081526040808320338452909152902060010154421015610aea57604051635a77435760e01b815260040160405180910390fd5b6001600160a01b0381165f90815260066020908152604080832033845290915281205490819003610b2e57604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038083165f908152600660209081526040808320338085529252822082815560010191909155600754610b6a92169083610e2c565b60408051338152602081018390527f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65910160405180910390a15050565b610baf610eaf565b6001600160a01b038116610bd857604051631e4fbdf760e01b81525f600482015260240161037f565b610be181610edb565b50565b6001600160a01b0381165f9081526002602052604090205460ff16610be1576040516357fdf40b60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526004602052604090205415610be15760405163eab4a96360e01b815260040160405180910390fd5b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af13d15601f3d1160015f511416171691505080610a435760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b604482015260640161037f565b6001600160a01b0381165f9081526002602052604090205460ff1615610be15760405163132e7efb60e31b815260040160405180910390fd5b604080518082019091525f8082526020820152610d398282610f2a565b15610d57576040516306cf438f60e01b815260040160405180910390fd5b5050565b60035f610d6783610a4a565b815260208101919091526040015f205460ff1615610be15760405162da8a5760e11b815260040160405180910390fd5b610da082610f4d565b5f604051806060016040528060248152602001611f646024913990505f8482604051602001610dd0929190611d35565b60405160208183030381529060405290505f610deb82610fe8565b9050610e088185610dfb886110d5565b610e0361114c565b611219565b610e245760405162ced3e560e41b815260040160405180910390fd5b505050505050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505080610ea95760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161037f565b50505050565b5f546001600160a01b031633146109445760405163118cdaa760e01b815233600482015260240161037f565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b805182515f91148015610f44575081602001518360200151145b90505b92915050565b805160208201515f915f80516020611f88833981519152911590151615610f7357505050565b825160208401518260038485858609850908838283091483821084841016169350505081610fe35760405162461bcd60e51b815260206004820152601760248201527f426e3235343a20696e76616c696420473120706f696e74000000000000000000604482015260640161037f565b505050565b604080518082019091525f80825260208201525f611005836112f9565b90505f80516020611f8883398151915260035f828485099050828061102c5761102c611d49565b8482099050828061103f5761103f611d49565b82820890505f8061104f83611502565b925090505b806110b857848061106757611067611d49565b600187089550848061107b5761107b611d49565b8687099250848061108e5761108e611d49565b868409925084806110a1576110a1611d49565b84840892506110af83611502565b92509050611054565b506040805180820190915294855260208501525091949350505050565b604080518082019091525f80825260208201528151602083015115901516156110fc575090565b6040518060400160405280835f015181526020015f80516020611f88833981519152846020015161112d9190611d5d565b611144905f80516020611f88833981519152611ca1565b905292915050565b61117360405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f805f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f519150806112eb5760405162461bcd60e51b815260206004820152601c60248201527f426e3235343a2050616972696e6720636865636b206661696c65642100000000604482015260640161037f565b50151590505b949350505050565b5f80611304836115f9565b80519091506030811461131957611319611d7c565b5f8167ffffffffffffffff811115611333576113336119ed565b6040519080825280601f01601f19166020018201604052801561135d576020820181803683370190505b5090505f5b828110156113cc578360016113778386611ca1565b6113819190611ca1565b8151811061139157611391611d90565b602001015160f81c60f81b8282815181106113ae576113ae611d90565b60200101906001600160f81b03191690815f1a905350600101611362565b5060408051601f80825261040082019092525f9082602082016103e0803683370190505090505f5b8281101561145c5783816114088588611ca1565b6114129190611c2b565b8151811061142257611422611d90565b602001015160f81c60f81b60f81c82828151811061144257611442611d90565b60ff909216602092830291909101909101526001016113f4565b505f61146782611943565b90506101005f80516020611f888339815191525f6114858689611ca1565b90505f5b818110156114f2575f88600161149f8486611ca1565b6114a99190611ca1565b815181106114b9576114b9611d90565b016020015160f81c905083806114d1576114d1611d49565b858709955083806114e4576114e4611d49565b818708955050600101611489565b50929a9950505050505050505050565b5f805f805f7f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5290505f5f80516020611f88833981519152905060405160208152602080820152602060408201528760608201528260808201528160a082015260205f60c08360055afa9450505f519250836115bf5760405162461bcd60e51b815260206004820152601b60248201527f706f7720707265636f6d70696c652063616c6c206661696c6564210000000000604482015260640161037f565b80600184901b11156115d8576115d58382611ca1565b92505b80806115e6576115e6611d49565b8384099690961496919550909350505050565b604080516030808252606082810190935290602090600160f91b905f90846020820181803683370190505090508086604051602001611639929190611d35565b6040516020818303038152906040529050808460f81b604051602001611660929190611da4565b6040516020818303038152906040529050806040516020016116829190611dce565b60408051601f1981840301815290829052915061010160f01b906116ac9083908390602001611de6565b60408051808303601f190181528282528051602091820120818401819052600160f81b848401526001600160f01b031985166041850152825160238186030181526043909401909252825190830120919350905f60ff881667ffffffffffffffff81111561171c5761171c6119ed565b6040519080825280601f01601f191660200182016040528015611746576020820181803683370190505b5090505f8260405160200161175d91815260200190565b60405160208183030381529060405290505f5b81518110156117c65781818151811061178b5761178b611d90565b602001015160f81c60f81b8382815181106117a8576117a8611d90565b60200101906001600160f81b03191690815f1a905350600101611770565b505f846040516020016117db91815260200190565b60408051601f19818403018152602083019091525f80835291985091505b8981101561186d575f83828151811061181457611814611d90565b602001015160f81c60f81b83838151811061183157611831611d90565b602001015160f81c60f81b1890508881604051602001611852929190611e0a565b60408051601f198184030181529190529850506001016117f9565b5086888760405160200161188393929190611e2e565b604051602081830303815290604052965086805190602001209350836040516020016118b191815260200190565b60405160208183030381529060405291505f5b6118d18a60ff8d16611ca1565b811015611932578281815181106118ea576118ea611d90565b01602001516001600160f81b03191684611904838d611c2b565b8151811061191457611914611d90565b60200101906001600160f81b03191690815f1a9053506001016118c4565b50919b9a5050505050505050505050565b5f80805b83518110156119a35783818151811061196257611962611d90565b602002602001015160ff1681600861197a9190611e61565b611985906002611f58565b61198f9190611e61565b6119999083611c2b565b9150600101611947565b5092915050565b80356001600160a01b03811681146119c0575f80fd5b919050565b5f80604083850312156119d6575f80fd5b6119df836119aa565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f60808284031215611a11575f80fd5b6040516080810181811067ffffffffffffffff82111715611a4057634e487b7160e01b5f52604160045260245ffd5b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b5f60408284031215611a81575f80fd5b6040516040810181811067ffffffffffffffff82111715611ab057634e487b7160e01b5f52604160045260245ffd5b604052823581526020928301359281019290925250919050565b5f805f806101208587031215611ade575f80fd5b611ae88686611a01565b9350611af78660808701611a71565b9250611b068660c08701611a71565b915061010085013561ffff81168114611b1d575f80fd5b939692955090935050565b5f60208284031215611b38575f80fd5b610f44826119aa565b5f805f6101008486031215611b54575f80fd5b611b5e8585611a01565b9250611b6d8560808601611a71565b9150611b7c8560c08601611a71565b90509250925092565b5f60808284031215611b95575f80fd5b610f448383611a01565b5f60208284031215611baf575f80fd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b83151581526060810160028410611bef57634e487b7160e01b5f52602160045260245ffd5b602082019390935260400152919050565b5f60208284031215611c10575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f4757610f47611c17565b6001600160a01b03851681526101008101611c7d6020830186805182526020810151602083015260408101516040830152606081015160608301525050565b835160a0830152602084015160c083015261ffff831660e083015295945050505050565b81810381811115610f4757610f47611c17565b6001600160a01b038416815260e08101611cf26020830185805182526020810151602083015260408101516040830152606081015160608301525050565b825160a0830152602083015160c08301526112f1565b5f81515f5b81811015611d275760208185018101518683015201611d0d565b505f93019283525090919050565b5f6112f1611d438386611d08565b84611d08565b634e487b7160e01b5f52601260045260245ffd5b5f82611d7757634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f611daf8285611d08565b5f81526001600160f81b03199390931660018401525050600201919050565b5f611dd98284611d08565b5f81526001019392505050565b5f611df18285611d08565b6001600160f01b03199390931683525050600201919050565b5f611e158285611d08565b6001600160f81b03199390931683525050600101919050565b5f611e398286611d08565b6001600160f81b031994909416845250506001600160f01b0319166001820152600301919050565b8082028115828204841417610f4757610f47611c17565b600181815b80851115611eb257815f1904821115611e9857611e98611c17565b80851615611ea557918102915b93841c9390800290611e7d565b509250929050565b5f82611ec857506001610f47565b81611ed457505f610f47565b8160018114611eea5760028114611ef457611f10565b6001915050610f47565b60ff841115611f0557611f05611c17565b50506001821b610f47565b5060208310610133831016604e8410600b8410161715611f33575081810a610f47565b611f3d8383611e78565b805f1904821115611f5057611f50611c17565b029392505050565b5f610f448383611eba56fe424c535f5349475f424e32353447315f584d443a4b454343414b5f4e4354485f4e554c5f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a164736f6c6343000817000a + ///0x608060405234801561000f575f80fd5b5060043610610127575f3560e01c80639b30a5e6116100a9578063b5700e681161006e578063b5700e6814610258578063b5ecb3441461026b578063f2fde38b1461028a578063f851a4401461029d578063fa52c7d8146102b0575f80fd5b80639b30a5e6146101e45780639d76ea58146101f75780639e9a8f311461020a578063a3066aab14610213578063b3e6ebd514610226575f80fd5b80635544c2f1116100ef5780635544c2f1146101955780636a911ccf146101a8578063715018a6146101b05780638129fc1c146101b85780638da5cb5b146101c0575f80fd5b8063026e402b1461012b57806313b9057a146101405780632140fecd146101535780633e9df9b5146101665780634d99dd1614610182575b5f80fd5b61013e610139366004611a1a565b6102f2565b005b61013e61014e366004611b1f565b610473565b61013e610161366004611b7d565b6105db565b61016f60015481565b6040519081526020015b60405180910390f35b61013e610190366004611a1a565b6106dc565b61013e6101a3366004611b96565b610848565b61013e610907565b61013e610988565b61013e61099b565b5f546001600160a01b03165b6040516001600160a01b039091168152602001610179565b61016f6101f2366004611bda565b610a9f565b6008546101cc906001600160a01b031681565b61016f60095481565b61013e610221366004611b7d565b610af9565b610248610234366004611bf4565b60046020525f908152604090205460ff1681565b6040519015158152602001610179565b6002546101cc906001600160a01b031681565b61016f610279366004611b7d565b60056020525f908152604090205481565b61013e610298366004611b7d565b610bfc565b600a546101cc906001600160a01b031681565b6102e36102be366004611b7d565b60036020525f90815260409020805460019091015460ff808316926101009004169083565b60405161017993929190611c1f565b6102fb82610c39565b61030482610c71565b600854604051636eb1769f60e11b81523360048201523060248201525f916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610350573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103749190611c55565b9050818110156103a65760405163054365bb60e31b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0383165f90815260036020526040812060010180548492906103d0908490611c80565b90915550506001600160a01b0383165f90815260066020908152604080832033845290915281208054849290610407908490611c80565b9091555050600854610424906001600160a01b0316333085610ca7565b604080513381526001600160a01b03851660208201529081018390527fe5541a6b6103d4fa7e021ed54fad39c66f27a76bd13d374cf6240ae6bd0bb72b906060015b60405180910390a1505050565b61047c33610d38565b61048583610d71565b61048e84610db0565b604080513360208201525f910160405160208183030381529060405290506104b7818487610dec565b6127108261ffff1611156104de5760405163dc81db8560e01b815260040160405180910390fd5b600160045f6104ec88610a9f565b81526020019081526020015f205f6101000a81548160ff02191690831515021790555060405180606001604052806001151581526020015f600181111561053557610535611c0b565b81525f602091820181905233815260038252604090208251815490151560ff19821681178355928401519192839161ff001990911661ffff199091161761010083600181111561058757610587611c0b565b0217905550604091820151600190910155517ff6e8359c57520b469634736bfc3bb7ec5cbd1a0bd28b10a8275793bb730b797f906105cc903390889088908790611c93565b60405180910390a15050505050565b335f908152600560205260408120549081900361060b576040516379298a5360e11b815260040160405180910390fd5b8042101561062c57604051635a77435760e01b815260040160405180910390fd5b6001600160a01b0382165f9081526006602090815260408083203384529091528120549081900361067057604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038084165f9081526006602090815260408083203380855292528220919091556008546106a692169083610e81565b60408051338152602081018390527f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659101610466565b6106e582610c39565b6106ee82610c71565b6001335f90815260036020526040902054610100900460ff16600181111561071857610718611c0b565b036107365760405163eab4a96360e01b815260040160405180910390fd5b6001600160a01b0382165f9081526006602090815260408083203384529091529020548181101561077d57604051639266535160e01b81526004810182905260240161039d565b6001600160a01b0383165f908152600660209081526040808320338452909152812080548492906107af908490611cf6565b925050819055506040518060400160405280838152602001600954426107d59190611c80565b90526001600160a01b0384165f8181526007602090815260408083203380855290835292819020855181559482015160019095019490945583519182528101919091529081018390527f4d10bd049775c77bd7f255195afba5088028ecb3c7c277d393ccff7934f2f92c90606001610466565b61085133610c39565b61085a33610c71565b61086382610d71565b61086c83610db0565b604080513360208201525f91016040516020818303038152906040529050610895818386610dec565b600160045f6108a387610a9f565b81526020019081526020015f205f6101000a81548160ff0219169083151502179055507f80d8a4a1663328a998d4555ba21d8bba6ef1576a8c5e9d27f9c545f1a3d52b1d3385856040516108f993929190611d09565b60405180910390a150505050565b61091033610c39565b61091933610c71565b335f908152600360205260409020805461ff0019166101001790556009546109419042611c80565b335f8181526005602090815260409182902093909355519081527ffb24305354c87762d557487ae4a564e8d03ecbb9a97dd8afff8e1f6fcaf0dd16910160405180910390a1565b610990610f04565b6109995f610f30565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156109e05750825b90505f8267ffffffffffffffff1660011480156109fc5750303b155b905081158015610a0a575080155b15610a285760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a5257845460ff60401b1916600160401b1785555b436001558315610a9857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016105cc565b5050505050565b5f815f0151826020015183604001518460600151604051602001610adc949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6001600160a01b0381165f908152600760209081526040808320338452909152902060010154421015610b3f57604051635a77435760e01b815260040160405180910390fd5b6001600160a01b0381165f90815260076020908152604080832033845290915281205490819003610b8357604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038083165f908152600760209081526040808320338085529252822082815560010191909155600854610bbf92169083610e81565b60408051338152602081018390527f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65910160405180910390a15050565b610c04610f04565b6001600160a01b038116610c2d57604051631e4fbdf760e01b81525f600482015260240161039d565b610c3681610f30565b50565b6001600160a01b0381165f9081526003602052604090205460ff16610c36576040516357fdf40b60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205415610c365760405163eab4a96360e01b815260040160405180910390fd5b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af13d15601f3d1160015f511416171691505080610a985760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b604482015260640161039d565b6001600160a01b0381165f9081526003602052604090205460ff1615610c365760405163132e7efb60e31b815260040160405180910390fd5b604080518082019091525f8082526020820152610d8e8282610f7f565b15610dac576040516306cf438f60e01b815260040160405180910390fd5b5050565b60045f610dbc83610a9f565b815260208101919091526040015f205460ff1615610c365760405162da8a5760e11b815260040160405180910390fd5b610df582610fa2565b5f604051806060016040528060248152602001611fb96024913990505f8482604051602001610e25929190611d8a565b60405160208183030381529060405290505f610e408261103d565b9050610e5d8185610e508861112a565b610e586111a1565b61126e565b610e795760405162ced3e560e41b815260040160405180910390fd5b505050505050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505080610efe5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161039d565b50505050565b5f546001600160a01b031633146109995760405163118cdaa760e01b815233600482015260240161039d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b805182515f91148015610f99575081602001518360200151145b90505b92915050565b805160208201515f915f80516020611fdd833981519152911590151615610fc857505050565b8251602084015182600384858586098509088382830914838210848410161693505050816110385760405162461bcd60e51b815260206004820152601760248201527f426e3235343a20696e76616c696420473120706f696e74000000000000000000604482015260640161039d565b505050565b604080518082019091525f80825260208201525f61105a8361134e565b90505f80516020611fdd83398151915260035f828485099050828061108157611081611d9e565b8482099050828061109457611094611d9e565b82820890505f806110a483611557565b925090505b8061110d5784806110bc576110bc611d9e565b60018708955084806110d0576110d0611d9e565b868709925084806110e3576110e3611d9e565b868409925084806110f6576110f6611d9e565b848408925061110483611557565b925090506110a9565b506040805180820190915294855260208501525091949350505050565b604080518082019091525f8082526020820152815160208301511590151615611151575090565b6040518060400160405280835f015181526020015f80516020611fdd83398151915284602001516111829190611db2565b611199905f80516020611fdd833981519152611cf6565b905292915050565b6111c860405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f805f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f519150806113405760405162461bcd60e51b815260206004820152601c60248201527f426e3235343a2050616972696e6720636865636b206661696c65642100000000604482015260640161039d565b50151590505b949350505050565b5f806113598361164e565b80519091506030811461136e5761136e611dd1565b5f8167ffffffffffffffff81111561138857611388611a42565b6040519080825280601f01601f1916602001820160405280156113b2576020820181803683370190505b5090505f5b82811015611421578360016113cc8386611cf6565b6113d69190611cf6565b815181106113e6576113e6611de5565b602001015160f81c60f81b82828151811061140357611403611de5565b60200101906001600160f81b03191690815f1a9053506001016113b7565b5060408051601f80825261040082019092525f9082602082016103e0803683370190505090505f5b828110156114b157838161145d8588611cf6565b6114679190611c80565b8151811061147757611477611de5565b602001015160f81c60f81b60f81c82828151811061149757611497611de5565b60ff90921660209283029190910190910152600101611449565b505f6114bc82611998565b90506101005f80516020611fdd8339815191525f6114da8689611cf6565b90505f5b81811015611547575f8860016114f48486611cf6565b6114fe9190611cf6565b8151811061150e5761150e611de5565b016020015160f81c9050838061152657611526611d9e565b8587099550838061153957611539611d9e565b8187089550506001016114de565b50929a9950505050505050505050565b5f805f805f7f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5290505f5f80516020611fdd833981519152905060405160208152602080820152602060408201528760608201528260808201528160a082015260205f60c08360055afa9450505f519250836116145760405162461bcd60e51b815260206004820152601b60248201527f706f7720707265636f6d70696c652063616c6c206661696c6564210000000000604482015260640161039d565b80600184901b111561162d5761162a8382611cf6565b92505b808061163b5761163b611d9e565b8384099690961496919550909350505050565b604080516030808252606082810190935290602090600160f91b905f9084602082018180368337019050509050808660405160200161168e929190611d8a565b6040516020818303038152906040529050808460f81b6040516020016116b5929190611df9565b6040516020818303038152906040529050806040516020016116d79190611e23565b60408051601f1981840301815290829052915061010160f01b906117019083908390602001611e3b565b60408051808303601f190181528282528051602091820120818401819052600160f81b848401526001600160f01b031985166041850152825160238186030181526043909401909252825190830120919350905f60ff881667ffffffffffffffff81111561177157611771611a42565b6040519080825280601f01601f19166020018201604052801561179b576020820181803683370190505b5090505f826040516020016117b291815260200190565b60405160208183030381529060405290505f5b815181101561181b578181815181106117e0576117e0611de5565b602001015160f81c60f81b8382815181106117fd576117fd611de5565b60200101906001600160f81b03191690815f1a9053506001016117c5565b505f8460405160200161183091815260200190565b60408051601f19818403018152602083019091525f80835291985091505b898110156118c2575f83828151811061186957611869611de5565b602001015160f81c60f81b83838151811061188657611886611de5565b602001015160f81c60f81b18905088816040516020016118a7929190611e5f565b60408051601f1981840301815291905298505060010161184e565b508688876040516020016118d893929190611e83565b6040516020818303038152906040529650868051906020012093508360405160200161190691815260200190565b60405160208183030381529060405291505f5b6119268a60ff8d16611cf6565b8110156119875782818151811061193f5761193f611de5565b01602001516001600160f81b03191684611959838d611c80565b8151811061196957611969611de5565b60200101906001600160f81b03191690815f1a905350600101611919565b50919b9a5050505050505050505050565b5f80805b83518110156119f8578381815181106119b7576119b7611de5565b602002602001015160ff168160086119cf9190611eb6565b6119da906002611fad565b6119e49190611eb6565b6119ee9083611c80565b915060010161199c565b5092915050565b80356001600160a01b0381168114611a15575f80fd5b919050565b5f8060408385031215611a2b575f80fd5b611a34836119ff565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f60808284031215611a66575f80fd5b6040516080810181811067ffffffffffffffff82111715611a9557634e487b7160e01b5f52604160045260245ffd5b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b5f60408284031215611ad6575f80fd5b6040516040810181811067ffffffffffffffff82111715611b0557634e487b7160e01b5f52604160045260245ffd5b604052823581526020928301359281019290925250919050565b5f805f806101208587031215611b33575f80fd5b611b3d8686611a56565b9350611b4c8660808701611ac6565b9250611b5b8660c08701611ac6565b915061010085013561ffff81168114611b72575f80fd5b939692955090935050565b5f60208284031215611b8d575f80fd5b610f99826119ff565b5f805f6101008486031215611ba9575f80fd5b611bb38585611a56565b9250611bc28560808601611ac6565b9150611bd18560c08601611ac6565b90509250925092565b5f60808284031215611bea575f80fd5b610f998383611a56565b5f60208284031215611c04575f80fd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b83151581526060810160028410611c4457634e487b7160e01b5f52602160045260245ffd5b602082019390935260400152919050565b5f60208284031215611c65575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f9c57610f9c611c6c565b6001600160a01b03851681526101008101611cd26020830186805182526020810151602083015260408101516040830152606081015160608301525050565b835160a0830152602084015160c083015261ffff831660e083015295945050505050565b81810381811115610f9c57610f9c611c6c565b6001600160a01b038416815260e08101611d476020830185805182526020810151602083015260408101516040830152606081015160608301525050565b825160a0830152602083015160c0830152611346565b5f81515f5b81811015611d7c5760208185018101518683015201611d62565b505f93019283525090919050565b5f611346611d988386611d5d565b84611d5d565b634e487b7160e01b5f52601260045260245ffd5b5f82611dcc57634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f611e048285611d5d565b5f81526001600160f81b03199390931660018401525050600201919050565b5f611e2e8284611d5d565b5f81526001019392505050565b5f611e468285611d5d565b6001600160f01b03199390931683525050600201919050565b5f611e6a8285611d5d565b6001600160f81b03199390931683525050600101919050565b5f611e8e8286611d5d565b6001600160f81b031994909416845250506001600160f01b0319166001820152600301919050565b8082028115828204841417610f9c57610f9c611c6c565b600181815b80851115611f0757815f1904821115611eed57611eed611c6c565b80851615611efa57918102915b93841c9390800290611ed2565b509250929050565b5f82611f1d57506001610f9c565b81611f2957505f610f9c565b8160018114611f3f5760028114611f4957611f65565b6001915050610f9c565b60ff841115611f5a57611f5a611c6c565b50506001821b610f9c565b5060208310610133831016604e8410600b8410161715611f88575081810a610f9c565b611f928383611ecd565b805f1904821115611fa557611fa5611c6c565b029392505050565b5f610f998383611f0f56fe424c535f5349475f424e32353447315f584d443a4b454343414b5f4e4354485f4e554c5f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a164736f6c6343000817000a /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R4\x80\x15a\0\x0FW_\x80\xFD[P`\x046\x10a\x01\x1CW_5`\xE0\x1C\x80c\x8D\xA5\xCB[\x11a\0\xA9W\x80c\xB3\xE6\xEB\xD5\x11a\0nW\x80c\xB3\xE6\xEB\xD5\x14a\x02\x1BW\x80c\xB5\xEC\xB3D\x14a\x02MW\x80c\xF2\xFD\xE3\x8B\x14a\x02lW\x80c\xF8Q\xA4@\x14a\x02\x7FW\x80c\xFAR\xC7\xD8\x14a\x02\x92W_\x80\xFD[\x80c\x8D\xA5\xCB[\x14a\x01\xB5W\x80c\x9B0\xA5\xE6\x14a\x01\xD9W\x80c\x9Dv\xEAX\x14a\x01\xECW\x80c\x9E\x9A\x8F1\x14a\x01\xFFW\x80c\xA3\x06j\xAB\x14a\x02\x08W_\x80\xFD[\x80cM\x99\xDD\x16\x11a\0\xEFW\x80cM\x99\xDD\x16\x14a\x01wW\x80cUD\xC2\xF1\x14a\x01\x8AW\x80cj\x91\x1C\xCF\x14a\x01\x9DW\x80cqP\x18\xA6\x14a\x01\xA5W\x80c\x81)\xFC\x1C\x14a\x01\xADW_\x80\xFD[\x80c\x02n@+\x14a\x01 W\x80c\x13\xB9\x05z\x14a\x015W\x80c!@\xFE\xCD\x14a\x01HW\x80c>\x9D\xF9\xB5\x14a\x01[W[_\x80\xFD[a\x013a\x01.6`\x04a\x19\xC5V[a\x02\xD4V[\0[a\x013a\x01C6`\x04a\x1A\xCAV[a\x04\x1EV[a\x013a\x01V6`\x04a\x1B(V[a\x05\x86V[a\x01d`\x01T\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x013a\x01\x856`\x04a\x19\xC5V[a\x06\x87V[a\x013a\x01\x986`\x04a\x1BAV[a\x07\xF3V[a\x013a\x08\xB2V[a\x013a\t3V[a\x013a\tFV[_T`\x01`\x01`\xA0\x1B\x03\x16[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01nV[a\x01da\x01\xE76`\x04a\x1B\x85V[a\nJV[`\x07Ta\x01\xC1\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x01d`\x08T\x81V[a\x013a\x02\x166`\x04a\x1B(V[a\n\xA4V[a\x02=a\x02)6`\x04a\x1B\x9FV[`\x03` R_\x90\x81R`@\x90 T`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01a\x01nV[a\x01da\x02[6`\x04a\x1B(V[`\x04` R_\x90\x81R`@\x90 T\x81V[a\x013a\x02z6`\x04a\x1B(V[a\x0B\xA7V[`\tTa\x01\xC1\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x02\xC5a\x02\xA06`\x04a\x1B(V[`\x02` R_\x90\x81R`@\x90 \x80T`\x01\x90\x91\x01T`\xFF\x80\x83\x16\x92a\x01\0\x90\x04\x16\x90\x83V[`@Qa\x01n\x93\x92\x91\x90a\x1B\xCAV[a\x02\xDD\x82a\x0B\xE4V[a\x02\xE6\x82a\x0C\x1CV[`\x07T`@Qcn\xB1v\x9F`\xE1\x1B\x81R3`\x04\x82\x01R0`$\x82\x01R_\x91`\x01`\x01`\xA0\x1B\x03\x16\x90c\xDDb\xED>\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x032W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03V\x91\x90a\x1C\0V[\x90P\x81\x81\x10\x15a\x03\x88W`@Qc\x05Ce\xBB`\xE3\x1B\x81R`\x04\x81\x01\x82\x90R`$\x81\x01\x83\x90R`D\x01[`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x02` R`@\x81 `\x01\x01\x80T\x84\x92\x90a\x03\xB2\x90\x84\x90a\x1C+V[\x90\x91UPP`\x07Ta\x03\xCF\x90`\x01`\x01`\xA0\x1B\x03\x1630\x85a\x0CRV[`@\x80Q3\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R\x90\x81\x01\x83\x90R\x7F\xE5T\x1Aka\x03\xD4\xFA~\x02\x1E\xD5O\xAD9\xC6o'\xA7k\xD1=7L\xF6$\n\xE6\xBD\x0B\xB7+\x90``\x01[`@Q\x80\x91\x03\x90\xA1PPPV[a\x04'3a\x0C\xE3V[a\x040\x83a\r\x1CV[a\x049\x84a\r[V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x04b\x81\x84\x87a\r\x97V[a'\x10\x82a\xFF\xFF\x16\x11\x15a\x04\x89W`@Qc\xDC\x81\xDB\x85`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x03_a\x04\x97\x88a\nJV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP`@Q\x80``\x01`@R\x80`\x01\x15\x15\x81R` \x01_`\x01\x81\x11\x15a\x04\xE0Wa\x04\xE0a\x1B\xB6V[\x81R_` \x91\x82\x01\x81\x90R3\x81R`\x02\x82R`@\x90 \x82Q\x81T\x90\x15\x15`\xFF\x19\x82\x16\x81\x17\x83U\x92\x84\x01Q\x91\x92\x83\x91a\xFF\0\x19\x90\x91\x16a\xFF\xFF\x19\x90\x91\x16\x17a\x01\0\x83`\x01\x81\x11\x15a\x052Wa\x052a\x1B\xB6V[\x02\x17\x90UP`@\x91\x82\x01Q`\x01\x90\x91\x01UQ\x7F\xF6\xE85\x9CWR\x0BF\x964sk\xFC;\xB7\xEC\\\xBD\x1A\x0B\xD2\x8B\x10\xA8'W\x93\xBBs\x0By\x7F\x90a\x05w\x903\x90\x88\x90\x88\x90\x87\x90a\x1C>V[`@Q\x80\x91\x03\x90\xA1PPPPPV[3_\x90\x81R`\x04` R`@\x81 T\x90\x81\x90\x03a\x05\xB6W`@Qcy)\x8AS`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x80B\x10\x15a\x05\xD7W`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x06\x1BW`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x84\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x91\x90\x91U`\x07Ta\x06Q\x92\x16\x90\x83a\x0E,V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01a\x04\x11V[a\x06\x90\x82a\x0B\xE4V[a\x06\x99\x82a\x0C\x1CV[`\x013_\x90\x81R`\x02` R`@\x90 Ta\x01\0\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x06\xC3Wa\x06\xC3a\x1B\xB6V[\x03a\x06\xE1W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 T\x81\x81\x10\x15a\x07(W`@Qc\x92fSQ`\xE0\x1B\x81R`\x04\x81\x01\x83\x90R`$\x01a\x03\x7FV[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 \x80T\x84\x92\x90a\x07Z\x90\x84\x90a\x1C\xA1V[\x92PP\x81\x90UP`@Q\x80`@\x01`@R\x80\x83\x81R` \x01`\x08TBa\x07\x80\x91\x90a\x1C+V[\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16_\x81\x81R`\x06` \x90\x81R`@\x80\x83 3\x80\x85R\x90\x83R\x92\x81\x90 \x85Q\x81U\x94\x82\x01Q`\x01\x90\x95\x01\x94\x90\x94U\x83Q\x91\x82R\x81\x01\x91\x90\x91R\x90\x81\x01\x83\x90R\x7FM\x10\xBD\x04\x97u\xC7{\xD7\xF2U\x19Z\xFB\xA5\x08\x80(\xEC\xB3\xC7\xC2w\xD3\x93\xCC\xFFy4\xF2\xF9,\x90``\x01a\x04\x11V[a\x07\xFC3a\x0B\xE4V[a\x08\x053a\x0C\x1CV[a\x08\x0E\x82a\r\x1CV[a\x08\x17\x83a\r[V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x08@\x81\x83\x86a\r\x97V[`\x01`\x03_a\x08N\x87a\nJV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x80\xD8\xA4\xA1f3(\xA9\x98\xD4U[\xA2\x1D\x8B\xBAn\xF1Wj\x8C^\x9D'\xF9\xC5E\xF1\xA3\xD5+\x1D3\x85\x85`@Qa\x08\xA4\x93\x92\x91\x90a\x1C\xB4V[`@Q\x80\x91\x03\x90\xA1PPPPV[a\x08\xBB3a\x0B\xE4V[a\x08\xC43a\x0C\x1CV[3_\x90\x81R`\x02` R`@\x90 \x80Ta\xFF\0\x19\x16a\x01\0\x17\x90U`\x08Ta\x08\xEC\x90Ba\x1C+V[3_\x81\x81R`\x04` \x90\x81R`@\x91\x82\x90 \x93\x90\x93UQ\x90\x81R\x7F\xFB$0ST\xC8wb\xD5WHz\xE4\xA5d\xE8\xD0>\xCB\xB9\xA9}\xD8\xAF\xFF\x8E\x1Fo\xCA\xF0\xDD\x16\x91\x01`@Q\x80\x91\x03\x90\xA1V[a\t;a\x0E\xAFV[a\tD_a\x0E\xDBV[V[\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x80T`\x01`@\x1B\x81\x04`\xFF\x16\x15\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x81\x15\x80\x15a\t\x8BWP\x82[\x90P_\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01\x14\x80\x15a\t\xA7WP0;\x15[\x90P\x81\x15\x80\x15a\t\xB5WP\x80\x15[\x15a\t\xD3W`@Qc\xF9.\xE8\xA9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16`\x01\x17\x85U\x83\x15a\t\xFDW\x84T`\xFF`@\x1B\x19\x16`\x01`@\x1B\x17\x85U[C`\x01U\x83\x15a\nCW\x84T`\xFF`@\x1B\x19\x16\x85U`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x01a\x05wV[PPPPPV[_\x81_\x01Q\x82` \x01Q\x83`@\x01Q\x84``\x01Q`@Q` \x01a\n\x87\x94\x93\x92\x91\x90\x93\x84R` \x84\x01\x92\x90\x92R`@\x83\x01R``\x82\x01R`\x80\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 `\x01\x01TB\x10\x15a\n\xEAW`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x0B.W`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x83\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x82\x81U`\x01\x01\x91\x90\x91U`\x07Ta\x0Bj\x92\x16\x90\x83a\x0E,V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01`@Q\x80\x91\x03\x90\xA1PPV[a\x0B\xAFa\x0E\xAFV[`\x01`\x01`\xA0\x1B\x03\x81\x16a\x0B\xD8W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R_`\x04\x82\x01R`$\x01a\x03\x7FV[a\x0B\xE1\x81a\x0E\xDBV[PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x02` R`@\x90 T`\xFF\x16a\x0B\xE1W`@QcW\xFD\xF4\x0B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x04` R`@\x90 T\x15a\x0B\xE1W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R\x82`D\x82\x01R` _`d\x83_\x8AZ\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\nCW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x94\x93\xD3W\xD1\x90RS\x11Q`b\x1B`D\x82\x01R`d\x01a\x03\x7FV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x02` R`@\x90 T`\xFF\x16\x15a\x0B\xE1W`@Qc\x13.~\xFB`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\r9\x82\x82a\x0F*V[\x15a\rWW`@Qc\x06\xCFC\x8F`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[`\x03_a\rg\x83a\nJV[\x81R` \x81\x01\x91\x90\x91R`@\x01_ T`\xFF\x16\x15a\x0B\xE1W`@Qb\xDA\x8AW`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\r\xA0\x82a\x0FMV[_`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x1Fd`$\x919\x90P_\x84\x82`@Q` \x01a\r\xD0\x92\x91\x90a\x1D5V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_a\r\xEB\x82a\x0F\xE8V[\x90Pa\x0E\x08\x81\x85a\r\xFB\x88a\x10\xD5V[a\x0E\x03a\x11LV[a\x12\x19V[a\x0E$W`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPV[_`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` _`D\x83_\x89Z\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\x0E\xA9W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0F`$\x82\x01Rn\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x90RS\x11Q`\x8A\x1B`D\x82\x01R`d\x01a\x03\x7FV[PPPPV[_T`\x01`\x01`\xA0\x1B\x03\x163\x14a\tDW`@Qc\x11\x8C\xDA\xA7`\xE0\x1B\x81R3`\x04\x82\x01R`$\x01a\x03\x7FV[_\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x80Q\x82Q_\x91\x14\x80\x15a\x0FDWP\x81` \x01Q\x83` \x01Q\x14[\x90P[\x92\x91PPV[\x80Q` \x82\x01Q_\x91_\x80Q` a\x1F\x88\x839\x81Q\x91R\x91\x15\x90\x15\x16\x15a\x0FsWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x0F\xE3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x7FV[PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x10\x05\x83a\x12\xF9V[\x90P_\x80Q` a\x1F\x88\x839\x81Q\x91R`\x03_\x82\x84\x85\t\x90P\x82\x80a\x10,Wa\x10,a\x1DIV[\x84\x82\t\x90P\x82\x80a\x10?Wa\x10?a\x1DIV[\x82\x82\x08\x90P_\x80a\x10O\x83a\x15\x02V[\x92P\x90P[\x80a\x10\xB8W\x84\x80a\x10gWa\x10ga\x1DIV[`\x01\x87\x08\x95P\x84\x80a\x10{Wa\x10{a\x1DIV[\x86\x87\t\x92P\x84\x80a\x10\x8EWa\x10\x8Ea\x1DIV[\x86\x84\t\x92P\x84\x80a\x10\xA1Wa\x10\xA1a\x1DIV[\x84\x84\x08\x92Pa\x10\xAF\x83a\x15\x02V[\x92P\x90Pa\x10TV[P`@\x80Q\x80\x82\x01\x90\x91R\x94\x85R` \x85\x01RP\x91\x94\x93PPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x10\xFCWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01_\x80Q` a\x1F\x88\x839\x81Q\x91R\x84` \x01Qa\x11-\x91\x90a\x1D]V[a\x11D\x90_\x80Q` a\x1F\x88\x839\x81Q\x91Ra\x1C\xA1V[\x90R\x92\x91PPV[a\x11s`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[_\x80_`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x12\xEBW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x03\x7FV[P\x15\x15\x90P[\x94\x93PPPPV[_\x80a\x13\x04\x83a\x15\xF9V[\x80Q\x90\x91P`0\x81\x14a\x13\x19Wa\x13\x19a\x1D|V[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x133Wa\x133a\x19\xEDV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x13]W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_[\x82\x81\x10\x15a\x13\xCCW\x83`\x01a\x13w\x83\x86a\x1C\xA1V[a\x13\x81\x91\x90a\x1C\xA1V[\x81Q\x81\x10a\x13\x91Wa\x13\x91a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x13\xAEWa\x13\xAEa\x1D\x90V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x13bV[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R_\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P_[\x82\x81\x10\x15a\x14\\W\x83\x81a\x14\x08\x85\x88a\x1C\xA1V[a\x14\x12\x91\x90a\x1C+V[\x81Q\x81\x10a\x14\"Wa\x14\"a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x14BWa\x14Ba\x1D\x90V[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x13\xF4V[P_a\x14g\x82a\x19CV[\x90Pa\x01\0_\x80Q` a\x1F\x88\x839\x81Q\x91R_a\x14\x85\x86\x89a\x1C\xA1V[\x90P_[\x81\x81\x10\x15a\x14\xF2W_\x88`\x01a\x14\x9F\x84\x86a\x1C\xA1V[a\x14\xA9\x91\x90a\x1C\xA1V[\x81Q\x81\x10a\x14\xB9Wa\x14\xB9a\x1D\x90V[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x14\xD1Wa\x14\xD1a\x1DIV[\x85\x87\t\x95P\x83\x80a\x14\xE4Wa\x14\xE4a\x1DIV[\x81\x87\x08\x95PP`\x01\x01a\x14\x89V[P\x92\x9A\x99PPPPPPPPPPV[_\x80_\x80_\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P__\x80Q` a\x1F\x88\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x87``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x94PP_Q\x92P\x83a\x15\xBFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x7FV[\x80`\x01\x84\x90\x1B\x11\x15a\x15\xD8Wa\x15\xD5\x83\x82a\x1C\xA1V[\x92P[\x80\x80a\x15\xE6Wa\x15\xE6a\x1DIV[\x83\x84\t\x96\x90\x96\x14\x96\x91\x95P\x90\x93PPPPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90_\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x169\x92\x91\x90a\x1D5V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x16`\x92\x91\x90a\x1D\xA4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x16\x82\x91\x90a\x1D\xCEV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x16\xAC\x90\x83\x90\x83\x90` \x01a\x1D\xE6V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90_`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17\x1CWa\x17\x1Ca\x19\xEDV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17FW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_\x82`@Q` \x01a\x17]\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_[\x81Q\x81\x10\x15a\x17\xC6W\x81\x81\x81Q\x81\x10a\x17\x8BWa\x17\x8Ba\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x17\xA8Wa\x17\xA8a\x1D\x90V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x17pV[P_\x84`@Q` \x01a\x17\xDB\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R_\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x18mW_\x83\x82\x81Q\x81\x10a\x18\x14Wa\x18\x14a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x181Wa\x181a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x18R\x92\x91\x90a\x1E\nV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x17\xF9V[P\x86\x88\x87`@Q` \x01a\x18\x83\x93\x92\x91\x90a\x1E.V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x18\xB1\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P_[a\x18\xD1\x8A`\xFF\x8D\x16a\x1C\xA1V[\x81\x10\x15a\x192W\x82\x81\x81Q\x81\x10a\x18\xEAWa\x18\xEAa\x1D\x90V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x19\x04\x83\x8Da\x1C+V[\x81Q\x81\x10a\x19\x14Wa\x19\x14a\x1D\x90V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x18\xC4V[P\x91\x9B\x9APPPPPPPPPPPV[_\x80\x80[\x83Q\x81\x10\x15a\x19\xA3W\x83\x81\x81Q\x81\x10a\x19bWa\x19ba\x1D\x90V[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x19z\x91\x90a\x1EaV[a\x19\x85\x90`\x02a\x1FXV[a\x19\x8F\x91\x90a\x1EaV[a\x19\x99\x90\x83a\x1C+V[\x91P`\x01\x01a\x19GV[P\x92\x91PPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x19\xC0W_\x80\xFD[\x91\x90PV[_\x80`@\x83\x85\x03\x12\x15a\x19\xD6W_\x80\xFD[a\x19\xDF\x83a\x19\xAAV[\x94` \x93\x90\x93\x015\x93PPPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[_`\x80\x82\x84\x03\x12\x15a\x1A\x11W_\x80\xFD[`@Q`\x80\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A@WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[\x80`@RP\x80\x91P\x825\x81R` \x83\x015` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[_`@\x82\x84\x03\x12\x15a\x1A\x81W_\x80\xFD[`@Q`@\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A\xB0WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x80_\x80a\x01 \x85\x87\x03\x12\x15a\x1A\xDEW_\x80\xFD[a\x1A\xE8\x86\x86a\x1A\x01V[\x93Pa\x1A\xF7\x86`\x80\x87\x01a\x1AqV[\x92Pa\x1B\x06\x86`\xC0\x87\x01a\x1AqV[\x91Pa\x01\0\x85\x015a\xFF\xFF\x81\x16\x81\x14a\x1B\x1DW_\x80\xFD[\x93\x96\x92\x95P\x90\x93PPV[_` \x82\x84\x03\x12\x15a\x1B8W_\x80\xFD[a\x0FD\x82a\x19\xAAV[_\x80_a\x01\0\x84\x86\x03\x12\x15a\x1BTW_\x80\xFD[a\x1B^\x85\x85a\x1A\x01V[\x92Pa\x1Bm\x85`\x80\x86\x01a\x1AqV[\x91Pa\x1B|\x85`\xC0\x86\x01a\x1AqV[\x90P\x92P\x92P\x92V[_`\x80\x82\x84\x03\x12\x15a\x1B\x95W_\x80\xFD[a\x0FD\x83\x83a\x1A\x01V[_` \x82\x84\x03\x12\x15a\x1B\xAFW_\x80\xFD[P5\x91\x90PV[cNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[\x83\x15\x15\x81R``\x81\x01`\x02\x84\x10a\x1B\xEFWcNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[` \x82\x01\x93\x90\x93R`@\x01R\x91\x90PV[_` \x82\x84\x03\x12\x15a\x1C\x10W_\x80\xFD[PQ\x91\x90PV[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x80\x82\x01\x80\x82\x11\x15a\x0FGWa\x0FGa\x1C\x17V[`\x01`\x01`\xA0\x1B\x03\x85\x16\x81Ra\x01\0\x81\x01a\x1C}` \x83\x01\x86\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x83Q`\xA0\x83\x01R` \x84\x01Q`\xC0\x83\x01Ra\xFF\xFF\x83\x16`\xE0\x83\x01R\x95\x94PPPPPV[\x81\x81\x03\x81\x81\x11\x15a\x0FGWa\x0FGa\x1C\x17V[`\x01`\x01`\xA0\x1B\x03\x84\x16\x81R`\xE0\x81\x01a\x1C\xF2` \x83\x01\x85\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x82Q`\xA0\x83\x01R` \x83\x01Q`\xC0\x83\x01Ra\x12\xF1V[_\x81Q_[\x81\x81\x10\x15a\x1D'W` \x81\x85\x01\x81\x01Q\x86\x83\x01R\x01a\x1D\rV[P_\x93\x01\x92\x83RP\x90\x91\x90PV[_a\x12\xF1a\x1DC\x83\x86a\x1D\x08V[\x84a\x1D\x08V[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a\x1DwWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V[cNH{q`\xE0\x1B_R`\x01`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[_a\x1D\xAF\x82\x85a\x1D\x08V[_\x81R`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16`\x01\x84\x01RPP`\x02\x01\x91\x90PV[_a\x1D\xD9\x82\x84a\x1D\x08V[_\x81R`\x01\x01\x93\x92PPPV[_a\x1D\xF1\x82\x85a\x1D\x08V[`\x01`\x01`\xF0\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x02\x01\x91\x90PV[_a\x1E\x15\x82\x85a\x1D\x08V[`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x01\x01\x91\x90PV[_a\x1E9\x82\x86a\x1D\x08V[`\x01`\x01`\xF8\x1B\x03\x19\x94\x90\x94\x16\x84RPP`\x01`\x01`\xF0\x1B\x03\x19\x16`\x01\x82\x01R`\x03\x01\x91\x90PV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0FGWa\x0FGa\x1C\x17V[`\x01\x81\x81[\x80\x85\x11\x15a\x1E\xB2W\x81_\x19\x04\x82\x11\x15a\x1E\x98Wa\x1E\x98a\x1C\x17V[\x80\x85\x16\x15a\x1E\xA5W\x91\x81\x02\x91[\x93\x84\x1C\x93\x90\x80\x02\x90a\x1E}V[P\x92P\x92\x90PV[_\x82a\x1E\xC8WP`\x01a\x0FGV[\x81a\x1E\xD4WP_a\x0FGV[\x81`\x01\x81\x14a\x1E\xEAW`\x02\x81\x14a\x1E\xF4Wa\x1F\x10V[`\x01\x91PPa\x0FGV[`\xFF\x84\x11\x15a\x1F\x05Wa\x1F\x05a\x1C\x17V[PP`\x01\x82\x1Ba\x0FGV[P` \x83\x10a\x013\x83\x10\x16`N\x84\x10`\x0B\x84\x10\x16\x17\x15a\x1F3WP\x81\x81\na\x0FGV[a\x1F=\x83\x83a\x1ExV[\x80_\x19\x04\x82\x11\x15a\x1FPWa\x1FPa\x1C\x17V[\x02\x93\x92PPPV[_a\x0FD\x83\x83a\x1E\xBAV\xFEBLS_SIG_BN254G1_XMD:KECCAK_NCTH_NUL_0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\xA1dsolcC\0\x08\x17\0\n", + b"`\x80`@R4\x80\x15a\0\x0FW_\x80\xFD[P`\x046\x10a\x01'W_5`\xE0\x1C\x80c\x9B0\xA5\xE6\x11a\0\xA9W\x80c\xB5p\x0Eh\x11a\0nW\x80c\xB5p\x0Eh\x14a\x02XW\x80c\xB5\xEC\xB3D\x14a\x02kW\x80c\xF2\xFD\xE3\x8B\x14a\x02\x8AW\x80c\xF8Q\xA4@\x14a\x02\x9DW\x80c\xFAR\xC7\xD8\x14a\x02\xB0W_\x80\xFD[\x80c\x9B0\xA5\xE6\x14a\x01\xE4W\x80c\x9Dv\xEAX\x14a\x01\xF7W\x80c\x9E\x9A\x8F1\x14a\x02\nW\x80c\xA3\x06j\xAB\x14a\x02\x13W\x80c\xB3\xE6\xEB\xD5\x14a\x02&W_\x80\xFD[\x80cUD\xC2\xF1\x11a\0\xEFW\x80cUD\xC2\xF1\x14a\x01\x95W\x80cj\x91\x1C\xCF\x14a\x01\xA8W\x80cqP\x18\xA6\x14a\x01\xB0W\x80c\x81)\xFC\x1C\x14a\x01\xB8W\x80c\x8D\xA5\xCB[\x14a\x01\xC0W_\x80\xFD[\x80c\x02n@+\x14a\x01+W\x80c\x13\xB9\x05z\x14a\x01@W\x80c!@\xFE\xCD\x14a\x01SW\x80c>\x9D\xF9\xB5\x14a\x01fW\x80cM\x99\xDD\x16\x14a\x01\x82W[_\x80\xFD[a\x01>a\x0196`\x04a\x1A\x1AV[a\x02\xF2V[\0[a\x01>a\x01N6`\x04a\x1B\x1FV[a\x04sV[a\x01>a\x01a6`\x04a\x1B}V[a\x05\xDBV[a\x01o`\x01T\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x01>a\x01\x906`\x04a\x1A\x1AV[a\x06\xDCV[a\x01>a\x01\xA36`\x04a\x1B\x96V[a\x08HV[a\x01>a\t\x07V[a\x01>a\t\x88V[a\x01>a\t\x9BV[_T`\x01`\x01`\xA0\x1B\x03\x16[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01yV[a\x01oa\x01\xF26`\x04a\x1B\xDAV[a\n\x9FV[`\x08Ta\x01\xCC\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x01o`\tT\x81V[a\x01>a\x02!6`\x04a\x1B}V[a\n\xF9V[a\x02Ha\x0246`\x04a\x1B\xF4V[`\x04` R_\x90\x81R`@\x90 T`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01a\x01yV[`\x02Ta\x01\xCC\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x01oa\x02y6`\x04a\x1B}V[`\x05` R_\x90\x81R`@\x90 T\x81V[a\x01>a\x02\x986`\x04a\x1B}V[a\x0B\xFCV[`\nTa\x01\xCC\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x02\xE3a\x02\xBE6`\x04a\x1B}V[`\x03` R_\x90\x81R`@\x90 \x80T`\x01\x90\x91\x01T`\xFF\x80\x83\x16\x92a\x01\0\x90\x04\x16\x90\x83V[`@Qa\x01y\x93\x92\x91\x90a\x1C\x1FV[a\x02\xFB\x82a\x0C9V[a\x03\x04\x82a\x0CqV[`\x08T`@Qcn\xB1v\x9F`\xE1\x1B\x81R3`\x04\x82\x01R0`$\x82\x01R_\x91`\x01`\x01`\xA0\x1B\x03\x16\x90c\xDDb\xED>\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03PW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03t\x91\x90a\x1CUV[\x90P\x81\x81\x10\x15a\x03\xA6W`@Qc\x05Ce\xBB`\xE3\x1B\x81R`\x04\x81\x01\x82\x90R`$\x81\x01\x83\x90R`D\x01[`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x03` R`@\x81 `\x01\x01\x80T\x84\x92\x90a\x03\xD0\x90\x84\x90a\x1C\x80V[\x90\x91UPP`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 \x80T\x84\x92\x90a\x04\x07\x90\x84\x90a\x1C\x80V[\x90\x91UPP`\x08Ta\x04$\x90`\x01`\x01`\xA0\x1B\x03\x1630\x85a\x0C\xA7V[`@\x80Q3\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R\x90\x81\x01\x83\x90R\x7F\xE5T\x1Aka\x03\xD4\xFA~\x02\x1E\xD5O\xAD9\xC6o'\xA7k\xD1=7L\xF6$\n\xE6\xBD\x0B\xB7+\x90``\x01[`@Q\x80\x91\x03\x90\xA1PPPV[a\x04|3a\r8V[a\x04\x85\x83a\rqV[a\x04\x8E\x84a\r\xB0V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x04\xB7\x81\x84\x87a\r\xECV[a'\x10\x82a\xFF\xFF\x16\x11\x15a\x04\xDEW`@Qc\xDC\x81\xDB\x85`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x04_a\x04\xEC\x88a\n\x9FV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP`@Q\x80``\x01`@R\x80`\x01\x15\x15\x81R` \x01_`\x01\x81\x11\x15a\x055Wa\x055a\x1C\x0BV[\x81R_` \x91\x82\x01\x81\x90R3\x81R`\x03\x82R`@\x90 \x82Q\x81T\x90\x15\x15`\xFF\x19\x82\x16\x81\x17\x83U\x92\x84\x01Q\x91\x92\x83\x91a\xFF\0\x19\x90\x91\x16a\xFF\xFF\x19\x90\x91\x16\x17a\x01\0\x83`\x01\x81\x11\x15a\x05\x87Wa\x05\x87a\x1C\x0BV[\x02\x17\x90UP`@\x91\x82\x01Q`\x01\x90\x91\x01UQ\x7F\xF6\xE85\x9CWR\x0BF\x964sk\xFC;\xB7\xEC\\\xBD\x1A\x0B\xD2\x8B\x10\xA8'W\x93\xBBs\x0By\x7F\x90a\x05\xCC\x903\x90\x88\x90\x88\x90\x87\x90a\x1C\x93V[`@Q\x80\x91\x03\x90\xA1PPPPPV[3_\x90\x81R`\x05` R`@\x81 T\x90\x81\x90\x03a\x06\x0BW`@Qcy)\x8AS`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x80B\x10\x15a\x06,W`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x06pW`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x84\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x91\x90\x91U`\x08Ta\x06\xA6\x92\x16\x90\x83a\x0E\x81V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01a\x04fV[a\x06\xE5\x82a\x0C9V[a\x06\xEE\x82a\x0CqV[`\x013_\x90\x81R`\x03` R`@\x90 Ta\x01\0\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x07\x18Wa\x07\x18a\x1C\x0BV[\x03a\x076W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 T\x81\x81\x10\x15a\x07}W`@Qc\x92fSQ`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01a\x03\x9DV[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 \x80T\x84\x92\x90a\x07\xAF\x90\x84\x90a\x1C\xF6V[\x92PP\x81\x90UP`@Q\x80`@\x01`@R\x80\x83\x81R` \x01`\tTBa\x07\xD5\x91\x90a\x1C\x80V[\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16_\x81\x81R`\x07` \x90\x81R`@\x80\x83 3\x80\x85R\x90\x83R\x92\x81\x90 \x85Q\x81U\x94\x82\x01Q`\x01\x90\x95\x01\x94\x90\x94U\x83Q\x91\x82R\x81\x01\x91\x90\x91R\x90\x81\x01\x83\x90R\x7FM\x10\xBD\x04\x97u\xC7{\xD7\xF2U\x19Z\xFB\xA5\x08\x80(\xEC\xB3\xC7\xC2w\xD3\x93\xCC\xFFy4\xF2\xF9,\x90``\x01a\x04fV[a\x08Q3a\x0C9V[a\x08Z3a\x0CqV[a\x08c\x82a\rqV[a\x08l\x83a\r\xB0V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x08\x95\x81\x83\x86a\r\xECV[`\x01`\x04_a\x08\xA3\x87a\n\x9FV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x80\xD8\xA4\xA1f3(\xA9\x98\xD4U[\xA2\x1D\x8B\xBAn\xF1Wj\x8C^\x9D'\xF9\xC5E\xF1\xA3\xD5+\x1D3\x85\x85`@Qa\x08\xF9\x93\x92\x91\x90a\x1D\tV[`@Q\x80\x91\x03\x90\xA1PPPPV[a\t\x103a\x0C9V[a\t\x193a\x0CqV[3_\x90\x81R`\x03` R`@\x90 \x80Ta\xFF\0\x19\x16a\x01\0\x17\x90U`\tTa\tA\x90Ba\x1C\x80V[3_\x81\x81R`\x05` \x90\x81R`@\x91\x82\x90 \x93\x90\x93UQ\x90\x81R\x7F\xFB$0ST\xC8wb\xD5WHz\xE4\xA5d\xE8\xD0>\xCB\xB9\xA9}\xD8\xAF\xFF\x8E\x1Fo\xCA\xF0\xDD\x16\x91\x01`@Q\x80\x91\x03\x90\xA1V[a\t\x90a\x0F\x04V[a\t\x99_a\x0F0V[V[\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x80T`\x01`@\x1B\x81\x04`\xFF\x16\x15\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x81\x15\x80\x15a\t\xE0WP\x82[\x90P_\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01\x14\x80\x15a\t\xFCWP0;\x15[\x90P\x81\x15\x80\x15a\n\nWP\x80\x15[\x15a\n(W`@Qc\xF9.\xE8\xA9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16`\x01\x17\x85U\x83\x15a\nRW\x84T`\xFF`@\x1B\x19\x16`\x01`@\x1B\x17\x85U[C`\x01U\x83\x15a\n\x98W\x84T`\xFF`@\x1B\x19\x16\x85U`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x01a\x05\xCCV[PPPPPV[_\x81_\x01Q\x82` \x01Q\x83`@\x01Q\x84``\x01Q`@Q` \x01a\n\xDC\x94\x93\x92\x91\x90\x93\x84R` \x84\x01\x92\x90\x92R`@\x83\x01R``\x82\x01R`\x80\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x07` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 `\x01\x01TB\x10\x15a\x0B?W`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x07` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x0B\x83W`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x83\x16_\x90\x81R`\x07` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x82\x81U`\x01\x01\x91\x90\x91U`\x08Ta\x0B\xBF\x92\x16\x90\x83a\x0E\x81V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01`@Q\x80\x91\x03\x90\xA1PPV[a\x0C\x04a\x0F\x04V[`\x01`\x01`\xA0\x1B\x03\x81\x16a\x0C-W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R_`\x04\x82\x01R`$\x01a\x03\x9DV[a\x0C6\x81a\x0F0V[PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x03` R`@\x90 T`\xFF\x16a\x0C6W`@QcW\xFD\xF4\x0B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x05` R`@\x90 T\x15a\x0C6W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R\x82`D\x82\x01R` _`d\x83_\x8AZ\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\n\x98W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x94\x93\xD3W\xD1\x90RS\x11Q`b\x1B`D\x82\x01R`d\x01a\x03\x9DV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x03` R`@\x90 T`\xFF\x16\x15a\x0C6W`@Qc\x13.~\xFB`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\r\x8E\x82\x82a\x0F\x7FV[\x15a\r\xACW`@Qc\x06\xCFC\x8F`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[`\x04_a\r\xBC\x83a\n\x9FV[\x81R` \x81\x01\x91\x90\x91R`@\x01_ T`\xFF\x16\x15a\x0C6W`@Qb\xDA\x8AW`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\r\xF5\x82a\x0F\xA2V[_`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x1F\xB9`$\x919\x90P_\x84\x82`@Q` \x01a\x0E%\x92\x91\x90a\x1D\x8AV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_a\x0E@\x82a\x10=V[\x90Pa\x0E]\x81\x85a\x0EP\x88a\x11*V[a\x0EXa\x11\xA1V[a\x12nV[a\x0EyW`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPV[_`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` _`D\x83_\x89Z\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\x0E\xFEW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0F`$\x82\x01Rn\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x90RS\x11Q`\x8A\x1B`D\x82\x01R`d\x01a\x03\x9DV[PPPPV[_T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t\x99W`@Qc\x11\x8C\xDA\xA7`\xE0\x1B\x81R3`\x04\x82\x01R`$\x01a\x03\x9DV[_\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x80Q\x82Q_\x91\x14\x80\x15a\x0F\x99WP\x81` \x01Q\x83` \x01Q\x14[\x90P[\x92\x91PPV[\x80Q` \x82\x01Q_\x91_\x80Q` a\x1F\xDD\x839\x81Q\x91R\x91\x15\x90\x15\x16\x15a\x0F\xC8WPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x108W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x9DV[PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x10Z\x83a\x13NV[\x90P_\x80Q` a\x1F\xDD\x839\x81Q\x91R`\x03_\x82\x84\x85\t\x90P\x82\x80a\x10\x81Wa\x10\x81a\x1D\x9EV[\x84\x82\t\x90P\x82\x80a\x10\x94Wa\x10\x94a\x1D\x9EV[\x82\x82\x08\x90P_\x80a\x10\xA4\x83a\x15WV[\x92P\x90P[\x80a\x11\rW\x84\x80a\x10\xBCWa\x10\xBCa\x1D\x9EV[`\x01\x87\x08\x95P\x84\x80a\x10\xD0Wa\x10\xD0a\x1D\x9EV[\x86\x87\t\x92P\x84\x80a\x10\xE3Wa\x10\xE3a\x1D\x9EV[\x86\x84\t\x92P\x84\x80a\x10\xF6Wa\x10\xF6a\x1D\x9EV[\x84\x84\x08\x92Pa\x11\x04\x83a\x15WV[\x92P\x90Pa\x10\xA9V[P`@\x80Q\x80\x82\x01\x90\x91R\x94\x85R` \x85\x01RP\x91\x94\x93PPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x11QWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01_\x80Q` a\x1F\xDD\x839\x81Q\x91R\x84` \x01Qa\x11\x82\x91\x90a\x1D\xB2V[a\x11\x99\x90_\x80Q` a\x1F\xDD\x839\x81Q\x91Ra\x1C\xF6V[\x90R\x92\x91PPV[a\x11\xC8`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[_\x80_`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x13@W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x03\x9DV[P\x15\x15\x90P[\x94\x93PPPPV[_\x80a\x13Y\x83a\x16NV[\x80Q\x90\x91P`0\x81\x14a\x13nWa\x13na\x1D\xD1V[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x13\x88Wa\x13\x88a\x1ABV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x13\xB2W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_[\x82\x81\x10\x15a\x14!W\x83`\x01a\x13\xCC\x83\x86a\x1C\xF6V[a\x13\xD6\x91\x90a\x1C\xF6V[\x81Q\x81\x10a\x13\xE6Wa\x13\xE6a\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x14\x03Wa\x14\x03a\x1D\xE5V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x13\xB7V[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R_\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P_[\x82\x81\x10\x15a\x14\xB1W\x83\x81a\x14]\x85\x88a\x1C\xF6V[a\x14g\x91\x90a\x1C\x80V[\x81Q\x81\x10a\x14wWa\x14wa\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x14\x97Wa\x14\x97a\x1D\xE5V[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x14IV[P_a\x14\xBC\x82a\x19\x98V[\x90Pa\x01\0_\x80Q` a\x1F\xDD\x839\x81Q\x91R_a\x14\xDA\x86\x89a\x1C\xF6V[\x90P_[\x81\x81\x10\x15a\x15GW_\x88`\x01a\x14\xF4\x84\x86a\x1C\xF6V[a\x14\xFE\x91\x90a\x1C\xF6V[\x81Q\x81\x10a\x15\x0EWa\x15\x0Ea\x1D\xE5V[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x15&Wa\x15&a\x1D\x9EV[\x85\x87\t\x95P\x83\x80a\x159Wa\x159a\x1D\x9EV[\x81\x87\x08\x95PP`\x01\x01a\x14\xDEV[P\x92\x9A\x99PPPPPPPPPPV[_\x80_\x80_\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P__\x80Q` a\x1F\xDD\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x87``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x94PP_Q\x92P\x83a\x16\x14W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x9DV[\x80`\x01\x84\x90\x1B\x11\x15a\x16-Wa\x16*\x83\x82a\x1C\xF6V[\x92P[\x80\x80a\x16;Wa\x16;a\x1D\x9EV[\x83\x84\t\x96\x90\x96\x14\x96\x91\x95P\x90\x93PPPPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90_\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x16\x8E\x92\x91\x90a\x1D\x8AV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x16\xB5\x92\x91\x90a\x1D\xF9V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x16\xD7\x91\x90a\x1E#V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x17\x01\x90\x83\x90\x83\x90` \x01a\x1E;V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90_`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17qWa\x17qa\x1ABV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17\x9BW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_\x82`@Q` \x01a\x17\xB2\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_[\x81Q\x81\x10\x15a\x18\x1BW\x81\x81\x81Q\x81\x10a\x17\xE0Wa\x17\xE0a\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x17\xFDWa\x17\xFDa\x1D\xE5V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x17\xC5V[P_\x84`@Q` \x01a\x180\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R_\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x18\xC2W_\x83\x82\x81Q\x81\x10a\x18iWa\x18ia\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x18\x86Wa\x18\x86a\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x18\xA7\x92\x91\x90a\x1E_V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x18NV[P\x86\x88\x87`@Q` \x01a\x18\xD8\x93\x92\x91\x90a\x1E\x83V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x19\x06\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P_[a\x19&\x8A`\xFF\x8D\x16a\x1C\xF6V[\x81\x10\x15a\x19\x87W\x82\x81\x81Q\x81\x10a\x19?Wa\x19?a\x1D\xE5V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x19Y\x83\x8Da\x1C\x80V[\x81Q\x81\x10a\x19iWa\x19ia\x1D\xE5V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x19\x19V[P\x91\x9B\x9APPPPPPPPPPPV[_\x80\x80[\x83Q\x81\x10\x15a\x19\xF8W\x83\x81\x81Q\x81\x10a\x19\xB7Wa\x19\xB7a\x1D\xE5V[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x19\xCF\x91\x90a\x1E\xB6V[a\x19\xDA\x90`\x02a\x1F\xADV[a\x19\xE4\x91\x90a\x1E\xB6V[a\x19\xEE\x90\x83a\x1C\x80V[\x91P`\x01\x01a\x19\x9CV[P\x92\x91PPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x1A\x15W_\x80\xFD[\x91\x90PV[_\x80`@\x83\x85\x03\x12\x15a\x1A+W_\x80\xFD[a\x1A4\x83a\x19\xFFV[\x94` \x93\x90\x93\x015\x93PPPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[_`\x80\x82\x84\x03\x12\x15a\x1AfW_\x80\xFD[`@Q`\x80\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A\x95WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[\x80`@RP\x80\x91P\x825\x81R` \x83\x015` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[_`@\x82\x84\x03\x12\x15a\x1A\xD6W_\x80\xFD[`@Q`@\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1B\x05WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x80_\x80a\x01 \x85\x87\x03\x12\x15a\x1B3W_\x80\xFD[a\x1B=\x86\x86a\x1AVV[\x93Pa\x1BL\x86`\x80\x87\x01a\x1A\xC6V[\x92Pa\x1B[\x86`\xC0\x87\x01a\x1A\xC6V[\x91Pa\x01\0\x85\x015a\xFF\xFF\x81\x16\x81\x14a\x1BrW_\x80\xFD[\x93\x96\x92\x95P\x90\x93PPV[_` \x82\x84\x03\x12\x15a\x1B\x8DW_\x80\xFD[a\x0F\x99\x82a\x19\xFFV[_\x80_a\x01\0\x84\x86\x03\x12\x15a\x1B\xA9W_\x80\xFD[a\x1B\xB3\x85\x85a\x1AVV[\x92Pa\x1B\xC2\x85`\x80\x86\x01a\x1A\xC6V[\x91Pa\x1B\xD1\x85`\xC0\x86\x01a\x1A\xC6V[\x90P\x92P\x92P\x92V[_`\x80\x82\x84\x03\x12\x15a\x1B\xEAW_\x80\xFD[a\x0F\x99\x83\x83a\x1AVV[_` \x82\x84\x03\x12\x15a\x1C\x04W_\x80\xFD[P5\x91\x90PV[cNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[\x83\x15\x15\x81R``\x81\x01`\x02\x84\x10a\x1CDWcNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[` \x82\x01\x93\x90\x93R`@\x01R\x91\x90PV[_` \x82\x84\x03\x12\x15a\x1CeW_\x80\xFD[PQ\x91\x90PV[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x80\x82\x01\x80\x82\x11\x15a\x0F\x9CWa\x0F\x9Ca\x1ClV[`\x01`\x01`\xA0\x1B\x03\x85\x16\x81Ra\x01\0\x81\x01a\x1C\xD2` \x83\x01\x86\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x83Q`\xA0\x83\x01R` \x84\x01Q`\xC0\x83\x01Ra\xFF\xFF\x83\x16`\xE0\x83\x01R\x95\x94PPPPPV[\x81\x81\x03\x81\x81\x11\x15a\x0F\x9CWa\x0F\x9Ca\x1ClV[`\x01`\x01`\xA0\x1B\x03\x84\x16\x81R`\xE0\x81\x01a\x1DG` \x83\x01\x85\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x82Q`\xA0\x83\x01R` \x83\x01Q`\xC0\x83\x01Ra\x13FV[_\x81Q_[\x81\x81\x10\x15a\x1D|W` \x81\x85\x01\x81\x01Q\x86\x83\x01R\x01a\x1DbV[P_\x93\x01\x92\x83RP\x90\x91\x90PV[_a\x13Fa\x1D\x98\x83\x86a\x1D]V[\x84a\x1D]V[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a\x1D\xCCWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V[cNH{q`\xE0\x1B_R`\x01`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[_a\x1E\x04\x82\x85a\x1D]V[_\x81R`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16`\x01\x84\x01RPP`\x02\x01\x91\x90PV[_a\x1E.\x82\x84a\x1D]V[_\x81R`\x01\x01\x93\x92PPPV[_a\x1EF\x82\x85a\x1D]V[`\x01`\x01`\xF0\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x02\x01\x91\x90PV[_a\x1Ej\x82\x85a\x1D]V[`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x01\x01\x91\x90PV[_a\x1E\x8E\x82\x86a\x1D]V[`\x01`\x01`\xF8\x1B\x03\x19\x94\x90\x94\x16\x84RPP`\x01`\x01`\xF0\x1B\x03\x19\x16`\x01\x82\x01R`\x03\x01\x91\x90PV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0F\x9CWa\x0F\x9Ca\x1ClV[`\x01\x81\x81[\x80\x85\x11\x15a\x1F\x07W\x81_\x19\x04\x82\x11\x15a\x1E\xEDWa\x1E\xEDa\x1ClV[\x80\x85\x16\x15a\x1E\xFAW\x91\x81\x02\x91[\x93\x84\x1C\x93\x90\x80\x02\x90a\x1E\xD2V[P\x92P\x92\x90PV[_\x82a\x1F\x1DWP`\x01a\x0F\x9CV[\x81a\x1F)WP_a\x0F\x9CV[\x81`\x01\x81\x14a\x1F?W`\x02\x81\x14a\x1FIWa\x1FeV[`\x01\x91PPa\x0F\x9CV[`\xFF\x84\x11\x15a\x1FZWa\x1FZa\x1ClV[PP`\x01\x82\x1Ba\x0F\x9CV[P` \x83\x10a\x013\x83\x10\x16`N\x84\x10`\x0B\x84\x10\x16\x17\x15a\x1F\x88WP\x81\x81\na\x0F\x9CV[a\x1F\x92\x83\x83a\x1E\xCDV[\x80_\x19\x04\x82\x11\x15a\x1F\xA5Wa\x1F\xA5a\x1ClV[\x02\x93\x92PPPV[_a\x0F\x99\x83\x83a\x1F\x0FV\xFEBLS_SIG_BN254G1_XMD:KECCAK_NCTH_NUL_0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\xA1dsolcC\0\x08\x17\0\n", ); #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] @@ -2223,6 +2248,66 @@ pub mod StakeTable { } } }; + /**Custom error with signature `InvalidAddress()` and selector `0xe6c4247b`. + ```solidity + error InvalidAddress(); + ```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct InvalidAddress {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: InvalidAddress) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for InvalidAddress { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for InvalidAddress { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "InvalidAddress()"; + const SELECTOR: [u8; 4] = [230u8, 196u8, 36u8, 123u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + } + }; /**Custom error with signature `InvalidCommission()` and selector `0xdc81db85`. ```solidity error InvalidCommission(); @@ -3845,7 +3930,7 @@ pub mod StakeTable { }; /**Constructor`. ```solidity - constructor(address _tokenAddress, uint256 _exitEscrowPeriod, address _initialOwner); + constructor(address _tokenAddress, address _lightClientAddress, uint256 _exitEscrowPeriod, address _initialOwner); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] @@ -3853,6 +3938,8 @@ pub mod StakeTable { #[allow(missing_docs)] pub _tokenAddress: alloy::sol_types::private::Address, #[allow(missing_docs)] + pub _lightClientAddress: alloy::sol_types::private::Address, + #[allow(missing_docs)] pub _exitEscrowPeriod: alloy::sol_types::private::primitives::aliases::U256, #[allow(missing_docs)] pub _initialOwner: alloy::sol_types::private::Address, @@ -3862,12 +3949,14 @@ pub mod StakeTable { { #[doc(hidden)] type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, alloy::sol_types::sol_data::Address, alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Address, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, alloy::sol_types::private::Address, alloy::sol_types::private::primitives::aliases::U256, alloy::sol_types::private::Address, @@ -3887,6 +3976,7 @@ pub mod StakeTable { fn from(value: constructorCall) -> Self { ( value._tokenAddress, + value._lightClientAddress, value._exitEscrowPeriod, value._initialOwner, ) @@ -3898,8 +3988,9 @@ pub mod StakeTable { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _tokenAddress: tuple.0, - _exitEscrowPeriod: tuple.1, - _initialOwner: tuple.2, + _lightClientAddress: tuple.1, + _exitEscrowPeriod: tuple.2, + _initialOwner: tuple.3, } } } @@ -3907,6 +3998,7 @@ pub mod StakeTable { #[automatically_derived] impl alloy_sol_types::SolConstructor for constructorCall { type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, alloy::sol_types::sol_data::Address, alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Address, @@ -3924,6 +4016,9 @@ pub mod StakeTable { ::tokenize( &self._tokenAddress, ), + ::tokenize( + &self._lightClientAddress, + ), as alloy_sol_types::SolType>::tokenize( &self._exitEscrowPeriod, ), @@ -5082,6 +5177,117 @@ pub mod StakeTable { } } }; + /**Function with signature `lightClient()` and selector `0xb5700e68`. + ```solidity + function lightClient() external view returns (address); + ```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct lightClientCall {} + ///Container type for the return parameters of the [`lightClient()`](lightClientCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct lightClientReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: lightClientCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for lightClientCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: lightClientReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for lightClientReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for lightClientCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = lightClientReturn; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "lightClient()"; + const SELECTOR: [u8; 4] = [181u8, 112u8, 14u8, 104u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; /**Function with signature `owner()` and selector `0x8da5cb5b`. ```solidity function owner() external view returns (address); @@ -6214,6 +6420,8 @@ pub mod StakeTable { #[allow(missing_docs)] initializedAtBlock(initializedAtBlockCall), #[allow(missing_docs)] + lightClient(lightClientCall), + #[allow(missing_docs)] owner(ownerCall), #[allow(missing_docs)] registerValidator(registerValidatorCall), @@ -6256,6 +6464,7 @@ pub mod StakeTable { [158u8, 154u8, 143u8, 49u8], [163u8, 6u8, 106u8, 171u8], [179u8, 230u8, 235u8, 213u8], + [181u8, 112u8, 14u8, 104u8], [181u8, 236u8, 179u8, 68u8], [242u8, 253u8, 227u8, 139u8], [248u8, 81u8, 164u8, 64u8], @@ -6266,7 +6475,7 @@ pub mod StakeTable { impl alloy_sol_types::SolInterface for StakeTableCalls { const NAME: &'static str = "StakeTableCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 19usize; + const COUNT: usize = 20usize; #[inline] fn selector(&self) -> [u8; 4] { match self { @@ -6290,6 +6499,7 @@ pub mod StakeTable { Self::initializedAtBlock(_) => { ::SELECTOR } + Self::lightClient(_) => ::SELECTOR, Self::owner(_) => ::SELECTOR, Self::registerValidator(_) => { ::SELECTOR @@ -6497,6 +6707,18 @@ pub mod StakeTable { } blsKeys }, + { + fn lightClient( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(StakeTableCalls::lightClient) + } + lightClient + }, { fn validatorExits( data: &[u8], @@ -6583,6 +6805,9 @@ pub mod StakeTable { Self::initializedAtBlock(inner) => { ::abi_encoded_size(inner) } + Self::lightClient(inner) => { + ::abi_encoded_size(inner) + } Self::owner(inner) => { ::abi_encoded_size(inner) } @@ -6647,6 +6872,9 @@ pub mod StakeTable { Self::initializedAtBlock(inner) => { ::abi_encode_raw(inner, out) } + Self::lightClient(inner) => { + ::abi_encode_raw(inner, out) + } Self::owner(inner) => { ::abi_encode_raw(inner, out) } @@ -6690,6 +6918,8 @@ pub mod StakeTable { #[allow(missing_docs)] InsufficientBalance(InsufficientBalance), #[allow(missing_docs)] + InvalidAddress(InvalidAddress), + #[allow(missing_docs)] InvalidCommission(InvalidCommission), #[allow(missing_docs)] InvalidInitialization(InvalidInitialization), @@ -6736,6 +6966,7 @@ pub mod StakeTable { [208u8, 208u8, 79u8, 96u8], [215u8, 230u8, 188u8, 248u8], [220u8, 129u8, 219u8, 133u8], + [230u8, 196u8, 36u8, 123u8], [234u8, 180u8, 169u8, 99u8], [242u8, 83u8, 20u8, 166u8], [249u8, 46u8, 232u8, 169u8], @@ -6745,7 +6976,7 @@ pub mod StakeTable { impl alloy_sol_types::SolInterface for StakeTableErrors { const NAME: &'static str = "StakeTableErrors"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 16usize; + const COUNT: usize = 17usize; #[inline] fn selector(&self) -> [u8; 4] { match self { @@ -6761,6 +6992,7 @@ pub mod StakeTable { Self::InsufficientBalance(_) => { ::SELECTOR } + Self::InvalidAddress(_) => ::SELECTOR, Self::InvalidCommission(_) => { ::SELECTOR } @@ -6974,6 +7206,18 @@ pub mod StakeTable { } InvalidCommission }, + { + fn InvalidAddress( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(StakeTableErrors::InvalidAddress) + } + InvalidAddress + }, { fn ValidatorAlreadyExited( data: &[u8], @@ -7034,6 +7278,9 @@ pub mod StakeTable { Self::InsufficientBalance(inner) => { ::abi_encoded_size(inner) } + Self::InvalidAddress(inner) => { + ::abi_encoded_size(inner) + } Self::InvalidCommission(inner) => { ::abi_encoded_size(inner) } @@ -7093,6 +7340,9 @@ pub mod StakeTable { Self::InsufficientBalance(inner) => { ::abi_encode_raw(inner, out) } + Self::InvalidAddress(inner) => { + ::abi_encode_raw(inner, out) + } Self::InvalidCommission(inner) => { ::abi_encode_raw(inner, out) } @@ -7361,6 +7611,7 @@ pub mod StakeTable { >( provider: P, _tokenAddress: alloy::sol_types::private::Address, + _lightClientAddress: alloy::sol_types::private::Address, _exitEscrowPeriod: alloy::sol_types::private::primitives::aliases::U256, _initialOwner: alloy::sol_types::private::Address, ) -> impl ::core::future::Future>> @@ -7368,6 +7619,7 @@ pub mod StakeTable { StakeTableInstance::::deploy( provider, _tokenAddress, + _lightClientAddress, _exitEscrowPeriod, _initialOwner, ) @@ -7385,12 +7637,14 @@ pub mod StakeTable { >( provider: P, _tokenAddress: alloy::sol_types::private::Address, + _lightClientAddress: alloy::sol_types::private::Address, _exitEscrowPeriod: alloy::sol_types::private::primitives::aliases::U256, _initialOwner: alloy::sol_types::private::Address, ) -> alloy_contract::RawCallBuilder { StakeTableInstance::::deploy_builder( provider, _tokenAddress, + _lightClientAddress, _exitEscrowPeriod, _initialOwner, ) @@ -7449,11 +7703,17 @@ pub mod StakeTable { pub async fn deploy( provider: P, _tokenAddress: alloy::sol_types::private::Address, + _lightClientAddress: alloy::sol_types::private::Address, _exitEscrowPeriod: alloy::sol_types::private::primitives::aliases::U256, _initialOwner: alloy::sol_types::private::Address, ) -> alloy_contract::Result> { - let call_builder = - Self::deploy_builder(provider, _tokenAddress, _exitEscrowPeriod, _initialOwner); + let call_builder = Self::deploy_builder( + provider, + _tokenAddress, + _lightClientAddress, + _exitEscrowPeriod, + _initialOwner, + ); let contract_address = call_builder.deploy().await?; Ok(Self::new(contract_address, call_builder.provider)) } @@ -7466,6 +7726,7 @@ pub mod StakeTable { pub fn deploy_builder( provider: P, _tokenAddress: alloy::sol_types::private::Address, + _lightClientAddress: alloy::sol_types::private::Address, _exitEscrowPeriod: alloy::sol_types::private::primitives::aliases::U256, _initialOwner: alloy::sol_types::private::Address, ) -> alloy_contract::RawCallBuilder { @@ -7475,6 +7736,7 @@ pub mod StakeTable { &BYTECODE[..], &alloy_sol_types::SolConstructor::abi_encode(&constructorCall { _tokenAddress, + _lightClientAddress, _exitEscrowPeriod, _initialOwner, })[..], @@ -7595,6 +7857,10 @@ pub mod StakeTable { ) -> alloy_contract::SolCallBuilder { self.call_builder(&initializedAtBlockCall {}) } + ///Creates a new call builder for the [`lightClient`] function. + pub fn lightClient(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&lightClientCall {}) + } ///Creates a new call builder for the [`owner`] function. pub fn owner(&self) -> alloy_contract::SolCallBuilder { self.call_builder(&ownerCall {}) diff --git a/contract-bindings-ethers/src/stake_table.rs b/contract-bindings-ethers/src/stake_table.rs index 5e8f0c9bd3..2d58867d37 100644 --- a/contract-bindings-ethers/src/stake_table.rs +++ b/contract-bindings-ethers/src/stake_table.rs @@ -23,6 +23,13 @@ pub mod stake_table { ::std::borrow::ToOwned::to_owned("address"), ), }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_lightClientAddress"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, ::ethers::core::abi::ethabi::Param { name: ::std::borrow::ToOwned::to_owned("_exitEscrowPeriod"), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize), @@ -214,6 +221,22 @@ pub mod stake_table { state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, },], ), + ( + ::std::borrow::ToOwned::to_owned("lightClient"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("lightClient"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("contract LightClient"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), ( ::std::borrow::ToOwned::to_owned("owner"), ::std::vec![::ethers::core::abi::ethabi::Function { @@ -688,6 +711,13 @@ pub mod stake_table { },], },], ), + ( + ::std::borrow::ToOwned::to_owned("InvalidAddress"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("InvalidAddress"), + inputs: ::std::vec![], + },], + ), ( ::std::borrow::ToOwned::to_owned("InvalidCommission"), ::std::vec![::ethers::core::abi::ethabi::AbiError { @@ -793,12 +823,12 @@ pub mod stake_table { pub static STAKETABLE_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = ::ethers::contract::Lazy::new(__abi); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15b\0\0\x10W_\x80\xFD[P`@Qb\0\"+8\x03\x80b\0\"+\x839\x81\x01`@\x81\x90Rb\0\x003\x91b\0\x02+V[\x80`\x01`\x01`\xA0\x1B\x03\x81\x16b\0\0bW`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R_`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[b\0\0m\x81b\0\0\xABV[Pb\0\0xb\0\0\xFAV[P`\x07\x80T`\x01`\x01`\xA0\x1B\x03\x90\x93\x16`\x01`\x01`\xA0\x1B\x03\x19\x93\x84\x16\x17\x90U`\x08U`\t\x80T\x90\x91\x163\x17\x90Ub\0\x02iV[_\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x80Th\x01\0\0\0\0\0\0\0\0\x81\x04`\xFF\x16\x15\x90`\x01`\x01`@\x1B\x03\x16_\x81\x15\x80\x15b\0\x01DWP\x82[\x90P_\x82`\x01`\x01`@\x1B\x03\x16`\x01\x14\x80\x15b\0\x01`WP0;\x15[\x90P\x81\x15\x80\x15b\0\x01oWP\x80\x15[\x15b\0\x01\x8EW`@Qc\xF9.\xE8\xA9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84T`\x01`\x01`@\x1B\x03\x19\x16`\x01\x17\x85U\x83\x15b\0\x01\xBDW\x84T`\xFF`@\x1B\x19\x16h\x01\0\0\0\0\0\0\0\0\x17\x85U[C`\x01U\x83\x15b\0\x02\x08W\x84T`\xFF`@\x1B\x19\x16\x85U`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x01`@Q\x80\x91\x03\x90\xA1[PPPPPV[\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14b\0\x02&W_\x80\xFD[\x91\x90PV[_\x80_``\x84\x86\x03\x12\x15b\0\x02>W_\x80\xFD[b\0\x02I\x84b\0\x02\x0FV[\x92P` \x84\x01Q\x91Pb\0\x02``@\x85\x01b\0\x02\x0FV[\x90P\x92P\x92P\x92V[a\x1F\xB4\x80b\0\x02w_9_\xF3\xFE`\x80`@R4\x80\x15a\0\x0FW_\x80\xFD[P`\x046\x10a\x01\x1CW_5`\xE0\x1C\x80c\x8D\xA5\xCB[\x11a\0\xA9W\x80c\xB3\xE6\xEB\xD5\x11a\0nW\x80c\xB3\xE6\xEB\xD5\x14a\x02\x1BW\x80c\xB5\xEC\xB3D\x14a\x02MW\x80c\xF2\xFD\xE3\x8B\x14a\x02lW\x80c\xF8Q\xA4@\x14a\x02\x7FW\x80c\xFAR\xC7\xD8\x14a\x02\x92W_\x80\xFD[\x80c\x8D\xA5\xCB[\x14a\x01\xB5W\x80c\x9B0\xA5\xE6\x14a\x01\xD9W\x80c\x9Dv\xEAX\x14a\x01\xECW\x80c\x9E\x9A\x8F1\x14a\x01\xFFW\x80c\xA3\x06j\xAB\x14a\x02\x08W_\x80\xFD[\x80cM\x99\xDD\x16\x11a\0\xEFW\x80cM\x99\xDD\x16\x14a\x01wW\x80cUD\xC2\xF1\x14a\x01\x8AW\x80cj\x91\x1C\xCF\x14a\x01\x9DW\x80cqP\x18\xA6\x14a\x01\xA5W\x80c\x81)\xFC\x1C\x14a\x01\xADW_\x80\xFD[\x80c\x02n@+\x14a\x01 W\x80c\x13\xB9\x05z\x14a\x015W\x80c!@\xFE\xCD\x14a\x01HW\x80c>\x9D\xF9\xB5\x14a\x01[W[_\x80\xFD[a\x013a\x01.6`\x04a\x19\xC5V[a\x02\xD4V[\0[a\x013a\x01C6`\x04a\x1A\xCAV[a\x04\x1EV[a\x013a\x01V6`\x04a\x1B(V[a\x05\x86V[a\x01d`\x01T\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x013a\x01\x856`\x04a\x19\xC5V[a\x06\x87V[a\x013a\x01\x986`\x04a\x1BAV[a\x07\xF3V[a\x013a\x08\xB2V[a\x013a\t3V[a\x013a\tFV[_T`\x01`\x01`\xA0\x1B\x03\x16[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01nV[a\x01da\x01\xE76`\x04a\x1B\x85V[a\nJV[`\x07Ta\x01\xC1\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x01d`\x08T\x81V[a\x013a\x02\x166`\x04a\x1B(V[a\n\xA4V[a\x02=a\x02)6`\x04a\x1B\x9FV[`\x03` R_\x90\x81R`@\x90 T`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01a\x01nV[a\x01da\x02[6`\x04a\x1B(V[`\x04` R_\x90\x81R`@\x90 T\x81V[a\x013a\x02z6`\x04a\x1B(V[a\x0B\xA7V[`\tTa\x01\xC1\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x02\xC5a\x02\xA06`\x04a\x1B(V[`\x02` R_\x90\x81R`@\x90 \x80T`\x01\x90\x91\x01T`\xFF\x80\x83\x16\x92a\x01\0\x90\x04\x16\x90\x83V[`@Qa\x01n\x93\x92\x91\x90a\x1B\xCAV[a\x02\xDD\x82a\x0B\xE4V[a\x02\xE6\x82a\x0C\x1CV[`\x07T`@Qcn\xB1v\x9F`\xE1\x1B\x81R3`\x04\x82\x01R0`$\x82\x01R_\x91`\x01`\x01`\xA0\x1B\x03\x16\x90c\xDDb\xED>\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x032W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03V\x91\x90a\x1C\0V[\x90P\x81\x81\x10\x15a\x03\x88W`@Qc\x05Ce\xBB`\xE3\x1B\x81R`\x04\x81\x01\x82\x90R`$\x81\x01\x83\x90R`D\x01[`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x02` R`@\x81 `\x01\x01\x80T\x84\x92\x90a\x03\xB2\x90\x84\x90a\x1C+V[\x90\x91UPP`\x07Ta\x03\xCF\x90`\x01`\x01`\xA0\x1B\x03\x1630\x85a\x0CRV[`@\x80Q3\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R\x90\x81\x01\x83\x90R\x7F\xE5T\x1Aka\x03\xD4\xFA~\x02\x1E\xD5O\xAD9\xC6o'\xA7k\xD1=7L\xF6$\n\xE6\xBD\x0B\xB7+\x90``\x01[`@Q\x80\x91\x03\x90\xA1PPPV[a\x04'3a\x0C\xE3V[a\x040\x83a\r\x1CV[a\x049\x84a\r[V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x04b\x81\x84\x87a\r\x97V[a'\x10\x82a\xFF\xFF\x16\x11\x15a\x04\x89W`@Qc\xDC\x81\xDB\x85`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x03_a\x04\x97\x88a\nJV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP`@Q\x80``\x01`@R\x80`\x01\x15\x15\x81R` \x01_`\x01\x81\x11\x15a\x04\xE0Wa\x04\xE0a\x1B\xB6V[\x81R_` \x91\x82\x01\x81\x90R3\x81R`\x02\x82R`@\x90 \x82Q\x81T\x90\x15\x15`\xFF\x19\x82\x16\x81\x17\x83U\x92\x84\x01Q\x91\x92\x83\x91a\xFF\0\x19\x90\x91\x16a\xFF\xFF\x19\x90\x91\x16\x17a\x01\0\x83`\x01\x81\x11\x15a\x052Wa\x052a\x1B\xB6V[\x02\x17\x90UP`@\x91\x82\x01Q`\x01\x90\x91\x01UQ\x7F\xF6\xE85\x9CWR\x0BF\x964sk\xFC;\xB7\xEC\\\xBD\x1A\x0B\xD2\x8B\x10\xA8'W\x93\xBBs\x0By\x7F\x90a\x05w\x903\x90\x88\x90\x88\x90\x87\x90a\x1C>V[`@Q\x80\x91\x03\x90\xA1PPPPPV[3_\x90\x81R`\x04` R`@\x81 T\x90\x81\x90\x03a\x05\xB6W`@Qcy)\x8AS`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x80B\x10\x15a\x05\xD7W`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x06\x1BW`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x84\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x91\x90\x91U`\x07Ta\x06Q\x92\x16\x90\x83a\x0E,V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01a\x04\x11V[a\x06\x90\x82a\x0B\xE4V[a\x06\x99\x82a\x0C\x1CV[`\x013_\x90\x81R`\x02` R`@\x90 Ta\x01\0\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x06\xC3Wa\x06\xC3a\x1B\xB6V[\x03a\x06\xE1W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 T\x81\x81\x10\x15a\x07(W`@Qc\x92fSQ`\xE0\x1B\x81R`\x04\x81\x01\x83\x90R`$\x01a\x03\x7FV[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 \x80T\x84\x92\x90a\x07Z\x90\x84\x90a\x1C\xA1V[\x92PP\x81\x90UP`@Q\x80`@\x01`@R\x80\x83\x81R` \x01`\x08TBa\x07\x80\x91\x90a\x1C+V[\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16_\x81\x81R`\x06` \x90\x81R`@\x80\x83 3\x80\x85R\x90\x83R\x92\x81\x90 \x85Q\x81U\x94\x82\x01Q`\x01\x90\x95\x01\x94\x90\x94U\x83Q\x91\x82R\x81\x01\x91\x90\x91R\x90\x81\x01\x83\x90R\x7FM\x10\xBD\x04\x97u\xC7{\xD7\xF2U\x19Z\xFB\xA5\x08\x80(\xEC\xB3\xC7\xC2w\xD3\x93\xCC\xFFy4\xF2\xF9,\x90``\x01a\x04\x11V[a\x07\xFC3a\x0B\xE4V[a\x08\x053a\x0C\x1CV[a\x08\x0E\x82a\r\x1CV[a\x08\x17\x83a\r[V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x08@\x81\x83\x86a\r\x97V[`\x01`\x03_a\x08N\x87a\nJV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x80\xD8\xA4\xA1f3(\xA9\x98\xD4U[\xA2\x1D\x8B\xBAn\xF1Wj\x8C^\x9D'\xF9\xC5E\xF1\xA3\xD5+\x1D3\x85\x85`@Qa\x08\xA4\x93\x92\x91\x90a\x1C\xB4V[`@Q\x80\x91\x03\x90\xA1PPPPV[a\x08\xBB3a\x0B\xE4V[a\x08\xC43a\x0C\x1CV[3_\x90\x81R`\x02` R`@\x90 \x80Ta\xFF\0\x19\x16a\x01\0\x17\x90U`\x08Ta\x08\xEC\x90Ba\x1C+V[3_\x81\x81R`\x04` \x90\x81R`@\x91\x82\x90 \x93\x90\x93UQ\x90\x81R\x7F\xFB$0ST\xC8wb\xD5WHz\xE4\xA5d\xE8\xD0>\xCB\xB9\xA9}\xD8\xAF\xFF\x8E\x1Fo\xCA\xF0\xDD\x16\x91\x01`@Q\x80\x91\x03\x90\xA1V[a\t;a\x0E\xAFV[a\tD_a\x0E\xDBV[V[\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x80T`\x01`@\x1B\x81\x04`\xFF\x16\x15\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x81\x15\x80\x15a\t\x8BWP\x82[\x90P_\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01\x14\x80\x15a\t\xA7WP0;\x15[\x90P\x81\x15\x80\x15a\t\xB5WP\x80\x15[\x15a\t\xD3W`@Qc\xF9.\xE8\xA9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16`\x01\x17\x85U\x83\x15a\t\xFDW\x84T`\xFF`@\x1B\x19\x16`\x01`@\x1B\x17\x85U[C`\x01U\x83\x15a\nCW\x84T`\xFF`@\x1B\x19\x16\x85U`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x01a\x05wV[PPPPPV[_\x81_\x01Q\x82` \x01Q\x83`@\x01Q\x84``\x01Q`@Q` \x01a\n\x87\x94\x93\x92\x91\x90\x93\x84R` \x84\x01\x92\x90\x92R`@\x83\x01R``\x82\x01R`\x80\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 `\x01\x01TB\x10\x15a\n\xEAW`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x0B.W`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x83\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x82\x81U`\x01\x01\x91\x90\x91U`\x07Ta\x0Bj\x92\x16\x90\x83a\x0E,V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01`@Q\x80\x91\x03\x90\xA1PPV[a\x0B\xAFa\x0E\xAFV[`\x01`\x01`\xA0\x1B\x03\x81\x16a\x0B\xD8W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R_`\x04\x82\x01R`$\x01a\x03\x7FV[a\x0B\xE1\x81a\x0E\xDBV[PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x02` R`@\x90 T`\xFF\x16a\x0B\xE1W`@QcW\xFD\xF4\x0B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x04` R`@\x90 T\x15a\x0B\xE1W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R\x82`D\x82\x01R` _`d\x83_\x8AZ\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\nCW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x94\x93\xD3W\xD1\x90RS\x11Q`b\x1B`D\x82\x01R`d\x01a\x03\x7FV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x02` R`@\x90 T`\xFF\x16\x15a\x0B\xE1W`@Qc\x13.~\xFB`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\r9\x82\x82a\x0F*V[\x15a\rWW`@Qc\x06\xCFC\x8F`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[`\x03_a\rg\x83a\nJV[\x81R` \x81\x01\x91\x90\x91R`@\x01_ T`\xFF\x16\x15a\x0B\xE1W`@Qb\xDA\x8AW`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\r\xA0\x82a\x0FMV[_`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x1Fd`$\x919\x90P_\x84\x82`@Q` \x01a\r\xD0\x92\x91\x90a\x1D5V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_a\r\xEB\x82a\x0F\xE8V[\x90Pa\x0E\x08\x81\x85a\r\xFB\x88a\x10\xD5V[a\x0E\x03a\x11LV[a\x12\x19V[a\x0E$W`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPV[_`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` _`D\x83_\x89Z\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\x0E\xA9W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0F`$\x82\x01Rn\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x90RS\x11Q`\x8A\x1B`D\x82\x01R`d\x01a\x03\x7FV[PPPPV[_T`\x01`\x01`\xA0\x1B\x03\x163\x14a\tDW`@Qc\x11\x8C\xDA\xA7`\xE0\x1B\x81R3`\x04\x82\x01R`$\x01a\x03\x7FV[_\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x80Q\x82Q_\x91\x14\x80\x15a\x0FDWP\x81` \x01Q\x83` \x01Q\x14[\x90P[\x92\x91PPV[\x80Q` \x82\x01Q_\x91_\x80Q` a\x1F\x88\x839\x81Q\x91R\x91\x15\x90\x15\x16\x15a\x0FsWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x0F\xE3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x7FV[PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x10\x05\x83a\x12\xF9V[\x90P_\x80Q` a\x1F\x88\x839\x81Q\x91R`\x03_\x82\x84\x85\t\x90P\x82\x80a\x10,Wa\x10,a\x1DIV[\x84\x82\t\x90P\x82\x80a\x10?Wa\x10?a\x1DIV[\x82\x82\x08\x90P_\x80a\x10O\x83a\x15\x02V[\x92P\x90P[\x80a\x10\xB8W\x84\x80a\x10gWa\x10ga\x1DIV[`\x01\x87\x08\x95P\x84\x80a\x10{Wa\x10{a\x1DIV[\x86\x87\t\x92P\x84\x80a\x10\x8EWa\x10\x8Ea\x1DIV[\x86\x84\t\x92P\x84\x80a\x10\xA1Wa\x10\xA1a\x1DIV[\x84\x84\x08\x92Pa\x10\xAF\x83a\x15\x02V[\x92P\x90Pa\x10TV[P`@\x80Q\x80\x82\x01\x90\x91R\x94\x85R` \x85\x01RP\x91\x94\x93PPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x10\xFCWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01_\x80Q` a\x1F\x88\x839\x81Q\x91R\x84` \x01Qa\x11-\x91\x90a\x1D]V[a\x11D\x90_\x80Q` a\x1F\x88\x839\x81Q\x91Ra\x1C\xA1V[\x90R\x92\x91PPV[a\x11s`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[_\x80_`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x12\xEBW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x03\x7FV[P\x15\x15\x90P[\x94\x93PPPPV[_\x80a\x13\x04\x83a\x15\xF9V[\x80Q\x90\x91P`0\x81\x14a\x13\x19Wa\x13\x19a\x1D|V[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x133Wa\x133a\x19\xEDV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x13]W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_[\x82\x81\x10\x15a\x13\xCCW\x83`\x01a\x13w\x83\x86a\x1C\xA1V[a\x13\x81\x91\x90a\x1C\xA1V[\x81Q\x81\x10a\x13\x91Wa\x13\x91a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x13\xAEWa\x13\xAEa\x1D\x90V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x13bV[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R_\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P_[\x82\x81\x10\x15a\x14\\W\x83\x81a\x14\x08\x85\x88a\x1C\xA1V[a\x14\x12\x91\x90a\x1C+V[\x81Q\x81\x10a\x14\"Wa\x14\"a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x14BWa\x14Ba\x1D\x90V[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x13\xF4V[P_a\x14g\x82a\x19CV[\x90Pa\x01\0_\x80Q` a\x1F\x88\x839\x81Q\x91R_a\x14\x85\x86\x89a\x1C\xA1V[\x90P_[\x81\x81\x10\x15a\x14\xF2W_\x88`\x01a\x14\x9F\x84\x86a\x1C\xA1V[a\x14\xA9\x91\x90a\x1C\xA1V[\x81Q\x81\x10a\x14\xB9Wa\x14\xB9a\x1D\x90V[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x14\xD1Wa\x14\xD1a\x1DIV[\x85\x87\t\x95P\x83\x80a\x14\xE4Wa\x14\xE4a\x1DIV[\x81\x87\x08\x95PP`\x01\x01a\x14\x89V[P\x92\x9A\x99PPPPPPPPPPV[_\x80_\x80_\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P__\x80Q` a\x1F\x88\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x87``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x94PP_Q\x92P\x83a\x15\xBFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x7FV[\x80`\x01\x84\x90\x1B\x11\x15a\x15\xD8Wa\x15\xD5\x83\x82a\x1C\xA1V[\x92P[\x80\x80a\x15\xE6Wa\x15\xE6a\x1DIV[\x83\x84\t\x96\x90\x96\x14\x96\x91\x95P\x90\x93PPPPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90_\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x169\x92\x91\x90a\x1D5V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x16`\x92\x91\x90a\x1D\xA4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x16\x82\x91\x90a\x1D\xCEV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x16\xAC\x90\x83\x90\x83\x90` \x01a\x1D\xE6V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90_`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17\x1CWa\x17\x1Ca\x19\xEDV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17FW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_\x82`@Q` \x01a\x17]\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_[\x81Q\x81\x10\x15a\x17\xC6W\x81\x81\x81Q\x81\x10a\x17\x8BWa\x17\x8Ba\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x17\xA8Wa\x17\xA8a\x1D\x90V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x17pV[P_\x84`@Q` \x01a\x17\xDB\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R_\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x18mW_\x83\x82\x81Q\x81\x10a\x18\x14Wa\x18\x14a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x181Wa\x181a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x18R\x92\x91\x90a\x1E\nV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x17\xF9V[P\x86\x88\x87`@Q` \x01a\x18\x83\x93\x92\x91\x90a\x1E.V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x18\xB1\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P_[a\x18\xD1\x8A`\xFF\x8D\x16a\x1C\xA1V[\x81\x10\x15a\x192W\x82\x81\x81Q\x81\x10a\x18\xEAWa\x18\xEAa\x1D\x90V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x19\x04\x83\x8Da\x1C+V[\x81Q\x81\x10a\x19\x14Wa\x19\x14a\x1D\x90V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x18\xC4V[P\x91\x9B\x9APPPPPPPPPPPV[_\x80\x80[\x83Q\x81\x10\x15a\x19\xA3W\x83\x81\x81Q\x81\x10a\x19bWa\x19ba\x1D\x90V[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x19z\x91\x90a\x1EaV[a\x19\x85\x90`\x02a\x1FXV[a\x19\x8F\x91\x90a\x1EaV[a\x19\x99\x90\x83a\x1C+V[\x91P`\x01\x01a\x19GV[P\x92\x91PPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x19\xC0W_\x80\xFD[\x91\x90PV[_\x80`@\x83\x85\x03\x12\x15a\x19\xD6W_\x80\xFD[a\x19\xDF\x83a\x19\xAAV[\x94` \x93\x90\x93\x015\x93PPPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[_`\x80\x82\x84\x03\x12\x15a\x1A\x11W_\x80\xFD[`@Q`\x80\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A@WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[\x80`@RP\x80\x91P\x825\x81R` \x83\x015` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[_`@\x82\x84\x03\x12\x15a\x1A\x81W_\x80\xFD[`@Q`@\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A\xB0WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x80_\x80a\x01 \x85\x87\x03\x12\x15a\x1A\xDEW_\x80\xFD[a\x1A\xE8\x86\x86a\x1A\x01V[\x93Pa\x1A\xF7\x86`\x80\x87\x01a\x1AqV[\x92Pa\x1B\x06\x86`\xC0\x87\x01a\x1AqV[\x91Pa\x01\0\x85\x015a\xFF\xFF\x81\x16\x81\x14a\x1B\x1DW_\x80\xFD[\x93\x96\x92\x95P\x90\x93PPV[_` \x82\x84\x03\x12\x15a\x1B8W_\x80\xFD[a\x0FD\x82a\x19\xAAV[_\x80_a\x01\0\x84\x86\x03\x12\x15a\x1BTW_\x80\xFD[a\x1B^\x85\x85a\x1A\x01V[\x92Pa\x1Bm\x85`\x80\x86\x01a\x1AqV[\x91Pa\x1B|\x85`\xC0\x86\x01a\x1AqV[\x90P\x92P\x92P\x92V[_`\x80\x82\x84\x03\x12\x15a\x1B\x95W_\x80\xFD[a\x0FD\x83\x83a\x1A\x01V[_` \x82\x84\x03\x12\x15a\x1B\xAFW_\x80\xFD[P5\x91\x90PV[cNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[\x83\x15\x15\x81R``\x81\x01`\x02\x84\x10a\x1B\xEFWcNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[` \x82\x01\x93\x90\x93R`@\x01R\x91\x90PV[_` \x82\x84\x03\x12\x15a\x1C\x10W_\x80\xFD[PQ\x91\x90PV[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x80\x82\x01\x80\x82\x11\x15a\x0FGWa\x0FGa\x1C\x17V[`\x01`\x01`\xA0\x1B\x03\x85\x16\x81Ra\x01\0\x81\x01a\x1C}` \x83\x01\x86\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x83Q`\xA0\x83\x01R` \x84\x01Q`\xC0\x83\x01Ra\xFF\xFF\x83\x16`\xE0\x83\x01R\x95\x94PPPPPV[\x81\x81\x03\x81\x81\x11\x15a\x0FGWa\x0FGa\x1C\x17V[`\x01`\x01`\xA0\x1B\x03\x84\x16\x81R`\xE0\x81\x01a\x1C\xF2` \x83\x01\x85\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x82Q`\xA0\x83\x01R` \x83\x01Q`\xC0\x83\x01Ra\x12\xF1V[_\x81Q_[\x81\x81\x10\x15a\x1D'W` \x81\x85\x01\x81\x01Q\x86\x83\x01R\x01a\x1D\rV[P_\x93\x01\x92\x83RP\x90\x91\x90PV[_a\x12\xF1a\x1DC\x83\x86a\x1D\x08V[\x84a\x1D\x08V[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a\x1DwWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V[cNH{q`\xE0\x1B_R`\x01`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[_a\x1D\xAF\x82\x85a\x1D\x08V[_\x81R`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16`\x01\x84\x01RPP`\x02\x01\x91\x90PV[_a\x1D\xD9\x82\x84a\x1D\x08V[_\x81R`\x01\x01\x93\x92PPPV[_a\x1D\xF1\x82\x85a\x1D\x08V[`\x01`\x01`\xF0\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x02\x01\x91\x90PV[_a\x1E\x15\x82\x85a\x1D\x08V[`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x01\x01\x91\x90PV[_a\x1E9\x82\x86a\x1D\x08V[`\x01`\x01`\xF8\x1B\x03\x19\x94\x90\x94\x16\x84RPP`\x01`\x01`\xF0\x1B\x03\x19\x16`\x01\x82\x01R`\x03\x01\x91\x90PV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0FGWa\x0FGa\x1C\x17V[`\x01\x81\x81[\x80\x85\x11\x15a\x1E\xB2W\x81_\x19\x04\x82\x11\x15a\x1E\x98Wa\x1E\x98a\x1C\x17V[\x80\x85\x16\x15a\x1E\xA5W\x91\x81\x02\x91[\x93\x84\x1C\x93\x90\x80\x02\x90a\x1E}V[P\x92P\x92\x90PV[_\x82a\x1E\xC8WP`\x01a\x0FGV[\x81a\x1E\xD4WP_a\x0FGV[\x81`\x01\x81\x14a\x1E\xEAW`\x02\x81\x14a\x1E\xF4Wa\x1F\x10V[`\x01\x91PPa\x0FGV[`\xFF\x84\x11\x15a\x1F\x05Wa\x1F\x05a\x1C\x17V[PP`\x01\x82\x1Ba\x0FGV[P` \x83\x10a\x013\x83\x10\x16`N\x84\x10`\x0B\x84\x10\x16\x17\x15a\x1F3WP\x81\x81\na\x0FGV[a\x1F=\x83\x83a\x1ExV[\x80_\x19\x04\x82\x11\x15a\x1FPWa\x1FPa\x1C\x17V[\x02\x93\x92PPPV[_a\x0FD\x83\x83a\x1E\xBAV\xFEBLS_SIG_BN254G1_XMD:KECCAK_NCTH_NUL_0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\xA1dsolcC\0\x08\x17\0\n"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15b\0\0\x10W_\x80\xFD[P`@Qb\0\"\xA98\x03\x80b\0\"\xA9\x839\x81\x01`@\x81\x90Rb\0\x003\x91b\0\x02AV[\x80`\x01`\x01`\xA0\x1B\x03\x81\x16b\0\0bW`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R_`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[b\0\0m\x81b\0\0\xC1V[Pb\0\0xb\0\x01\x10V[P`\x08\x80T`\x01`\x01`\xA0\x1B\x03\x94\x85\x16`\x01`\x01`\xA0\x1B\x03\x19\x91\x82\x16\x17\x90\x91U`\x02\x80T\x93\x90\x94\x16\x92\x81\x16\x92\x90\x92\x17\x90\x92U`\t\x91\x90\x91U`\n\x80T\x90\x91\x163\x17\x90Ub\0\x02\x92V[_\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x80Th\x01\0\0\0\0\0\0\0\0\x81\x04`\xFF\x16\x15\x90`\x01`\x01`@\x1B\x03\x16_\x81\x15\x80\x15b\0\x01ZWP\x82[\x90P_\x82`\x01`\x01`@\x1B\x03\x16`\x01\x14\x80\x15b\0\x01vWP0;\x15[\x90P\x81\x15\x80\x15b\0\x01\x85WP\x80\x15[\x15b\0\x01\xA4W`@Qc\xF9.\xE8\xA9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84T`\x01`\x01`@\x1B\x03\x19\x16`\x01\x17\x85U\x83\x15b\0\x01\xD3W\x84T`\xFF`@\x1B\x19\x16h\x01\0\0\0\0\0\0\0\0\x17\x85U[C`\x01U\x83\x15b\0\x02\x1EW\x84T`\xFF`@\x1B\x19\x16\x85U`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x01`@Q\x80\x91\x03\x90\xA1[PPPPPV[\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14b\0\x02\x9D\xF9\xB5\x14a\x01fW\x80cM\x99\xDD\x16\x14a\x01\x82W[_\x80\xFD[a\x01>a\x0196`\x04a\x1A\x1AV[a\x02\xF2V[\0[a\x01>a\x01N6`\x04a\x1B\x1FV[a\x04sV[a\x01>a\x01a6`\x04a\x1B}V[a\x05\xDBV[a\x01o`\x01T\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x01>a\x01\x906`\x04a\x1A\x1AV[a\x06\xDCV[a\x01>a\x01\xA36`\x04a\x1B\x96V[a\x08HV[a\x01>a\t\x07V[a\x01>a\t\x88V[a\x01>a\t\x9BV[_T`\x01`\x01`\xA0\x1B\x03\x16[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01yV[a\x01oa\x01\xF26`\x04a\x1B\xDAV[a\n\x9FV[`\x08Ta\x01\xCC\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x01o`\tT\x81V[a\x01>a\x02!6`\x04a\x1B}V[a\n\xF9V[a\x02Ha\x0246`\x04a\x1B\xF4V[`\x04` R_\x90\x81R`@\x90 T`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01a\x01yV[`\x02Ta\x01\xCC\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x01oa\x02y6`\x04a\x1B}V[`\x05` R_\x90\x81R`@\x90 T\x81V[a\x01>a\x02\x986`\x04a\x1B}V[a\x0B\xFCV[`\nTa\x01\xCC\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x02\xE3a\x02\xBE6`\x04a\x1B}V[`\x03` R_\x90\x81R`@\x90 \x80T`\x01\x90\x91\x01T`\xFF\x80\x83\x16\x92a\x01\0\x90\x04\x16\x90\x83V[`@Qa\x01y\x93\x92\x91\x90a\x1C\x1FV[a\x02\xFB\x82a\x0C9V[a\x03\x04\x82a\x0CqV[`\x08T`@Qcn\xB1v\x9F`\xE1\x1B\x81R3`\x04\x82\x01R0`$\x82\x01R_\x91`\x01`\x01`\xA0\x1B\x03\x16\x90c\xDDb\xED>\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03PW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03t\x91\x90a\x1CUV[\x90P\x81\x81\x10\x15a\x03\xA6W`@Qc\x05Ce\xBB`\xE3\x1B\x81R`\x04\x81\x01\x82\x90R`$\x81\x01\x83\x90R`D\x01[`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x03` R`@\x81 `\x01\x01\x80T\x84\x92\x90a\x03\xD0\x90\x84\x90a\x1C\x80V[\x90\x91UPP`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 \x80T\x84\x92\x90a\x04\x07\x90\x84\x90a\x1C\x80V[\x90\x91UPP`\x08Ta\x04$\x90`\x01`\x01`\xA0\x1B\x03\x1630\x85a\x0C\xA7V[`@\x80Q3\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R\x90\x81\x01\x83\x90R\x7F\xE5T\x1Aka\x03\xD4\xFA~\x02\x1E\xD5O\xAD9\xC6o'\xA7k\xD1=7L\xF6$\n\xE6\xBD\x0B\xB7+\x90``\x01[`@Q\x80\x91\x03\x90\xA1PPPV[a\x04|3a\r8V[a\x04\x85\x83a\rqV[a\x04\x8E\x84a\r\xB0V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x04\xB7\x81\x84\x87a\r\xECV[a'\x10\x82a\xFF\xFF\x16\x11\x15a\x04\xDEW`@Qc\xDC\x81\xDB\x85`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x04_a\x04\xEC\x88a\n\x9FV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP`@Q\x80``\x01`@R\x80`\x01\x15\x15\x81R` \x01_`\x01\x81\x11\x15a\x055Wa\x055a\x1C\x0BV[\x81R_` \x91\x82\x01\x81\x90R3\x81R`\x03\x82R`@\x90 \x82Q\x81T\x90\x15\x15`\xFF\x19\x82\x16\x81\x17\x83U\x92\x84\x01Q\x91\x92\x83\x91a\xFF\0\x19\x90\x91\x16a\xFF\xFF\x19\x90\x91\x16\x17a\x01\0\x83`\x01\x81\x11\x15a\x05\x87Wa\x05\x87a\x1C\x0BV[\x02\x17\x90UP`@\x91\x82\x01Q`\x01\x90\x91\x01UQ\x7F\xF6\xE85\x9CWR\x0BF\x964sk\xFC;\xB7\xEC\\\xBD\x1A\x0B\xD2\x8B\x10\xA8'W\x93\xBBs\x0By\x7F\x90a\x05\xCC\x903\x90\x88\x90\x88\x90\x87\x90a\x1C\x93V[`@Q\x80\x91\x03\x90\xA1PPPPPV[3_\x90\x81R`\x05` R`@\x81 T\x90\x81\x90\x03a\x06\x0BW`@Qcy)\x8AS`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x80B\x10\x15a\x06,W`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x06pW`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x84\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x91\x90\x91U`\x08Ta\x06\xA6\x92\x16\x90\x83a\x0E\x81V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01a\x04fV[a\x06\xE5\x82a\x0C9V[a\x06\xEE\x82a\x0CqV[`\x013_\x90\x81R`\x03` R`@\x90 Ta\x01\0\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x07\x18Wa\x07\x18a\x1C\x0BV[\x03a\x076W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 T\x81\x81\x10\x15a\x07}W`@Qc\x92fSQ`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01a\x03\x9DV[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 \x80T\x84\x92\x90a\x07\xAF\x90\x84\x90a\x1C\xF6V[\x92PP\x81\x90UP`@Q\x80`@\x01`@R\x80\x83\x81R` \x01`\tTBa\x07\xD5\x91\x90a\x1C\x80V[\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16_\x81\x81R`\x07` \x90\x81R`@\x80\x83 3\x80\x85R\x90\x83R\x92\x81\x90 \x85Q\x81U\x94\x82\x01Q`\x01\x90\x95\x01\x94\x90\x94U\x83Q\x91\x82R\x81\x01\x91\x90\x91R\x90\x81\x01\x83\x90R\x7FM\x10\xBD\x04\x97u\xC7{\xD7\xF2U\x19Z\xFB\xA5\x08\x80(\xEC\xB3\xC7\xC2w\xD3\x93\xCC\xFFy4\xF2\xF9,\x90``\x01a\x04fV[a\x08Q3a\x0C9V[a\x08Z3a\x0CqV[a\x08c\x82a\rqV[a\x08l\x83a\r\xB0V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x08\x95\x81\x83\x86a\r\xECV[`\x01`\x04_a\x08\xA3\x87a\n\x9FV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x80\xD8\xA4\xA1f3(\xA9\x98\xD4U[\xA2\x1D\x8B\xBAn\xF1Wj\x8C^\x9D'\xF9\xC5E\xF1\xA3\xD5+\x1D3\x85\x85`@Qa\x08\xF9\x93\x92\x91\x90a\x1D\tV[`@Q\x80\x91\x03\x90\xA1PPPPV[a\t\x103a\x0C9V[a\t\x193a\x0CqV[3_\x90\x81R`\x03` R`@\x90 \x80Ta\xFF\0\x19\x16a\x01\0\x17\x90U`\tTa\tA\x90Ba\x1C\x80V[3_\x81\x81R`\x05` \x90\x81R`@\x91\x82\x90 \x93\x90\x93UQ\x90\x81R\x7F\xFB$0ST\xC8wb\xD5WHz\xE4\xA5d\xE8\xD0>\xCB\xB9\xA9}\xD8\xAF\xFF\x8E\x1Fo\xCA\xF0\xDD\x16\x91\x01`@Q\x80\x91\x03\x90\xA1V[a\t\x90a\x0F\x04V[a\t\x99_a\x0F0V[V[\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x80T`\x01`@\x1B\x81\x04`\xFF\x16\x15\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x81\x15\x80\x15a\t\xE0WP\x82[\x90P_\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01\x14\x80\x15a\t\xFCWP0;\x15[\x90P\x81\x15\x80\x15a\n\nWP\x80\x15[\x15a\n(W`@Qc\xF9.\xE8\xA9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16`\x01\x17\x85U\x83\x15a\nRW\x84T`\xFF`@\x1B\x19\x16`\x01`@\x1B\x17\x85U[C`\x01U\x83\x15a\n\x98W\x84T`\xFF`@\x1B\x19\x16\x85U`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x01a\x05\xCCV[PPPPPV[_\x81_\x01Q\x82` \x01Q\x83`@\x01Q\x84``\x01Q`@Q` \x01a\n\xDC\x94\x93\x92\x91\x90\x93\x84R` \x84\x01\x92\x90\x92R`@\x83\x01R``\x82\x01R`\x80\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x07` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 `\x01\x01TB\x10\x15a\x0B?W`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x07` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x0B\x83W`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x83\x16_\x90\x81R`\x07` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x82\x81U`\x01\x01\x91\x90\x91U`\x08Ta\x0B\xBF\x92\x16\x90\x83a\x0E\x81V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01`@Q\x80\x91\x03\x90\xA1PPV[a\x0C\x04a\x0F\x04V[`\x01`\x01`\xA0\x1B\x03\x81\x16a\x0C-W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R_`\x04\x82\x01R`$\x01a\x03\x9DV[a\x0C6\x81a\x0F0V[PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x03` R`@\x90 T`\xFF\x16a\x0C6W`@QcW\xFD\xF4\x0B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x05` R`@\x90 T\x15a\x0C6W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R\x82`D\x82\x01R` _`d\x83_\x8AZ\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\n\x98W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x94\x93\xD3W\xD1\x90RS\x11Q`b\x1B`D\x82\x01R`d\x01a\x03\x9DV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x03` R`@\x90 T`\xFF\x16\x15a\x0C6W`@Qc\x13.~\xFB`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\r\x8E\x82\x82a\x0F\x7FV[\x15a\r\xACW`@Qc\x06\xCFC\x8F`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[`\x04_a\r\xBC\x83a\n\x9FV[\x81R` \x81\x01\x91\x90\x91R`@\x01_ T`\xFF\x16\x15a\x0C6W`@Qb\xDA\x8AW`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\r\xF5\x82a\x0F\xA2V[_`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x1F\xB9`$\x919\x90P_\x84\x82`@Q` \x01a\x0E%\x92\x91\x90a\x1D\x8AV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_a\x0E@\x82a\x10=V[\x90Pa\x0E]\x81\x85a\x0EP\x88a\x11*V[a\x0EXa\x11\xA1V[a\x12nV[a\x0EyW`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPV[_`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` _`D\x83_\x89Z\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\x0E\xFEW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0F`$\x82\x01Rn\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x90RS\x11Q`\x8A\x1B`D\x82\x01R`d\x01a\x03\x9DV[PPPPV[_T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t\x99W`@Qc\x11\x8C\xDA\xA7`\xE0\x1B\x81R3`\x04\x82\x01R`$\x01a\x03\x9DV[_\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x80Q\x82Q_\x91\x14\x80\x15a\x0F\x99WP\x81` \x01Q\x83` \x01Q\x14[\x90P[\x92\x91PPV[\x80Q` \x82\x01Q_\x91_\x80Q` a\x1F\xDD\x839\x81Q\x91R\x91\x15\x90\x15\x16\x15a\x0F\xC8WPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x108W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x9DV[PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x10Z\x83a\x13NV[\x90P_\x80Q` a\x1F\xDD\x839\x81Q\x91R`\x03_\x82\x84\x85\t\x90P\x82\x80a\x10\x81Wa\x10\x81a\x1D\x9EV[\x84\x82\t\x90P\x82\x80a\x10\x94Wa\x10\x94a\x1D\x9EV[\x82\x82\x08\x90P_\x80a\x10\xA4\x83a\x15WV[\x92P\x90P[\x80a\x11\rW\x84\x80a\x10\xBCWa\x10\xBCa\x1D\x9EV[`\x01\x87\x08\x95P\x84\x80a\x10\xD0Wa\x10\xD0a\x1D\x9EV[\x86\x87\t\x92P\x84\x80a\x10\xE3Wa\x10\xE3a\x1D\x9EV[\x86\x84\t\x92P\x84\x80a\x10\xF6Wa\x10\xF6a\x1D\x9EV[\x84\x84\x08\x92Pa\x11\x04\x83a\x15WV[\x92P\x90Pa\x10\xA9V[P`@\x80Q\x80\x82\x01\x90\x91R\x94\x85R` \x85\x01RP\x91\x94\x93PPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x11QWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01_\x80Q` a\x1F\xDD\x839\x81Q\x91R\x84` \x01Qa\x11\x82\x91\x90a\x1D\xB2V[a\x11\x99\x90_\x80Q` a\x1F\xDD\x839\x81Q\x91Ra\x1C\xF6V[\x90R\x92\x91PPV[a\x11\xC8`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[_\x80_`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x13@W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x03\x9DV[P\x15\x15\x90P[\x94\x93PPPPV[_\x80a\x13Y\x83a\x16NV[\x80Q\x90\x91P`0\x81\x14a\x13nWa\x13na\x1D\xD1V[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x13\x88Wa\x13\x88a\x1ABV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x13\xB2W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_[\x82\x81\x10\x15a\x14!W\x83`\x01a\x13\xCC\x83\x86a\x1C\xF6V[a\x13\xD6\x91\x90a\x1C\xF6V[\x81Q\x81\x10a\x13\xE6Wa\x13\xE6a\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x14\x03Wa\x14\x03a\x1D\xE5V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x13\xB7V[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R_\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P_[\x82\x81\x10\x15a\x14\xB1W\x83\x81a\x14]\x85\x88a\x1C\xF6V[a\x14g\x91\x90a\x1C\x80V[\x81Q\x81\x10a\x14wWa\x14wa\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x14\x97Wa\x14\x97a\x1D\xE5V[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x14IV[P_a\x14\xBC\x82a\x19\x98V[\x90Pa\x01\0_\x80Q` a\x1F\xDD\x839\x81Q\x91R_a\x14\xDA\x86\x89a\x1C\xF6V[\x90P_[\x81\x81\x10\x15a\x15GW_\x88`\x01a\x14\xF4\x84\x86a\x1C\xF6V[a\x14\xFE\x91\x90a\x1C\xF6V[\x81Q\x81\x10a\x15\x0EWa\x15\x0Ea\x1D\xE5V[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x15&Wa\x15&a\x1D\x9EV[\x85\x87\t\x95P\x83\x80a\x159Wa\x159a\x1D\x9EV[\x81\x87\x08\x95PP`\x01\x01a\x14\xDEV[P\x92\x9A\x99PPPPPPPPPPV[_\x80_\x80_\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P__\x80Q` a\x1F\xDD\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x87``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x94PP_Q\x92P\x83a\x16\x14W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x9DV[\x80`\x01\x84\x90\x1B\x11\x15a\x16-Wa\x16*\x83\x82a\x1C\xF6V[\x92P[\x80\x80a\x16;Wa\x16;a\x1D\x9EV[\x83\x84\t\x96\x90\x96\x14\x96\x91\x95P\x90\x93PPPPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90_\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x16\x8E\x92\x91\x90a\x1D\x8AV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x16\xB5\x92\x91\x90a\x1D\xF9V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x16\xD7\x91\x90a\x1E#V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x17\x01\x90\x83\x90\x83\x90` \x01a\x1E;V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90_`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17qWa\x17qa\x1ABV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17\x9BW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_\x82`@Q` \x01a\x17\xB2\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_[\x81Q\x81\x10\x15a\x18\x1BW\x81\x81\x81Q\x81\x10a\x17\xE0Wa\x17\xE0a\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x17\xFDWa\x17\xFDa\x1D\xE5V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x17\xC5V[P_\x84`@Q` \x01a\x180\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R_\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x18\xC2W_\x83\x82\x81Q\x81\x10a\x18iWa\x18ia\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x18\x86Wa\x18\x86a\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x18\xA7\x92\x91\x90a\x1E_V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x18NV[P\x86\x88\x87`@Q` \x01a\x18\xD8\x93\x92\x91\x90a\x1E\x83V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x19\x06\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P_[a\x19&\x8A`\xFF\x8D\x16a\x1C\xF6V[\x81\x10\x15a\x19\x87W\x82\x81\x81Q\x81\x10a\x19?Wa\x19?a\x1D\xE5V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x19Y\x83\x8Da\x1C\x80V[\x81Q\x81\x10a\x19iWa\x19ia\x1D\xE5V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x19\x19V[P\x91\x9B\x9APPPPPPPPPPPV[_\x80\x80[\x83Q\x81\x10\x15a\x19\xF8W\x83\x81\x81Q\x81\x10a\x19\xB7Wa\x19\xB7a\x1D\xE5V[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x19\xCF\x91\x90a\x1E\xB6V[a\x19\xDA\x90`\x02a\x1F\xADV[a\x19\xE4\x91\x90a\x1E\xB6V[a\x19\xEE\x90\x83a\x1C\x80V[\x91P`\x01\x01a\x19\x9CV[P\x92\x91PPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x1A\x15W_\x80\xFD[\x91\x90PV[_\x80`@\x83\x85\x03\x12\x15a\x1A+W_\x80\xFD[a\x1A4\x83a\x19\xFFV[\x94` \x93\x90\x93\x015\x93PPPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[_`\x80\x82\x84\x03\x12\x15a\x1AfW_\x80\xFD[`@Q`\x80\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A\x95WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[\x80`@RP\x80\x91P\x825\x81R` \x83\x015` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[_`@\x82\x84\x03\x12\x15a\x1A\xD6W_\x80\xFD[`@Q`@\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1B\x05WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x80_\x80a\x01 \x85\x87\x03\x12\x15a\x1B3W_\x80\xFD[a\x1B=\x86\x86a\x1AVV[\x93Pa\x1BL\x86`\x80\x87\x01a\x1A\xC6V[\x92Pa\x1B[\x86`\xC0\x87\x01a\x1A\xC6V[\x91Pa\x01\0\x85\x015a\xFF\xFF\x81\x16\x81\x14a\x1BrW_\x80\xFD[\x93\x96\x92\x95P\x90\x93PPV[_` \x82\x84\x03\x12\x15a\x1B\x8DW_\x80\xFD[a\x0F\x99\x82a\x19\xFFV[_\x80_a\x01\0\x84\x86\x03\x12\x15a\x1B\xA9W_\x80\xFD[a\x1B\xB3\x85\x85a\x1AVV[\x92Pa\x1B\xC2\x85`\x80\x86\x01a\x1A\xC6V[\x91Pa\x1B\xD1\x85`\xC0\x86\x01a\x1A\xC6V[\x90P\x92P\x92P\x92V[_`\x80\x82\x84\x03\x12\x15a\x1B\xEAW_\x80\xFD[a\x0F\x99\x83\x83a\x1AVV[_` \x82\x84\x03\x12\x15a\x1C\x04W_\x80\xFD[P5\x91\x90PV[cNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[\x83\x15\x15\x81R``\x81\x01`\x02\x84\x10a\x1CDWcNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[` \x82\x01\x93\x90\x93R`@\x01R\x91\x90PV[_` \x82\x84\x03\x12\x15a\x1CeW_\x80\xFD[PQ\x91\x90PV[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x80\x82\x01\x80\x82\x11\x15a\x0F\x9CWa\x0F\x9Ca\x1ClV[`\x01`\x01`\xA0\x1B\x03\x85\x16\x81Ra\x01\0\x81\x01a\x1C\xD2` \x83\x01\x86\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x83Q`\xA0\x83\x01R` \x84\x01Q`\xC0\x83\x01Ra\xFF\xFF\x83\x16`\xE0\x83\x01R\x95\x94PPPPPV[\x81\x81\x03\x81\x81\x11\x15a\x0F\x9CWa\x0F\x9Ca\x1ClV[`\x01`\x01`\xA0\x1B\x03\x84\x16\x81R`\xE0\x81\x01a\x1DG` \x83\x01\x85\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x82Q`\xA0\x83\x01R` \x83\x01Q`\xC0\x83\x01Ra\x13FV[_\x81Q_[\x81\x81\x10\x15a\x1D|W` \x81\x85\x01\x81\x01Q\x86\x83\x01R\x01a\x1DbV[P_\x93\x01\x92\x83RP\x90\x91\x90PV[_a\x13Fa\x1D\x98\x83\x86a\x1D]V[\x84a\x1D]V[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a\x1D\xCCWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V[cNH{q`\xE0\x1B_R`\x01`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[_a\x1E\x04\x82\x85a\x1D]V[_\x81R`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16`\x01\x84\x01RPP`\x02\x01\x91\x90PV[_a\x1E.\x82\x84a\x1D]V[_\x81R`\x01\x01\x93\x92PPPV[_a\x1EF\x82\x85a\x1D]V[`\x01`\x01`\xF0\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x02\x01\x91\x90PV[_a\x1Ej\x82\x85a\x1D]V[`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x01\x01\x91\x90PV[_a\x1E\x8E\x82\x86a\x1D]V[`\x01`\x01`\xF8\x1B\x03\x19\x94\x90\x94\x16\x84RPP`\x01`\x01`\xF0\x1B\x03\x19\x16`\x01\x82\x01R`\x03\x01\x91\x90PV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0F\x9CWa\x0F\x9Ca\x1ClV[`\x01\x81\x81[\x80\x85\x11\x15a\x1F\x07W\x81_\x19\x04\x82\x11\x15a\x1E\xEDWa\x1E\xEDa\x1ClV[\x80\x85\x16\x15a\x1E\xFAW\x91\x81\x02\x91[\x93\x84\x1C\x93\x90\x80\x02\x90a\x1E\xD2V[P\x92P\x92\x90PV[_\x82a\x1F\x1DWP`\x01a\x0F\x9CV[\x81a\x1F)WP_a\x0F\x9CV[\x81`\x01\x81\x14a\x1F?W`\x02\x81\x14a\x1FIWa\x1FeV[`\x01\x91PPa\x0F\x9CV[`\xFF\x84\x11\x15a\x1FZWa\x1FZa\x1ClV[PP`\x01\x82\x1Ba\x0F\x9CV[P` \x83\x10a\x013\x83\x10\x16`N\x84\x10`\x0B\x84\x10\x16\x17\x15a\x1F\x88WP\x81\x81\na\x0F\x9CV[a\x1F\x92\x83\x83a\x1E\xCDV[\x80_\x19\x04\x82\x11\x15a\x1F\xA5Wa\x1F\xA5a\x1ClV[\x02\x93\x92PPPV[_a\x0F\x99\x83\x83a\x1F\x0FV\xFEBLS_SIG_BN254G1_XMD:KECCAK_NCTH_NUL_0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\xA1dsolcC\0\x08\x17\0\n"; /// The bytecode of the contract. pub static STAKETABLE_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static(__BYTECODE); #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x0FW_\x80\xFD[P`\x046\x10a\x01\x1CW_5`\xE0\x1C\x80c\x8D\xA5\xCB[\x11a\0\xA9W\x80c\xB3\xE6\xEB\xD5\x11a\0nW\x80c\xB3\xE6\xEB\xD5\x14a\x02\x1BW\x80c\xB5\xEC\xB3D\x14a\x02MW\x80c\xF2\xFD\xE3\x8B\x14a\x02lW\x80c\xF8Q\xA4@\x14a\x02\x7FW\x80c\xFAR\xC7\xD8\x14a\x02\x92W_\x80\xFD[\x80c\x8D\xA5\xCB[\x14a\x01\xB5W\x80c\x9B0\xA5\xE6\x14a\x01\xD9W\x80c\x9Dv\xEAX\x14a\x01\xECW\x80c\x9E\x9A\x8F1\x14a\x01\xFFW\x80c\xA3\x06j\xAB\x14a\x02\x08W_\x80\xFD[\x80cM\x99\xDD\x16\x11a\0\xEFW\x80cM\x99\xDD\x16\x14a\x01wW\x80cUD\xC2\xF1\x14a\x01\x8AW\x80cj\x91\x1C\xCF\x14a\x01\x9DW\x80cqP\x18\xA6\x14a\x01\xA5W\x80c\x81)\xFC\x1C\x14a\x01\xADW_\x80\xFD[\x80c\x02n@+\x14a\x01 W\x80c\x13\xB9\x05z\x14a\x015W\x80c!@\xFE\xCD\x14a\x01HW\x80c>\x9D\xF9\xB5\x14a\x01[W[_\x80\xFD[a\x013a\x01.6`\x04a\x19\xC5V[a\x02\xD4V[\0[a\x013a\x01C6`\x04a\x1A\xCAV[a\x04\x1EV[a\x013a\x01V6`\x04a\x1B(V[a\x05\x86V[a\x01d`\x01T\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x013a\x01\x856`\x04a\x19\xC5V[a\x06\x87V[a\x013a\x01\x986`\x04a\x1BAV[a\x07\xF3V[a\x013a\x08\xB2V[a\x013a\t3V[a\x013a\tFV[_T`\x01`\x01`\xA0\x1B\x03\x16[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01nV[a\x01da\x01\xE76`\x04a\x1B\x85V[a\nJV[`\x07Ta\x01\xC1\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x01d`\x08T\x81V[a\x013a\x02\x166`\x04a\x1B(V[a\n\xA4V[a\x02=a\x02)6`\x04a\x1B\x9FV[`\x03` R_\x90\x81R`@\x90 T`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01a\x01nV[a\x01da\x02[6`\x04a\x1B(V[`\x04` R_\x90\x81R`@\x90 T\x81V[a\x013a\x02z6`\x04a\x1B(V[a\x0B\xA7V[`\tTa\x01\xC1\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x02\xC5a\x02\xA06`\x04a\x1B(V[`\x02` R_\x90\x81R`@\x90 \x80T`\x01\x90\x91\x01T`\xFF\x80\x83\x16\x92a\x01\0\x90\x04\x16\x90\x83V[`@Qa\x01n\x93\x92\x91\x90a\x1B\xCAV[a\x02\xDD\x82a\x0B\xE4V[a\x02\xE6\x82a\x0C\x1CV[`\x07T`@Qcn\xB1v\x9F`\xE1\x1B\x81R3`\x04\x82\x01R0`$\x82\x01R_\x91`\x01`\x01`\xA0\x1B\x03\x16\x90c\xDDb\xED>\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x032W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03V\x91\x90a\x1C\0V[\x90P\x81\x81\x10\x15a\x03\x88W`@Qc\x05Ce\xBB`\xE3\x1B\x81R`\x04\x81\x01\x82\x90R`$\x81\x01\x83\x90R`D\x01[`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x02` R`@\x81 `\x01\x01\x80T\x84\x92\x90a\x03\xB2\x90\x84\x90a\x1C+V[\x90\x91UPP`\x07Ta\x03\xCF\x90`\x01`\x01`\xA0\x1B\x03\x1630\x85a\x0CRV[`@\x80Q3\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R\x90\x81\x01\x83\x90R\x7F\xE5T\x1Aka\x03\xD4\xFA~\x02\x1E\xD5O\xAD9\xC6o'\xA7k\xD1=7L\xF6$\n\xE6\xBD\x0B\xB7+\x90``\x01[`@Q\x80\x91\x03\x90\xA1PPPV[a\x04'3a\x0C\xE3V[a\x040\x83a\r\x1CV[a\x049\x84a\r[V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x04b\x81\x84\x87a\r\x97V[a'\x10\x82a\xFF\xFF\x16\x11\x15a\x04\x89W`@Qc\xDC\x81\xDB\x85`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x03_a\x04\x97\x88a\nJV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP`@Q\x80``\x01`@R\x80`\x01\x15\x15\x81R` \x01_`\x01\x81\x11\x15a\x04\xE0Wa\x04\xE0a\x1B\xB6V[\x81R_` \x91\x82\x01\x81\x90R3\x81R`\x02\x82R`@\x90 \x82Q\x81T\x90\x15\x15`\xFF\x19\x82\x16\x81\x17\x83U\x92\x84\x01Q\x91\x92\x83\x91a\xFF\0\x19\x90\x91\x16a\xFF\xFF\x19\x90\x91\x16\x17a\x01\0\x83`\x01\x81\x11\x15a\x052Wa\x052a\x1B\xB6V[\x02\x17\x90UP`@\x91\x82\x01Q`\x01\x90\x91\x01UQ\x7F\xF6\xE85\x9CWR\x0BF\x964sk\xFC;\xB7\xEC\\\xBD\x1A\x0B\xD2\x8B\x10\xA8'W\x93\xBBs\x0By\x7F\x90a\x05w\x903\x90\x88\x90\x88\x90\x87\x90a\x1C>V[`@Q\x80\x91\x03\x90\xA1PPPPPV[3_\x90\x81R`\x04` R`@\x81 T\x90\x81\x90\x03a\x05\xB6W`@Qcy)\x8AS`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x80B\x10\x15a\x05\xD7W`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x06\x1BW`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x84\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x91\x90\x91U`\x07Ta\x06Q\x92\x16\x90\x83a\x0E,V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01a\x04\x11V[a\x06\x90\x82a\x0B\xE4V[a\x06\x99\x82a\x0C\x1CV[`\x013_\x90\x81R`\x02` R`@\x90 Ta\x01\0\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x06\xC3Wa\x06\xC3a\x1B\xB6V[\x03a\x06\xE1W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 T\x81\x81\x10\x15a\x07(W`@Qc\x92fSQ`\xE0\x1B\x81R`\x04\x81\x01\x83\x90R`$\x01a\x03\x7FV[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 \x80T\x84\x92\x90a\x07Z\x90\x84\x90a\x1C\xA1V[\x92PP\x81\x90UP`@Q\x80`@\x01`@R\x80\x83\x81R` \x01`\x08TBa\x07\x80\x91\x90a\x1C+V[\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16_\x81\x81R`\x06` \x90\x81R`@\x80\x83 3\x80\x85R\x90\x83R\x92\x81\x90 \x85Q\x81U\x94\x82\x01Q`\x01\x90\x95\x01\x94\x90\x94U\x83Q\x91\x82R\x81\x01\x91\x90\x91R\x90\x81\x01\x83\x90R\x7FM\x10\xBD\x04\x97u\xC7{\xD7\xF2U\x19Z\xFB\xA5\x08\x80(\xEC\xB3\xC7\xC2w\xD3\x93\xCC\xFFy4\xF2\xF9,\x90``\x01a\x04\x11V[a\x07\xFC3a\x0B\xE4V[a\x08\x053a\x0C\x1CV[a\x08\x0E\x82a\r\x1CV[a\x08\x17\x83a\r[V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x08@\x81\x83\x86a\r\x97V[`\x01`\x03_a\x08N\x87a\nJV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x80\xD8\xA4\xA1f3(\xA9\x98\xD4U[\xA2\x1D\x8B\xBAn\xF1Wj\x8C^\x9D'\xF9\xC5E\xF1\xA3\xD5+\x1D3\x85\x85`@Qa\x08\xA4\x93\x92\x91\x90a\x1C\xB4V[`@Q\x80\x91\x03\x90\xA1PPPPV[a\x08\xBB3a\x0B\xE4V[a\x08\xC43a\x0C\x1CV[3_\x90\x81R`\x02` R`@\x90 \x80Ta\xFF\0\x19\x16a\x01\0\x17\x90U`\x08Ta\x08\xEC\x90Ba\x1C+V[3_\x81\x81R`\x04` \x90\x81R`@\x91\x82\x90 \x93\x90\x93UQ\x90\x81R\x7F\xFB$0ST\xC8wb\xD5WHz\xE4\xA5d\xE8\xD0>\xCB\xB9\xA9}\xD8\xAF\xFF\x8E\x1Fo\xCA\xF0\xDD\x16\x91\x01`@Q\x80\x91\x03\x90\xA1V[a\t;a\x0E\xAFV[a\tD_a\x0E\xDBV[V[\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x80T`\x01`@\x1B\x81\x04`\xFF\x16\x15\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x81\x15\x80\x15a\t\x8BWP\x82[\x90P_\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01\x14\x80\x15a\t\xA7WP0;\x15[\x90P\x81\x15\x80\x15a\t\xB5WP\x80\x15[\x15a\t\xD3W`@Qc\xF9.\xE8\xA9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16`\x01\x17\x85U\x83\x15a\t\xFDW\x84T`\xFF`@\x1B\x19\x16`\x01`@\x1B\x17\x85U[C`\x01U\x83\x15a\nCW\x84T`\xFF`@\x1B\x19\x16\x85U`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x01a\x05wV[PPPPPV[_\x81_\x01Q\x82` \x01Q\x83`@\x01Q\x84``\x01Q`@Q` \x01a\n\x87\x94\x93\x92\x91\x90\x93\x84R` \x84\x01\x92\x90\x92R`@\x83\x01R``\x82\x01R`\x80\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 `\x01\x01TB\x10\x15a\n\xEAW`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x0B.W`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x83\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x82\x81U`\x01\x01\x91\x90\x91U`\x07Ta\x0Bj\x92\x16\x90\x83a\x0E,V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01`@Q\x80\x91\x03\x90\xA1PPV[a\x0B\xAFa\x0E\xAFV[`\x01`\x01`\xA0\x1B\x03\x81\x16a\x0B\xD8W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R_`\x04\x82\x01R`$\x01a\x03\x7FV[a\x0B\xE1\x81a\x0E\xDBV[PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x02` R`@\x90 T`\xFF\x16a\x0B\xE1W`@QcW\xFD\xF4\x0B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x04` R`@\x90 T\x15a\x0B\xE1W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R\x82`D\x82\x01R` _`d\x83_\x8AZ\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\nCW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x94\x93\xD3W\xD1\x90RS\x11Q`b\x1B`D\x82\x01R`d\x01a\x03\x7FV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x02` R`@\x90 T`\xFF\x16\x15a\x0B\xE1W`@Qc\x13.~\xFB`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\r9\x82\x82a\x0F*V[\x15a\rWW`@Qc\x06\xCFC\x8F`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[`\x03_a\rg\x83a\nJV[\x81R` \x81\x01\x91\x90\x91R`@\x01_ T`\xFF\x16\x15a\x0B\xE1W`@Qb\xDA\x8AW`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\r\xA0\x82a\x0FMV[_`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x1Fd`$\x919\x90P_\x84\x82`@Q` \x01a\r\xD0\x92\x91\x90a\x1D5V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_a\r\xEB\x82a\x0F\xE8V[\x90Pa\x0E\x08\x81\x85a\r\xFB\x88a\x10\xD5V[a\x0E\x03a\x11LV[a\x12\x19V[a\x0E$W`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPV[_`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` _`D\x83_\x89Z\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\x0E\xA9W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0F`$\x82\x01Rn\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x90RS\x11Q`\x8A\x1B`D\x82\x01R`d\x01a\x03\x7FV[PPPPV[_T`\x01`\x01`\xA0\x1B\x03\x163\x14a\tDW`@Qc\x11\x8C\xDA\xA7`\xE0\x1B\x81R3`\x04\x82\x01R`$\x01a\x03\x7FV[_\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x80Q\x82Q_\x91\x14\x80\x15a\x0FDWP\x81` \x01Q\x83` \x01Q\x14[\x90P[\x92\x91PPV[\x80Q` \x82\x01Q_\x91_\x80Q` a\x1F\x88\x839\x81Q\x91R\x91\x15\x90\x15\x16\x15a\x0FsWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x0F\xE3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x7FV[PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x10\x05\x83a\x12\xF9V[\x90P_\x80Q` a\x1F\x88\x839\x81Q\x91R`\x03_\x82\x84\x85\t\x90P\x82\x80a\x10,Wa\x10,a\x1DIV[\x84\x82\t\x90P\x82\x80a\x10?Wa\x10?a\x1DIV[\x82\x82\x08\x90P_\x80a\x10O\x83a\x15\x02V[\x92P\x90P[\x80a\x10\xB8W\x84\x80a\x10gWa\x10ga\x1DIV[`\x01\x87\x08\x95P\x84\x80a\x10{Wa\x10{a\x1DIV[\x86\x87\t\x92P\x84\x80a\x10\x8EWa\x10\x8Ea\x1DIV[\x86\x84\t\x92P\x84\x80a\x10\xA1Wa\x10\xA1a\x1DIV[\x84\x84\x08\x92Pa\x10\xAF\x83a\x15\x02V[\x92P\x90Pa\x10TV[P`@\x80Q\x80\x82\x01\x90\x91R\x94\x85R` \x85\x01RP\x91\x94\x93PPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x10\xFCWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01_\x80Q` a\x1F\x88\x839\x81Q\x91R\x84` \x01Qa\x11-\x91\x90a\x1D]V[a\x11D\x90_\x80Q` a\x1F\x88\x839\x81Q\x91Ra\x1C\xA1V[\x90R\x92\x91PPV[a\x11s`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[_\x80_`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x12\xEBW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x03\x7FV[P\x15\x15\x90P[\x94\x93PPPPV[_\x80a\x13\x04\x83a\x15\xF9V[\x80Q\x90\x91P`0\x81\x14a\x13\x19Wa\x13\x19a\x1D|V[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x133Wa\x133a\x19\xEDV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x13]W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_[\x82\x81\x10\x15a\x13\xCCW\x83`\x01a\x13w\x83\x86a\x1C\xA1V[a\x13\x81\x91\x90a\x1C\xA1V[\x81Q\x81\x10a\x13\x91Wa\x13\x91a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x13\xAEWa\x13\xAEa\x1D\x90V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x13bV[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R_\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P_[\x82\x81\x10\x15a\x14\\W\x83\x81a\x14\x08\x85\x88a\x1C\xA1V[a\x14\x12\x91\x90a\x1C+V[\x81Q\x81\x10a\x14\"Wa\x14\"a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x14BWa\x14Ba\x1D\x90V[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x13\xF4V[P_a\x14g\x82a\x19CV[\x90Pa\x01\0_\x80Q` a\x1F\x88\x839\x81Q\x91R_a\x14\x85\x86\x89a\x1C\xA1V[\x90P_[\x81\x81\x10\x15a\x14\xF2W_\x88`\x01a\x14\x9F\x84\x86a\x1C\xA1V[a\x14\xA9\x91\x90a\x1C\xA1V[\x81Q\x81\x10a\x14\xB9Wa\x14\xB9a\x1D\x90V[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x14\xD1Wa\x14\xD1a\x1DIV[\x85\x87\t\x95P\x83\x80a\x14\xE4Wa\x14\xE4a\x1DIV[\x81\x87\x08\x95PP`\x01\x01a\x14\x89V[P\x92\x9A\x99PPPPPPPPPPV[_\x80_\x80_\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P__\x80Q` a\x1F\x88\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x87``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x94PP_Q\x92P\x83a\x15\xBFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x7FV[\x80`\x01\x84\x90\x1B\x11\x15a\x15\xD8Wa\x15\xD5\x83\x82a\x1C\xA1V[\x92P[\x80\x80a\x15\xE6Wa\x15\xE6a\x1DIV[\x83\x84\t\x96\x90\x96\x14\x96\x91\x95P\x90\x93PPPPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90_\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x169\x92\x91\x90a\x1D5V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x16`\x92\x91\x90a\x1D\xA4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x16\x82\x91\x90a\x1D\xCEV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x16\xAC\x90\x83\x90\x83\x90` \x01a\x1D\xE6V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90_`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17\x1CWa\x17\x1Ca\x19\xEDV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17FW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_\x82`@Q` \x01a\x17]\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_[\x81Q\x81\x10\x15a\x17\xC6W\x81\x81\x81Q\x81\x10a\x17\x8BWa\x17\x8Ba\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x17\xA8Wa\x17\xA8a\x1D\x90V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x17pV[P_\x84`@Q` \x01a\x17\xDB\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R_\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x18mW_\x83\x82\x81Q\x81\x10a\x18\x14Wa\x18\x14a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x181Wa\x181a\x1D\x90V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x18R\x92\x91\x90a\x1E\nV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x17\xF9V[P\x86\x88\x87`@Q` \x01a\x18\x83\x93\x92\x91\x90a\x1E.V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x18\xB1\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P_[a\x18\xD1\x8A`\xFF\x8D\x16a\x1C\xA1V[\x81\x10\x15a\x192W\x82\x81\x81Q\x81\x10a\x18\xEAWa\x18\xEAa\x1D\x90V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x19\x04\x83\x8Da\x1C+V[\x81Q\x81\x10a\x19\x14Wa\x19\x14a\x1D\x90V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x18\xC4V[P\x91\x9B\x9APPPPPPPPPPPV[_\x80\x80[\x83Q\x81\x10\x15a\x19\xA3W\x83\x81\x81Q\x81\x10a\x19bWa\x19ba\x1D\x90V[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x19z\x91\x90a\x1EaV[a\x19\x85\x90`\x02a\x1FXV[a\x19\x8F\x91\x90a\x1EaV[a\x19\x99\x90\x83a\x1C+V[\x91P`\x01\x01a\x19GV[P\x92\x91PPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x19\xC0W_\x80\xFD[\x91\x90PV[_\x80`@\x83\x85\x03\x12\x15a\x19\xD6W_\x80\xFD[a\x19\xDF\x83a\x19\xAAV[\x94` \x93\x90\x93\x015\x93PPPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[_`\x80\x82\x84\x03\x12\x15a\x1A\x11W_\x80\xFD[`@Q`\x80\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A@WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[\x80`@RP\x80\x91P\x825\x81R` \x83\x015` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[_`@\x82\x84\x03\x12\x15a\x1A\x81W_\x80\xFD[`@Q`@\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A\xB0WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x80_\x80a\x01 \x85\x87\x03\x12\x15a\x1A\xDEW_\x80\xFD[a\x1A\xE8\x86\x86a\x1A\x01V[\x93Pa\x1A\xF7\x86`\x80\x87\x01a\x1AqV[\x92Pa\x1B\x06\x86`\xC0\x87\x01a\x1AqV[\x91Pa\x01\0\x85\x015a\xFF\xFF\x81\x16\x81\x14a\x1B\x1DW_\x80\xFD[\x93\x96\x92\x95P\x90\x93PPV[_` \x82\x84\x03\x12\x15a\x1B8W_\x80\xFD[a\x0FD\x82a\x19\xAAV[_\x80_a\x01\0\x84\x86\x03\x12\x15a\x1BTW_\x80\xFD[a\x1B^\x85\x85a\x1A\x01V[\x92Pa\x1Bm\x85`\x80\x86\x01a\x1AqV[\x91Pa\x1B|\x85`\xC0\x86\x01a\x1AqV[\x90P\x92P\x92P\x92V[_`\x80\x82\x84\x03\x12\x15a\x1B\x95W_\x80\xFD[a\x0FD\x83\x83a\x1A\x01V[_` \x82\x84\x03\x12\x15a\x1B\xAFW_\x80\xFD[P5\x91\x90PV[cNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[\x83\x15\x15\x81R``\x81\x01`\x02\x84\x10a\x1B\xEFWcNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[` \x82\x01\x93\x90\x93R`@\x01R\x91\x90PV[_` \x82\x84\x03\x12\x15a\x1C\x10W_\x80\xFD[PQ\x91\x90PV[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x80\x82\x01\x80\x82\x11\x15a\x0FGWa\x0FGa\x1C\x17V[`\x01`\x01`\xA0\x1B\x03\x85\x16\x81Ra\x01\0\x81\x01a\x1C}` \x83\x01\x86\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x83Q`\xA0\x83\x01R` \x84\x01Q`\xC0\x83\x01Ra\xFF\xFF\x83\x16`\xE0\x83\x01R\x95\x94PPPPPV[\x81\x81\x03\x81\x81\x11\x15a\x0FGWa\x0FGa\x1C\x17V[`\x01`\x01`\xA0\x1B\x03\x84\x16\x81R`\xE0\x81\x01a\x1C\xF2` \x83\x01\x85\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x82Q`\xA0\x83\x01R` \x83\x01Q`\xC0\x83\x01Ra\x12\xF1V[_\x81Q_[\x81\x81\x10\x15a\x1D'W` \x81\x85\x01\x81\x01Q\x86\x83\x01R\x01a\x1D\rV[P_\x93\x01\x92\x83RP\x90\x91\x90PV[_a\x12\xF1a\x1DC\x83\x86a\x1D\x08V[\x84a\x1D\x08V[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a\x1DwWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V[cNH{q`\xE0\x1B_R`\x01`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[_a\x1D\xAF\x82\x85a\x1D\x08V[_\x81R`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16`\x01\x84\x01RPP`\x02\x01\x91\x90PV[_a\x1D\xD9\x82\x84a\x1D\x08V[_\x81R`\x01\x01\x93\x92PPPV[_a\x1D\xF1\x82\x85a\x1D\x08V[`\x01`\x01`\xF0\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x02\x01\x91\x90PV[_a\x1E\x15\x82\x85a\x1D\x08V[`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x01\x01\x91\x90PV[_a\x1E9\x82\x86a\x1D\x08V[`\x01`\x01`\xF8\x1B\x03\x19\x94\x90\x94\x16\x84RPP`\x01`\x01`\xF0\x1B\x03\x19\x16`\x01\x82\x01R`\x03\x01\x91\x90PV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0FGWa\x0FGa\x1C\x17V[`\x01\x81\x81[\x80\x85\x11\x15a\x1E\xB2W\x81_\x19\x04\x82\x11\x15a\x1E\x98Wa\x1E\x98a\x1C\x17V[\x80\x85\x16\x15a\x1E\xA5W\x91\x81\x02\x91[\x93\x84\x1C\x93\x90\x80\x02\x90a\x1E}V[P\x92P\x92\x90PV[_\x82a\x1E\xC8WP`\x01a\x0FGV[\x81a\x1E\xD4WP_a\x0FGV[\x81`\x01\x81\x14a\x1E\xEAW`\x02\x81\x14a\x1E\xF4Wa\x1F\x10V[`\x01\x91PPa\x0FGV[`\xFF\x84\x11\x15a\x1F\x05Wa\x1F\x05a\x1C\x17V[PP`\x01\x82\x1Ba\x0FGV[P` \x83\x10a\x013\x83\x10\x16`N\x84\x10`\x0B\x84\x10\x16\x17\x15a\x1F3WP\x81\x81\na\x0FGV[a\x1F=\x83\x83a\x1ExV[\x80_\x19\x04\x82\x11\x15a\x1FPWa\x1FPa\x1C\x17V[\x02\x93\x92PPPV[_a\x0FD\x83\x83a\x1E\xBAV\xFEBLS_SIG_BN254G1_XMD:KECCAK_NCTH_NUL_0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\xA1dsolcC\0\x08\x17\0\n"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x0FW_\x80\xFD[P`\x046\x10a\x01'W_5`\xE0\x1C\x80c\x9B0\xA5\xE6\x11a\0\xA9W\x80c\xB5p\x0Eh\x11a\0nW\x80c\xB5p\x0Eh\x14a\x02XW\x80c\xB5\xEC\xB3D\x14a\x02kW\x80c\xF2\xFD\xE3\x8B\x14a\x02\x8AW\x80c\xF8Q\xA4@\x14a\x02\x9DW\x80c\xFAR\xC7\xD8\x14a\x02\xB0W_\x80\xFD[\x80c\x9B0\xA5\xE6\x14a\x01\xE4W\x80c\x9Dv\xEAX\x14a\x01\xF7W\x80c\x9E\x9A\x8F1\x14a\x02\nW\x80c\xA3\x06j\xAB\x14a\x02\x13W\x80c\xB3\xE6\xEB\xD5\x14a\x02&W_\x80\xFD[\x80cUD\xC2\xF1\x11a\0\xEFW\x80cUD\xC2\xF1\x14a\x01\x95W\x80cj\x91\x1C\xCF\x14a\x01\xA8W\x80cqP\x18\xA6\x14a\x01\xB0W\x80c\x81)\xFC\x1C\x14a\x01\xB8W\x80c\x8D\xA5\xCB[\x14a\x01\xC0W_\x80\xFD[\x80c\x02n@+\x14a\x01+W\x80c\x13\xB9\x05z\x14a\x01@W\x80c!@\xFE\xCD\x14a\x01SW\x80c>\x9D\xF9\xB5\x14a\x01fW\x80cM\x99\xDD\x16\x14a\x01\x82W[_\x80\xFD[a\x01>a\x0196`\x04a\x1A\x1AV[a\x02\xF2V[\0[a\x01>a\x01N6`\x04a\x1B\x1FV[a\x04sV[a\x01>a\x01a6`\x04a\x1B}V[a\x05\xDBV[a\x01o`\x01T\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x01>a\x01\x906`\x04a\x1A\x1AV[a\x06\xDCV[a\x01>a\x01\xA36`\x04a\x1B\x96V[a\x08HV[a\x01>a\t\x07V[a\x01>a\t\x88V[a\x01>a\t\x9BV[_T`\x01`\x01`\xA0\x1B\x03\x16[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01yV[a\x01oa\x01\xF26`\x04a\x1B\xDAV[a\n\x9FV[`\x08Ta\x01\xCC\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x01o`\tT\x81V[a\x01>a\x02!6`\x04a\x1B}V[a\n\xF9V[a\x02Ha\x0246`\x04a\x1B\xF4V[`\x04` R_\x90\x81R`@\x90 T`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01a\x01yV[`\x02Ta\x01\xCC\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x01oa\x02y6`\x04a\x1B}V[`\x05` R_\x90\x81R`@\x90 T\x81V[a\x01>a\x02\x986`\x04a\x1B}V[a\x0B\xFCV[`\nTa\x01\xCC\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[a\x02\xE3a\x02\xBE6`\x04a\x1B}V[`\x03` R_\x90\x81R`@\x90 \x80T`\x01\x90\x91\x01T`\xFF\x80\x83\x16\x92a\x01\0\x90\x04\x16\x90\x83V[`@Qa\x01y\x93\x92\x91\x90a\x1C\x1FV[a\x02\xFB\x82a\x0C9V[a\x03\x04\x82a\x0CqV[`\x08T`@Qcn\xB1v\x9F`\xE1\x1B\x81R3`\x04\x82\x01R0`$\x82\x01R_\x91`\x01`\x01`\xA0\x1B\x03\x16\x90c\xDDb\xED>\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03PW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03t\x91\x90a\x1CUV[\x90P\x81\x81\x10\x15a\x03\xA6W`@Qc\x05Ce\xBB`\xE3\x1B\x81R`\x04\x81\x01\x82\x90R`$\x81\x01\x83\x90R`D\x01[`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x03` R`@\x81 `\x01\x01\x80T\x84\x92\x90a\x03\xD0\x90\x84\x90a\x1C\x80V[\x90\x91UPP`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 \x80T\x84\x92\x90a\x04\x07\x90\x84\x90a\x1C\x80V[\x90\x91UPP`\x08Ta\x04$\x90`\x01`\x01`\xA0\x1B\x03\x1630\x85a\x0C\xA7V[`@\x80Q3\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R\x90\x81\x01\x83\x90R\x7F\xE5T\x1Aka\x03\xD4\xFA~\x02\x1E\xD5O\xAD9\xC6o'\xA7k\xD1=7L\xF6$\n\xE6\xBD\x0B\xB7+\x90``\x01[`@Q\x80\x91\x03\x90\xA1PPPV[a\x04|3a\r8V[a\x04\x85\x83a\rqV[a\x04\x8E\x84a\r\xB0V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x04\xB7\x81\x84\x87a\r\xECV[a'\x10\x82a\xFF\xFF\x16\x11\x15a\x04\xDEW`@Qc\xDC\x81\xDB\x85`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x04_a\x04\xEC\x88a\n\x9FV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP`@Q\x80``\x01`@R\x80`\x01\x15\x15\x81R` \x01_`\x01\x81\x11\x15a\x055Wa\x055a\x1C\x0BV[\x81R_` \x91\x82\x01\x81\x90R3\x81R`\x03\x82R`@\x90 \x82Q\x81T\x90\x15\x15`\xFF\x19\x82\x16\x81\x17\x83U\x92\x84\x01Q\x91\x92\x83\x91a\xFF\0\x19\x90\x91\x16a\xFF\xFF\x19\x90\x91\x16\x17a\x01\0\x83`\x01\x81\x11\x15a\x05\x87Wa\x05\x87a\x1C\x0BV[\x02\x17\x90UP`@\x91\x82\x01Q`\x01\x90\x91\x01UQ\x7F\xF6\xE85\x9CWR\x0BF\x964sk\xFC;\xB7\xEC\\\xBD\x1A\x0B\xD2\x8B\x10\xA8'W\x93\xBBs\x0By\x7F\x90a\x05\xCC\x903\x90\x88\x90\x88\x90\x87\x90a\x1C\x93V[`@Q\x80\x91\x03\x90\xA1PPPPPV[3_\x90\x81R`\x05` R`@\x81 T\x90\x81\x90\x03a\x06\x0BW`@Qcy)\x8AS`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x80B\x10\x15a\x06,W`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x06pW`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x84\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x91\x90\x91U`\x08Ta\x06\xA6\x92\x16\x90\x83a\x0E\x81V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01a\x04fV[a\x06\xE5\x82a\x0C9V[a\x06\xEE\x82a\x0CqV[`\x013_\x90\x81R`\x03` R`@\x90 Ta\x01\0\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x07\x18Wa\x07\x18a\x1C\x0BV[\x03a\x076W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 T\x81\x81\x10\x15a\x07}W`@Qc\x92fSQ`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01a\x03\x9DV[`\x01`\x01`\xA0\x1B\x03\x83\x16_\x90\x81R`\x06` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 \x80T\x84\x92\x90a\x07\xAF\x90\x84\x90a\x1C\xF6V[\x92PP\x81\x90UP`@Q\x80`@\x01`@R\x80\x83\x81R` \x01`\tTBa\x07\xD5\x91\x90a\x1C\x80V[\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16_\x81\x81R`\x07` \x90\x81R`@\x80\x83 3\x80\x85R\x90\x83R\x92\x81\x90 \x85Q\x81U\x94\x82\x01Q`\x01\x90\x95\x01\x94\x90\x94U\x83Q\x91\x82R\x81\x01\x91\x90\x91R\x90\x81\x01\x83\x90R\x7FM\x10\xBD\x04\x97u\xC7{\xD7\xF2U\x19Z\xFB\xA5\x08\x80(\xEC\xB3\xC7\xC2w\xD3\x93\xCC\xFFy4\xF2\xF9,\x90``\x01a\x04fV[a\x08Q3a\x0C9V[a\x08Z3a\x0CqV[a\x08c\x82a\rqV[a\x08l\x83a\r\xB0V[`@\x80Q3` \x82\x01R_\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x08\x95\x81\x83\x86a\r\xECV[`\x01`\x04_a\x08\xA3\x87a\n\x9FV[\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x80\xD8\xA4\xA1f3(\xA9\x98\xD4U[\xA2\x1D\x8B\xBAn\xF1Wj\x8C^\x9D'\xF9\xC5E\xF1\xA3\xD5+\x1D3\x85\x85`@Qa\x08\xF9\x93\x92\x91\x90a\x1D\tV[`@Q\x80\x91\x03\x90\xA1PPPPV[a\t\x103a\x0C9V[a\t\x193a\x0CqV[3_\x90\x81R`\x03` R`@\x90 \x80Ta\xFF\0\x19\x16a\x01\0\x17\x90U`\tTa\tA\x90Ba\x1C\x80V[3_\x81\x81R`\x05` \x90\x81R`@\x91\x82\x90 \x93\x90\x93UQ\x90\x81R\x7F\xFB$0ST\xC8wb\xD5WHz\xE4\xA5d\xE8\xD0>\xCB\xB9\xA9}\xD8\xAF\xFF\x8E\x1Fo\xCA\xF0\xDD\x16\x91\x01`@Q\x80\x91\x03\x90\xA1V[a\t\x90a\x0F\x04V[a\t\x99_a\x0F0V[V[\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x80T`\x01`@\x1B\x81\x04`\xFF\x16\x15\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x81\x15\x80\x15a\t\xE0WP\x82[\x90P_\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01\x14\x80\x15a\t\xFCWP0;\x15[\x90P\x81\x15\x80\x15a\n\nWP\x80\x15[\x15a\n(W`@Qc\xF9.\xE8\xA9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16`\x01\x17\x85U\x83\x15a\nRW\x84T`\xFF`@\x1B\x19\x16`\x01`@\x1B\x17\x85U[C`\x01U\x83\x15a\n\x98W\x84T`\xFF`@\x1B\x19\x16\x85U`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x01a\x05\xCCV[PPPPPV[_\x81_\x01Q\x82` \x01Q\x83`@\x01Q\x84``\x01Q`@Q` \x01a\n\xDC\x94\x93\x92\x91\x90\x93\x84R` \x84\x01\x92\x90\x92R`@\x83\x01R``\x82\x01R`\x80\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x07` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 `\x01\x01TB\x10\x15a\x0B?W`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x07` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T\x90\x81\x90\x03a\x0B\x83W`@Qc\x06\x86\x82{`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x80\x83\x16_\x90\x81R`\x07` \x90\x81R`@\x80\x83 3\x80\x85R\x92R\x82 \x82\x81U`\x01\x01\x91\x90\x91U`\x08Ta\x0B\xBF\x92\x16\x90\x83a\x0E\x81V[`@\x80Q3\x81R` \x81\x01\x83\x90R\x7F\x7F\xCFS,\x15\xF0\xA6\xDB\x0B\xD6\xD0\xE08\xBE\xA7\x1D0\xD8\x08\xC7\xD9\x8C\xB3\xBFrh\xA9[\xF5\x08\x1Be\x91\x01`@Q\x80\x91\x03\x90\xA1PPV[a\x0C\x04a\x0F\x04V[`\x01`\x01`\xA0\x1B\x03\x81\x16a\x0C-W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R_`\x04\x82\x01R`$\x01a\x03\x9DV[a\x0C6\x81a\x0F0V[PV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x03` R`@\x90 T`\xFF\x16a\x0C6W`@QcW\xFD\xF4\x0B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x05` R`@\x90 T\x15a\x0C6W`@Qc\xEA\xB4\xA9c`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R\x82`D\x82\x01R` _`d\x83_\x8AZ\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\n\x98W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x94\x93\xD3W\xD1\x90RS\x11Q`b\x1B`D\x82\x01R`d\x01a\x03\x9DV[`\x01`\x01`\xA0\x1B\x03\x81\x16_\x90\x81R`\x03` R`@\x90 T`\xFF\x16\x15a\x0C6W`@Qc\x13.~\xFB`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\r\x8E\x82\x82a\x0F\x7FV[\x15a\r\xACW`@Qc\x06\xCFC\x8F`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[`\x04_a\r\xBC\x83a\n\x9FV[\x81R` \x81\x01\x91\x90\x91R`@\x01_ T`\xFF\x16\x15a\x0C6W`@Qb\xDA\x8AW`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\r\xF5\x82a\x0F\xA2V[_`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x1F\xB9`$\x919\x90P_\x84\x82`@Q` \x01a\x0E%\x92\x91\x90a\x1D\x8AV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_a\x0E@\x82a\x10=V[\x90Pa\x0E]\x81\x85a\x0EP\x88a\x11*V[a\x0EXa\x11\xA1V[a\x12nV[a\x0EyW`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPV[_`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` _`D\x83_\x89Z\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91PP\x80a\x0E\xFEW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0F`$\x82\x01Rn\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x90RS\x11Q`\x8A\x1B`D\x82\x01R`d\x01a\x03\x9DV[PPPPV[_T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t\x99W`@Qc\x11\x8C\xDA\xA7`\xE0\x1B\x81R3`\x04\x82\x01R`$\x01a\x03\x9DV[_\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x80Q\x82Q_\x91\x14\x80\x15a\x0F\x99WP\x81` \x01Q\x83` \x01Q\x14[\x90P[\x92\x91PPV[\x80Q` \x82\x01Q_\x91_\x80Q` a\x1F\xDD\x839\x81Q\x91R\x91\x15\x90\x15\x16\x15a\x0F\xC8WPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x108W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x9DV[PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x10Z\x83a\x13NV[\x90P_\x80Q` a\x1F\xDD\x839\x81Q\x91R`\x03_\x82\x84\x85\t\x90P\x82\x80a\x10\x81Wa\x10\x81a\x1D\x9EV[\x84\x82\t\x90P\x82\x80a\x10\x94Wa\x10\x94a\x1D\x9EV[\x82\x82\x08\x90P_\x80a\x10\xA4\x83a\x15WV[\x92P\x90P[\x80a\x11\rW\x84\x80a\x10\xBCWa\x10\xBCa\x1D\x9EV[`\x01\x87\x08\x95P\x84\x80a\x10\xD0Wa\x10\xD0a\x1D\x9EV[\x86\x87\t\x92P\x84\x80a\x10\xE3Wa\x10\xE3a\x1D\x9EV[\x86\x84\t\x92P\x84\x80a\x10\xF6Wa\x10\xF6a\x1D\x9EV[\x84\x84\x08\x92Pa\x11\x04\x83a\x15WV[\x92P\x90Pa\x10\xA9V[P`@\x80Q\x80\x82\x01\x90\x91R\x94\x85R` \x85\x01RP\x91\x94\x93PPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x11QWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01_\x80Q` a\x1F\xDD\x839\x81Q\x91R\x84` \x01Qa\x11\x82\x91\x90a\x1D\xB2V[a\x11\x99\x90_\x80Q` a\x1F\xDD\x839\x81Q\x91Ra\x1C\xF6V[\x90R\x92\x91PPV[a\x11\xC8`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[_\x80_`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x13@W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x03\x9DV[P\x15\x15\x90P[\x94\x93PPPPV[_\x80a\x13Y\x83a\x16NV[\x80Q\x90\x91P`0\x81\x14a\x13nWa\x13na\x1D\xD1V[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x13\x88Wa\x13\x88a\x1ABV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x13\xB2W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_[\x82\x81\x10\x15a\x14!W\x83`\x01a\x13\xCC\x83\x86a\x1C\xF6V[a\x13\xD6\x91\x90a\x1C\xF6V[\x81Q\x81\x10a\x13\xE6Wa\x13\xE6a\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x14\x03Wa\x14\x03a\x1D\xE5V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x13\xB7V[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R_\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P_[\x82\x81\x10\x15a\x14\xB1W\x83\x81a\x14]\x85\x88a\x1C\xF6V[a\x14g\x91\x90a\x1C\x80V[\x81Q\x81\x10a\x14wWa\x14wa\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x14\x97Wa\x14\x97a\x1D\xE5V[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x14IV[P_a\x14\xBC\x82a\x19\x98V[\x90Pa\x01\0_\x80Q` a\x1F\xDD\x839\x81Q\x91R_a\x14\xDA\x86\x89a\x1C\xF6V[\x90P_[\x81\x81\x10\x15a\x15GW_\x88`\x01a\x14\xF4\x84\x86a\x1C\xF6V[a\x14\xFE\x91\x90a\x1C\xF6V[\x81Q\x81\x10a\x15\x0EWa\x15\x0Ea\x1D\xE5V[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x15&Wa\x15&a\x1D\x9EV[\x85\x87\t\x95P\x83\x80a\x159Wa\x159a\x1D\x9EV[\x81\x87\x08\x95PP`\x01\x01a\x14\xDEV[P\x92\x9A\x99PPPPPPPPPPV[_\x80_\x80_\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P__\x80Q` a\x1F\xDD\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x87``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x94PP_Q\x92P\x83a\x16\x14W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\x03\x9DV[\x80`\x01\x84\x90\x1B\x11\x15a\x16-Wa\x16*\x83\x82a\x1C\xF6V[\x92P[\x80\x80a\x16;Wa\x16;a\x1D\x9EV[\x83\x84\t\x96\x90\x96\x14\x96\x91\x95P\x90\x93PPPPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90_\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x16\x8E\x92\x91\x90a\x1D\x8AV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x16\xB5\x92\x91\x90a\x1D\xF9V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x16\xD7\x91\x90a\x1E#V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x17\x01\x90\x83\x90\x83\x90` \x01a\x1E;V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90_`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17qWa\x17qa\x1ABV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17\x9BW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P_\x82`@Q` \x01a\x17\xB2\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P_[\x81Q\x81\x10\x15a\x18\x1BW\x81\x81\x81Q\x81\x10a\x17\xE0Wa\x17\xE0a\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x17\xFDWa\x17\xFDa\x1D\xE5V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x17\xC5V[P_\x84`@Q` \x01a\x180\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R_\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x18\xC2W_\x83\x82\x81Q\x81\x10a\x18iWa\x18ia\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x18\x86Wa\x18\x86a\x1D\xE5V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x18\xA7\x92\x91\x90a\x1E_V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x18NV[P\x86\x88\x87`@Q` \x01a\x18\xD8\x93\x92\x91\x90a\x1E\x83V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x19\x06\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P_[a\x19&\x8A`\xFF\x8D\x16a\x1C\xF6V[\x81\x10\x15a\x19\x87W\x82\x81\x81Q\x81\x10a\x19?Wa\x19?a\x1D\xE5V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x19Y\x83\x8Da\x1C\x80V[\x81Q\x81\x10a\x19iWa\x19ia\x1D\xE5V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81_\x1A\x90SP`\x01\x01a\x19\x19V[P\x91\x9B\x9APPPPPPPPPPPV[_\x80\x80[\x83Q\x81\x10\x15a\x19\xF8W\x83\x81\x81Q\x81\x10a\x19\xB7Wa\x19\xB7a\x1D\xE5V[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x19\xCF\x91\x90a\x1E\xB6V[a\x19\xDA\x90`\x02a\x1F\xADV[a\x19\xE4\x91\x90a\x1E\xB6V[a\x19\xEE\x90\x83a\x1C\x80V[\x91P`\x01\x01a\x19\x9CV[P\x92\x91PPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x1A\x15W_\x80\xFD[\x91\x90PV[_\x80`@\x83\x85\x03\x12\x15a\x1A+W_\x80\xFD[a\x1A4\x83a\x19\xFFV[\x94` \x93\x90\x93\x015\x93PPPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[_`\x80\x82\x84\x03\x12\x15a\x1AfW_\x80\xFD[`@Q`\x80\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A\x95WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[\x80`@RP\x80\x91P\x825\x81R` \x83\x015` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[_`@\x82\x84\x03\x12\x15a\x1A\xD6W_\x80\xFD[`@Q`@\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1B\x05WcNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x80_\x80a\x01 \x85\x87\x03\x12\x15a\x1B3W_\x80\xFD[a\x1B=\x86\x86a\x1AVV[\x93Pa\x1BL\x86`\x80\x87\x01a\x1A\xC6V[\x92Pa\x1B[\x86`\xC0\x87\x01a\x1A\xC6V[\x91Pa\x01\0\x85\x015a\xFF\xFF\x81\x16\x81\x14a\x1BrW_\x80\xFD[\x93\x96\x92\x95P\x90\x93PPV[_` \x82\x84\x03\x12\x15a\x1B\x8DW_\x80\xFD[a\x0F\x99\x82a\x19\xFFV[_\x80_a\x01\0\x84\x86\x03\x12\x15a\x1B\xA9W_\x80\xFD[a\x1B\xB3\x85\x85a\x1AVV[\x92Pa\x1B\xC2\x85`\x80\x86\x01a\x1A\xC6V[\x91Pa\x1B\xD1\x85`\xC0\x86\x01a\x1A\xC6V[\x90P\x92P\x92P\x92V[_`\x80\x82\x84\x03\x12\x15a\x1B\xEAW_\x80\xFD[a\x0F\x99\x83\x83a\x1AVV[_` \x82\x84\x03\x12\x15a\x1C\x04W_\x80\xFD[P5\x91\x90PV[cNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[\x83\x15\x15\x81R``\x81\x01`\x02\x84\x10a\x1CDWcNH{q`\xE0\x1B_R`!`\x04R`$_\xFD[` \x82\x01\x93\x90\x93R`@\x01R\x91\x90PV[_` \x82\x84\x03\x12\x15a\x1CeW_\x80\xFD[PQ\x91\x90PV[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x80\x82\x01\x80\x82\x11\x15a\x0F\x9CWa\x0F\x9Ca\x1ClV[`\x01`\x01`\xA0\x1B\x03\x85\x16\x81Ra\x01\0\x81\x01a\x1C\xD2` \x83\x01\x86\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x83Q`\xA0\x83\x01R` \x84\x01Q`\xC0\x83\x01Ra\xFF\xFF\x83\x16`\xE0\x83\x01R\x95\x94PPPPPV[\x81\x81\x03\x81\x81\x11\x15a\x0F\x9CWa\x0F\x9Ca\x1ClV[`\x01`\x01`\xA0\x1B\x03\x84\x16\x81R`\xE0\x81\x01a\x1DG` \x83\x01\x85\x80Q\x82R` \x81\x01Q` \x83\x01R`@\x81\x01Q`@\x83\x01R``\x81\x01Q``\x83\x01RPPV[\x82Q`\xA0\x83\x01R` \x83\x01Q`\xC0\x83\x01Ra\x13FV[_\x81Q_[\x81\x81\x10\x15a\x1D|W` \x81\x85\x01\x81\x01Q\x86\x83\x01R\x01a\x1DbV[P_\x93\x01\x92\x83RP\x90\x91\x90PV[_a\x13Fa\x1D\x98\x83\x86a\x1D]V[\x84a\x1D]V[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a\x1D\xCCWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V[cNH{q`\xE0\x1B_R`\x01`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[_a\x1E\x04\x82\x85a\x1D]V[_\x81R`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16`\x01\x84\x01RPP`\x02\x01\x91\x90PV[_a\x1E.\x82\x84a\x1D]V[_\x81R`\x01\x01\x93\x92PPPV[_a\x1EF\x82\x85a\x1D]V[`\x01`\x01`\xF0\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x02\x01\x91\x90PV[_a\x1Ej\x82\x85a\x1D]V[`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x01\x01\x91\x90PV[_a\x1E\x8E\x82\x86a\x1D]V[`\x01`\x01`\xF8\x1B\x03\x19\x94\x90\x94\x16\x84RPP`\x01`\x01`\xF0\x1B\x03\x19\x16`\x01\x82\x01R`\x03\x01\x91\x90PV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0F\x9CWa\x0F\x9Ca\x1ClV[`\x01\x81\x81[\x80\x85\x11\x15a\x1F\x07W\x81_\x19\x04\x82\x11\x15a\x1E\xEDWa\x1E\xEDa\x1ClV[\x80\x85\x16\x15a\x1E\xFAW\x91\x81\x02\x91[\x93\x84\x1C\x93\x90\x80\x02\x90a\x1E\xD2V[P\x92P\x92\x90PV[_\x82a\x1F\x1DWP`\x01a\x0F\x9CV[\x81a\x1F)WP_a\x0F\x9CV[\x81`\x01\x81\x14a\x1F?W`\x02\x81\x14a\x1FIWa\x1FeV[`\x01\x91PPa\x0F\x9CV[`\xFF\x84\x11\x15a\x1FZWa\x1FZa\x1ClV[PP`\x01\x82\x1Ba\x0F\x9CV[P` \x83\x10a\x013\x83\x10\x16`N\x84\x10`\x0B\x84\x10\x16\x17\x15a\x1F\x88WP\x81\x81\na\x0F\x9CV[a\x1F\x92\x83\x83a\x1E\xCDV[\x80_\x19\x04\x82\x11\x15a\x1F\xA5Wa\x1F\xA5a\x1ClV[\x02\x93\x92PPPV[_a\x0F\x99\x83\x83a\x1F\x0FV\xFEBLS_SIG_BN254G1_XMD:KECCAK_NCTH_NUL_0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\xA1dsolcC\0\x08\x17\0\n"; /// The deployed bytecode of the contract. pub static STAKETABLE_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); @@ -960,6 +990,14 @@ pub mod stake_table { .method_hash([62, 157, 249, 181], ()) .expect("method not found (this should never happen)") } + ///Calls the contract's `lightClient` (0xb5700e68) function + pub fn light_client( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([181, 112, 14, 104], ()) + .expect("method not found (this should never happen)") + } ///Calls the contract's `owner` (0x8da5cb5b) function pub fn owner( &self, @@ -1179,6 +1217,21 @@ pub mod stake_table { )] #[etherror(name = "InsufficientBalance", abi = "InsufficientBalance(uint256)")] pub struct InsufficientBalance(pub ::ethers::core::types::U256); + ///Custom Error type `InvalidAddress` with signature `InvalidAddress()` and selector `0xe6c4247b` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "InvalidAddress", abi = "InvalidAddress()")] + pub struct InvalidAddress; ///Custom Error type `InvalidCommission` with signature `InvalidCommission()` and selector `0xdc81db85` #[derive( Clone, @@ -1385,6 +1438,7 @@ pub mod stake_table { BlsKeyAlreadyUsed(BlsKeyAlreadyUsed), InsufficientAllowance(InsufficientAllowance), InsufficientBalance(InsufficientBalance), + InvalidAddress(InvalidAddress), InvalidCommission(InvalidCommission), InvalidInitialization(InvalidInitialization), InvalidSchnorrVK(InvalidSchnorrVK), @@ -1430,6 +1484,9 @@ pub mod stake_table { { return Ok(Self::InsufficientBalance(decoded)); } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::InvalidAddress(decoded)); + } if let Ok(decoded) = ::decode(data) { return Ok(Self::InvalidCommission(decoded)); @@ -1500,6 +1557,7 @@ pub mod stake_table { Self::InsufficientBalance(element) => { ::ethers::core::abi::AbiEncode::encode(element) } + Self::InvalidAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::InvalidCommission(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::InvalidInitialization(element) => { ::ethers::core::abi::AbiEncode::encode(element) @@ -1554,6 +1612,9 @@ pub mod stake_table { { true } + _ if selector == ::selector() => { + true + } _ if selector == ::selector() => { @@ -1619,6 +1680,7 @@ pub mod stake_table { Self::BlsKeyAlreadyUsed(element) => ::core::fmt::Display::fmt(element, f), Self::InsufficientAllowance(element) => ::core::fmt::Display::fmt(element, f), Self::InsufficientBalance(element) => ::core::fmt::Display::fmt(element, f), + Self::InvalidAddress(element) => ::core::fmt::Display::fmt(element, f), Self::InvalidCommission(element) => ::core::fmt::Display::fmt(element, f), Self::InvalidInitialization(element) => ::core::fmt::Display::fmt(element, f), Self::InvalidSchnorrVK(element) => ::core::fmt::Display::fmt(element, f), @@ -1660,6 +1722,11 @@ pub mod stake_table { Self::InsufficientBalance(value) } } + impl ::core::convert::From for StakeTableErrors { + fn from(value: InvalidAddress) -> Self { + Self::InvalidAddress(value) + } + } impl ::core::convert::From for StakeTableErrors { fn from(value: InvalidCommission) -> Self { Self::InvalidCommission(value) @@ -2140,6 +2207,21 @@ pub mod stake_table { )] #[ethcall(name = "initializedAtBlock", abi = "initializedAtBlock()")] pub struct InitializedAtBlockCall; + ///Container type for all input parameters for the `lightClient` function with signature `lightClient()` and selector `0xb5700e68` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "lightClient", abi = "lightClient()")] + pub struct LightClientCall; ///Container type for all input parameters for the `owner` function with signature `owner()` and selector `0x8da5cb5b` #[derive( Clone, @@ -2321,6 +2403,7 @@ pub mod stake_table { ExitEscrowPeriod(ExitEscrowPeriodCall), Initialize(InitializeCall), InitializedAtBlock(InitializedAtBlockCall), + LightClient(LightClientCall), Owner(OwnerCall), RegisterValidator(RegisterValidatorCall), RenounceOwnership(RenounceOwnershipCall), @@ -2376,6 +2459,9 @@ pub mod stake_table { { return Ok(Self::InitializedAtBlock(decoded)); } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::LightClient(decoded)); + } if let Ok(decoded) = ::decode(data) { return Ok(Self::Owner(decoded)); } @@ -2436,6 +2522,7 @@ pub mod stake_table { Self::InitializedAtBlock(element) => { ::ethers::core::abi::AbiEncode::encode(element) } + Self::LightClient(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::Owner(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::RegisterValidator(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::RenounceOwnership(element) => ::ethers::core::abi::AbiEncode::encode(element), @@ -2463,6 +2550,7 @@ pub mod stake_table { Self::ExitEscrowPeriod(element) => ::core::fmt::Display::fmt(element, f), Self::Initialize(element) => ::core::fmt::Display::fmt(element, f), Self::InitializedAtBlock(element) => ::core::fmt::Display::fmt(element, f), + Self::LightClient(element) => ::core::fmt::Display::fmt(element, f), Self::Owner(element) => ::core::fmt::Display::fmt(element, f), Self::RegisterValidator(element) => ::core::fmt::Display::fmt(element, f), Self::RenounceOwnership(element) => ::core::fmt::Display::fmt(element, f), @@ -2525,6 +2613,11 @@ pub mod stake_table { Self::InitializedAtBlock(value) } } + impl ::core::convert::From for StakeTableCalls { + fn from(value: LightClientCall) -> Self { + Self::LightClient(value) + } + } impl ::core::convert::From for StakeTableCalls { fn from(value: OwnerCall) -> Self { Self::Owner(value) @@ -2640,6 +2733,20 @@ pub mod stake_table { Hash, )] pub struct InitializedAtBlockReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `lightClient` function with signature `lightClient()` and selector `0xb5700e68` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct LightClientReturn(pub ::ethers::core::types::Address); ///Container type for all return fields from the `owner` function with signature `owner()` and selector `0x8da5cb5b` #[derive( Clone, diff --git a/contracts/src/ExampleToken.sol b/contracts/src/ExampleToken.sol index 004026988d..04c95b994d 100644 --- a/contracts/src/ExampleToken.sol +++ b/contracts/src/ExampleToken.sol @@ -2,6 +2,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +// TODO MA: should we really use solmate, or just stick with openzeppelin? import { ERC20 } from "solmate/tokens/ERC20.sol"; contract ExampleToken is ERC20 { diff --git a/contracts/src/StakeTable.sol b/contracts/src/StakeTable.sol index 4186546b8f..b8cd385519 100644 --- a/contracts/src/StakeTable.sol +++ b/contracts/src/StakeTable.sol @@ -180,8 +180,8 @@ contract StakeTable is AbstractStakeTable, Ownable, InitializedAt { ensureNonZeroSchnorrKey(schnorrVK); ensureNewKey(blsVK); - // Verify that the validator can sign for that blsVK. - // This prevents rogue public-key attacks. + // Verify that the validator can sign for that blsVK. This prevents rogue public-key + // attacks. bytes memory message = abi.encode(msg.sender); BLSSig.verifyBlsSig(message, blsSig, blsVK); @@ -210,6 +210,7 @@ contract StakeTable is AbstractStakeTable, Ownable, InitializedAt { } validators[validator].delegatedAmount += amount; + delegations[validator][msg.sender] += amount; SafeTransferLib.safeTransferFrom(ERC20(tokenAddress), msg.sender, address(this), amount); @@ -226,7 +227,7 @@ contract StakeTable is AbstractStakeTable, Ownable, InitializedAt { uint256 balance = delegations[validator][msg.sender]; if (balance < amount) { - revert InsufficientBalance(amount); + revert InsufficientBalance(balance); } delegations[validator][msg.sender] -= amount; @@ -291,14 +292,21 @@ contract StakeTable is AbstractStakeTable, Ownable, InitializedAt { /// @notice Update the consensus keys for a validator /// @dev This function is used to update the consensus keys for a validator - /// @dev This function can only be called by the validator itself when it's not in the exit - /// queue + /// @dev This function can only be called by the validator itself when it hasn't exited + /// TODO: MA: is this a good idea? Why should key rotation be blocked for an exiting + /// validator? /// @dev The validator will need to give up either its old BLS key and/or old Schnorr key /// @dev The validator will need to provide a BLS signature to prove that the account owns the /// new BLS key /// @param newBlsVK The new BLS verification key /// @param newSchnorrVK The new Schnorr verification key /// @param newBlsSig The BLS signature that the account owns the new BLS key + /// + /// TODO: MA: I think this function should be reworked. Is it fine to always force updating both + /// keys? If not we should probably rather have two functions for updating the keys. But this + /// would also mean two separate events, or storing the keys in the contract only for this + /// update function to remit the old keys, or throw errors if the keys are not changed. None of + /// that seems useful enough to warrant the extra complexity in the contract and GCL. function updateConsensusKeys( BN254.G2Point memory newBlsVK, EdOnBN254.EdOnBN254Point memory newSchnorrVK, @@ -309,8 +317,8 @@ contract StakeTable is AbstractStakeTable, Ownable, InitializedAt { ensureNonZeroSchnorrKey(newSchnorrVK); ensureNewKey(newBlsVK); - // Verify that the validator can sign for that newBlsVK, otherwise it - // inner reverts with BLSSigVerificationFailed + // Verify that the validator can sign for that blsVK. This prevents rogue public-key + // attacks. bytes memory message = abi.encode(msg.sender); BLSSig.verifyBlsSig(message, newBlsSig, newBlsVK); diff --git a/contracts/test/StakeTable.t.sol b/contracts/test/StakeTable.t.sol index da34e2b5f6..9502d0bc34 100644 --- a/contracts/test/StakeTable.t.sol +++ b/contracts/test/StakeTable.t.sol @@ -4,1126 +4,906 @@ pragma solidity ^0.8.0; -// // Libraries -// import "forge-std/Test.sol"; -// // import {console} from "forge-std/console.sol"; - -// using stdStorage for StdStorage; - -// import { ERC20 } from "solmate/utils/SafeTransferLib.sol"; -// import { BN254 } from "bn254/BN254.sol"; -// import { BLSSig } from "../src/libraries/BLSSig.sol"; -// import { EdOnBN254 } from "../src/libraries/EdOnBn254.sol"; -// import { AbstractStakeTable } from "../src/interfaces/AbstractStakeTable.sol"; -// import { LightClient } from "../src/LightClient.sol"; -// import { LightClientMock } from "../test/mocks/LightClientMock.sol"; -// import { InitializedAt } from "../src/InitializedAt.sol"; -// import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; -// import { IPlonkVerifier as V } from "../src/interfaces/IPlonkVerifier.sol"; - -// // Token contract -// import { ExampleToken } from "../src/ExampleToken.sol"; - -// // Target contract -// import { StakeTable as S } from "../src/StakeTable.sol"; -// import { StakeTableMock } from "../test/mocks/StakeTableMock.sol"; - -// contract StakeTable_register_Test is Test { -// StakeTableMock public stakeTable; -// ExampleToken public token; -// LightClientMock public lcMock; -// uint256 public constant INITIAL_BALANCE = 10 ether; -// uint256 public constant MIN_STAKE_AMOUNT = 10 ether; -// address public exampleTokenCreator; -// uint64 public churnRate = 10; -// uint64 public hotShotBlocksPerEpoch = 1; - -// function genClientWallet(address sender, string memory seed) -// private -// returns (BN254.G2Point memory, EdOnBN254.EdOnBN254Point memory, BN254.G1Point memory) -// { -// // Generate a BLS signature and other values using rust code -// string[] memory cmds = new string[](4); -// cmds[0] = "diff-test"; -// cmds[1] = "gen-client-wallet"; -// cmds[2] = vm.toString(sender); -// cmds[3] = seed; - -// bytes memory result = vm.ffi(cmds); -// ( -// BN254.G1Point memory blsSig, -// BN254.G2Point memory blsVK, -// uint256 schnorrVKx, -// uint256 schnorrVKy, -// ) = abi.decode(result, (BN254.G1Point, BN254.G2Point, uint256, uint256, address)); - -// return ( -// blsVK, // blsVK -// EdOnBN254.EdOnBN254Point(schnorrVKx, schnorrVKy), // schnorrVK -// blsSig // sig -// ); -// } - -// function setUpCustom(uint64 _churnRate, uint64 _blocksPerEpoch) public { -// exampleTokenCreator = makeAddr("tokenCreator"); -// vm.prank(exampleTokenCreator); -// token = new ExampleToken(INITIAL_BALANCE); - -// string[] memory cmds = new string[](3); -// cmds[0] = "diff-test"; -// cmds[1] = "mock-genesis"; -// cmds[2] = "5"; - -// bytes memory result = vm.ffi(cmds); -// ( -// LightClientMock.LightClientState memory state, -// LightClientMock.StakeTableState memory stakeState -// ) = abi.decode(result, (LightClient.LightClientState, LightClient.StakeTableState)); -// LightClientMock.LightClientState memory genesis = state; -// LightClientMock.StakeTableState memory genesisStakeTableState = stakeState; - -// lcMock = new LightClientMock(genesis, genesisStakeTableState, 864000); -// stakeTable = new StakeTableMock( -// address(token), -// address(lcMock), -// _churnRate, -// _blocksPerEpoch, -// MIN_STAKE_AMOUNT, -// exampleTokenCreator -// ); -// } - -// function setUp() public { -// setUpCustom(churnRate, hotShotBlocksPerEpoch); -// } - -// function test_RevertWhen_InvalidHotShotBlocksPerEpoch() external { -// vm.expectRevert(S.InvalidHotShotBlocksPerEpoch.selector); -// new StakeTableMock( -// address(token), address(lcMock), churnRate, 0, MIN_STAKE_AMOUNT, exampleTokenCreator -// ); -// } - -// function test_Deployment_StoresBlockNumber() public { -// setUp(); -// assertEq(stakeTable.initializedAtBlock(), block.number); -// } - -// function testFuzz_RevertWhen_InvalidBLSSig(uint256 scalar) external { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// (BN254.G2Point memory blsVK, EdOnBN254.EdOnBN254Point memory schnorrVK,) = -// genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer -// vm.startPrank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // Ensure the scalar is valid -// // Note: Apparently BN254.scalarMul is not well defined when the scalar is 0 -// scalar = bound(scalar, 1, BN254.R_MOD - 1); -// BN254.validateScalarField(BN254.ScalarField.wrap(scalar)); -// BN254.G1Point memory badSig = BN254.scalarMul(BN254.P1(), -// BN254.ScalarField.wrap(scalar)); -// BN254.validateG1Point(badSig); - -// // Failed signature verification -// vm.expectRevert(BLSSig.BLSSigVerificationFailed.selector); -// stakeTable.register(blsVK, schnorrVK, depositAmount, badSig, validUntilEpoch); -// vm.stopPrank(); -// } - -// // commenting out epoch related tests for now -// // function testFuzz_RevertWhen_InvalidNextRegistrationEpoch(uint64 rand) external { -// // LCMock.setCurrentEpoch(3); -// // uint64 currentEpoch = stakeTable.currentEpoch(); - -// // uint64 depositAmount = 10 ether; -// // vm.prank(exampleTokenCreator); -// // token.approve(address(stakeTable), depositAmount); - -// // ( -// // BN254.G2Point memory blsVK, -// // EdOnBN254.EdOnBN254Point memory schnorrVK, -// // BN254.G1Point memory sig -// // ) = genClientWallet(exampleTokenCreator); - -// // // Invalid next registration epoch -// // uint64 validUntilEpoch = uint64(bound(rand, 0, currentEpoch - 1)); -// // vm.prank(exampleTokenCreator); -// // vm.expectRevert( -// // abi.encodeWithSelector( -// // S.InvalidNextRegistrationEpoch.selector, currentEpoch + 1, validUntilEpoch -// // ) -// // ); -// // stakeTable.register( -// // blsVK, -// // schnorrVK, -// // depositAmount, -// // sig, -// // validUntilEpoch -// // ); - -// // // Valid next registration epoch -// // validUntilEpoch = uint64(bound(rand, currentEpoch + 1, type(uint64).max)); -// // vm.prank(exampleTokenCreator); -// // stakeTable.register( -// // blsVK, -// // schnorrVK, -// // depositAmount, -// // sig, -// // validUntilEpoch -// // ); -// // } - -// function test_RevertWhen_NodeAlreadyRegistered() external { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer -// vm.prank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // Successful call to register -// vm.prank(exampleTokenCreator); -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// // The node is already registered -// vm.prank(exampleTokenCreator); -// vm.expectRevert(S.NodeAlreadyRegistered.selector); -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); -// } - -// function test_RevertWhen_NoTokenAllowanceOrBalance() external { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 10; -// string memory seed = "123"; - -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// assertEq(ERC20(token).balanceOf(exampleTokenCreator), INITIAL_BALANCE); -// vm.prank(exampleTokenCreator); -// // The call to register is expected to fail because the depositAmount has not been -// approved -// // and thus the stake table contract cannot lock the stake. -// vm.expectRevert(abi.encodeWithSelector(S.InsufficientAllowance.selector, 0, -// depositAmount)); -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// // A user with 0 balance cannot register either -// address newUser = makeAddr("New user with zero balance"); -// (blsVK, schnorrVK, sig) = genClientWallet(newUser, seed); - -// vm.startPrank(newUser); -// // Prepare for the token transfer by giving the StakeTable contract the required -// allowance -// token.approve(address(stakeTable), depositAmount); -// vm.expectRevert(abi.encodeWithSelector(S.InsufficientBalance.selector, 0)); -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); -// vm.stopPrank(); -// } - -// function test_RevertWhen_InsufficientStakeAmount() external { -// uint64 depositAmount = uint64(stakeTable.minStakeAmount()) - 1; -// uint64 validUntilEpoch = 10; -// string memory seed = "123"; - -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// assertEq(ERC20(token).balanceOf(exampleTokenCreator), INITIAL_BALANCE); -// vm.prank(exampleTokenCreator); -// // The call to register is expected to fail because the correct depositAmount has not -// been -// // approved/supplied -// // and thus the stake table contract cannot lock the stake. -// vm.expectRevert(abi.encodeWithSelector(S.InsufficientStakeAmount.selector, -// depositAmount)); -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); -// } - -// /// @dev Tests a correct registration -// function test_Registration_succeeds() external { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer -// vm.prank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // Balances before registration -// assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); - -// uint256 totalStakeAmount; -// totalStakeAmount = stakeTable.totalStake(); -// assertEq(totalStakeAmount, 0); - -// // Check event is emitted after calling successfully `register` -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.Registered(exampleTokenCreator, 1, depositAmount); -// vm.prank(exampleTokenCreator); -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// // Balance after registration -// assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE - depositAmount); -// totalStakeAmount = stakeTable.totalStake(); -// assertEq(totalStakeAmount, depositAmount); - -// // lookup the node and verify the data -// AbstractStakeTable.Node memory node = stakeTable.lookupNode(exampleTokenCreator); -// assertEq(node.account, exampleTokenCreator); -// assertEq(node.balance, depositAmount); -// assertEq(node.registerEpoch, 1); -// assertTrue(stakeTable._isEqualBlsKey(node.blsVK, blsVK)); -// assertTrue(EdOnBN254.isEqual(node.schnorrVK, schnorrVK)); - -// // lookup the stake and verify the amount -// uint256 stakeAmount = stakeTable.lookupStake(exampleTokenCreator); -// assertEq(stakeAmount, depositAmount); -// } - -// /// @dev Tests a correct registration -// function test_RevertWhen_InvalidBlsVK_or_InvalidSchnorrVK_on_Registration() external { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// // generate a valid blsVK and schnorrVK -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer -// vm.startPrank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // revert when the blsVK is the zero point -// BN254.G2Point memory zeroBlsVK = BN254.G2Point( -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0) -// ); -// vm.expectRevert(S.InvalidBlsVK.selector); -// stakeTable.register(zeroBlsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// // revert when the schnorrVK is the zero point -// EdOnBN254.EdOnBN254Point memory zeroSchnorrVK = EdOnBN254.EdOnBN254Point(0, 0); -// vm.expectRevert(S.InvalidSchnorrVK.selector); -// stakeTable.register(blsVK, zeroSchnorrVK, depositAmount, sig, validUntilEpoch); - -// // lookup the node and verify the data but expect the node to be empty -// AbstractStakeTable.Node memory node = stakeTable.lookupNode(exampleTokenCreator); -// assertEq(node.account, address(0)); - -// vm.stopPrank(); -// } - -// function test_UpdateConsensusKeys_Succeeds() public { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// //Step 1: generate a new blsVK and schnorrVK and register this node -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer by granting allowance to the contract -// vm.startPrank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // Balances before registration -// assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); - -// // Check event is emitted after calling successfully `register` -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.Registered(exampleTokenCreator, 1, depositAmount); -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// // Step 2: generate a new blsVK and schnorrVK -// seed = "234"; -// ( -// BN254.G2Point memory newBlsVK, -// EdOnBN254.EdOnBN254Point memory newSchnorrVK, -// BN254.G1Point memory newBlsSig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // assert that the new blsVK and schnorrVK are not the same as the old ones -// assertFalse(stakeTable._isEqualBlsKey(newBlsVK, blsVK)); -// assertFalse(EdOnBN254.isEqual(newSchnorrVK, schnorrVK)); - -// // Step 3: update the consensus keys -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.UpdatedConsensusKeys(exampleTokenCreator, newBlsVK, -// newSchnorrVK); -// stakeTable.updateConsensusKeys(newBlsVK, newSchnorrVK, newBlsSig); - -// // Step 4: verify the update -// AbstractStakeTable.Node memory node = stakeTable.lookupNode(exampleTokenCreator); -// assertTrue(stakeTable._isEqualBlsKey(node.blsVK, newBlsVK)); -// assertTrue(EdOnBN254.isEqual(node.schnorrVK, newSchnorrVK)); -// assertEq(node.balance, depositAmount); -// assertEq(node.account, exampleTokenCreator); - -// vm.stopPrank(); -// } - -// function test_RevertWhen_UpdateConsensusKeysWithSameKeys() public { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// //Step 1: generate a new blsVK and schnorrVK and register this node -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer by granting allowance to the contract -// vm.startPrank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // Balances before registration -// assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); - -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// // Step 2: update the consensus keys with the same keys -// vm.expectRevert(S.NoKeyChange.selector); -// stakeTable.updateConsensusKeys(blsVK, schnorrVK, sig); - -// vm.stopPrank(); -// } - -// function test_RevertWhen_UpdateConsensusKeysWithEmptyKeys() public { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// //Step 1: generate a new blsVK and schnorrVK and register this node -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer by granting allowance to the contract -// vm.startPrank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // Balances before registration -// assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); - -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// // empty keys -// BN254.G2Point memory emptyBlsVK = BN254.G2Point( -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0) -// ); -// EdOnBN254.EdOnBN254Point memory emptySchnorrVK = EdOnBN254.EdOnBN254Point(0, 0); - -// // Step 2: attempt to update the consensus keys with the same keys -// vm.expectRevert(S.InvalidBlsVK.selector); -// stakeTable.updateConsensusKeys(emptyBlsVK, emptySchnorrVK, sig); - -// vm.stopPrank(); -// } - -// function test_RevertWhen_UpdateConsensusKeysWithInvalidSignature() public { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// //Step 1: generate a new blsVK and schnorrVK and register this node -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer by granting allowance to the contract -// vm.startPrank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // Balances before registration -// assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); - -// BN254.G1Point memory badSig = -// BN254.G1Point(BN254.BaseField.wrap(0), BN254.BaseField.wrap(0)); - -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// // Step 2: generate a new blsVK and schnorrVK -// seed = "234"; -// (BN254.G2Point memory newBlsVK, EdOnBN254.EdOnBN254Point memory newSchnorrVK,) = -// genClientWallet(exampleTokenCreator, seed); - -// // Step 3: attempt to update the consensus keys with the new keys but invalid signature -// vm.expectRevert(BLSSig.BLSSigVerificationFailed.selector); -// stakeTable.updateConsensusKeys(newBlsVK, newSchnorrVK, badSig); - -// vm.stopPrank(); -// } - -// function test_RevertWhen_UpdateConsensusKeysWithZeroBlsKeyButNewSchnorrVK() public { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// //Step 1: generate a new blsVK and schnorrVK and register this node -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer by granting allowance to the contract -// vm.startPrank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // Balances before registration -// assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); - -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.Registered(exampleTokenCreator, 1, depositAmount); -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// // Step 2: generate an empty and new schnorrVK -// seed = "234"; -// (, EdOnBN254.EdOnBN254Point memory newSchnorrVK,) = -// genClientWallet(exampleTokenCreator, seed); - -// BN254.G2Point memory emptyBlsVK = BN254.G2Point( -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0) -// ); - -// // Step 3: update the consensus keys with the new schnorr Key but zero bls key which -// // indicates no change in the bls key -// vm.expectRevert(S.InvalidBlsVK.selector); -// stakeTable.updateConsensusKeys(emptyBlsVK, newSchnorrVK, sig); - -// vm.stopPrank(); -// } - -// function test_RevertWhen_UpdateConsensusKeysWithZeroSchnorrVKButNewBlsVK() public { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// //Step 1: generate a new blsVK and schnorrVK and register this node -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer by granting allowance to the contract -// vm.startPrank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // Balances before registration -// assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); - -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// // Step 2: generate a new blsVK -// seed = "234"; -// (BN254.G2Point memory newBlsVK,, BN254.G1Point memory newSig) = -// genClientWallet(exampleTokenCreator, seed); - -// // Step 3: generate empty schnorrVK -// EdOnBN254.EdOnBN254Point memory emptySchnorrVK = EdOnBN254.EdOnBN254Point(0, 0); - -// // Step 4: update the consensus keys with the new bls keys but empty schnorrVK -// vm.expectRevert(S.InvalidSchnorrVK.selector); -// stakeTable.updateConsensusKeys(newBlsVK, emptySchnorrVK, newSig); - -// vm.stopPrank(); -// } - -// function test_UpdateConsensusKeysWithSameBlsKeyButNewSchnorrVK_Succeeds() public { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// //Step 1: generate a new blsVK and schnorrVK and register this node -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory blsSig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer by granting allowance to the contract -// vm.startPrank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // Balances before registration -// assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); - -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.Registered(exampleTokenCreator, 1, depositAmount); -// stakeTable.register(blsVK, schnorrVK, depositAmount, blsSig, validUntilEpoch); - -// // Step 2: generate a new schnorrVK -// seed = "234"; -// (, EdOnBN254.EdOnBN254Point memory newSchnorrVK,) = -// genClientWallet(exampleTokenCreator, seed); - -// // Step 3: update the consensus keys with the new schnorrVK -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.UpdatedConsensusKeys(exampleTokenCreator, blsVK, newSchnorrVK); -// stakeTable.updateConsensusKeys(blsVK, newSchnorrVK, blsSig); - -// // Step 4: verify the update -// AbstractStakeTable.Node memory node = stakeTable.lookupNode(exampleTokenCreator); -// assertTrue(stakeTable._isEqualBlsKey(node.blsVK, blsVK)); // same as current bls vk -// assertTrue(EdOnBN254.isEqual(node.schnorrVK, newSchnorrVK)); // new schnorr vk -// assertEq(node.balance, depositAmount); //same balance -// assertEq(node.account, exampleTokenCreator); //same account - -// vm.stopPrank(); -// } - -// function test_UpdateConsensusKeysWithNewBlsKeyButSameSchnorrVK_Succeeds() public { -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// //Step 1: generate a new blsVK and schnorrVK and register this node -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer by granting allowance to the contract -// vm.startPrank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // Balances before registration -// assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); - -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.Registered(exampleTokenCreator, 1, depositAmount); -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// // Step 2: generate an empty and new schnorrVK -// seed = "234"; -// (BN254.G2Point memory newBlsVK,, BN254.G1Point memory newSig) = -// genClientWallet(exampleTokenCreator, seed); - -// // Step 3: update the consensus keys with the same bls keys but new schnorrV -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.UpdatedConsensusKeys(exampleTokenCreator, newBlsVK, schnorrVK); -// stakeTable.updateConsensusKeys(newBlsVK, schnorrVK, newSig); - -// // Step 4: verify the update -// AbstractStakeTable.Node memory node = stakeTable.lookupNode(exampleTokenCreator); -// assertTrue(stakeTable._isEqualBlsKey(node.blsVK, newBlsVK)); // same as current bls vk -// assertTrue(EdOnBN254.isEqual(node.schnorrVK, schnorrVK)); // same as current schnorr vk -// assertEq(node.balance, depositAmount); //same balance -// assertEq(node.account, exampleTokenCreator); //same account - -// vm.stopPrank(); -// } - -// function test_lookupNodeAndLookupStake_fails() public { -// address randomUser = makeAddr("randomUser"); - -// // lookup the stake for an address that is not registered and verify the amount is empty -// uint256 stakeAmount = stakeTable.lookupStake(randomUser); -// assertEq(stakeAmount, 0); - -// // lookup the node for an address that is not registered and verify the data is empty -// AbstractStakeTable.Node memory node = stakeTable.lookupNode(randomUser); -// assertEq(node.account, address(0)); -// assertEq(node.balance, 0); -// assertEq(node.registerEpoch, 0); -// assertTrue( -// stakeTable._isEqualBlsKey( -// node.blsVK, -// BN254.G2Point( -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0) -// ) -// ) -// ); -// assertTrue(EdOnBN254.isEqual(node.schnorrVK, EdOnBN254.EdOnBN254Point(0, 0))); - -// // look up the stake for the zero address and verify the amount is empty -// stakeAmount = stakeTable.lookupStake(address(0)); -// assertEq(stakeAmount, 0); - -// // look up the node for the zero address and verify the data is empty -// node = stakeTable.lookupNode(address(0)); -// assertEq(node.account, address(0)); -// assertEq(node.balance, 0); -// assertEq(node.registerEpoch, 0); -// assertTrue( -// stakeTable._isEqualBlsKey( -// node.blsVK, -// BN254.G2Point( -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0), -// BN254.BaseField.wrap(0) -// ) -// ) -// ); -// assertTrue(EdOnBN254.isEqual(node.schnorrVK, EdOnBN254.EdOnBN254Point(0, 0))); -// } - -// function test_WithdrawFunds_succeeds() public { -// // register -> updateEpoch -> requestExit -> updateEpoch -> withdraw -// // Register the node and set exit epoch -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer by granting allowance to the contract -// vm.startPrank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // Balances before registration -// assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); - -// // register the node -// vm.startPrank(exampleTokenCreator); -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.Registered(exampleTokenCreator, 1, depositAmount); -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// // the node must be registered before you can exit so update the hotshot block number on -// the -// // light client contract -// S.Node memory node = stakeTable.lookupNode(exampleTokenCreator); -// lcMock.setFinalizedState( -// LightClient.LightClientState(0, node.registerEpoch + 1, BN254.ScalarField.wrap(0)) -// ); -// assertGe(stakeTable.currentEpoch(), node.registerEpoch + 1); - -// stakeTable.requestExit(); - -// // update the hotshot block number on the light client contract to be greater than the -// // exitEpoch -// // and the exitEscrowPeriod is over -// node = stakeTable.lookupNode(exampleTokenCreator); -// uint64 exitEscrowPeriod = stakeTable.mockExitEscrowPeriod(node); -// uint64 validWithdrawalEpoch = node.exitEpoch + exitEscrowPeriod + 1; -// lcMock.setFinalizedState( -// LightClient.LightClientState(0, validWithdrawalEpoch, BN254.ScalarField.wrap(0)) -// ); -// assertGe(stakeTable.currentEpoch(), validWithdrawalEpoch); - -// // Withdraw the funds -// vm.startPrank(exampleTokenCreator); -// uint256 balance = stakeTable.withdrawFunds(); -// vm.stopPrank(); - -// // verify the withdraw -// assertEq(balance, depositAmount); -// assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); -// assertEq(stakeTable.totalStake(), 0); -// assertEq(stakeTable.lookupNode(exampleTokenCreator).balance, 0); -// assertEq(stakeTable.lookupNode(exampleTokenCreator).account, address(0)); - -// // test withdraw fails if the user tries to withdraw again -// vm.expectRevert(S.NodeNotRegistered.selector); -// stakeTable.withdrawFunds(); - -// vm.stopPrank(); -// } - -// function test_WithdrawFunds_RevertWhen_NodeNotRegistered() public { -// // Register the node and set exit epoch -// uint64 depositAmount = 10 ether; -// uint64 validUntilEpoch = 5; -// string memory seed = "123"; - -// // generate a new blsVK and schnorrVK and register this node -// ( -// BN254.G2Point memory blsVK, -// EdOnBN254.EdOnBN254Point memory schnorrVK, -// BN254.G1Point memory sig -// ) = genClientWallet(exampleTokenCreator, seed); - -// // Prepare for the token transfer by granting allowance to the contract -// vm.startPrank(exampleTokenCreator); -// token.approve(address(stakeTable), depositAmount); - -// // register the node -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.Registered(exampleTokenCreator, 1, depositAmount); -// stakeTable.register(blsVK, schnorrVK, depositAmount, sig, validUntilEpoch); - -// vm.stopPrank(); - -// vm.startPrank(makeAddr("randomUser")); -// // withdraw the funds -// vm.expectRevert(S.NodeNotRegistered.selector); -// stakeTable.withdrawFunds(); -// vm.stopPrank(); -// } - -// // test set admin succeeds -// function test_setAdmin_succeeds() public { -// vm.prank(exampleTokenCreator); -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit Ownable.OwnershipTransferred(exampleTokenCreator, makeAddr("admin")); -// stakeTable.transferOwnership(makeAddr("admin")); -// assertEq(stakeTable.owner(), makeAddr("admin")); -// } - -// // test set admin fails if not admin or invalid admin address -// function test_revertWhen_setAdmin_NotAdminOrInvalidAdminAddress() public { -// vm.startPrank(makeAddr("randomUser")); -// vm.expectRevert( -// abi.encodeWithSelector( -// Ownable.OwnableUnauthorizedAccount.selector, makeAddr("randomUser") -// ) -// ); -// stakeTable.transferOwnership(makeAddr("admin")); -// vm.stopPrank(); - -// vm.prank(exampleTokenCreator); -// vm.expectRevert(abi.encodeWithSelector(Ownable.OwnableInvalidOwner.selector, -// address(0))); -// stakeTable.transferOwnership(address(0)); -// } - -// // test update min stake amount succeeds -// function test_updateMinStakeAmount_succeeds() public { -// vm.prank(exampleTokenCreator); -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.MinStakeAmountUpdated(10 ether); -// stakeTable.updateMinStakeAmount(10 ether); -// assertEq(stakeTable.minStakeAmount(), 10 ether); -// } - -// // test update min stake amount fails if not admin or invalid stake amount -// function test_revertWhen_updateMinStakeAmount_NotAdminOrInvalidStakeAmount() public { -// vm.startPrank(makeAddr("randomUser")); -// vm.expectRevert( -// abi.encodeWithSelector( -// Ownable.OwnableUnauthorizedAccount.selector, makeAddr("randomUser") -// ) -// ); -// stakeTable.updateMinStakeAmount(10 ether); -// vm.stopPrank(); - -// vm.prank(exampleTokenCreator); -// vm.expectRevert(S.InvalidValue.selector); -// stakeTable.updateMinStakeAmount(0); -// } - -// // test update max churn rate succeeds -// function test_updateMaxChurnRate_succeeds() public { -// vm.prank(exampleTokenCreator); -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.MaxChurnRateUpdated(10); -// stakeTable.updateMaxChurnRate(10); -// assertEq(stakeTable.maxNumChurnPerEpoch(), 10); -// } - -// // test update max churn rate fails if not admin or invalid churn amount -// function test_revertWhen_updateMaxChurnRate_NotAdminOrInvalidChurnAmount() public { -// vm.startPrank(makeAddr("randomUser")); -// vm.expectRevert( -// abi.encodeWithSelector( -// Ownable.OwnableUnauthorizedAccount.selector, makeAddr("randomUser") -// ) -// ); -// stakeTable.updateMaxChurnRate(10); -// vm.stopPrank(); - -// vm.prank(exampleTokenCreator); -// vm.expectRevert(S.InvalidValue.selector); -// stakeTable.updateMaxChurnRate(0); -// } - -// // test update light client address succeeds -// function test_updateLightClientAddress_succeeds() public { -// vm.prank(exampleTokenCreator); -// vm.expectEmit(false, false, false, true, address(stakeTable)); -// emit AbstractStakeTable.LightClientAddressUpdated(makeAddr("lightClient")); -// stakeTable.updateLightClientAddress(makeAddr("lightClient")); -// assertEq(address(stakeTable.lightClient()), makeAddr("lightClient")); -// } - -// // test update light client address fails if not admin or bad address -// function test_revertWhen_updateLightClientAddress_NotAdminOrBadAddress() public { -// vm.startPrank(makeAddr("randomUser")); -// vm.expectRevert( -// abi.encodeWithSelector( -// Ownable.OwnableUnauthorizedAccount.selector, makeAddr("randomUser") -// ) -// ); -// stakeTable.updateLightClientAddress(makeAddr("lightClient")); -// vm.stopPrank(); - -// vm.prank(exampleTokenCreator); -// vm.expectRevert(S.InvalidAddress.selector); -// stakeTable.updateLightClientAddress(address(0)); -// } - -// // TESTS FOR CURRENT EPOCH -// function test_initialEpoch_isZero() public view { -// // assert the current block height is initialBlockHeight -// uint64 initialBlockHeight = 0; -// (, uint64 currentBlockHeight,) = lcMock.finalizedState(); -// assertEq(currentBlockHeight, initialBlockHeight); - -// // Calculate the expected epoch -// uint64 expectedEpoch = 0; - -// // Call the currentEpoch function -// uint64 currentEpoch = stakeTable.currentEpoch(); - -// // Assert that the current epoch is calculated correctly -// assertEq(currentEpoch, expectedEpoch); -// assertEq(currentEpoch, 0); -// } - -// function test_currentEpoch_isUpdated() public { -// test_initialEpoch_isZero(); - -// // set new finalized state on the light client contract -// lcMock.setFinalizedState(LightClient.LightClientState(0, 10, BN254.ScalarField.wrap(0))); - -// // verify the current epoch is updated and is non-zero -// assertNotEq(stakeTable.currentEpoch(), 0); - -// // verify the expected epoch -// uint64 expectedEpoch = 10; // 10 / 1 -// assertEq(stakeTable.currentEpoch(), expectedEpoch); -// } - -// function test_currentEpoch_blocksPerEpochNotOne() public { -// setUpCustom(10, /*churn*/ 3 /*blocksPerEpoch*/ ); -// test_initialEpoch_isZero(); -// lcMock.setFinalizedState(LightClient.LightClientState(0, 2, BN254.ScalarField.wrap(0))); -// assertEq(stakeTable.currentEpoch(), 0); -// lcMock.setFinalizedState(LightClient.LightClientState(0, 3, BN254.ScalarField.wrap(0))); -// assertEq(stakeTable.currentEpoch(), 1); -// } - -// // test various edge cases for the currentEpoch -// function test_currentEpoch_edgeCases() public { -// // test edge case when the block height is less than the hotShotBlocksPerEpoch -// uint64 hotShotBlockHeight = 0; -// lcMock.setFinalizedState( -// LightClient.LightClientState(0, hotShotBlockHeight, BN254.ScalarField.wrap(0)) -// ); -// assertEq(stakeTable.currentEpoch(), 0); - -// // test edge case when the block height is exactly divisible by the hotShotBlocksPerEpoch -// hotShotBlockHeight = 1; -// lcMock.setFinalizedState( -// LightClient.LightClientState(0, hotShotBlockHeight, BN254.ScalarField.wrap(0)) -// ); -// assertEq(stakeTable.currentEpoch(), 1); - -// // test edge case when the block height is greater than the hotShotBlocksPerEpoch -// hotShotBlockHeight = 2; -// lcMock.setFinalizedState( -// LightClient.LightClientState(0, hotShotBlockHeight, BN254.ScalarField.wrap(0)) -// ); -// assertEq(stakeTable.currentEpoch(), 2); - -// // test edge case when the block height is very large -// hotShotBlockHeight = type(uint64).max; -// lcMock.setFinalizedState( -// LightClient.LightClientState(0, hotShotBlockHeight, BN254.ScalarField.wrap(0)) -// ); -// assertEq(stakeTable.currentEpoch(), hotShotBlockHeight / hotShotBlocksPerEpoch); -// } - -// // TESTS FOR NEXT REGISTRATION EPOCH - -// /// @notice test the next available epoch (registration/exit) when the current epoch is zero -// function test_nextAvailableEpoch_whenCurrentEpochIsZero() public { -// // test for registration -// // check that the current epoch is zero -// assertEq(stakeTable.currentEpoch(), 0); - -// // check that the first registration epoch is equal to one -// assertEq(stakeTable.registrationEpoch(), 1); - -// // assert that the next registration epoch is equal to the registration -// // epoch -// stakeTable.mockPushToRegistrationQueue(); -// assertEq(stakeTable.registrationEpoch(), 1); -// assertEq(stakeTable.numPendingRegistrationsInEpoch(), 1); - -// // test for exit -// // assert that the next exit epoch is equal to the exit epoch -// assertEq(stakeTable.exitEpoch(), 1); -// stakeTable.mockPushToExitQueue(); -// assertEq(stakeTable.exitEpoch(), 1); // the epoch is one as you just pushed one exit -// assertEq(stakeTable.numPendingExitsInEpoch(), 1); -// } - -// /// @notice test the next available epoch (registration/exit) when the current epoch + 1 -// /// is greater than the registration/exit epoch -// function test_nextAvailableEpoch_whenCurrentEpochPlusOneIsGreaterThanregistrationEpoch() -// public -// { -// // test for registration -// // set the current epoch to 1 by updating the latest hotshot block number on the LC -// contract -// lcMock.setFinalizedState(LightClient.LightClientState(0, 1, BN254.ScalarField.wrap(0))); -// assertEq(stakeTable.currentEpoch(), 1); - -// // assert that the registrationEpoch is 1 -// assertEq(stakeTable.registrationEpoch(), 1); -// assertGe(stakeTable.currentEpoch() + 1, stakeTable.registrationEpoch()); - -// // assert that the next registration epoch is equal to stakeTable.currentEpoch() + 1 -// stakeTable.mockPushToRegistrationQueue(); -// assertEq(stakeTable.registrationEpoch(), stakeTable.currentEpoch() + 1); -// assertEq(stakeTable.numPendingRegistrationsInEpoch(), 0); - -// // test for exit -// assertEq(stakeTable.exitEpoch(), 1); - -// // assert that the next exit epoch is equal to 2 -// stakeTable.mockPushToExitQueue(); -// assertEq(stakeTable.exitEpoch(), stakeTable.currentEpoch() + 1); -// assertEq(stakeTable.numPendingExitsInEpoch(), 0); -// } - -// /// @notice test nextAvailableEpoch when firstAvailableEpoch (registration/exit) is greater -// than -// /// currentEpoch + 1 -// function test_nextAvailableEpoch_whenFirstAvailableEpochIsGreaterThanCurrentEpochPlusOne() -// public -// { -// // set the current epoch to 1 by updating the latest hotshot block number on the LC -// contract -// lcMock.setFinalizedState(LightClient.LightClientState(0, 1, BN254.ScalarField.wrap(0))); -// assertEq(stakeTable.currentEpoch(), 1); - -// // set the registration epoch to 3 -// uint64 registrationEpoch = 3; -// stakeTable.setRegistrationEpoch(registrationEpoch); - -// // assert that the next registration epoch is greater than the current epoch -// assertGt(stakeTable.registrationEpoch(), stakeTable.currentEpoch()); - -// // assert that the next registration epoch is equal to 3 -// stakeTable.mockPushToRegistrationQueue(); -// assertEq(stakeTable.registrationEpoch(), registrationEpoch); -// assertEq(stakeTable.numPendingRegistrationsInEpoch(), 1); - -// // set the registration epoch to max uint64 -// registrationEpoch = type(uint64).max; -// stakeTable.setRegistrationEpoch(registrationEpoch); - -// // assert that the next registration epoch is equal to max uint64 -// stakeTable.mockPushToRegistrationQueue(); -// assertEq(stakeTable.registrationEpoch(), registrationEpoch); -// assertEq(stakeTable.numPendingRegistrationsInEpoch(), 2); - -// // test for exit -// // set the exit epoch to 3 -// uint64 exitEpoch = 3; -// stakeTable.setExitEpoch(exitEpoch); - -// // assert that the next exit epoch is equal to 3 -// stakeTable.mockPushToExitQueue(); -// assertEq(stakeTable.exitEpoch(), exitEpoch); -// assertEq(stakeTable.numPendingExitsInEpoch(), 1); -// } - -// /// @notice test registrationEpoch when the current epoch + 1 is equal to the -// /// registration/exit epoch -// function test_registrationEpoch_whenCurrentEpochPlusOneIsEqualToregistrationEpoch() public { -// // test for registration -// // set the current epoch to 1 by updating the latest hotshot block number on the LC -// contract -// lcMock.setFinalizedState(LightClient.LightClientState(0, 1, BN254.ScalarField.wrap(0))); -// assertEq(stakeTable.currentEpoch(), 1); - -// // set the registration epoch to 2 -// uint64 registrationEpoch = 2; -// stakeTable.setRegistrationEpoch(registrationEpoch); - -// // assert that the next registration epoch is equal to 2 -// stakeTable.mockPushToRegistrationQueue(); -// assertEq(stakeTable.registrationEpoch(), registrationEpoch); -// assertEq(stakeTable.numPendingRegistrationsInEpoch(), 1); - -// // test for exit -// // set the exit epoch to 2 -// uint64 exitEpoch = 2; -// stakeTable.setExitEpoch(exitEpoch); - -// // assert that the next exit epoch is equal to 2 -// stakeTable.mockPushToExitQueue(); -// assertEq(stakeTable.exitEpoch(), exitEpoch); -// assertEq(stakeTable.numPendingExitsInEpoch(), 1); -// } - -// // test pushToRegistrationQueue reverts when the current epoch is max uint64 -// // note, the current epoch is max uint64 only when the hotshot blocks per epoch is 1 -// // and the hotshot block number is max uint64 -// function test_revertWhen_pushToRegistrationQueue_whenCurrentEpochIsMaxUint64() public { -// // set the current hotshot block number to max uint64 -// lcMock.setFinalizedState( -// LightClient.LightClientState(0, type(uint64).max, BN254.ScalarField.wrap(0)) -// ); -// assertEq(stakeTable.currentEpoch(), type(uint64).max); - -// // set the hotshot blocks per epoch to 1 -// vm.prank(exampleTokenCreator); -// stakeTable.mockUpdateHotShotBlocksPerEpoch(1); -// assertEq(stakeTable.hotShotBlocksPerEpoch(), 1); - -// // push to registration queue and expect a panic due to arithmetic overflow -// vm.expectRevert(stdError.arithmeticError); -// stakeTable.mockPushToRegistrationQueue(); -// } -// } +// Libraries +import "forge-std/Test.sol"; +// import {console} from "forge-std/console.sol"; + +using stdStorage for StdStorage; + +import { ERC20 } from "solmate/utils/SafeTransferLib.sol"; +import { BN254 } from "bn254/BN254.sol"; +import { BLSSig } from "../src/libraries/BLSSig.sol"; +import { EdOnBN254 } from "../src/libraries/EdOnBn254.sol"; +import { AbstractStakeTable } from "../src/interfaces/AbstractStakeTable.sol"; +import { LightClient } from "../src/LightClient.sol"; +import { LightClientMock } from "../test/mocks/LightClientMock.sol"; +import { InitializedAt } from "../src/InitializedAt.sol"; +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { IPlonkVerifier as V } from "../src/interfaces/IPlonkVerifier.sol"; + +// Token contract +import { ExampleToken } from "../src/ExampleToken.sol"; + +// Target contract +import { StakeTable as S } from "../src/StakeTable.sol"; +import { StakeTableMock } from "../test/mocks/StakeTableMock.sol"; + +contract StakeTable_register_Test is Test { + StakeTableMock public stakeTable; + ExampleToken public token; + LightClientMock public lcMock; + uint256 public constant INITIAL_BALANCE = 10 ether; + uint256 public constant ESCROW_PERIOD = 1 weeks; + uint16 public constant COMMISSION = 1234; // 12.34 % + address public exampleTokenCreator; + uint64 public hotShotBlocksPerEpoch = 1; + + function genClientWallet(address sender, string memory seed) + private + returns (BN254.G2Point memory, EdOnBN254.EdOnBN254Point memory, BN254.G1Point memory) + { + // Generate a BLS signature and other values using rust code + string[] memory cmds = new string[](4); + cmds[0] = "diff-test"; + cmds[1] = "gen-client-wallet"; + cmds[2] = vm.toString(sender); + cmds[3] = seed; + + bytes memory result = vm.ffi(cmds); + ( + BN254.G1Point memory blsSig, + BN254.G2Point memory blsVK, + uint256 schnorrVKx, + uint256 schnorrVKy, + ) = abi.decode(result, (BN254.G1Point, BN254.G2Point, uint256, uint256, address)); + + return ( + blsVK, // blsVK + EdOnBN254.EdOnBN254Point(schnorrVKx, schnorrVKy), // schnorrVK + blsSig // sig + ); + } + + function setUpCustom() public { + exampleTokenCreator = makeAddr("tokenCreator"); + vm.prank(exampleTokenCreator); + token = new ExampleToken(INITIAL_BALANCE); + + string[] memory cmds = new string[](3); + cmds[0] = "diff-test"; + cmds[1] = "mock-genesis"; + cmds[2] = "5"; + + bytes memory result = vm.ffi(cmds); + ( + LightClientMock.LightClientState memory state, + LightClientMock.StakeTableState memory stakeState + ) = abi.decode(result, (LightClient.LightClientState, LightClient.StakeTableState)); + LightClientMock.LightClientState memory genesis = state; + LightClientMock.StakeTableState memory genesisStakeTableState = stakeState; + + lcMock = new LightClientMock(genesis, genesisStakeTableState, 864000); + stakeTable = + new StakeTableMock(address(token), address(lcMock), ESCROW_PERIOD, exampleTokenCreator); + } + + // TODO remove? + function setUp() public { + setUpCustom(); + } + + function test_Deployment_StoresBlockNumber() public { + setUp(); + assertEq(stakeTable.initializedAtBlock(), block.number); + } + + function testFuzz_RevertWhen_InvalidBLSSig(uint256 scalar) external { + uint64 depositAmount = 10 ether; + string memory seed = "123"; + + (BN254.G2Point memory blsVK, EdOnBN254.EdOnBN254Point memory schnorrVK,) = + genClientWallet(exampleTokenCreator, seed); + + // Prepare for the token transfer + vm.startPrank(exampleTokenCreator); + token.approve(address(stakeTable), depositAmount); + + // Ensure the scalar is valid + // Note: Apparently BN254.scalarMul is not well defined when the scalar is 0 + scalar = bound(scalar, 1, BN254.R_MOD - 1); + BN254.validateScalarField(BN254.ScalarField.wrap(scalar)); + BN254.G1Point memory badSig = BN254.scalarMul(BN254.P1(), BN254.ScalarField.wrap(scalar)); + BN254.validateG1Point(badSig); + + // Failed signature verification + vm.expectRevert(BLSSig.BLSSigVerificationFailed.selector); + stakeTable.registerValidator(blsVK, schnorrVK, badSig, COMMISSION); + vm.stopPrank(); + } + + // commenting out epoch related tests for now + // function testFuzz_RevertWhen_InvalidNextRegistrationEpoch(uint64 rand) external { + // LCMock.setCurrentEpoch(3); + // uint64 currentEpoch = stakeTable.currentEpoch(); + + // uint64 depositAmount = 10 ether; + // vm.prank(exampleTokenCreator); + // token.approve(address(stakeTable), depositAmount); + + // ( + // BN254.G2Point memory blsVK, + // EdOnBN254.EdOnBN254Point memory schnorrVK, + // BN254.G1Point memory sig + // ) = genClientWallet(exampleTokenCreator); + + // // Invalid next registration epoch + // uint64 validUntilEpoch = uint64(bound(rand, 0, currentEpoch - 1)); + // vm.prank(exampleTokenCreator); + // vm.expectRevert( + // abi.encodeWithSelector( + // S.InvalidNextRegistrationEpoch.selector, currentEpoch + 1, validUntilEpoch + // ) + // ); + // stakeTable.registerValidator + // blsVK, + // schnorrVK, + // depositAmount, + // sig, + // validUntilEpoch + // ); + + // // Valid next registration epoch + // validUntilEpoch = uint64(bound(rand, currentEpoch + 1, type(uint64).max)); + // vm.prank(exampleTokenCreator); + // stakeTable.registerValidator + // blsVK, + // schnorrVK, + // depositAmount, + // sig, + // validUntilEpoch + // ); + // } + + function test_RevertWhen_NodeAlreadyRegistered() external { + uint64 depositAmount = 10 ether; + string memory seed = "123"; + + ( + BN254.G2Point memory blsVK, + EdOnBN254.EdOnBN254Point memory schnorrVK, + BN254.G1Point memory sig + ) = genClientWallet(exampleTokenCreator, seed); + + // Prepare for the token transfer + vm.prank(exampleTokenCreator); + token.approve(address(stakeTable), depositAmount); + + // Successful call to register + vm.prank(exampleTokenCreator); + stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + + // The node is already registered + vm.prank(exampleTokenCreator); + vm.expectRevert(S.ValidatorAlreadyRegistered.selector); + stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + } + + function test_RevertWhen_NoTokenAllowanceOrBalance() external { + uint64 depositAmount = 10 ether; + string memory seed = "123"; + + address validator = makeAddr("validator"); + address delegator = makeAddr("delegator"); + ( + BN254.G2Point memory blsVK, + EdOnBN254.EdOnBN254Point memory schnorrVK, + BN254.G1Point memory sig + ) = genClientWallet(validator, seed); + + vm.prank(validator); + stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + + vm.startPrank(delegator); + // The call to register is expected to fail because the depositAmount has not been approved + // and thus the stake table contract cannot lock the stake. + vm.expectRevert(abi.encodeWithSelector(S.InsufficientAllowance.selector, 0, depositAmount)); + stakeTable.delegate(validator, depositAmount); + + // Prepare for the token transfer by giving the StakeTable contract the required allowance + token.approve(address(stakeTable), depositAmount); + + // TODO MA: this error is from solady's ERC20 implementation, needs to be updated in case we + // use another ERC20 implementation for our token. I think it's fair to expect a revert from + // *our* ERC20 token if the does not have the balance. + vm.expectRevert("TRANSFER_FROM_FAILED"); + stakeTable.delegate(validator, depositAmount); + + vm.stopPrank(); + } + + /// @dev Tests a correct registration + function test_Registration_succeeds() external { + uint64 depositAmount = 10 ether; + string memory seed = "123"; + + ( + BN254.G2Point memory blsVK, + EdOnBN254.EdOnBN254Point memory schnorrVK, + BN254.G1Point memory sig + ) = genClientWallet(exampleTokenCreator, seed); + + // Prepare for the token transfer + vm.prank(exampleTokenCreator); + token.approve(address(stakeTable), depositAmount); + + // Balances before registration + assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); + + // Check event is emitted after calling successfully `register` + vm.expectEmit(false, false, false, true, address(stakeTable)); + emit AbstractStakeTable.ValidatorRegistered( + exampleTokenCreator, blsVK, schnorrVK, COMMISSION + ); + vm.prank(exampleTokenCreator); + stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + } + + /// @dev Tests a correct registration + function test_RevertWhen_InvalidBlsVK_or_InvalidSchnorrVK_on_Registration() external { + uint64 depositAmount = 10 ether; + string memory seed = "123"; + + // generate a valid blsVK and schnorrVK + ( + BN254.G2Point memory blsVK, + EdOnBN254.EdOnBN254Point memory schnorrVK, + BN254.G1Point memory sig + ) = genClientWallet(exampleTokenCreator, seed); + + // Prepare for the token transfer + vm.startPrank(exampleTokenCreator); + token.approve(address(stakeTable), depositAmount); + + // revert when the blsVK is the zero point + BN254.G2Point memory zeroBlsVK = BN254.G2Point( + BN254.BaseField.wrap(0), + BN254.BaseField.wrap(0), + BN254.BaseField.wrap(0), + BN254.BaseField.wrap(0) + ); + vm.expectRevert(BLSSig.BLSSigVerificationFailed.selector); + stakeTable.registerValidator(zeroBlsVK, schnorrVK, sig, COMMISSION); + + // revert when the schnorrVK is the zero point + EdOnBN254.EdOnBN254Point memory zeroSchnorrVK = EdOnBN254.EdOnBN254Point(0, 0); + vm.expectRevert(S.InvalidSchnorrVK.selector); + stakeTable.registerValidator(blsVK, zeroSchnorrVK, sig, COMMISSION); + + vm.stopPrank(); + } + + function test_UpdateConsensusKeys_Succeeds() public { + uint64 depositAmount = 10 ether; + string memory seed = "123"; + + //Step 1: generate a new blsVK and schnorrVK and register this node + ( + BN254.G2Point memory blsVK, + EdOnBN254.EdOnBN254Point memory schnorrVK, + BN254.G1Point memory sig + ) = genClientWallet(exampleTokenCreator, seed); + + // Prepare for the token transfer by granting allowance to the contract + vm.startPrank(exampleTokenCreator); + token.approve(address(stakeTable), depositAmount); + + // Balances before registration + assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); + + // Check event is emitted after calling successfully `register` + vm.expectEmit(false, false, false, true, address(stakeTable)); + emit AbstractStakeTable.ValidatorRegistered( + exampleTokenCreator, blsVK, schnorrVK, COMMISSION + ); + stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + + // Step 2: generate a new blsVK and schnorrVK + seed = "234"; + ( + BN254.G2Point memory newBlsVK, + EdOnBN254.EdOnBN254Point memory newSchnorrVK, + BN254.G1Point memory newBlsSig + ) = genClientWallet(exampleTokenCreator, seed); + + // Step 3: update the consensus keys + vm.expectEmit(false, false, false, true, address(stakeTable)); + emit AbstractStakeTable.ConsensusKeysUpdated(exampleTokenCreator, newBlsVK, newSchnorrVK); + stakeTable.updateConsensusKeys(newBlsVK, newSchnorrVK, newBlsSig); + + vm.stopPrank(); + } + + function test_RevertWhen_UpdateConsensusKeysWithSameBlsKey() public { + uint64 depositAmount = 10 ether; + string memory seed = "123"; + + //Step 1: generate a new blsVK and schnorrVK and register this node + ( + BN254.G2Point memory blsVK, + EdOnBN254.EdOnBN254Point memory schnorrVK, + BN254.G1Point memory sig + ) = genClientWallet(exampleTokenCreator, seed); + + // Prepare for the token transfer by granting allowance to the contract + vm.startPrank(exampleTokenCreator); + token.approve(address(stakeTable), depositAmount); + + // Balances before registration + assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); + + stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + + // Step 2: update the consensus keys with the same keys + vm.expectRevert(S.BlsKeyAlreadyUsed.selector); + stakeTable.updateConsensusKeys(blsVK, schnorrVK, sig); + + vm.stopPrank(); + } + + function test_RevertWhen_UpdateConsensusKeysWithEmptyKeys() public { + uint64 depositAmount = 10 ether; + string memory seed = "123"; + + //Step 1: generate a new blsVK and schnorrVK and register this node + ( + BN254.G2Point memory blsVK, + EdOnBN254.EdOnBN254Point memory schnorrVK, + BN254.G1Point memory sig + ) = genClientWallet(exampleTokenCreator, seed); + + // Prepare for the token transfer by granting allowance to the contract + vm.startPrank(exampleTokenCreator); + token.approve(address(stakeTable), depositAmount); + + // Balances before registration + assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); + + stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + + // empty keys + BN254.G2Point memory emptyBlsVK = BN254.G2Point( + BN254.BaseField.wrap(0), + BN254.BaseField.wrap(0), + BN254.BaseField.wrap(0), + BN254.BaseField.wrap(0) + ); + EdOnBN254.EdOnBN254Point memory emptySchnorrVK = EdOnBN254.EdOnBN254Point(0, 0); + + // Step 2: attempt to update the consensus keys with the same keys + vm.expectRevert(S.InvalidSchnorrVK.selector); + stakeTable.updateConsensusKeys(emptyBlsVK, emptySchnorrVK, sig); + + vm.stopPrank(); + } + + function test_RevertWhen_UpdateConsensusKeysWithInvalidSignature() public { + uint64 depositAmount = 10 ether; + string memory seed = "123"; + + //Step 1: generate a new blsVK and schnorrVK and register this node + ( + BN254.G2Point memory blsVK, + EdOnBN254.EdOnBN254Point memory schnorrVK, + BN254.G1Point memory sig + ) = genClientWallet(exampleTokenCreator, seed); + + // Prepare for the token transfer by granting allowance to the contract + vm.startPrank(exampleTokenCreator); + token.approve(address(stakeTable), depositAmount); + + // Balances before registration + assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); + + BN254.G1Point memory badSig = + BN254.G1Point(BN254.BaseField.wrap(0), BN254.BaseField.wrap(0)); + + stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + + // Step 2: generate a new blsVK and schnorrVK + seed = "234"; + (BN254.G2Point memory newBlsVK, EdOnBN254.EdOnBN254Point memory newSchnorrVK,) = + genClientWallet(exampleTokenCreator, seed); + + // Step 3: attempt to update the consensus keys with the new keys but invalid signature + vm.expectRevert(BLSSig.BLSSigVerificationFailed.selector); + stakeTable.updateConsensusKeys(newBlsVK, newSchnorrVK, badSig); + + vm.stopPrank(); + } + + function test_RevertWhen_UpdateConsensusKeysWithZeroBlsKeyButNewSchnorrVK() public { + uint64 depositAmount = 10 ether; + string memory seed = "123"; + + //Step 1: generate a new blsVK and schnorrVK and register this node + ( + BN254.G2Point memory blsVK, + EdOnBN254.EdOnBN254Point memory schnorrVK, + BN254.G1Point memory sig + ) = genClientWallet(exampleTokenCreator, seed); + + // Prepare for the token transfer by granting allowance to the contract + vm.startPrank(exampleTokenCreator); + token.approve(address(stakeTable), depositAmount); + + // Balances before registration + assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); + + vm.expectEmit(false, false, false, true, address(stakeTable)); + emit AbstractStakeTable.ValidatorRegistered( + exampleTokenCreator, blsVK, schnorrVK, COMMISSION + ); + stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + + // Step 2: generate an empty and new schnorrVK + seed = "234"; + (, EdOnBN254.EdOnBN254Point memory newSchnorrVK,) = + genClientWallet(exampleTokenCreator, seed); + + BN254.G2Point memory emptyBlsVK = BN254.G2Point( + BN254.BaseField.wrap(0), + BN254.BaseField.wrap(0), + BN254.BaseField.wrap(0), + BN254.BaseField.wrap(0) + ); + + // Step 3: empty bls key -> wrong signature + vm.expectRevert(BLSSig.BLSSigVerificationFailed.selector); + stakeTable.updateConsensusKeys(emptyBlsVK, newSchnorrVK, sig); + + vm.stopPrank(); + } + + function test_RevertWhen_UpdateConsensusKeysWithZeroSchnorrVKButNewBlsVK() public { + uint64 depositAmount = 10 ether; + string memory seed = "123"; + + //Step 1: generate a new blsVK and schnorrVK and register this node + ( + BN254.G2Point memory blsVK, + EdOnBN254.EdOnBN254Point memory schnorrVK, + BN254.G1Point memory sig + ) = genClientWallet(exampleTokenCreator, seed); + + // Prepare for the token transfer by granting allowance to the contract + vm.startPrank(exampleTokenCreator); + token.approve(address(stakeTable), depositAmount); + + // Balances before registration + assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); + + stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + + // Step 2: generate a new blsVK + seed = "234"; + (BN254.G2Point memory newBlsVK,, BN254.G1Point memory newSig) = + genClientWallet(exampleTokenCreator, seed); + + // Step 3: generate empty schnorrVK + EdOnBN254.EdOnBN254Point memory emptySchnorrVK = EdOnBN254.EdOnBN254Point(0, 0); + + // Step 4: update the consensus keys with the new bls keys but empty schnorrVK + vm.expectRevert(S.InvalidSchnorrVK.selector); + stakeTable.updateConsensusKeys(newBlsVK, emptySchnorrVK, newSig); + + vm.stopPrank(); + } + + // TODO: MA the contract currently doesn't allow updating the schorr key without updating the + // BLS key. Need to discuss with product team if this is fine. + // + // function test_UpdateConsensusKeysWithSameBlsKeyButNewSchnorrVK_Succeeds() public { + // uint64 depositAmount = 10 ether; + // string memory seed = "123"; + + // //Step 1: generate a new blsVK and schnorrVK and register this node + // ( + // BN254.G2Point memory blsVK, + // EdOnBN254.EdOnBN254Point memory schnorrVK, + // BN254.G1Point memory blsSig + // ) = genClientWallet(exampleTokenCreator, seed); + + // // Prepare for the token transfer by granting allowance to the contract + // vm.startPrank(exampleTokenCreator); + // token.approve(address(stakeTable), depositAmount); + + // // Balances before registration + // assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); + + // vm.expectEmit(false, false, false, true, address(stakeTable)); + // emit AbstractStakeTable.ValidatorRegistered(exampleTokenCreator, blsVK, schnorrVK, + // COMMISSION); + // stakeTable.registerValidator(blsVK, schnorrVK, blsSig, COMMISSION); + + // // Step 2: generate a new schnorrVK + // seed = "234"; + // (, EdOnBN254.EdOnBN254Point memory newSchnorrVK,) = + // genClientWallet(exampleTokenCreator, seed); + + // // Step 3: update the consensus keys with the new schnorrVK + // vm.expectEmit(false, false, false, true, address(stakeTable)); + // emit AbstractStakeTable.ConsensusKeysUpdated(exampleTokenCreator, blsVK, newSchnorrVK); + // stakeTable.updateConsensusKeys(blsVK, newSchnorrVK, blsSig); + + // vm.stopPrank(); + // } + + function test_UpdateConsensusKeysWithNewBlsKeyButSameSchnorrVK_Succeeds() public { + uint64 depositAmount = 10 ether; + string memory seed = "123"; + + //Step 1: generate a new blsVK and schnorrVK and register this node + ( + BN254.G2Point memory blsVK, + EdOnBN254.EdOnBN254Point memory schnorrVK, + BN254.G1Point memory sig + ) = genClientWallet(exampleTokenCreator, seed); + + // Prepare for the token transfer by granting allowance to the contract + vm.startPrank(exampleTokenCreator); + token.approve(address(stakeTable), depositAmount); + + // Balances before registration + assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); + + vm.expectEmit(false, false, false, true, address(stakeTable)); + emit AbstractStakeTable.ValidatorRegistered( + exampleTokenCreator, blsVK, schnorrVK, COMMISSION + ); + stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + + // Step 2: generate an empty and new schnorrVK + seed = "234"; + (BN254.G2Point memory newBlsVK,, BN254.G1Point memory newSig) = + genClientWallet(exampleTokenCreator, seed); + + // Step 3: update the consensus keys with the same bls keys but new schnorrV + vm.expectEmit(false, false, false, true, address(stakeTable)); + emit AbstractStakeTable.ConsensusKeysUpdated(exampleTokenCreator, newBlsVK, schnorrVK); + stakeTable.updateConsensusKeys(newBlsVK, schnorrVK, newSig); + + vm.stopPrank(); + } + + function test_claimWithdrawal_succeeds() public { + string memory seed = "123"; + + ( + BN254.G2Point memory blsVK, + EdOnBN254.EdOnBN254Point memory schnorrVK, + BN254.G1Point memory sig + ) = genClientWallet(exampleTokenCreator, seed); + + // Prepare for the token transfer by granting allowance to the contract + vm.startPrank(exampleTokenCreator); + token.approve(address(stakeTable), 3 ether); + + // Balances before registration + assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); + + // register the node + vm.startPrank(exampleTokenCreator); + vm.expectEmit(false, false, false, true, address(stakeTable)); + emit AbstractStakeTable.ValidatorRegistered( + exampleTokenCreator, blsVK, schnorrVK, COMMISSION + ); + stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + + // Delegate some funds + stakeTable.delegate(exampleTokenCreator, 3 ether); + assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE - 3 ether); + assertEq(token.balanceOf(address(stakeTable)), 3 ether); + + // Request partial undelegation of funds + stakeTable.undelegate(exampleTokenCreator, 1 ether); + + // Withdraw too early + vm.expectRevert(S.PrematureWithdrawal.selector); + stakeTable.claimWithdrawal(exampleTokenCreator); + + // Withdraw after escrow period + vm.warp(block.timestamp + ESCROW_PERIOD); + stakeTable.claimWithdrawal(exampleTokenCreator); + assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE - 2 ether); + + // Request undelegation of rest of unds + stakeTable.undelegate(exampleTokenCreator, 2 ether); + + // Try to undelegate more + // TODO MA: why doesn't this work? + // stakeTable.undelegate(exampleTokenCreator, 1 wei); + // vm.expectRevert(abi.encodeWithSelector(S.InsufficientBalance.selector, 0)); + + // Withdraw after escrow period + vm.warp(block.timestamp + ESCROW_PERIOD); + stakeTable.claimWithdrawal(exampleTokenCreator); + assertEq(token.balanceOf(exampleTokenCreator), INITIAL_BALANCE); + + vm.stopPrank(); + } + + // function test_WithdrawFunds_RevertWhen_NodeNotRegistered() public { + // // Register the node and set exit epoch + // uint64 depositAmount = 10 ether; + // uint64 validUntilEpoch = 5; + // string memory seed = "123"; + + // // generate a new blsVK and schnorrVK and register this node + // ( + // BN254.G2Point memory blsVK, + // EdOnBN254.EdOnBN254Point memory schnorrVK, + // BN254.G1Point memory sig + // ) = genClientWallet(exampleTokenCreator, seed); + + // // Prepare for the token transfer by granting allowance to the contract + // vm.startPrank(exampleTokenCreator); + // token.approve(address(stakeTable), depositAmount); + + // // register the node + // vm.expectEmit(false, false, false, true, address(stakeTable)); + // emit AbstractStakeTable.ValidatorRegistered(exampleTokenCreator, blsVK, schnorrVK, + // COMMISSION); + // stakeTable.registerValidator(blsVK, schnorrVK, sig, COMMISSION); + + // vm.stopPrank(); + + // vm.startPrank(makeAddr("randomUser")); + // // withdraw the funds + // vm.expectRevert(S.NodeNotRegistered.selector); + // stakeTable.withdrawFunds(); + // vm.stopPrank(); + // } + + // test set admin succeeds + function test_setAdmin_succeeds() public { + vm.prank(exampleTokenCreator); + vm.expectEmit(false, false, false, true, address(stakeTable)); + emit Ownable.OwnershipTransferred(exampleTokenCreator, makeAddr("admin")); + stakeTable.transferOwnership(makeAddr("admin")); + assertEq(stakeTable.owner(), makeAddr("admin")); + } + + // test set admin fails if not admin or invalid admin address + function test_revertWhen_setAdmin_NotAdminOrInvalidAdminAddress() public { + vm.startPrank(makeAddr("randomUser")); + vm.expectRevert( + abi.encodeWithSelector( + Ownable.OwnableUnauthorizedAccount.selector, makeAddr("randomUser") + ) + ); + stakeTable.transferOwnership(makeAddr("admin")); + vm.stopPrank(); + + vm.prank(exampleTokenCreator); + vm.expectRevert(abi.encodeWithSelector(Ownable.OwnableInvalidOwner.selector, address(0))); + stakeTable.transferOwnership(address(0)); + } + + // TESTS FOR CURRENT EPOCH + // function test_initialEpoch_isZero() public view { + // // assert the current block height is initialBlockHeight + // uint64 initialBlockHeight = 0; + // (, uint64 currentBlockHeight,) = lcMock.finalizedState(); + // assertEq(currentBlockHeight, initialBlockHeight); + + // // Calculate the expected epoch + // uint64 expectedEpoch = 0; + + // // Call the currentEpoch function + // uint64 currentEpoch = stakeTable.currentEpoch(); + + // // Assert that the current epoch is calculated correctly + // assertEq(currentEpoch, expectedEpoch); + // assertEq(currentEpoch, 0); + // } + + // function test_currentEpoch_isUpdated() public { + // test_initialEpoch_isZero(); + + // // set new finalized state on the light client contract + // lcMock.setFinalizedState(LightClient.LightClientState(0, 10, BN254.ScalarField.wrap(0))); + + // // verify the current epoch is updated and is non-zero + // assertNotEq(stakeTable.currentEpoch(), 0); + + // // verify the expected epoch + // uint64 expectedEpoch = 10; // 10 / 1 + // assertEq(stakeTable.currentEpoch(), expectedEpoch); + // } + + // function test_currentEpoch_blocksPerEpochNotOne() public { + // setUpCustom(10, /*churn*/ 3 /*blocksPerEpoch*/ ); + // test_initialEpoch_isZero(); + // lcMock.setFinalizedState(LightClient.LightClientState(0, 2, BN254.ScalarField.wrap(0))); + // assertEq(stakeTable.currentEpoch(), 0); + // lcMock.setFinalizedState(LightClient.LightClientState(0, 3, BN254.ScalarField.wrap(0))); + // assertEq(stakeTable.currentEpoch(), 1); + // } + + // // test various edge cases for the currentEpoch + // function test_currentEpoch_edgeCases() public { + // // test edge case when the block height is less than the hotShotBlocksPerEpoch + // uint64 hotShotBlockHeight = 0; + // lcMock.setFinalizedState( + // LightClient.LightClientState(0, hotShotBlockHeight, BN254.ScalarField.wrap(0)) + // ); + // assertEq(stakeTable.currentEpoch(), 0); + + // // test edge case when the block height is exactly divisible by the hotShotBlocksPerEpoch + // hotShotBlockHeight = 1; + // lcMock.setFinalizedState( + // LightClient.LightClientState(0, hotShotBlockHeight, BN254.ScalarField.wrap(0)) + // ); + // assertEq(stakeTable.currentEpoch(), 1); + + // // test edge case when the block height is greater than the hotShotBlocksPerEpoch + // hotShotBlockHeight = 2; + // lcMock.setFinalizedState( + // LightClient.LightClientState(0, hotShotBlockHeight, BN254.ScalarField.wrap(0)) + // ); + // assertEq(stakeTable.currentEpoch(), 2); + + // // test edge case when the block height is very large + // hotShotBlockHeight = type(uint64).max; + // lcMock.setFinalizedState( + // LightClient.LightClientState(0, hotShotBlockHeight, BN254.ScalarField.wrap(0)) + // ); + // assertEq(stakeTable.currentEpoch(), hotShotBlockHeight / hotShotBlocksPerEpoch); + // } + + // // TESTS FOR NEXT REGISTRATION EPOCH + + // /// @notice test the next available epoch (registration/exit) when the current epoch is zero + // function test_nextAvailableEpoch_whenCurrentEpochIsZero() public { + // // test for registration + // // check that the current epoch is zero + // assertEq(stakeTable.currentEpoch(), 0); + + // // check that the first registration epoch is equal to one + // assertEq(stakeTable.registrationEpoch(), 1); + + // // assert that the next registration epoch is equal to the registration + // // epoch + // stakeTable.mockPushToRegistrationQueue(); + // assertEq(stakeTable.registrationEpoch(), 1); + // assertEq(stakeTable.numPendingRegistrationsInEpoch(), 1); + + // // test for exit + // // assert that the next exit epoch is equal to the exit epoch + // assertEq(stakeTable.exitEpoch(), 1); + // stakeTable.mockPushToExitQueue(); + // assertEq(stakeTable.exitEpoch(), 1); // the epoch is one as you just pushed one exit + // assertEq(stakeTable.numPendingExitsInEpoch(), 1); + // } + + // /// @notice test the next available epoch (registration/exit) when the current epoch + 1 + // /// is greater than the registration/exit epoch + // function test_nextAvailableEpoch_whenCurrentEpochPlusOneIsGreaterThanregistrationEpoch() + // public + // { + // // test for registration + // // set the current epoch to 1 by updating the latest hotshot block number on the LC + // contract + // lcMock.setFinalizedState(LightClient.LightClientState(0, 1, BN254.ScalarField.wrap(0))); + // assertEq(stakeTable.currentEpoch(), 1); + + // // assert that the registrationEpoch is 1 + // assertEq(stakeTable.registrationEpoch(), 1); + // assertGe(stakeTable.currentEpoch() + 1, stakeTable.registrationEpoch()); + + // // assert that the next registration epoch is equal to stakeTable.currentEpoch() + 1 + // stakeTable.mockPushToRegistrationQueue(); + // assertEq(stakeTable.registrationEpoch(), stakeTable.currentEpoch() + 1); + // assertEq(stakeTable.numPendingRegistrationsInEpoch(), 0); + + // // test for exit + // assertEq(stakeTable.exitEpoch(), 1); + + // // assert that the next exit epoch is equal to 2 + // stakeTable.mockPushToExitQueue(); + // assertEq(stakeTable.exitEpoch(), stakeTable.currentEpoch() + 1); + // assertEq(stakeTable.numPendingExitsInEpoch(), 0); + // } + + // /// @notice test nextAvailableEpoch when firstAvailableEpoch (registration/exit) is greater + // than + // /// currentEpoch + 1 + // function test_nextAvailableEpoch_whenFirstAvailableEpochIsGreaterThanCurrentEpochPlusOne() + // public + // { + // // set the current epoch to 1 by updating the latest hotshot block number on the LC + // contract + // lcMock.setFinalizedState(LightClient.LightClientState(0, 1, BN254.ScalarField.wrap(0))); + // assertEq(stakeTable.currentEpoch(), 1); + + // // set the registration epoch to 3 + // uint64 registrationEpoch = 3; + // stakeTable.setRegistrationEpoch(registrationEpoch); + + // // assert that the next registration epoch is greater than the current epoch + // assertGt(stakeTable.registrationEpoch(), stakeTable.currentEpoch()); + + // // assert that the next registration epoch is equal to 3 + // stakeTable.mockPushToRegistrationQueue(); + // assertEq(stakeTable.registrationEpoch(), registrationEpoch); + // assertEq(stakeTable.numPendingRegistrationsInEpoch(), 1); + + // // set the registration epoch to max uint64 + // registrationEpoch = type(uint64).max; + // stakeTable.setRegistrationEpoch(registrationEpoch); + + // // assert that the next registration epoch is equal to max uint64 + // stakeTable.mockPushToRegistrationQueue(); + // assertEq(stakeTable.registrationEpoch(), registrationEpoch); + // assertEq(stakeTable.numPendingRegistrationsInEpoch(), 2); + + // // test for exit + // // set the exit epoch to 3 + // uint64 exitEpoch = 3; + // stakeTable.setExitEpoch(exitEpoch); + + // // assert that the next exit epoch is equal to 3 + // stakeTable.mockPushToExitQueue(); + // assertEq(stakeTable.exitEpoch(), exitEpoch); + // assertEq(stakeTable.numPendingExitsInEpoch(), 1); + // } + + // /// @notice test registrationEpoch when the current epoch + 1 is equal to the + // /// registration/exit epoch + // function test_registrationEpoch_whenCurrentEpochPlusOneIsEqualToregistrationEpoch() public { + // // test for registration + // // set the current epoch to 1 by updating the latest hotshot block number on the LC + // contract + // lcMock.setFinalizedState(LightClient.LightClientState(0, 1, BN254.ScalarField.wrap(0))); + // assertEq(stakeTable.currentEpoch(), 1); + + // // set the registration epoch to 2 + // uint64 registrationEpoch = 2; + // stakeTable.setRegistrationEpoch(registrationEpoch); + + // // assert that the next registration epoch is equal to 2 + // stakeTable.mockPushToRegistrationQueue(); + // assertEq(stakeTable.registrationEpoch(), registrationEpoch); + // assertEq(stakeTable.numPendingRegistrationsInEpoch(), 1); + + // // test for exit + // // set the exit epoch to 2 + // uint64 exitEpoch = 2; + // stakeTable.setExitEpoch(exitEpoch); + + // // assert that the next exit epoch is equal to 2 + // stakeTable.mockPushToExitQueue(); + // assertEq(stakeTable.exitEpoch(), exitEpoch); + // assertEq(stakeTable.numPendingExitsInEpoch(), 1); + // } + + // // test pushToRegistrationQueue reverts when the current epoch is max uint64 + // // note, the current epoch is max uint64 only when the hotshot blocks per epoch is 1 + // // and the hotshot block number is max uint64 + // function test_revertWhen_pushToRegistrationQueue_whenCurrentEpochIsMaxUint64() public { + // // set the current hotshot block number to max uint64 + // lcMock.setFinalizedState( + // LightClient.LightClientState(0, type(uint64).max, BN254.ScalarField.wrap(0)) + // ); + // assertEq(stakeTable.currentEpoch(), type(uint64).max); + + // // set the hotshot blocks per epoch to 1 + // vm.prank(exampleTokenCreator); + // stakeTable.mockUpdateHotShotBlocksPerEpoch(1); + // assertEq(stakeTable.hotShotBlocksPerEpoch(), 1); + + // // push to registration queue and expect a panic due to arithmetic overflow + // vm.expectRevert(stdError.arithmeticError); + // stakeTable.mockPushToRegistrationQueue(); + // } +} diff --git a/justfile b/justfile index 2be9e5ec08..023cc4d46f 100644 --- a/justfile +++ b/justfile @@ -178,9 +178,10 @@ sol-lint: # Build diff-test binary and forge test # Note: we use an invalid etherscan api key in order to avoid annoying warnings. See https://github.com/EspressoSystems/espresso-sequencer/issues/979 -sol-test: - cargo build --profile test --bin diff-test - forge test +sol-test *args: + export CARGO_TARGET_DIR=${CARGO_TARGET_DIR:-target} + cargo build --release --bin diff-test + env PATH="${CARGO_TARGET_DIR}/release:$PATH" forge test {{ args }} # Deploys the light client contract on Sepolia and call it for profiling purposes. NUM_INIT_VALIDATORS := "5"