diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 41b27cf83..9808cb42d 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -77,7 +77,7 @@ type ValidatorMessagesValidationPeriod struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractValidatorManager\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structStakingManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initiateDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initiateValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051613da6380380613da683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b613c598061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101d1575f3560e01c8063785e9e86116100fe578063a9778a7a1161009e578063b771b3bc1161006e578063b771b3bc14610413578063cc71bbba14610421578063e4a63c4014610434578063fb8b11dd14610448575f80fd5b8063a9778a7a146102b4578063aac80c39146103da578063b2c1712e146103ed578063b5c9349814610400575f80fd5b80638ef34c98116100d95780638ef34c981461038e57806393e24598146103a15780639681d940146103b4578063a3a65e48146103c7575f80fd5b8063785e9e86146103235780637a63ad85146103545780638af5499e1461037b575f80fd5b80632aa566381161017457806360ad77841161014457806360ad7784146102e357806362065856146102f6578063732214f814610309578063739b4eff14610310575f80fd5b80632aa56638146102765780632e2194d81461028957806335455ded146102b45780634b396bcc146102d0575f80fd5b80631af1872b116101af5780631af1872b1461021c578063245dafcb1461023d57806325e1c7761461025057806327bf60cd14610263575f80fd5b806313409645146101d5578063151d30d1146101ea5780631667956414610209575b5f80fd5b6101e86101e33660046131ec565b61045b565b005b6101f2600a81565b60405160ff90911681526020015b60405180910390f35b6101e8610217366004613223565b61079b565b61022f61022a366004613472565b6107ad565b604051908152602001610200565b6101e861024b366004613551565b6107ea565b6101e861025e3660046131ec565b610aae565b6101e8610271366004613223565b610b8c565b6101e8610284366004613223565b610b98565b61029c610297366004613551565b610ba9565b6040516001600160401b039091168152602001610200565b6102bd61271081565b60405161ffff9091168152602001610200565b6101e86102de366004613568565b610bfd565b6101e86102f13660046131ec565b610c09565b61022f6103043660046135b6565b610f2b565b61022f5f81565b61022f61031e3660046135d1565b610f4b565b5f80516020613be4833981519152546001600160a01b03165b6040516001600160a01b039091168152602001610200565b61022f7fafe6c4731b852fc2be89a0896ae43d22d8b24989064d841b2a1586b4d39ab60081565b6101e8610389366004613568565b610f77565b6101e861039c3660046135f1565b610f83565b6101e86103af366004613551565b611034565b61022f6103c236600461361f565b61112d565b61022f6103d536600461361f565b6112dd565b6101e86103e8366004613568565b611355565b6101e86103fb366004613223565b611361565b6101e861040e366004613638565b61136d565b61033c6005600160991b0181565b6101e861042f366004613568565b611451565b61022f5f80516020613be483398151915281565b6101e86104563660046135f1565b61145d565b6104636114f4565b5f61046c61152b565b5f848152600882016020526040808220815160e0810190925280549394509192909190829060ff1660038111156104a5576104a561366b565b60038111156104b6576104b661366b565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561052f5761052f61366b565b14610559578051604051633b0d540d60e21b8152610550919060040161367f565b60405180910390fd5b81546040828101519051636af907fb60e11b815260048101919091525f916001600160a01b03169063d5f20ff6906024015f60405180830381865afa1580156105a4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105cb9190810190613716565b9050600483546040808501519051636af907fb60e11b81526001600160a01b039092169163d5f20ff6916106059160040190815260200190565b5f60405180830381865afa15801561061f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106469190810190613716565b5160058111156106585761065861366b565b1415801561067f57508160c001516001600160401b031681608001516001600160401b0316105b1561077557825460405163338587c560e21b815263ffffffff861660048201525f9182916001600160a01b039091169063ce161f149060240160408051808303815f875af11580156106d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f791906137f5565b91509150818460400151146107305781846040015160405163fee3144560e01b8152600401610550929190918252602082015260400190565b806001600160401b03168460c001516001600160401b0316111561077257604051632e19bc2d60e11b81526001600160401b0382166004820152602401610550565b50505b61077e8561154f565b50505061079760015f80516020613c0483398151915255565b5050565b6107a78383835f611793565b50505050565b5f6107b66114f4565b6107c68989898989898989611a8c565b90506107de60015f80516020613c0483398151915255565b98975050505050505050565b5f6107f361152b565b5f838152600882016020526040808220815160e0810190925280549394509192909190829060ff16600381111561082c5761082c61366b565b600381111561083d5761083d61366b565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156108b6576108b661366b565b141580156108d757506003815160038111156108d4576108d461366b565b14155b156108f8578051604051633b0d540d60e21b8152610550919060040161367f565b81546040828101519051636af907fb60e11b815260048101919091525f916001600160a01b03169063d5f20ff6906024015f60405180830381865afa158015610943573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261096a9190810190613716565b905080606001516001600160401b03165f0361099c576040516339b894f960e21b815260048101859052602401610550565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93610a0a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015610a24573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a4b9190810190613818565b6040518263ffffffff1660e01b8152600401610a679190613874565b6020604051808303815f875af1158015610a83573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa79190613886565b5050505050565b610ab782611c94565b610ad7576040516330efa98b60e01b815260048101839052602401610550565b5f610ae061152b565b54604051636af907fb60e11b8152600481018590526001600160a01b039091169063d5f20ff6906024015f60405180830381865afa158015610b24573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b4b9190810190613716565b5190506002816005811115610b6257610b6261366b565b14610b82578060405163170cc93360e21b8152600401610550919061389d565b6107a78383611cbd565b6107a78383835f611f63565b610ba48383835f612369565b505050565b5f80610bb361152b565b60040154610bc190846138c5565b9050801580610bd657506001600160401b0381115b15610bf75760405163222d164360e21b815260048101849052602401610550565b92915050565b610aa784848484611793565b5f610c1261152b565b5f848152600882016020526040808220815160e0810190925280549394509192909190829060ff166003811115610c4b57610c4b61366b565b6003811115610c5c57610c5c61366b565b8152815461010090046001600160a01b03908116602083015260018301546040808401919091526002909301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b9091041660c0909201919091528282015185549251636af907fb60e11b815260048101829052939450925f929091169063d5f20ff6906024015f60405180830381865afa158015610d0d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d349190810190613716565b9050600183516003811115610d4b57610d4b61366b565b14610d6c578251604051633b0d540d60e21b8152610550919060040161367f565b600481516005811115610d8157610d8161366b565b03610d9757610d8f8661154f565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015610e9f57835460405163338587c560e21b815263ffffffff871660048201525f9182916001600160a01b039091169063ce161f149060240160408051808303815f875af1158015610e08573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2c91906137f5565b91509150818414610e5a5760405163fee3144560e01b81526004810183905260248101859052604401610550565b8460a001516001600160401b0316816001600160401b03161015610e9c57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610550565b50505b5f868152600885016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff000000000000000019909216919091179091559151918252839188917f3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa910160405180910390a3505050505050565b5f610f3461152b565b60040154610bf7906001600160401b0384166138e4565b5f610f546114f4565b610f5f833384612395565b9050610bf760015f80516020613c0483398151915255565b6107a784848484612369565b5f610f8c61152b565b90506001600160a01b038216610fc05760405163caa903f960e01b81526001600160a01b0383166004820152602401610550565b5f8381526007820160205260409020546001600160a01b0316331461100657335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610550565b5f928352600c01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61103d61152b565b8054604051636af907fb60e11b8152600481018590529192505f916001600160a01b039091169063d5f20ff6906024015f60405180830381865afa158015611087573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110ae9190810190613716565b51905060048160058111156110c5576110c561366b565b146110e5578060405163170cc93360e21b8152600401610550919061389d565b5f8381526007830160205260409020546001600160a01b0316331461110a5733610fe1565b5f838152600783016020526040902054610ba4906001600160a01b0316846126b0565b5f6111366114f4565b5f61113f61152b565b805460405163025a076560e61b815263ffffffff861660048201529192505f916001600160a01b0390911690639681d940906024016020604051808303815f875af1158015611190573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b49190613886565b8254604051636af907fb60e11b8152600481018390529192505f916001600160a01b039091169063d5f20ff6906024015f60405180830381865afa1580156111fe573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526112259190810190613716565b905061123082611c94565b61123e575091506112c29050565b5f828152600784016020908152604080832054600c870190925290912080546001600160a01b031981169091556001600160a01b039182169116806112805750805b6004835160058111156112955761129561366b565b036112a4576112a481856126b0565b6112ba826112b58560400151610f2b565b6126da565b509193505050505b6112d860015f80516020613c0483398151915255565b919050565b5f6112e661152b565b54604051631474cbc960e31b815263ffffffff841660048201526001600160a01b039091169063a3a65e48906024016020604051808303815f875af1158015611331573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf79190613886565b610aa784848484611f63565b610ba48383835f6126fd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806113b6575080546001600160401b03808416911610155b156113d45760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556113ff8484612729565b805468ff0000000000000000191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6107a7848484846126fd565b6001600160a01b03811661148f5760405163caa903f960e01b81526001600160a01b0382166004820152602401610550565b5f61149861152b565b5f8481526008820160205260409020549091506001600160a01b036101009091041633146114c65733610fe1565b5f928352600a01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80516020613c0483398151915280546001190161152557604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7fafe6c4731b852fc2be89a0896ae43d22d8b24989064d841b2a1586b4d39ab60090565b5f61155861152b565b5f838152600882016020526040808220815160e0810190925280549394509192909190829060ff1660038111156115915761159161366b565b60038111156115a2576115a261366b565b815281546001600160a01b03610100909104811660208084019190915260018401546040808501919091526002909401546001600160401b038082166060860152600160401b820481166080860152600160801b8204811660a0860152600160c01b9091041660c09093019290925283830151865484516304e0efb360e11b8152945195965090949116926309c1df669260048083019391928290030181865afa158015611652573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061167691906138fb565b82608001516116859190613916565b6001600160401b03164210156116b95760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610550565b5f848152600884016020908152604080832080546001600160a81b031916815560018101849055600201839055600a8601909152902080546001600160a01b031981169091556001600160a01b031680611714575060208201515b5f80611721838886612743565b9150915061173a85602001516112b58760600151610f2b565b6040805183815260208101839052859189917f5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e910160405180910390a350505050505050565b60015f80516020613c0483398151915255565b5f8061179d61152b565b8054604051635b73516560e11b8152600481018990529192506001600160a01b03169063b6e6a2ca906024015f604051808303815f87803b1580156117e0575f80fd5b505af11580156117f2573d5f803e3d5ffd5b50508254604051636af907fb60e11b8152600481018a90525f93506001600160a01b03909116915063d5f20ff6906024015f60405180830381865afa15801561183d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118649190810190613716565b905061186f87611c94565b61187e57600192505050611a84565b5f8781526007830160205260409020546001600160a01b031633146118a35733610fe1565b5f87815260078301602052604090205460c08201516118d291600160b01b90046001600160401b031690613916565b6001600160401b03168160e001516001600160401b031610156119195760e081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610550565b5f86156119315761192a8887611cbd565b905061194f565b505f8781526007830160205260409020600101546001600160401b03165b600583015460408301515f916001600160a01b031690634f22429f9061197490610f2b565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa1580156119de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a029190613886565b90506001600160a01b038616611a2e575f8981526007850160205260409020546001600160a01b031695505b5f898152600b8501602052604081208054839290611a4d90849061393d565b90915550505f898152600c94909401602052604090932080546001600160a01b0319166001600160a01b0387161790555050151590505b949350505050565b5f80611a9661152b565b600381015490915061ffff600160401b90910481169086161080611abf575061271061ffff8616115b15611ae357604051635f12e6c360e11b815261ffff86166004820152602401610550565b60038101546001600160401b039081169085161015611b1f576040516202a06d60e11b81526001600160401b0385166004820152602401610550565b8060010154831080611b345750806002015483115b15611b555760405163222d164360e21b815260048101849052602401610550565b5f611b5f846127f0565b90505f611b6b82610ba9565b90505f835f015f9054906101000a90046001600160a01b03166001600160a01b031663ed285ae18e8e8e8e8e886040518763ffffffff1660e01b8152600401611bb9969594939291906139b6565b6020604051808303815f875af1158015611bd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf99190613886565b5f818152600786016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600c9096019095529790932080546001600160a01b03191690961790955550939998505050505050505050565b5f80611c9e61152b565b5f938452600701602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015611d08573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d2f9190810190613a29565b9150915080611d5157604051636b2f19e960e01b815260040160405180910390fd5b5f611d5a61152b565b6006810154845191925014611d88578251604051636ba589a560e01b81526004810191909152602401610550565b60208301516001600160a01b031615611dc4576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610550565b60208301516001600160a01b031615611e00576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610550565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401611e3d9190613874565b6040805180830381865af4158015611e57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7b91906137f5565b91509150818814611ea95760405163fee3144560e01b81526004810183905260248101899052604401610550565b5f8881526007840160205260409020600101546001600160401b039081169082161115611f3a575f888152600784016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2611f58565b505f8781526007830160205260409020600101546001600160401b03165b979650505050505050565b5f80611f6d61152b565b5f878152600882016020526040808220815160e0810190925280549394509192909190829060ff166003811115611fa657611fa661366b565b6003811115611fb757611fb761366b565b8152815461010090046001600160a01b03908116602083015260018301546040808401919091526002909301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b9091041660c0909201919091528282015185549251636af907fb60e11b815260048101829052939450925f929091169063d5f20ff6906024015f60405180830381865afa158015612068573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261208f9190810190613716565b90506002835160038111156120a6576120a661366b565b146120c7578251604051633b0d540d60e21b8152610550919060040161367f565b60208301516001600160a01b03163314612163575f8281526007850160205260409020546001600160a01b031633146121005733610fe1565b5f82815260078501602052604090205460c082015161212f91600160b01b90046001600160401b031690613916565b6001600160401b03164210156121635760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610550565b6002815160058111156121785761217861366b565b03612311576003840154608084015161219a916001600160401b031690613916565b6001600160401b03164210156121ce5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610550565b87156121e0576121de8288611cbd565b505b5f8981526008850160205260409020805460ff191660031790558354606084015160a08301516001600160a01b039092169163661096699185916122249190613acf565b6040516001600160e01b031960e085901b16815260048101929092526001600160401b0316602482015260440160408051808303815f875af115801561226c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122909190613aef565b505f8a8152600886016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556122d384888c612813565b9050828a7f5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf60405160405180910390a315159450611a849350505050565b6004815160058111156123265761232661366b565b0361234d5761233683878b612813565b506123408961154f565b6001945050505050611a84565b805160405163170cc93360e21b8152610550919060040161389d565b61237584848484611f63565b6107a757604051631036cf9160e11b815260048101859052602401610550565b5f8061239f61152b565b90505f6123ae610297856127f0565b8254604051636af907fb60e11b8152600481018990529192505f916001600160a01b039091169063d5f20ff6906024015f60405180830381865afa1580156123f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261241f9190810190613716565b905061242a87611c94565b61244a576040516330efa98b60e01b815260048101889052602401610550565b60028151600581111561245f5761245f61366b565b1461248057805160405163170cc93360e21b8152610550919060040161389d565b5f828260a001516124919190613916565b905083600301600a9054906101000a90046001600160401b031682604001516124ba9190613b1b565b6001600160401b0316816001600160401b031611156124f757604051636d51fe0560e11b81526001600160401b0382166004820152602401610550565b8354604051636610966960e01b8152600481018a90526001600160401b03831660248201525f9182916001600160a01b039091169063661096699060440160408051808303815f875af1158015612550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125749190613aef565b915091505f8a836040516020016125a292919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260088b019093529120805491925060019160ff1916828002179055505f8181526008880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d19060800160405180910390a496505050505050505b9392505050565b5f6126b961152b565b5f838152600b82016020526040812080549190559091506107a78482612a6d565b5f80516020613be483398151915254610797906001600160a01b03168383612ae3565b61270984848484611793565b6107a757604051635bff683f60e11b815260048101859052602401610550565b612731612b42565b61273a82612b8d565b61079781612c0b565b5f805f61274e61152b565b5f868152600982016020526040812080549082905591925090819080156127e2575f8781526007850160205260409020546127109061279890600160a01b900461ffff16836138e4565b6127a291906138c5565b91508184600b015f8981526020019081526020015f205f8282546127c6919061393d565b909155506127d690508282613b46565b92506127e28984612a6d565b509097909650945050505050565b5f610bf7825f80516020613be4833981519152546001600160a01b031690612c73565b5f8061281d61152b565b80546040808801519051636af907fb60e11b81529293505f926001600160a01b039092169163d5f20ff6916128589160040190815260200190565b5f60405180830381865afa158015612872573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526128999190810190613716565b90505f6003825160058111156128b1576128b161366b565b14806128cf57506004825160058111156128cd576128cd61366b565b145b156128df575060e081015161291c565b6002825160058111156128f4576128f461366b565b0361290057504261291c565b815160405163170cc93360e21b8152610550919060040161389d565b86608001516001600160401b0316816001600160401b031611612944575f93505050506126a9565b600583015460608801515f916001600160a01b031690634f22429f9061296990610f2b565b60c086015160808c01516040808e01515f90815260078b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156129ea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a0e9190613886565b90506001600160a01b038716612a2657876020015196505b5f8681526009850160209081526040808320849055600a90960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f5f80516020613be483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015612ac8575f80fd5b505af1158015612ada573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b03838116602483015260448201839052610ba491859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612c7f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16612b8b57604051631afcd79f60e31b815260040160405180910390fd5b565b612b95612b42565b612b9d612ce0565b612c08612bad6020830183613b59565b60208301356040840135612bc760808601606087016135b6565b612bd760a0870160808801613b74565b612be760c0880160a08901613b8d565b60c0880135612bfd6101008a0160e08b01613b59565b896101000135612cf0565b50565b612c13612b42565b5f80516020613be48339815191526001600160a01b038216612c5357604051637330680360e01b81526001600160a01b0383166004820152602401610550565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6126a9833384612f19565b5f612c936001600160a01b0384168361307c565b905080515f14158015612cb7575080806020019051810190612cb59190613bad565b155b15610ba457604051635274afe760e01b81526001600160a01b0384166004820152602401610550565b612ce8612b42565b612b8b613089565b612cf8612b42565b5f612d0161152b565b905061ffff86161580612d19575061271061ffff8716115b15612d3d57604051635f12e6c360e11b815261ffff87166004820152602401610550565b87891115612d615760405163222d164360e21b8152600481018a9052602401610550565b60ff85161580612d745750600a60ff8616115b15612d975760405163170db35960e31b815260ff86166004820152602401610550565b896001600160a01b03166309c1df666040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612df791906138fb565b6001600160401b0316876001600160401b03161015612e33576040516202a06d60e11b81526001600160401b0388166004820152602401610550565b835f03612e535760405163a733007160e01b815260040160405180910390fd5b81612e7457604051632f6bd1db60e01b815260048101839052602401610550565b80546001600160a01b039a8b166001600160a01b031991821617825560018201999099556002810197909755600387018054600160501b60ff9096169590950267ffffffffffffffff60501b1961ffff909716600160401b0269ffffffffffffffffffff199096166001600160401b03909816979097179490941794909416949094179091556004840155600583018054929095169190931617909255600690910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015612f5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f839190613886565b9050612f9a6001600160a01b038616853086613091565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015612fde573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130029190613886565b90508181116130685760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610550565b6130728282613b46565b9695505050505050565b60606126a983835f6130ca565b611780612b42565b6040516001600160a01b0384811660248301528381166044830152606482018390526107a79186918216906323b872dd90608401612b10565b6060814710156130ef5760405163cd78605960e01b8152306004820152602401610550565b5f80856001600160a01b0316848660405161310a9190613bc8565b5f6040518083038185875af1925050503d805f8114613144576040519150601f19603f3d011682016040523d82523d5f602084013e613149565b606091505b509150915061307286838360608261316957613164826131b0565b6126a9565b815115801561318057506001600160a01b0384163b155b156131a957604051639996b31560e01b81526001600160a01b0385166004820152602401610550565b50806126a9565b8051156131c05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b803563ffffffff811681146112d8575f80fd5b5f80604083850312156131fd575f80fd5b8235915061320d602084016131d9565b90509250929050565b8015158114612c08575f80fd5b5f805f60608486031215613235575f80fd5b83359250602084013561324781613216565b9150613255604085016131d9565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156132945761329461325e565b60405290565b60405161010081016001600160401b03811182821017156132945761329461325e565b604051601f8201601f191681016001600160401b03811182821017156132e5576132e561325e565b604052919050565b5f6001600160401b038211156133055761330561325e565b50601f01601f191660200190565b5f82601f830112613322575f80fd5b8135613335613330826132ed565b6132bd565b818152846020838601011115613349575f80fd5b816020850160208301375f918101602001919091529392505050565b6001600160401b0381168114612c08575f80fd5b80356112d881613365565b6001600160a01b0381168114612c08575f80fd5b5f604082840312156133a8575f80fd5b6133b0613272565b90506133bb826131d9565b81526020808301356001600160401b03808211156133d7575f80fd5b818501915085601f8301126133ea575f80fd5b8135818111156133fc576133fc61325e565b8060051b915061340d8483016132bd565b8181529183018401918481019088841115613426575f80fd5b938501935b83851015613450578435925061344083613384565b828252938501939085019061342b565b808688015250505050505092915050565b803561ffff811681146112d8575f80fd5b5f805f805f805f80610100898b03121561348a575f80fd5b88356001600160401b03808211156134a0575f80fd5b6134ac8c838d01613313565b995060208b01359150808211156134c1575f80fd5b6134cd8c838d01613313565b98506134db60408c01613379565b975060608b01359150808211156134f0575f80fd5b6134fc8c838d01613398565b965060808b0135915080821115613511575f80fd5b5061351e8b828c01613398565b94505061352d60a08a01613461565b925061353b60c08a01613379565b915060e089013590509295985092959890939650565b5f60208284031215613561575f80fd5b5035919050565b5f805f806080858703121561357b575f80fd5b84359350602085013561358d81613216565b925061359b604086016131d9565b915060608501356135ab81613384565b939692955090935050565b5f602082840312156135c6575f80fd5b81356126a981613365565b5f80604083850312156135e2575f80fd5b50508035926020909101359150565b5f8060408385031215613602575f80fd5b82359150602083013561361481613384565b809150509250929050565b5f6020828403121561362f575f80fd5b6126a9826131d9565b5f8082840361014081121561364b575f80fd5b6101208082121561365a575f80fd5b849350830135905061361481613384565b634e487b7160e01b5f52602160045260245ffd5b60208101600483106136935761369361366b565b91905290565b8051600681106112d8575f80fd5b5f5b838110156136c15781810151838201526020016136a9565b50505f910152565b5f82601f8301126136d8575f80fd5b81516136e6613330826132ed565b8181528460208386010111156136fa575f80fd5b611a848260208301602087016136a7565b80516112d881613365565b5f60208284031215613726575f80fd5b81516001600160401b038082111561373c575f80fd5b908301906101008286031215613750575f80fd5b61375861329a565b61376183613699565b8152602083015182811115613774575f80fd5b613780878286016136c9565b6020830152506137926040840161370b565b60408201526137a36060840161370b565b60608201526137b46080840161370b565b60808201526137c560a0840161370b565b60a08201526137d660c0840161370b565b60c08201526137e760e0840161370b565b60e082015295945050505050565b5f8060408385031215613806575f80fd5b82519150602083015161361481613365565b5f60208284031215613828575f80fd5b81516001600160401b0381111561383d575f80fd5b611a84848285016136c9565b5f81518084526138608160208601602086016136a7565b601f01601f19169290920160200192915050565b602081525f6126a96020830184613849565b5f60208284031215613896575f80fd5b5051919050565b60208101600683106136935761369361366b565b634e487b7160e01b5f52601160045260245ffd5b5f826138df57634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610bf757610bf76138b1565b5f6020828403121561390b575f80fd5b81516126a981613365565b6001600160401b03818116838216019080821115613936576139366138b1565b5092915050565b80820180821115610bf757610bf76138b1565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156139ab5784516001600160a01b03168252938301936001929092019190830190613982565b509695505050505050565b60c081525f6139c860c0830189613849565b82810360208401526139da8189613849565b90506001600160401b03808816604085015283820360608501526139fe8288613950565b91508382036080850152613a128287613950565b925080851660a08501525050979650505050505050565b5f8060408385031215613a3a575f80fd5b82516001600160401b0380821115613a50575f80fd5b9084019060608287031215613a63575f80fd5b604051606081018181108382111715613a7e57613a7e61325e565b604052825181526020830151613a9381613384565b6020820152604083015182811115613aa9575f80fd5b613ab5888286016136c9565b604083015250809450505050602083015161361481613216565b6001600160401b03828116828216039080821115613936576139366138b1565b5f8060408385031215613b00575f80fd5b8251613b0b81613365565b6020939093015192949293505050565b6001600160401b03818116838216028082169190828114613b3e57613b3e6138b1565b505092915050565b81810381811115610bf757610bf76138b1565b5f60208284031215613b69575f80fd5b81356126a981613384565b5f60208284031215613b84575f80fd5b6126a982613461565b5f60208284031215613b9d575f80fd5b813560ff811681146126a9575f80fd5b5f60208284031215613bbd575f80fd5b81516126a981613216565b5f8251613bd98184602087016136a7565b919091019291505056fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220fc4fccb7e537175c00a7fe0a13c12f646b5f0a939e6a5fb46542471945a9b4a864736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051613da6380380613da683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b613c598061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101d1575f3560e01c8063785e9e86116100fe578063a9778a7a1161009e578063b771b3bc1161006e578063b771b3bc14610413578063cc71bbba14610421578063e4a63c4014610434578063fb8b11dd14610448575f80fd5b8063a9778a7a146102b4578063aac80c39146103da578063b2c1712e146103ed578063b5c9349814610400575f80fd5b80638ef34c98116100d95780638ef34c981461038e57806393e24598146103a15780639681d940146103b4578063a3a65e48146103c7575f80fd5b8063785e9e86146103235780637a63ad85146103545780638af5499e1461037b575f80fd5b80632aa566381161017457806360ad77841161014457806360ad7784146102e357806362065856146102f6578063732214f814610309578063739b4eff14610310575f80fd5b80632aa56638146102765780632e2194d81461028957806335455ded146102b45780634b396bcc146102d0575f80fd5b80631af1872b116101af5780631af1872b1461021c578063245dafcb1461023d57806325e1c7761461025057806327bf60cd14610263575f80fd5b806313409645146101d5578063151d30d1146101ea5780631667956414610209575b5f80fd5b6101e86101e33660046131ec565b61045b565b005b6101f2600a81565b60405160ff90911681526020015b60405180910390f35b6101e8610217366004613223565b61079b565b61022f61022a366004613472565b6107ad565b604051908152602001610200565b6101e861024b366004613551565b6107ea565b6101e861025e3660046131ec565b610aae565b6101e8610271366004613223565b610b8c565b6101e8610284366004613223565b610b98565b61029c610297366004613551565b610ba9565b6040516001600160401b039091168152602001610200565b6102bd61271081565b60405161ffff9091168152602001610200565b6101e86102de366004613568565b610bfd565b6101e86102f13660046131ec565b610c09565b61022f6103043660046135b6565b610f2b565b61022f5f81565b61022f61031e3660046135d1565b610f4b565b5f80516020613be4833981519152546001600160a01b03165b6040516001600160a01b039091168152602001610200565b61022f7fafe6c4731b852fc2be89a0896ae43d22d8b24989064d841b2a1586b4d39ab60081565b6101e8610389366004613568565b610f77565b6101e861039c3660046135f1565b610f83565b6101e86103af366004613551565b611034565b61022f6103c236600461361f565b61112d565b61022f6103d536600461361f565b6112dd565b6101e86103e8366004613568565b611355565b6101e86103fb366004613223565b611361565b6101e861040e366004613638565b61136d565b61033c6005600160991b0181565b6101e861042f366004613568565b611451565b61022f5f80516020613be483398151915281565b6101e86104563660046135f1565b61145d565b6104636114f4565b5f61046c61152b565b5f848152600882016020526040808220815160e0810190925280549394509192909190829060ff1660038111156104a5576104a561366b565b60038111156104b6576104b661366b565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561052f5761052f61366b565b14610559578051604051633b0d540d60e21b8152610550919060040161367f565b60405180910390fd5b81546040828101519051636af907fb60e11b815260048101919091525f916001600160a01b03169063d5f20ff6906024015f60405180830381865afa1580156105a4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105cb9190810190613716565b9050600483546040808501519051636af907fb60e11b81526001600160a01b039092169163d5f20ff6916106059160040190815260200190565b5f60405180830381865afa15801561061f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106469190810190613716565b5160058111156106585761065861366b565b1415801561067f57508160c001516001600160401b031681608001516001600160401b0316105b1561077557825460405163338587c560e21b815263ffffffff861660048201525f9182916001600160a01b039091169063ce161f149060240160408051808303815f875af11580156106d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f791906137f5565b91509150818460400151146107305781846040015160405163fee3144560e01b8152600401610550929190918252602082015260400190565b806001600160401b03168460c001516001600160401b0316111561077257604051632e19bc2d60e11b81526001600160401b0382166004820152602401610550565b50505b61077e8561154f565b50505061079760015f80516020613c0483398151915255565b5050565b6107a78383835f611793565b50505050565b5f6107b66114f4565b6107c68989898989898989611a8c565b90506107de60015f80516020613c0483398151915255565b98975050505050505050565b5f6107f361152b565b5f838152600882016020526040808220815160e0810190925280549394509192909190829060ff16600381111561082c5761082c61366b565b600381111561083d5761083d61366b565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156108b6576108b661366b565b141580156108d757506003815160038111156108d4576108d461366b565b14155b156108f8578051604051633b0d540d60e21b8152610550919060040161367f565b81546040828101519051636af907fb60e11b815260048101919091525f916001600160a01b03169063d5f20ff6906024015f60405180830381865afa158015610943573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261096a9190810190613716565b905080606001516001600160401b03165f0361099c576040516339b894f960e21b815260048101859052602401610550565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93610a0a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015610a24573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a4b9190810190613818565b6040518263ffffffff1660e01b8152600401610a679190613874565b6020604051808303815f875af1158015610a83573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa79190613886565b5050505050565b610ab782611c94565b610ad7576040516330efa98b60e01b815260048101839052602401610550565b5f610ae061152b565b54604051636af907fb60e11b8152600481018590526001600160a01b039091169063d5f20ff6906024015f60405180830381865afa158015610b24573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b4b9190810190613716565b5190506002816005811115610b6257610b6261366b565b14610b82578060405163170cc93360e21b8152600401610550919061389d565b6107a78383611cbd565b6107a78383835f611f63565b610ba48383835f612369565b505050565b5f80610bb361152b565b60040154610bc190846138c5565b9050801580610bd657506001600160401b0381115b15610bf75760405163222d164360e21b815260048101849052602401610550565b92915050565b610aa784848484611793565b5f610c1261152b565b5f848152600882016020526040808220815160e0810190925280549394509192909190829060ff166003811115610c4b57610c4b61366b565b6003811115610c5c57610c5c61366b565b8152815461010090046001600160a01b03908116602083015260018301546040808401919091526002909301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b9091041660c0909201919091528282015185549251636af907fb60e11b815260048101829052939450925f929091169063d5f20ff6906024015f60405180830381865afa158015610d0d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d349190810190613716565b9050600183516003811115610d4b57610d4b61366b565b14610d6c578251604051633b0d540d60e21b8152610550919060040161367f565b600481516005811115610d8157610d8161366b565b03610d9757610d8f8661154f565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015610e9f57835460405163338587c560e21b815263ffffffff871660048201525f9182916001600160a01b039091169063ce161f149060240160408051808303815f875af1158015610e08573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2c91906137f5565b91509150818414610e5a5760405163fee3144560e01b81526004810183905260248101859052604401610550565b8460a001516001600160401b0316816001600160401b03161015610e9c57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610550565b50505b5f868152600885016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff000000000000000019909216919091179091559151918252839188917f3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa910160405180910390a3505050505050565b5f610f3461152b565b60040154610bf7906001600160401b0384166138e4565b5f610f546114f4565b610f5f833384612395565b9050610bf760015f80516020613c0483398151915255565b6107a784848484612369565b5f610f8c61152b565b90506001600160a01b038216610fc05760405163caa903f960e01b81526001600160a01b0383166004820152602401610550565b5f8381526007820160205260409020546001600160a01b0316331461100657335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610550565b5f928352600c01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61103d61152b565b8054604051636af907fb60e11b8152600481018590529192505f916001600160a01b039091169063d5f20ff6906024015f60405180830381865afa158015611087573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110ae9190810190613716565b51905060048160058111156110c5576110c561366b565b146110e5578060405163170cc93360e21b8152600401610550919061389d565b5f8381526007830160205260409020546001600160a01b0316331461110a5733610fe1565b5f838152600783016020526040902054610ba4906001600160a01b0316846126b0565b5f6111366114f4565b5f61113f61152b565b805460405163025a076560e61b815263ffffffff861660048201529192505f916001600160a01b0390911690639681d940906024016020604051808303815f875af1158015611190573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b49190613886565b8254604051636af907fb60e11b8152600481018390529192505f916001600160a01b039091169063d5f20ff6906024015f60405180830381865afa1580156111fe573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526112259190810190613716565b905061123082611c94565b61123e575091506112c29050565b5f828152600784016020908152604080832054600c870190925290912080546001600160a01b031981169091556001600160a01b039182169116806112805750805b6004835160058111156112955761129561366b565b036112a4576112a481856126b0565b6112ba826112b58560400151610f2b565b6126da565b509193505050505b6112d860015f80516020613c0483398151915255565b919050565b5f6112e661152b565b54604051631474cbc960e31b815263ffffffff841660048201526001600160a01b039091169063a3a65e48906024016020604051808303815f875af1158015611331573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf79190613886565b610aa784848484611f63565b610ba48383835f6126fd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806113b6575080546001600160401b03808416911610155b156113d45760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556113ff8484612729565b805468ff0000000000000000191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6107a7848484846126fd565b6001600160a01b03811661148f5760405163caa903f960e01b81526001600160a01b0382166004820152602401610550565b5f61149861152b565b5f8481526008820160205260409020549091506001600160a01b036101009091041633146114c65733610fe1565b5f928352600a01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80516020613c0483398151915280546001190161152557604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7fafe6c4731b852fc2be89a0896ae43d22d8b24989064d841b2a1586b4d39ab60090565b5f61155861152b565b5f838152600882016020526040808220815160e0810190925280549394509192909190829060ff1660038111156115915761159161366b565b60038111156115a2576115a261366b565b815281546001600160a01b03610100909104811660208084019190915260018401546040808501919091526002909401546001600160401b038082166060860152600160401b820481166080860152600160801b8204811660a0860152600160c01b9091041660c09093019290925283830151865484516304e0efb360e11b8152945195965090949116926309c1df669260048083019391928290030181865afa158015611652573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061167691906138fb565b82608001516116859190613916565b6001600160401b03164210156116b95760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610550565b5f848152600884016020908152604080832080546001600160a81b031916815560018101849055600201839055600a8601909152902080546001600160a01b031981169091556001600160a01b031680611714575060208201515b5f80611721838886612743565b9150915061173a85602001516112b58760600151610f2b565b6040805183815260208101839052859189917f5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e910160405180910390a350505050505050565b60015f80516020613c0483398151915255565b5f8061179d61152b565b8054604051635b73516560e11b8152600481018990529192506001600160a01b03169063b6e6a2ca906024015f604051808303815f87803b1580156117e0575f80fd5b505af11580156117f2573d5f803e3d5ffd5b50508254604051636af907fb60e11b8152600481018a90525f93506001600160a01b03909116915063d5f20ff6906024015f60405180830381865afa15801561183d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118649190810190613716565b905061186f87611c94565b61187e57600192505050611a84565b5f8781526007830160205260409020546001600160a01b031633146118a35733610fe1565b5f87815260078301602052604090205460c08201516118d291600160b01b90046001600160401b031690613916565b6001600160401b03168160e001516001600160401b031610156119195760e081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610550565b5f86156119315761192a8887611cbd565b905061194f565b505f8781526007830160205260409020600101546001600160401b03165b600583015460408301515f916001600160a01b031690634f22429f9061197490610f2b565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa1580156119de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a029190613886565b90506001600160a01b038616611a2e575f8981526007850160205260409020546001600160a01b031695505b5f898152600b8501602052604081208054839290611a4d90849061393d565b90915550505f898152600c94909401602052604090932080546001600160a01b0319166001600160a01b0387161790555050151590505b949350505050565b5f80611a9661152b565b600381015490915061ffff600160401b90910481169086161080611abf575061271061ffff8616115b15611ae357604051635f12e6c360e11b815261ffff86166004820152602401610550565b60038101546001600160401b039081169085161015611b1f576040516202a06d60e11b81526001600160401b0385166004820152602401610550565b8060010154831080611b345750806002015483115b15611b555760405163222d164360e21b815260048101849052602401610550565b5f611b5f846127f0565b90505f611b6b82610ba9565b90505f835f015f9054906101000a90046001600160a01b03166001600160a01b031663ed285ae18e8e8e8e8e886040518763ffffffff1660e01b8152600401611bb9969594939291906139b6565b6020604051808303815f875af1158015611bd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf99190613886565b5f818152600786016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600c9096019095529790932080546001600160a01b03191690961790955550939998505050505050505050565b5f80611c9e61152b565b5f938452600701602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015611d08573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d2f9190810190613a29565b9150915080611d5157604051636b2f19e960e01b815260040160405180910390fd5b5f611d5a61152b565b6006810154845191925014611d88578251604051636ba589a560e01b81526004810191909152602401610550565b60208301516001600160a01b031615611dc4576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610550565b60208301516001600160a01b031615611e00576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610550565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401611e3d9190613874565b6040805180830381865af4158015611e57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7b91906137f5565b91509150818814611ea95760405163fee3144560e01b81526004810183905260248101899052604401610550565b5f8881526007840160205260409020600101546001600160401b039081169082161115611f3a575f888152600784016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2611f58565b505f8781526007830160205260409020600101546001600160401b03165b979650505050505050565b5f80611f6d61152b565b5f878152600882016020526040808220815160e0810190925280549394509192909190829060ff166003811115611fa657611fa661366b565b6003811115611fb757611fb761366b565b8152815461010090046001600160a01b03908116602083015260018301546040808401919091526002909301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b9091041660c0909201919091528282015185549251636af907fb60e11b815260048101829052939450925f929091169063d5f20ff6906024015f60405180830381865afa158015612068573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261208f9190810190613716565b90506002835160038111156120a6576120a661366b565b146120c7578251604051633b0d540d60e21b8152610550919060040161367f565b60208301516001600160a01b03163314612163575f8281526007850160205260409020546001600160a01b031633146121005733610fe1565b5f82815260078501602052604090205460c082015161212f91600160b01b90046001600160401b031690613916565b6001600160401b03164210156121635760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610550565b6002815160058111156121785761217861366b565b03612311576003840154608084015161219a916001600160401b031690613916565b6001600160401b03164210156121ce5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610550565b87156121e0576121de8288611cbd565b505b5f8981526008850160205260409020805460ff191660031790558354606084015160a08301516001600160a01b039092169163661096699185916122249190613acf565b6040516001600160e01b031960e085901b16815260048101929092526001600160401b0316602482015260440160408051808303815f875af115801561226c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122909190613aef565b505f8a8152600886016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556122d384888c612813565b9050828a7f5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf60405160405180910390a315159450611a849350505050565b6004815160058111156123265761232661366b565b0361234d5761233683878b612813565b506123408961154f565b6001945050505050611a84565b805160405163170cc93360e21b8152610550919060040161389d565b61237584848484611f63565b6107a757604051631036cf9160e11b815260048101859052602401610550565b5f8061239f61152b565b90505f6123ae610297856127f0565b8254604051636af907fb60e11b8152600481018990529192505f916001600160a01b039091169063d5f20ff6906024015f60405180830381865afa1580156123f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261241f9190810190613716565b905061242a87611c94565b61244a576040516330efa98b60e01b815260048101889052602401610550565b60028151600581111561245f5761245f61366b565b1461248057805160405163170cc93360e21b8152610550919060040161389d565b5f828260a001516124919190613916565b905083600301600a9054906101000a90046001600160401b031682604001516124ba9190613b1b565b6001600160401b0316816001600160401b031611156124f757604051636d51fe0560e11b81526001600160401b0382166004820152602401610550565b8354604051636610966960e01b8152600481018a90526001600160401b03831660248201525f9182916001600160a01b039091169063661096699060440160408051808303815f875af1158015612550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125749190613aef565b915091505f8a836040516020016125a292919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260088b019093529120805491925060019160ff1916828002179055505f8181526008880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d19060800160405180910390a496505050505050505b9392505050565b5f6126b961152b565b5f838152600b82016020526040812080549190559091506107a78482612a6d565b5f80516020613be483398151915254610797906001600160a01b03168383612ae3565b61270984848484611793565b6107a757604051635bff683f60e11b815260048101859052602401610550565b612731612b42565b61273a82612b8d565b61079781612c0b565b5f805f61274e61152b565b5f868152600982016020526040812080549082905591925090819080156127e2575f8781526007850160205260409020546127109061279890600160a01b900461ffff16836138e4565b6127a291906138c5565b91508184600b015f8981526020019081526020015f205f8282546127c6919061393d565b909155506127d690508282613b46565b92506127e28984612a6d565b509097909650945050505050565b5f610bf7825f80516020613be4833981519152546001600160a01b031690612c73565b5f8061281d61152b565b80546040808801519051636af907fb60e11b81529293505f926001600160a01b039092169163d5f20ff6916128589160040190815260200190565b5f60405180830381865afa158015612872573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526128999190810190613716565b90505f6003825160058111156128b1576128b161366b565b14806128cf57506004825160058111156128cd576128cd61366b565b145b156128df575060e081015161291c565b6002825160058111156128f4576128f461366b565b0361290057504261291c565b815160405163170cc93360e21b8152610550919060040161389d565b86608001516001600160401b0316816001600160401b031611612944575f93505050506126a9565b600583015460608801515f916001600160a01b031690634f22429f9061296990610f2b565b60c086015160808c01516040808e01515f90815260078b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156129ea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a0e9190613886565b90506001600160a01b038716612a2657876020015196505b5f8681526009850160209081526040808320849055600a90960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f5f80516020613be483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015612ac8575f80fd5b505af1158015612ada573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b03838116602483015260448201839052610ba491859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612c7f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16612b8b57604051631afcd79f60e31b815260040160405180910390fd5b565b612b95612b42565b612b9d612ce0565b612c08612bad6020830183613b59565b60208301356040840135612bc760808601606087016135b6565b612bd760a0870160808801613b74565b612be760c0880160a08901613b8d565b60c0880135612bfd6101008a0160e08b01613b59565b896101000135612cf0565b50565b612c13612b42565b5f80516020613be48339815191526001600160a01b038216612c5357604051637330680360e01b81526001600160a01b0383166004820152602401610550565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6126a9833384612f19565b5f612c936001600160a01b0384168361307c565b905080515f14158015612cb7575080806020019051810190612cb59190613bad565b155b15610ba457604051635274afe760e01b81526001600160a01b0384166004820152602401610550565b612ce8612b42565b612b8b613089565b612cf8612b42565b5f612d0161152b565b905061ffff86161580612d19575061271061ffff8716115b15612d3d57604051635f12e6c360e11b815261ffff87166004820152602401610550565b87891115612d615760405163222d164360e21b8152600481018a9052602401610550565b60ff85161580612d745750600a60ff8616115b15612d975760405163170db35960e31b815260ff86166004820152602401610550565b896001600160a01b03166309c1df666040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612df791906138fb565b6001600160401b0316876001600160401b03161015612e33576040516202a06d60e11b81526001600160401b0388166004820152602401610550565b835f03612e535760405163a733007160e01b815260040160405180910390fd5b81612e7457604051632f6bd1db60e01b815260048101839052602401610550565b80546001600160a01b039a8b166001600160a01b031991821617825560018201999099556002810197909755600387018054600160501b60ff9096169590950267ffffffffffffffff60501b1961ffff909716600160401b0269ffffffffffffffffffff199096166001600160401b03909816979097179490941794909416949094179091556004840155600583018054929095169190931617909255600690910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015612f5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f839190613886565b9050612f9a6001600160a01b038616853086613091565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015612fde573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130029190613886565b90508181116130685760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610550565b6130728282613b46565b9695505050505050565b60606126a983835f6130ca565b611780612b42565b6040516001600160a01b0384811660248301528381166044830152606482018390526107a79186918216906323b872dd90608401612b10565b6060814710156130ef5760405163cd78605960e01b8152306004820152602401610550565b5f80856001600160a01b0316848660405161310a9190613bc8565b5f6040518083038185875af1925050503d805f8114613144576040519150601f19603f3d011682016040523d82523d5f602084013e613149565b606091505b509150915061307286838360608261316957613164826131b0565b6126a9565b815115801561318057506001600160a01b0384163b155b156131a957604051639996b31560e01b81526001600160a01b0385166004820152602401610550565b50806126a9565b8051156131c05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b803563ffffffff811681146112d8575f80fd5b5f80604083850312156131fd575f80fd5b8235915061320d602084016131d9565b90509250929050565b8015158114612c08575f80fd5b5f805f60608486031215613235575f80fd5b83359250602084013561324781613216565b9150613255604085016131d9565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156132945761329461325e565b60405290565b60405161010081016001600160401b03811182821017156132945761329461325e565b604051601f8201601f191681016001600160401b03811182821017156132e5576132e561325e565b604052919050565b5f6001600160401b038211156133055761330561325e565b50601f01601f191660200190565b5f82601f830112613322575f80fd5b8135613335613330826132ed565b6132bd565b818152846020838601011115613349575f80fd5b816020850160208301375f918101602001919091529392505050565b6001600160401b0381168114612c08575f80fd5b80356112d881613365565b6001600160a01b0381168114612c08575f80fd5b5f604082840312156133a8575f80fd5b6133b0613272565b90506133bb826131d9565b81526020808301356001600160401b03808211156133d7575f80fd5b818501915085601f8301126133ea575f80fd5b8135818111156133fc576133fc61325e565b8060051b915061340d8483016132bd565b8181529183018401918481019088841115613426575f80fd5b938501935b83851015613450578435925061344083613384565b828252938501939085019061342b565b808688015250505050505092915050565b803561ffff811681146112d8575f80fd5b5f805f805f805f80610100898b03121561348a575f80fd5b88356001600160401b03808211156134a0575f80fd5b6134ac8c838d01613313565b995060208b01359150808211156134c1575f80fd5b6134cd8c838d01613313565b98506134db60408c01613379565b975060608b01359150808211156134f0575f80fd5b6134fc8c838d01613398565b965060808b0135915080821115613511575f80fd5b5061351e8b828c01613398565b94505061352d60a08a01613461565b925061353b60c08a01613379565b915060e089013590509295985092959890939650565b5f60208284031215613561575f80fd5b5035919050565b5f805f806080858703121561357b575f80fd5b84359350602085013561358d81613216565b925061359b604086016131d9565b915060608501356135ab81613384565b939692955090935050565b5f602082840312156135c6575f80fd5b81356126a981613365565b5f80604083850312156135e2575f80fd5b50508035926020909101359150565b5f8060408385031215613602575f80fd5b82359150602083013561361481613384565b809150509250929050565b5f6020828403121561362f575f80fd5b6126a9826131d9565b5f8082840361014081121561364b575f80fd5b6101208082121561365a575f80fd5b849350830135905061361481613384565b634e487b7160e01b5f52602160045260245ffd5b60208101600483106136935761369361366b565b91905290565b8051600681106112d8575f80fd5b5f5b838110156136c15781810151838201526020016136a9565b50505f910152565b5f82601f8301126136d8575f80fd5b81516136e6613330826132ed565b8181528460208386010111156136fa575f80fd5b611a848260208301602087016136a7565b80516112d881613365565b5f60208284031215613726575f80fd5b81516001600160401b038082111561373c575f80fd5b908301906101008286031215613750575f80fd5b61375861329a565b61376183613699565b8152602083015182811115613774575f80fd5b613780878286016136c9565b6020830152506137926040840161370b565b60408201526137a36060840161370b565b60608201526137b46080840161370b565b60808201526137c560a0840161370b565b60a08201526137d660c0840161370b565b60c08201526137e760e0840161370b565b60e082015295945050505050565b5f8060408385031215613806575f80fd5b82519150602083015161361481613365565b5f60208284031215613828575f80fd5b81516001600160401b0381111561383d575f80fd5b611a84848285016136c9565b5f81518084526138608160208601602086016136a7565b601f01601f19169290920160200192915050565b602081525f6126a96020830184613849565b5f60208284031215613896575f80fd5b5051919050565b60208101600683106136935761369361366b565b634e487b7160e01b5f52601160045260245ffd5b5f826138df57634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610bf757610bf76138b1565b5f6020828403121561390b575f80fd5b81516126a981613365565b6001600160401b03818116838216019080821115613936576139366138b1565b5092915050565b80820180821115610bf757610bf76138b1565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156139ab5784516001600160a01b03168252938301936001929092019190830190613982565b509695505050505050565b60c081525f6139c860c0830189613849565b82810360208401526139da8189613849565b90506001600160401b03808816604085015283820360608501526139fe8288613950565b91508382036080850152613a128287613950565b925080851660a08501525050979650505050505050565b5f8060408385031215613a3a575f80fd5b82516001600160401b0380821115613a50575f80fd5b9084019060608287031215613a63575f80fd5b604051606081018181108382111715613a7e57613a7e61325e565b604052825181526020830151613a9381613384565b6020820152604083015182811115613aa9575f80fd5b613ab5888286016136c9565b604083015250809450505050602083015161361481613216565b6001600160401b03828116828216039080821115613936576139366138b1565b5f8060408385031215613b00575f80fd5b8251613b0b81613365565b6020939093015192949293505050565b6001600160401b03818116838216028082169190828114613b3e57613b3e6138b1565b505092915050565b81810381811115610bf757610bf76138b1565b5f60208284031215613b69575f80fd5b81356126a981613384565b5f60208284031215613b84575f80fd5b6126a982613461565b5f60208284031215613b9d575f80fd5b813560ff811681146126a9575f80fd5b5f60208284031215613bbd575f80fd5b81516126a981613216565b5f8251613bd98184602087016136a7565b919091019291505056fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220c1e0e10594365110a88acc34e3481fac29bdf179be48683cdbc283f71c2c227664736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 076f4b484..bc8a6cb48 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -77,7 +77,7 @@ type ValidatorMessagesValidationPeriod struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractValidatorManager\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structStakingManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initiateDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initiateValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051613a4b380380613a4b83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6138fe8061014d5f395ff3fe6080604052600436106101ba575f3560e01c806362065856116100f2578063a3a65e4811610092578063b771b3bc11610062578063b771b3bc146104f2578063cacd97551461050c578063cc71bbba1461051f578063fb8b11dd1461053e575f80fd5b8063a3a65e4814610495578063a9778a7a1461034e578063aac80c39146104b4578063b2c1712e146104d3575f80fd5b80638af5499e116100cd5780638af5499e146104195780638ef34c981461043857806393e24598146104575780639681d94014610476575f80fd5b806362065856146103b4578063732214f8146103d35780637a63ad85146103e6575f80fd5b806327bf60cd1161015d578063329c3e1211610138578063329c3e121461031c57806335455ded1461034e5780634b396bcc1461037657806360ad778414610395575f80fd5b806327bf60cd146102a75780632aa56638146102c65780632e2194d8146102e5575f80fd5b806316679564116101985780631667956414610229578063245dafcb1461024857806325e1c77614610267578063264dc60314610286575f80fd5b80630d436317146101be57806313409645146101df578063151d30d1146101fe575b5f80fd5b3480156101c9575f80fd5b506101dd6101d8366004612f1a565b61055d565b005b3480156101ea575f80fd5b506101dd6101f9366004612f44565b61063f565b348015610209575f80fd5b50610212600a81565b60405160ff90911681526020015b60405180910390f35b348015610234575f80fd5b506101dd610243366004612f7b565b61097f565b348015610253575f80fd5b506101dd610262366004612fb6565b610991565b348015610272575f80fd5b506101dd610281366004612f44565b610c55565b6102996102943660046131e1565b610d33565b604051908152602001610220565b3480156102b2575f80fd5b506101dd6102c1366004612f7b565b610d6f565b3480156102d1575f80fd5b506101dd6102e0366004612f7b565b610d7b565b3480156102f0575f80fd5b506103046102ff366004612fb6565b610d8c565b6040516001600160401b039091168152602001610220565b348015610327575f80fd5b506103366001600160991b0181565b6040516001600160a01b039091168152602001610220565b348015610359575f80fd5b5061036361271081565b60405161ffff9091168152602001610220565b348015610381575f80fd5b506101dd6103903660046132b6565b610de0565b3480156103a0575f80fd5b506101dd6103af366004612f44565b610dec565b3480156103bf575f80fd5b506102996103ce366004613304565b61110e565b3480156103de575f80fd5b506102995f81565b3480156103f1575f80fd5b506102997fafe6c4731b852fc2be89a0896ae43d22d8b24989064d841b2a1586b4d39ab60081565b348015610424575f80fd5b506101dd6104333660046132b6565b61112e565b348015610443575f80fd5b506101dd61045236600461331f565b61113a565b348015610462575f80fd5b506101dd610471366004612fb6565b6111eb565b348015610481575f80fd5b5061029961049036600461334d565b6112e4565b3480156104a0575f80fd5b506102996104af36600461334d565b611494565b3480156104bf575f80fd5b506101dd6104ce3660046132b6565b61150c565b3480156104de575f80fd5b506101dd6104ed366004612f7b565b611518565b3480156104fd575f80fd5b506103366005600160991b0181565b61029961051a366004612fb6565b611524565b34801561052a575f80fd5b506101dd6105393660046132b6565b611550565b348015610549575f80fd5b506101dd61055836600461331f565b61155c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806105a6575080546001600160401b03808416911610155b156105c45760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556105ee836115f3565b805468ff0000000000000000191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610647611607565b5f61065061163e565b5f848152600882016020526040808220815160e0810190925280549394509192909190829060ff16600381111561068957610689613366565b600381111561069a5761069a613366565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561071357610713613366565b1461073d578051604051633b0d540d60e21b8152610734919060040161337a565b60405180910390fd5b81546040828101519051636af907fb60e11b815260048101919091525f916001600160a01b03169063d5f20ff6906024015f60405180830381865afa158015610788573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107af9190810190613411565b9050600483546040808501519051636af907fb60e11b81526001600160a01b039092169163d5f20ff6916107e99160040190815260200190565b5f60405180830381865afa158015610803573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261082a9190810190613411565b51600581111561083c5761083c613366565b1415801561086357508160c001516001600160401b031681608001516001600160401b0316105b1561095957825460405163338587c560e21b815263ffffffff861660048201525f9182916001600160a01b039091169063ce161f149060240160408051808303815f875af11580156108b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108db91906134f0565b91509150818460400151146109145781846040015160405163fee3144560e01b8152600401610734929190918252602082015260400190565b806001600160401b03168460c001516001600160401b0316111561095657604051632e19bc2d60e11b81526001600160401b0382166004820152602401610734565b50505b61096285611662565b50505061097b60015f805160206138a983398151915255565b5050565b61098b8383835f6118a6565b50505050565b5f61099a61163e565b5f838152600882016020526040808220815160e0810190925280549394509192909190829060ff1660038111156109d3576109d3613366565b60038111156109e4576109e4613366565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115610a5d57610a5d613366565b14158015610a7e5750600381516003811115610a7b57610a7b613366565b14155b15610a9f578051604051633b0d540d60e21b8152610734919060040161337a565b81546040828101519051636af907fb60e11b815260048101919091525f916001600160a01b03169063d5f20ff6906024015f60405180830381865afa158015610aea573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b119190810190613411565b905080606001516001600160401b03165f03610b43576040516339b894f960e21b815260048101859052602401610734565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93610bb193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015610bcb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bf29190810190613513565b6040518263ffffffff1660e01b8152600401610c0e919061356f565b6020604051808303815f875af1158015610c2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4e9190613581565b5050505050565b610c5e82611b9f565b610c7e576040516330efa98b60e01b815260048101839052602401610734565b5f610c8761163e565b54604051636af907fb60e11b8152600481018590526001600160a01b039091169063d5f20ff6906024015f60405180830381865afa158015610ccb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610cf29190810190613411565b5190506002816005811115610d0957610d09613366565b14610d29578060405163170cc93360e21b81526004016107349190613598565b61098b8383611bc8565b5f610d3c611607565b610d4c8888888888888834611e6b565b9050610d6460015f805160206138a983398151915255565b979650505050505050565b61098b8383835f612068565b610d878383835f61246e565b505050565b5f80610d9661163e565b60040154610da490846135c0565b9050801580610db957506001600160401b0381115b15610dda5760405163222d164360e21b815260048101849052602401610734565b92915050565b610c4e848484846118a6565b5f610df561163e565b5f848152600882016020526040808220815160e0810190925280549394509192909190829060ff166003811115610e2e57610e2e613366565b6003811115610e3f57610e3f613366565b8152815461010090046001600160a01b03908116602083015260018301546040808401919091526002909301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b9091041660c0909201919091528282015185549251636af907fb60e11b815260048101829052939450925f929091169063d5f20ff6906024015f60405180830381865afa158015610ef0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f179190810190613411565b9050600183516003811115610f2e57610f2e613366565b14610f4f578251604051633b0d540d60e21b8152610734919060040161337a565b600481516005811115610f6457610f64613366565b03610f7a57610f7286611662565b505050505050565b8260a001516001600160401b031681608001516001600160401b0316101561108257835460405163338587c560e21b815263ffffffff871660048201525f9182916001600160a01b039091169063ce161f149060240160408051808303815f875af1158015610feb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100f91906134f0565b9150915081841461103d5760405163fee3144560e01b81526004810183905260248101859052604401610734565b8460a001516001600160401b0316816001600160401b0316101561107f57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610734565b50505b5f868152600885016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff000000000000000019909216919091179091559151918252839188917f3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa910160405180910390a3505050505050565b5f61111761163e565b60040154610dda906001600160401b0384166135df565b61098b8484848461246e565b5f61114361163e565b90506001600160a01b0382166111775760405163caa903f960e01b81526001600160a01b0383166004820152602401610734565b5f8381526007820160205260409020546001600160a01b031633146111bd57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610734565b5f928352600c01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6111f461163e565b8054604051636af907fb60e11b8152600481018590529192505f916001600160a01b039091169063d5f20ff6906024015f60405180830381865afa15801561123e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526112659190810190613411565b519050600481600581111561127c5761127c613366565b1461129c578060405163170cc93360e21b81526004016107349190613598565b5f8381526007830160205260409020546001600160a01b031633146112c15733611198565b5f838152600783016020526040902054610d87906001600160a01b03168461249a565b5f6112ed611607565b5f6112f661163e565b805460405163025a076560e61b815263ffffffff861660048201529192505f916001600160a01b0390911690639681d940906024016020604051808303815f875af1158015611347573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136b9190613581565b8254604051636af907fb60e11b8152600481018390529192505f916001600160a01b039091169063d5f20ff6906024015f60405180830381865afa1580156113b5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526113dc9190810190613411565b90506113e782611b9f565b6113f5575091506114799050565b5f828152600784016020908152604080832054600c870190925290912080546001600160a01b031981169091556001600160a01b039182169116806114375750805b60048351600581111561144c5761144c613366565b0361145b5761145b818561249a565b6114718261146c856040015161110e565b6124c4565b509193505050505b61148f60015f805160206138a983398151915255565b919050565b5f61149d61163e565b54604051631474cbc960e31b815263ffffffff841660048201526001600160a01b039091169063a3a65e48906024016020604051808303815f875af11580156114e8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dda9190613581565b610c4e84848484612068565b610d878383835f6124d7565b5f61152d611607565b611538823334612503565b905061148f60015f805160206138a983398151915255565b61098b848484846124d7565b6001600160a01b03811661158e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610734565b5f61159761163e565b5f8481526008820160205260409020549091506001600160a01b036101009091041633146115c55733611198565b5f928352600a01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6115fb61281b565b61160481612866565b50565b5f805160206138a983398151915280546001190161163857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7fafe6c4731b852fc2be89a0896ae43d22d8b24989064d841b2a1586b4d39ab60090565b5f61166b61163e565b5f838152600882016020526040808220815160e0810190925280549394509192909190829060ff1660038111156116a4576116a4613366565b60038111156116b5576116b5613366565b815281546001600160a01b03610100909104811660208084019190915260018401546040808501919091526002909401546001600160401b038082166060860152600160401b820481166080860152600160801b8204811660a0860152600160c01b9091041660c09093019290925283830151865484516304e0efb360e11b8152945195965090949116926309c1df669260048083019391928290030181865afa158015611765573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178991906135f6565b82608001516117989190613611565b6001600160401b03164210156117cc5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610734565b5f848152600884016020908152604080832080546001600160a81b031916815560018101849055600201839055600a8601909152902080546001600160a01b031981169091556001600160a01b031680611827575060208201515b5f806118348388866128e1565b9150915061184d856020015161146c876060015161110e565b6040805183815260208101839052859189917f5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e910160405180910390a350505050505050565b60015f805160206138a983398151915255565b5f806118b061163e565b8054604051635b73516560e11b8152600481018990529192506001600160a01b03169063b6e6a2ca906024015f604051808303815f87803b1580156118f3575f80fd5b505af1158015611905573d5f803e3d5ffd5b50508254604051636af907fb60e11b8152600481018a90525f93506001600160a01b03909116915063d5f20ff6906024015f60405180830381865afa158015611950573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119779190810190613411565b905061198287611b9f565b61199157600192505050611b97565b5f8781526007830160205260409020546001600160a01b031633146119b65733611198565b5f87815260078301602052604090205460c08201516119e591600160b01b90046001600160401b031690613611565b6001600160401b03168160e001516001600160401b03161015611a2c5760e081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610734565b5f8615611a4457611a3d8887611bc8565b9050611a62565b505f8781526007830160205260409020600101546001600160401b03165b600583015460408301515f916001600160a01b031690634f22429f90611a879061110e565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015611af1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b159190613581565b90506001600160a01b038616611b41575f8981526007850160205260409020546001600160a01b031695505b5f898152600b8501602052604081208054839290611b60908490613638565b90915550505f898152600c94909401602052604090932080546001600160a01b0319166001600160a01b0387161790555050151590505b949350505050565b5f80611ba961163e565b5f938452600701602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015611c13573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c3a919081019061364b565b9150915080611c5c57604051636b2f19e960e01b815260040160405180910390fd5b5f611c6561163e565b6006810154845191925014611c93578251604051636ba589a560e01b81526004810191909152602401610734565b60208301516001600160a01b031615611ccf576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610734565b60208301516001600160a01b031615611d0b576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610734565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401611d48919061356f565b6040805180830381865af4158015611d62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d8691906134f0565b91509150818814611db45760405163fee3144560e01b81526004810183905260248101899052604401610734565b5f8881526007840160205260409020600101546001600160401b039081169082161115611e45575f888152600784016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2610d64565b50505f95865260070160205250506040909220600101546001600160401b031692915050565b5f80611e7561163e565b600381015490915061ffff600160401b90910481169086161080611e9e575061271061ffff8616115b15611ec257604051635f12e6c360e11b815261ffff86166004820152602401610734565b60038101546001600160401b039081169085161015611efe576040516202a06d60e11b81526001600160401b0385166004820152602401610734565b8060010154831080611f135750806002015483115b15611f345760405163222d164360e21b815260048101849052602401610734565b825f611f3f82610d8c565b90505f835f015f9054906101000a90046001600160a01b03166001600160a01b031663ed285ae18e8e8e8e8e886040518763ffffffff1660e01b8152600401611f8d96959493929190613757565b6020604051808303815f875af1158015611fa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fcd9190613581565b5f818152600786016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600c9096019095529790932080546001600160a01b03191690961790955550939998505050505050505050565b5f8061207261163e565b5f878152600882016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120ab576120ab613366565b60038111156120bc576120bc613366565b8152815461010090046001600160a01b03908116602083015260018301546040808401919091526002909301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b9091041660c0909201919091528282015185549251636af907fb60e11b815260048101829052939450925f929091169063d5f20ff6906024015f60405180830381865afa15801561216d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121949190810190613411565b90506002835160038111156121ab576121ab613366565b146121cc578251604051633b0d540d60e21b8152610734919060040161337a565b60208301516001600160a01b03163314612268575f8281526007850160205260409020546001600160a01b031633146122055733611198565b5f82815260078501602052604090205460c082015161223491600160b01b90046001600160401b031690613611565b6001600160401b03164210156122685760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610734565b60028151600581111561227d5761227d613366565b03612416576003840154608084015161229f916001600160401b031690613611565b6001600160401b03164210156122d35760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610734565b87156122e5576122e38288611bc8565b505b5f8981526008850160205260409020805460ff191660031790558354606084015160a08301516001600160a01b0390921691636610966991859161232991906137ca565b6040516001600160e01b031960e085901b16815260048101929092526001600160401b0316602482015260440160408051808303815f875af1158015612371573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061239591906137ea565b505f8a8152600886016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556123d884888c61298e565b9050828a7f5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf60405160405180910390a315159450611b979350505050565b60048151600581111561242b5761242b613366565b036124525761243b83878b61298e565b5061244589611662565b6001945050505050611b97565b805160405163170cc93360e21b81526107349190600401613598565b61247a84848484612068565b61098b57604051631036cf9160e11b815260048101859052602401610734565b5f6124a361163e565b5f838152600b820160205260408120805491905590915061098b8482612be8565b61097b6001600160a01b03831682612c46565b6124e3848484846118a6565b61098b57604051635bff683f60e11b815260048101859052602401610734565b5f8061250d61163e565b90505f61251984610d8c565b8254604051636af907fb60e11b8152600481018990529192505f916001600160a01b039091169063d5f20ff6906024015f60405180830381865afa158015612563573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261258a9190810190613411565b905061259587611b9f565b6125b5576040516330efa98b60e01b815260048101889052602401610734565b6002815160058111156125ca576125ca613366565b146125eb57805160405163170cc93360e21b81526107349190600401613598565b5f828260a001516125fc9190613611565b905083600301600a9054906101000a90046001600160401b031682604001516126259190613816565b6001600160401b0316816001600160401b0316111561266257604051636d51fe0560e11b81526001600160401b0382166004820152602401610734565b8354604051636610966960e01b8152600481018a90526001600160401b03831660248201525f9182916001600160a01b039091169063661096699060440160408051808303815f875af11580156126bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126df91906137ea565b915091505f8a8360405160200161270d92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260088b019093529120805491925060019160ff1916828002179055505f8181526008880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d19060800160405180910390a496505050505050505b9392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661286457604051631afcd79f60e31b815260040160405180910390fd5b565b61286e61281b565b612876612cd9565b6116046128866020830183613841565b602083013560408401356128a06080860160608701613304565b6128b060a087016080880161385c565b6128c060c0880160a08901613875565b60c08801356128d66101008a0160e08b01613841565b896101000135612ce9565b5f805f6128ec61163e565b5f86815260098201602052604081208054908290559192509081908015612980575f8781526007850160205260409020546127109061293690600160a01b900461ffff16836135df565b61294091906135c0565b91508184600b015f8981526020019081526020015f205f8282546129649190613638565b9091555061297490508282613895565b92506129808984612be8565b509097909650945050505050565b5f8061299861163e565b80546040808801519051636af907fb60e11b81529293505f926001600160a01b039092169163d5f20ff6916129d39160040190815260200190565b5f60405180830381865afa1580156129ed573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a149190810190613411565b90505f600382516005811115612a2c57612a2c613366565b1480612a4a5750600482516005811115612a4857612a48613366565b145b15612a5a575060e0810151612a97565b600282516005811115612a6f57612a6f613366565b03612a7b575042612a97565b815160405163170cc93360e21b81526107349190600401613598565b86608001516001600160401b0316816001600160401b031611612abf575f9350505050612814565b600583015460608801515f916001600160a01b031690634f22429f90612ae49061110e565b60c086015160808c01516040808e01515f90815260078b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015612b65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b899190613581565b90506001600160a01b038716612ba157876020015196505b5f8681526009850160209081526040808320849055600a90960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612c34575f80fd5b505af1158015610f72573d5f803e3d5ffd5b80471015612c695760405163cd78605960e01b8152306004820152602401610734565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612cb2576040519150601f19603f3d011682016040523d82523d5f602084013e612cb7565b606091505b5050905080610d8757604051630a12f52160e11b815260040160405180910390fd5b612ce161281b565b612864612f12565b612cf161281b565b5f612cfa61163e565b905061ffff86161580612d12575061271061ffff8716115b15612d3657604051635f12e6c360e11b815261ffff87166004820152602401610734565b87891115612d5a5760405163222d164360e21b8152600481018a9052602401610734565b60ff85161580612d6d5750600a60ff8616115b15612d905760405163170db35960e31b815260ff86166004820152602401610734565b896001600160a01b03166309c1df666040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dcc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612df091906135f6565b6001600160401b0316876001600160401b03161015612e2c576040516202a06d60e11b81526001600160401b0388166004820152602401610734565b835f03612e4c5760405163a733007160e01b815260040160405180910390fd5b81612e6d57604051632f6bd1db60e01b815260048101839052602401610734565b80546001600160a01b039a8b166001600160a01b031991821617825560018201999099556002810197909755600387018054600160501b60ff9096169590950267ffffffffffffffff60501b1961ffff909716600160401b0269ffffffffffffffffffff199096166001600160401b03909816979097179490941794909416949094179091556004840155600583018054929095169190931617909255600690910155565b61189361281b565b5f6101208284031215612f2b575f80fd5b50919050565b803563ffffffff8116811461148f575f80fd5b5f8060408385031215612f55575f80fd5b82359150612f6560208401612f31565b90509250929050565b8015158114611604575f80fd5b5f805f60608486031215612f8d575f80fd5b833592506020840135612f9f81612f6e565b9150612fad60408501612f31565b90509250925092565b5f60208284031215612fc6575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b038111828210171561300357613003612fcd565b60405290565b60405161010081016001600160401b038111828210171561300357613003612fcd565b604051601f8201601f191681016001600160401b038111828210171561305457613054612fcd565b604052919050565b5f6001600160401b0382111561307457613074612fcd565b50601f01601f191660200190565b5f82601f830112613091575f80fd5b81356130a461309f8261305c565b61302c565b8181528460208386010111156130b8575f80fd5b816020850160208301375f918101602001919091529392505050565b6001600160401b0381168114611604575f80fd5b803561148f816130d4565b6001600160a01b0381168114611604575f80fd5b5f60408284031215613117575f80fd5b61311f612fe1565b905061312a82612f31565b81526020808301356001600160401b0380821115613146575f80fd5b818501915085601f830112613159575f80fd5b81358181111561316b5761316b612fcd565b8060051b915061317c84830161302c565b8181529183018401918481019088841115613195575f80fd5b938501935b838510156131bf57843592506131af836130f3565b828252938501939085019061319a565b808688015250505050505092915050565b803561ffff8116811461148f575f80fd5b5f805f805f805f60e0888a0312156131f7575f80fd5b87356001600160401b038082111561320d575f80fd5b6132198b838c01613082565b985060208a013591508082111561322e575f80fd5b61323a8b838c01613082565b975061324860408b016130e8565b965060608a013591508082111561325d575f80fd5b6132698b838c01613107565b955060808a013591508082111561327e575f80fd5b5061328b8a828b01613107565b93505061329a60a089016131d0565b91506132a860c089016130e8565b905092959891949750929550565b5f805f80608085870312156132c9575f80fd5b8435935060208501356132db81612f6e565b92506132e960408601612f31565b915060608501356132f9816130f3565b939692955090935050565b5f60208284031215613314575f80fd5b8135612814816130d4565b5f8060408385031215613330575f80fd5b823591506020830135613342816130f3565b809150509250929050565b5f6020828403121561335d575f80fd5b61281482612f31565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061338e5761338e613366565b91905290565b80516006811061148f575f80fd5b5f5b838110156133bc5781810151838201526020016133a4565b50505f910152565b5f82601f8301126133d3575f80fd5b81516133e161309f8261305c565b8181528460208386010111156133f5575f80fd5b611b978260208301602087016133a2565b805161148f816130d4565b5f60208284031215613421575f80fd5b81516001600160401b0380821115613437575f80fd5b90830190610100828603121561344b575f80fd5b613453613009565b61345c83613394565b815260208301518281111561346f575f80fd5b61347b878286016133c4565b60208301525061348d60408401613406565b604082015261349e60608401613406565b60608201526134af60808401613406565b60808201526134c060a08401613406565b60a08201526134d160c08401613406565b60c08201526134e260e08401613406565b60e082015295945050505050565b5f8060408385031215613501575f80fd5b825191506020830151613342816130d4565b5f60208284031215613523575f80fd5b81516001600160401b03811115613538575f80fd5b611b97848285016133c4565b5f815180845261355b8160208601602086016133a2565b601f01601f19169290920160200192915050565b602081525f6128146020830184613544565b5f60208284031215613591575f80fd5b5051919050565b602081016006831061338e5761338e613366565b634e487b7160e01b5f52601160045260245ffd5b5f826135da57634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610dda57610dda6135ac565b5f60208284031215613606575f80fd5b8151612814816130d4565b6001600160401b03818116838216019080821115613631576136316135ac565b5092915050565b80820180821115610dda57610dda6135ac565b5f806040838503121561365c575f80fd5b82516001600160401b0380821115613672575f80fd5b9084019060608287031215613685575f80fd5b6040516060810181811083821117156136a0576136a0612fcd565b6040528251815260208301516136b5816130f3565b60208201526040830151828111156136cb575f80fd5b6136d7888286016133c4565b604083015250809450505050602083015161334281612f6e565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561374c5784516001600160a01b03168252938301936001929092019190830190613723565b509695505050505050565b60c081525f61376960c0830189613544565b828103602084015261377b8189613544565b90506001600160401b038088166040850152838203606085015261379f82886136f1565b915083820360808501526137b382876136f1565b925080851660a08501525050979650505050505050565b6001600160401b03828116828216039080821115613631576136316135ac565b5f80604083850312156137fb575f80fd5b8251613806816130d4565b6020939093015192949293505050565b6001600160401b03818116838216028082169190828114613839576138396135ac565b505092915050565b5f60208284031215613851575f80fd5b8135612814816130f3565b5f6020828403121561386c575f80fd5b612814826131d0565b5f60208284031215613885575f80fd5b813560ff81168114612814575f80fd5b81810381811115610dda57610dda6135ac56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220119140ec7e093317eedfebe4b427ee37728e7558bfa8d779cb81fafd46b8de4e64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051613a4b380380613a4b83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6138fe8061014d5f395ff3fe6080604052600436106101ba575f3560e01c806362065856116100f2578063a3a65e4811610092578063b771b3bc11610062578063b771b3bc146104f2578063cacd97551461050c578063cc71bbba1461051f578063fb8b11dd1461053e575f80fd5b8063a3a65e4814610495578063a9778a7a1461034e578063aac80c39146104b4578063b2c1712e146104d3575f80fd5b80638af5499e116100cd5780638af5499e146104195780638ef34c981461043857806393e24598146104575780639681d94014610476575f80fd5b806362065856146103b4578063732214f8146103d35780637a63ad85146103e6575f80fd5b806327bf60cd1161015d578063329c3e1211610138578063329c3e121461031c57806335455ded1461034e5780634b396bcc1461037657806360ad778414610395575f80fd5b806327bf60cd146102a75780632aa56638146102c65780632e2194d8146102e5575f80fd5b806316679564116101985780631667956414610229578063245dafcb1461024857806325e1c77614610267578063264dc60314610286575f80fd5b80630d436317146101be57806313409645146101df578063151d30d1146101fe575b5f80fd5b3480156101c9575f80fd5b506101dd6101d8366004612f1a565b61055d565b005b3480156101ea575f80fd5b506101dd6101f9366004612f44565b61063f565b348015610209575f80fd5b50610212600a81565b60405160ff90911681526020015b60405180910390f35b348015610234575f80fd5b506101dd610243366004612f7b565b61097f565b348015610253575f80fd5b506101dd610262366004612fb6565b610991565b348015610272575f80fd5b506101dd610281366004612f44565b610c55565b6102996102943660046131e1565b610d33565b604051908152602001610220565b3480156102b2575f80fd5b506101dd6102c1366004612f7b565b610d6f565b3480156102d1575f80fd5b506101dd6102e0366004612f7b565b610d7b565b3480156102f0575f80fd5b506103046102ff366004612fb6565b610d8c565b6040516001600160401b039091168152602001610220565b348015610327575f80fd5b506103366001600160991b0181565b6040516001600160a01b039091168152602001610220565b348015610359575f80fd5b5061036361271081565b60405161ffff9091168152602001610220565b348015610381575f80fd5b506101dd6103903660046132b6565b610de0565b3480156103a0575f80fd5b506101dd6103af366004612f44565b610dec565b3480156103bf575f80fd5b506102996103ce366004613304565b61110e565b3480156103de575f80fd5b506102995f81565b3480156103f1575f80fd5b506102997fafe6c4731b852fc2be89a0896ae43d22d8b24989064d841b2a1586b4d39ab60081565b348015610424575f80fd5b506101dd6104333660046132b6565b61112e565b348015610443575f80fd5b506101dd61045236600461331f565b61113a565b348015610462575f80fd5b506101dd610471366004612fb6565b6111eb565b348015610481575f80fd5b5061029961049036600461334d565b6112e4565b3480156104a0575f80fd5b506102996104af36600461334d565b611494565b3480156104bf575f80fd5b506101dd6104ce3660046132b6565b61150c565b3480156104de575f80fd5b506101dd6104ed366004612f7b565b611518565b3480156104fd575f80fd5b506103366005600160991b0181565b61029961051a366004612fb6565b611524565b34801561052a575f80fd5b506101dd6105393660046132b6565b611550565b348015610549575f80fd5b506101dd61055836600461331f565b61155c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806105a6575080546001600160401b03808416911610155b156105c45760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556105ee836115f3565b805468ff0000000000000000191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610647611607565b5f61065061163e565b5f848152600882016020526040808220815160e0810190925280549394509192909190829060ff16600381111561068957610689613366565b600381111561069a5761069a613366565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561071357610713613366565b1461073d578051604051633b0d540d60e21b8152610734919060040161337a565b60405180910390fd5b81546040828101519051636af907fb60e11b815260048101919091525f916001600160a01b03169063d5f20ff6906024015f60405180830381865afa158015610788573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107af9190810190613411565b9050600483546040808501519051636af907fb60e11b81526001600160a01b039092169163d5f20ff6916107e99160040190815260200190565b5f60405180830381865afa158015610803573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261082a9190810190613411565b51600581111561083c5761083c613366565b1415801561086357508160c001516001600160401b031681608001516001600160401b0316105b1561095957825460405163338587c560e21b815263ffffffff861660048201525f9182916001600160a01b039091169063ce161f149060240160408051808303815f875af11580156108b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108db91906134f0565b91509150818460400151146109145781846040015160405163fee3144560e01b8152600401610734929190918252602082015260400190565b806001600160401b03168460c001516001600160401b0316111561095657604051632e19bc2d60e11b81526001600160401b0382166004820152602401610734565b50505b61096285611662565b50505061097b60015f805160206138a983398151915255565b5050565b61098b8383835f6118a6565b50505050565b5f61099a61163e565b5f838152600882016020526040808220815160e0810190925280549394509192909190829060ff1660038111156109d3576109d3613366565b60038111156109e4576109e4613366565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115610a5d57610a5d613366565b14158015610a7e5750600381516003811115610a7b57610a7b613366565b14155b15610a9f578051604051633b0d540d60e21b8152610734919060040161337a565b81546040828101519051636af907fb60e11b815260048101919091525f916001600160a01b03169063d5f20ff6906024015f60405180830381865afa158015610aea573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b119190810190613411565b905080606001516001600160401b03165f03610b43576040516339b894f960e21b815260048101859052602401610734565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93610bb193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015610bcb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bf29190810190613513565b6040518263ffffffff1660e01b8152600401610c0e919061356f565b6020604051808303815f875af1158015610c2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4e9190613581565b5050505050565b610c5e82611b9f565b610c7e576040516330efa98b60e01b815260048101839052602401610734565b5f610c8761163e565b54604051636af907fb60e11b8152600481018590526001600160a01b039091169063d5f20ff6906024015f60405180830381865afa158015610ccb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610cf29190810190613411565b5190506002816005811115610d0957610d09613366565b14610d29578060405163170cc93360e21b81526004016107349190613598565b61098b8383611bc8565b5f610d3c611607565b610d4c8888888888888834611e6b565b9050610d6460015f805160206138a983398151915255565b979650505050505050565b61098b8383835f612068565b610d878383835f61246e565b505050565b5f80610d9661163e565b60040154610da490846135c0565b9050801580610db957506001600160401b0381115b15610dda5760405163222d164360e21b815260048101849052602401610734565b92915050565b610c4e848484846118a6565b5f610df561163e565b5f848152600882016020526040808220815160e0810190925280549394509192909190829060ff166003811115610e2e57610e2e613366565b6003811115610e3f57610e3f613366565b8152815461010090046001600160a01b03908116602083015260018301546040808401919091526002909301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b9091041660c0909201919091528282015185549251636af907fb60e11b815260048101829052939450925f929091169063d5f20ff6906024015f60405180830381865afa158015610ef0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f179190810190613411565b9050600183516003811115610f2e57610f2e613366565b14610f4f578251604051633b0d540d60e21b8152610734919060040161337a565b600481516005811115610f6457610f64613366565b03610f7a57610f7286611662565b505050505050565b8260a001516001600160401b031681608001516001600160401b0316101561108257835460405163338587c560e21b815263ffffffff871660048201525f9182916001600160a01b039091169063ce161f149060240160408051808303815f875af1158015610feb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100f91906134f0565b9150915081841461103d5760405163fee3144560e01b81526004810183905260248101859052604401610734565b8460a001516001600160401b0316816001600160401b0316101561107f57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610734565b50505b5f868152600885016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff000000000000000019909216919091179091559151918252839188917f3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa910160405180910390a3505050505050565b5f61111761163e565b60040154610dda906001600160401b0384166135df565b61098b8484848461246e565b5f61114361163e565b90506001600160a01b0382166111775760405163caa903f960e01b81526001600160a01b0383166004820152602401610734565b5f8381526007820160205260409020546001600160a01b031633146111bd57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610734565b5f928352600c01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6111f461163e565b8054604051636af907fb60e11b8152600481018590529192505f916001600160a01b039091169063d5f20ff6906024015f60405180830381865afa15801561123e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526112659190810190613411565b519050600481600581111561127c5761127c613366565b1461129c578060405163170cc93360e21b81526004016107349190613598565b5f8381526007830160205260409020546001600160a01b031633146112c15733611198565b5f838152600783016020526040902054610d87906001600160a01b03168461249a565b5f6112ed611607565b5f6112f661163e565b805460405163025a076560e61b815263ffffffff861660048201529192505f916001600160a01b0390911690639681d940906024016020604051808303815f875af1158015611347573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136b9190613581565b8254604051636af907fb60e11b8152600481018390529192505f916001600160a01b039091169063d5f20ff6906024015f60405180830381865afa1580156113b5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526113dc9190810190613411565b90506113e782611b9f565b6113f5575091506114799050565b5f828152600784016020908152604080832054600c870190925290912080546001600160a01b031981169091556001600160a01b039182169116806114375750805b60048351600581111561144c5761144c613366565b0361145b5761145b818561249a565b6114718261146c856040015161110e565b6124c4565b509193505050505b61148f60015f805160206138a983398151915255565b919050565b5f61149d61163e565b54604051631474cbc960e31b815263ffffffff841660048201526001600160a01b039091169063a3a65e48906024016020604051808303815f875af11580156114e8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dda9190613581565b610c4e84848484612068565b610d878383835f6124d7565b5f61152d611607565b611538823334612503565b905061148f60015f805160206138a983398151915255565b61098b848484846124d7565b6001600160a01b03811661158e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610734565b5f61159761163e565b5f8481526008820160205260409020549091506001600160a01b036101009091041633146115c55733611198565b5f928352600a01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6115fb61281b565b61160481612866565b50565b5f805160206138a983398151915280546001190161163857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7fafe6c4731b852fc2be89a0896ae43d22d8b24989064d841b2a1586b4d39ab60090565b5f61166b61163e565b5f838152600882016020526040808220815160e0810190925280549394509192909190829060ff1660038111156116a4576116a4613366565b60038111156116b5576116b5613366565b815281546001600160a01b03610100909104811660208084019190915260018401546040808501919091526002909401546001600160401b038082166060860152600160401b820481166080860152600160801b8204811660a0860152600160c01b9091041660c09093019290925283830151865484516304e0efb360e11b8152945195965090949116926309c1df669260048083019391928290030181865afa158015611765573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178991906135f6565b82608001516117989190613611565b6001600160401b03164210156117cc5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610734565b5f848152600884016020908152604080832080546001600160a81b031916815560018101849055600201839055600a8601909152902080546001600160a01b031981169091556001600160a01b031680611827575060208201515b5f806118348388866128e1565b9150915061184d856020015161146c876060015161110e565b6040805183815260208101839052859189917f5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e910160405180910390a350505050505050565b60015f805160206138a983398151915255565b5f806118b061163e565b8054604051635b73516560e11b8152600481018990529192506001600160a01b03169063b6e6a2ca906024015f604051808303815f87803b1580156118f3575f80fd5b505af1158015611905573d5f803e3d5ffd5b50508254604051636af907fb60e11b8152600481018a90525f93506001600160a01b03909116915063d5f20ff6906024015f60405180830381865afa158015611950573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119779190810190613411565b905061198287611b9f565b61199157600192505050611b97565b5f8781526007830160205260409020546001600160a01b031633146119b65733611198565b5f87815260078301602052604090205460c08201516119e591600160b01b90046001600160401b031690613611565b6001600160401b03168160e001516001600160401b03161015611a2c5760e081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610734565b5f8615611a4457611a3d8887611bc8565b9050611a62565b505f8781526007830160205260409020600101546001600160401b03165b600583015460408301515f916001600160a01b031690634f22429f90611a879061110e565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015611af1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b159190613581565b90506001600160a01b038616611b41575f8981526007850160205260409020546001600160a01b031695505b5f898152600b8501602052604081208054839290611b60908490613638565b90915550505f898152600c94909401602052604090932080546001600160a01b0319166001600160a01b0387161790555050151590505b949350505050565b5f80611ba961163e565b5f938452600701602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015611c13573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c3a919081019061364b565b9150915080611c5c57604051636b2f19e960e01b815260040160405180910390fd5b5f611c6561163e565b6006810154845191925014611c93578251604051636ba589a560e01b81526004810191909152602401610734565b60208301516001600160a01b031615611ccf576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610734565b60208301516001600160a01b031615611d0b576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610734565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401611d48919061356f565b6040805180830381865af4158015611d62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d8691906134f0565b91509150818814611db45760405163fee3144560e01b81526004810183905260248101899052604401610734565b5f8881526007840160205260409020600101546001600160401b039081169082161115611e45575f888152600784016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2610d64565b50505f95865260070160205250506040909220600101546001600160401b031692915050565b5f80611e7561163e565b600381015490915061ffff600160401b90910481169086161080611e9e575061271061ffff8616115b15611ec257604051635f12e6c360e11b815261ffff86166004820152602401610734565b60038101546001600160401b039081169085161015611efe576040516202a06d60e11b81526001600160401b0385166004820152602401610734565b8060010154831080611f135750806002015483115b15611f345760405163222d164360e21b815260048101849052602401610734565b825f611f3f82610d8c565b90505f835f015f9054906101000a90046001600160a01b03166001600160a01b031663ed285ae18e8e8e8e8e886040518763ffffffff1660e01b8152600401611f8d96959493929190613757565b6020604051808303815f875af1158015611fa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fcd9190613581565b5f818152600786016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600c9096019095529790932080546001600160a01b03191690961790955550939998505050505050505050565b5f8061207261163e565b5f878152600882016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120ab576120ab613366565b60038111156120bc576120bc613366565b8152815461010090046001600160a01b03908116602083015260018301546040808401919091526002909301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b9091041660c0909201919091528282015185549251636af907fb60e11b815260048101829052939450925f929091169063d5f20ff6906024015f60405180830381865afa15801561216d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121949190810190613411565b90506002835160038111156121ab576121ab613366565b146121cc578251604051633b0d540d60e21b8152610734919060040161337a565b60208301516001600160a01b03163314612268575f8281526007850160205260409020546001600160a01b031633146122055733611198565b5f82815260078501602052604090205460c082015161223491600160b01b90046001600160401b031690613611565b6001600160401b03164210156122685760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610734565b60028151600581111561227d5761227d613366565b03612416576003840154608084015161229f916001600160401b031690613611565b6001600160401b03164210156122d35760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610734565b87156122e5576122e38288611bc8565b505b5f8981526008850160205260409020805460ff191660031790558354606084015160a08301516001600160a01b0390921691636610966991859161232991906137ca565b6040516001600160e01b031960e085901b16815260048101929092526001600160401b0316602482015260440160408051808303815f875af1158015612371573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061239591906137ea565b505f8a8152600886016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556123d884888c61298e565b9050828a7f5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf60405160405180910390a315159450611b979350505050565b60048151600581111561242b5761242b613366565b036124525761243b83878b61298e565b5061244589611662565b6001945050505050611b97565b805160405163170cc93360e21b81526107349190600401613598565b61247a84848484612068565b61098b57604051631036cf9160e11b815260048101859052602401610734565b5f6124a361163e565b5f838152600b820160205260408120805491905590915061098b8482612be8565b61097b6001600160a01b03831682612c46565b6124e3848484846118a6565b61098b57604051635bff683f60e11b815260048101859052602401610734565b5f8061250d61163e565b90505f61251984610d8c565b8254604051636af907fb60e11b8152600481018990529192505f916001600160a01b039091169063d5f20ff6906024015f60405180830381865afa158015612563573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261258a9190810190613411565b905061259587611b9f565b6125b5576040516330efa98b60e01b815260048101889052602401610734565b6002815160058111156125ca576125ca613366565b146125eb57805160405163170cc93360e21b81526107349190600401613598565b5f828260a001516125fc9190613611565b905083600301600a9054906101000a90046001600160401b031682604001516126259190613816565b6001600160401b0316816001600160401b0316111561266257604051636d51fe0560e11b81526001600160401b0382166004820152602401610734565b8354604051636610966960e01b8152600481018a90526001600160401b03831660248201525f9182916001600160a01b039091169063661096699060440160408051808303815f875af11580156126bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126df91906137ea565b915091505f8a8360405160200161270d92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260088b019093529120805491925060019160ff1916828002179055505f8181526008880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d19060800160405180910390a496505050505050505b9392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661286457604051631afcd79f60e31b815260040160405180910390fd5b565b61286e61281b565b612876612cd9565b6116046128866020830183613841565b602083013560408401356128a06080860160608701613304565b6128b060a087016080880161385c565b6128c060c0880160a08901613875565b60c08801356128d66101008a0160e08b01613841565b896101000135612ce9565b5f805f6128ec61163e565b5f86815260098201602052604081208054908290559192509081908015612980575f8781526007850160205260409020546127109061293690600160a01b900461ffff16836135df565b61294091906135c0565b91508184600b015f8981526020019081526020015f205f8282546129649190613638565b9091555061297490508282613895565b92506129808984612be8565b509097909650945050505050565b5f8061299861163e565b80546040808801519051636af907fb60e11b81529293505f926001600160a01b039092169163d5f20ff6916129d39160040190815260200190565b5f60405180830381865afa1580156129ed573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a149190810190613411565b90505f600382516005811115612a2c57612a2c613366565b1480612a4a5750600482516005811115612a4857612a48613366565b145b15612a5a575060e0810151612a97565b600282516005811115612a6f57612a6f613366565b03612a7b575042612a97565b815160405163170cc93360e21b81526107349190600401613598565b86608001516001600160401b0316816001600160401b031611612abf575f9350505050612814565b600583015460608801515f916001600160a01b031690634f22429f90612ae49061110e565b60c086015160808c01516040808e01515f90815260078b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015612b65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b899190613581565b90506001600160a01b038716612ba157876020015196505b5f8681526009850160209081526040808320849055600a90960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612c34575f80fd5b505af1158015610f72573d5f803e3d5ffd5b80471015612c695760405163cd78605960e01b8152306004820152602401610734565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612cb2576040519150601f19603f3d011682016040523d82523d5f602084013e612cb7565b606091505b5050905080610d8757604051630a12f52160e11b815260040160405180910390fd5b612ce161281b565b612864612f12565b612cf161281b565b5f612cfa61163e565b905061ffff86161580612d12575061271061ffff8716115b15612d3657604051635f12e6c360e11b815261ffff87166004820152602401610734565b87891115612d5a5760405163222d164360e21b8152600481018a9052602401610734565b60ff85161580612d6d5750600a60ff8616115b15612d905760405163170db35960e31b815260ff86166004820152602401610734565b896001600160a01b03166309c1df666040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dcc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612df091906135f6565b6001600160401b0316876001600160401b03161015612e2c576040516202a06d60e11b81526001600160401b0388166004820152602401610734565b835f03612e4c5760405163a733007160e01b815260040160405180910390fd5b81612e6d57604051632f6bd1db60e01b815260048101839052602401610734565b80546001600160a01b039a8b166001600160a01b031991821617825560018201999099556002810197909755600387018054600160501b60ff9096169590950267ffffffffffffffff60501b1961ffff909716600160401b0269ffffffffffffffffffff199096166001600160401b03909816979097179490941794909416949094179091556004840155600583018054929095169190931617909255600690910155565b61189361281b565b5f6101208284031215612f2b575f80fd5b50919050565b803563ffffffff8116811461148f575f80fd5b5f8060408385031215612f55575f80fd5b82359150612f6560208401612f31565b90509250929050565b8015158114611604575f80fd5b5f805f60608486031215612f8d575f80fd5b833592506020840135612f9f81612f6e565b9150612fad60408501612f31565b90509250925092565b5f60208284031215612fc6575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b038111828210171561300357613003612fcd565b60405290565b60405161010081016001600160401b038111828210171561300357613003612fcd565b604051601f8201601f191681016001600160401b038111828210171561305457613054612fcd565b604052919050565b5f6001600160401b0382111561307457613074612fcd565b50601f01601f191660200190565b5f82601f830112613091575f80fd5b81356130a461309f8261305c565b61302c565b8181528460208386010111156130b8575f80fd5b816020850160208301375f918101602001919091529392505050565b6001600160401b0381168114611604575f80fd5b803561148f816130d4565b6001600160a01b0381168114611604575f80fd5b5f60408284031215613117575f80fd5b61311f612fe1565b905061312a82612f31565b81526020808301356001600160401b0380821115613146575f80fd5b818501915085601f830112613159575f80fd5b81358181111561316b5761316b612fcd565b8060051b915061317c84830161302c565b8181529183018401918481019088841115613195575f80fd5b938501935b838510156131bf57843592506131af836130f3565b828252938501939085019061319a565b808688015250505050505092915050565b803561ffff8116811461148f575f80fd5b5f805f805f805f60e0888a0312156131f7575f80fd5b87356001600160401b038082111561320d575f80fd5b6132198b838c01613082565b985060208a013591508082111561322e575f80fd5b61323a8b838c01613082565b975061324860408b016130e8565b965060608a013591508082111561325d575f80fd5b6132698b838c01613107565b955060808a013591508082111561327e575f80fd5b5061328b8a828b01613107565b93505061329a60a089016131d0565b91506132a860c089016130e8565b905092959891949750929550565b5f805f80608085870312156132c9575f80fd5b8435935060208501356132db81612f6e565b92506132e960408601612f31565b915060608501356132f9816130f3565b939692955090935050565b5f60208284031215613314575f80fd5b8135612814816130d4565b5f8060408385031215613330575f80fd5b823591506020830135613342816130f3565b809150509250929050565b5f6020828403121561335d575f80fd5b61281482612f31565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061338e5761338e613366565b91905290565b80516006811061148f575f80fd5b5f5b838110156133bc5781810151838201526020016133a4565b50505f910152565b5f82601f8301126133d3575f80fd5b81516133e161309f8261305c565b8181528460208386010111156133f5575f80fd5b611b978260208301602087016133a2565b805161148f816130d4565b5f60208284031215613421575f80fd5b81516001600160401b0380821115613437575f80fd5b90830190610100828603121561344b575f80fd5b613453613009565b61345c83613394565b815260208301518281111561346f575f80fd5b61347b878286016133c4565b60208301525061348d60408401613406565b604082015261349e60608401613406565b60608201526134af60808401613406565b60808201526134c060a08401613406565b60a08201526134d160c08401613406565b60c08201526134e260e08401613406565b60e082015295945050505050565b5f8060408385031215613501575f80fd5b825191506020830151613342816130d4565b5f60208284031215613523575f80fd5b81516001600160401b03811115613538575f80fd5b611b97848285016133c4565b5f815180845261355b8160208601602086016133a2565b601f01601f19169290920160200192915050565b602081525f6128146020830184613544565b5f60208284031215613591575f80fd5b5051919050565b602081016006831061338e5761338e613366565b634e487b7160e01b5f52601160045260245ffd5b5f826135da57634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610dda57610dda6135ac565b5f60208284031215613606575f80fd5b8151612814816130d4565b6001600160401b03818116838216019080821115613631576136316135ac565b5092915050565b80820180821115610dda57610dda6135ac565b5f806040838503121561365c575f80fd5b82516001600160401b0380821115613672575f80fd5b9084019060608287031215613685575f80fd5b6040516060810181811083821117156136a0576136a0612fcd565b6040528251815260208301516136b5816130f3565b60208201526040830151828111156136cb575f80fd5b6136d7888286016133c4565b604083015250809450505050602083015161334281612f6e565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561374c5784516001600160a01b03168252938301936001929092019190830190613723565b509695505050505050565b60c081525f61376960c0830189613544565b828103602084015261377b8189613544565b90506001600160401b038088166040850152838203606085015261379f82886136f1565b915083820360808501526137b382876136f1565b925080851660a08501525050979650505050505050565b6001600160401b03828116828216039080821115613631576136316135ac565b5f80604083850312156137fb575f80fd5b8251613806816130d4565b6020939093015192949293505050565b6001600160401b03818116838216028082169190828114613839576138396135ac565b505092915050565b5f60208284031215613851575f80fd5b8135612814816130f3565b5f6020828403121561386c575f80fd5b612814826131d0565b5f60208284031215613885575f80fd5b813560ff81168114612814575f80fd5b81810381811115610dda57610dda6135ac56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220c66873e57048527d5150963cc971402cacb78e3aba6436ab86d5d44e4c37dff164736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/ValidatorManager/ValidatorManager.go b/abi-bindings/go/validator-manager/ValidatorManager/ValidatorManager.go index 240604912..b6acce885 100644 --- a/abi-bindings/go/validator-manager/ValidatorManager/ValidatorManager.go +++ b/abi-bindings/go/validator-manager/ValidatorManager/ValidatorManager.go @@ -83,8 +83,8 @@ type ValidatorMessagesValidationPeriod struct { // ValidatorManagerMetaData contains all meta data concerning the ValidatorManager contract. var ValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChurnPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initiateValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"newWeight\",\"type\":\"uint64\"}],\"name\":\"initiateValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161384a38038061384a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6136fd8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610187575f3560e01c8063a3a65e48116100d9578063c974d1b611610093578063df93d8de1161006e578063df93d8de1461039e578063ed285ae1146103a8578063f2fde38b146103bb578063fd7ac5e7146103ce575f80fd5b8063c974d1b614610346578063ce161f141461034e578063d5f20ff61461037e575f80fd5b8063a3a65e48146102d0578063b6e6a2ca146102e3578063b771b3bc146102f6578063bb0b193814610304578063bc5fbfec1461030c578063bee0a03f14610333575f80fd5b80636610966911610144578063736c87be1161011f578063736c87be1461024c5780638280a25a1461025f5780638da5cb5b146102795780639681d940146102bd575f80fd5b8063661096691461020b578063715018a61461023d578063732214f814610245575f80fd5b80630322ed981461018b57806309c1df66146101a057806320d91b7a146101c55780635dc1f535146101d857806360305d62146101ee57806363e2ca97146101ee575b5f80fd5b61019e610199366004612893565b6103e1565b005b6101a8610674565b6040516001600160401b0390911681526020015b60405180910390f35b61019e6101d33660046128d3565b61068f565b6101e0610c48565b6040519081526020016101bc565b6101f6601481565b60405163ffffffff90911681526020016101bc565b61021e61021936600461293c565b610c57565b604080516001600160401b0390931683526020830191909152016101bc565b61019e610c77565b6101e05f81565b61019e61025a36600461296a565b610c8a565b610267603081565b60405160ff90911681526020016101bc565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016101bc565b6101e06102cb36600461298b565b610d96565b6101e06102de36600461298b565b61114a565b61019e6102f1366004612893565b611341565b6102a56005600160991b0181565b6101a8611355565b6101e07fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b61019e610341366004612893565b611377565b610267601481565b61036161035c36600461298b565b611498565b604080519283526001600160401b039091166020830152016101bc565b61039161038c366004612893565b611623565b6040516101bc9190612a25565b6101a86202a30081565b6101e06103b6366004612cbe565b6117aa565b61019e6103c9366004612d82565b6117cc565b6101e06103dc366004612d9d565b611806565b5f6103ea61183f565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115610424576104246129a4565b6005811115610435576104356129a4565b815260200160018201805461044990612e08565b80601f016020809104026020016040519081016040528092919081815260200182805461047590612e08565b80156104c05780601f10610497576101008083540402835291602001916104c0565b820191905f5260205f20905b8154815290600101906020018083116104a357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c09091015290915081516005811115610538576105386129a4565b14610574575f8381526005830160205260409081902054905163170cc93360e21b815261056b9160ff1690600401612e3a565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156105eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106129190810190612e92565b6040518263ffffffff1660e01b815260040161062e9190612ec3565b6020604051808303815f875af115801561064a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066e9190612ed5565b50505050565b5f61067d61183f565b600101546001600160401b0316919050565b5f61069861183f565b600781015490915060ff16156106c157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610704573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107289190612ed5565b836020013514610751576040516372b0a7e760e11b81526020840135600482015260240161056b565b306107626060850160408601612d82565b6001600160a01b0316146107a5576107806060840160408501612d82565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161056b565b5f6107b36060850185612eec565b905090505f805b828163ffffffff161015610a39575f6107d66060880188612eec565b8363ffffffff168181106107ec576107ec612f31565b90506020028101906107fe9190612f45565b61080790612f63565b80516040519192505f91600688019161081f91612fde565b9081526020016040518091039020541461084f57805160405163a41f772f60e01b815261056b9190600401612ec3565b805151601414610875578051604051633e08a12560e11b815261056b9190600401612ec3565b5f6002885f0135846040516020016108a492919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526108be91612fde565b602060405180830381855afa1580156108d9573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108fc9190612ed5565b90508086600601835f01516040516109149190612fde565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610954908261303a565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109c39085613109565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610a1e91906001600160401b0391909116815260200190565b60405180910390a3505080610a3290613129565b90506107ba565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610a81910460ff168361314b565b6001600160401b03161015610ab457604051633e1a785160e01b81526001600160401b038216600482015260240161056b565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ad887611863565b604001516040518263ffffffff1660e01b8152600401610af89190612ec3565b602060405180830381865af4158015610b13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b379190612ed5565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610b7191906132a1565b5f60405180830381865af4158015610b8b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bb29190810190612e92565b90505f600282604051610bc59190612fde565b602060405180830381855afa158015610be0573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610c039190612ed5565b9050828114610c2f5760405163baaea89d60e01b8152600481018290526024810184905260440161056b565b5050506007909201805460ff1916600117905550505050565b5f610c5161183f565b54919050565b5f80610c61611979565b610c6b84846119d4565b915091505b9250929050565b610c7f611979565b610c885f611b9c565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610cce5750825b90505f826001600160401b03166001148015610ce95750303b155b905081158015610cf7575080155b15610d155760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d3f57845460ff60401b1916600160401b1785555b610d4886611c0c565b8315610d8e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f610d9f611979565b5f610da861183f565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610dcf87611863565b604001516040518263ffffffff1660e01b8152600401610def9190612ec3565b6040805180830381865af4158015610e09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2d9190613344565b915091508015610e5457604051632d07135360e01b8152811515600482015260240161056b565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115610e8c57610e8c6129a4565b6005811115610e9d57610e9d6129a4565b8152602001600182018054610eb190612e08565b80601f0160208091040260200160405190810160405280929190818152602001828054610edd90612e08565b8015610f285780601f10610eff57610100808354040283529160200191610f28565b820191905f5260205f20905b815481529060010190602001808311610f0b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c09091015290915081516005811115610fa057610fa06129a4565b14158015610fc15750600181516005811115610fbe57610fbe6129a4565b14155b15610fe257805160405163170cc93360e21b815261056b9190600401612e3a565b600381516005811115610ff757610ff76129a4565b03611005576004815261100a565b600581525b8360060181602001516040516110209190612fde565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115611063576110636129a4565b02179055506020820151600182019061107c908261303a565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a25090925050505b919050565b5f611153611979565b5f61115c61183f565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61118387611863565b604001516040518263ffffffff1660e01b81526004016111a39190612ec3565b6040805180830381865af41580156111bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e19190613344565b915091508061120757604051632d07135360e01b8152811515600482015260240161056b565b5f8281526004840160205260409020805461122190612e08565b90505f036112455760405163089938b360e11b81526004810183905260240161056b565b60015f838152600580860160205260409091205460ff169081111561126c5761126c6129a4565b1461129f575f8281526005840160205260409081902054905163170cc93360e21b815261056b9160ff1690600401612e3a565b5f82815260048401602052604081206112b791612849565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b611349611979565b61135281611c32565b50565b5f61135e61183f565b60030154600160401b90046001600160401b0316919050565b5f61138061183f565b5f838152600482016020526040902080549192509061139e90612e08565b90505f036113c25760405163089938b360e11b81526004810183905260240161056b565b60015f838152600580840160205260409091205460ff16908111156113e9576113e96129a4565b1461141c575f8281526005820160205260409081902054905163170cc93360e21b815261056b9160ff1690600401612e3a565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb926114539201613365565b6020604051808303815f875af115801561146f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114939190612ed5565b505050565b5f806114a2611979565b5f6114ac84611863565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016114ec9190612ec3565b606060405180830381865af4158015611507573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152b91906133ef565b9250925092505f61153a61183f565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561158e57604051632e19bc2d60e11b81526001600160401b038416600482015260240161056b565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061160e90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091945092505050915091565b60408051610100810182525f8082526060602083018190529282018190529181018290526080810182905260a0810182905260c0810182905260e081018290529061166c61183f565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff909116908111156116a6576116a66129a4565b60058111156116b7576116b76129a4565b81526020016001820180546116cb90612e08565b80601f01602080910402602001604051908101604052809291908181526020018280546116f790612e08565b80156117425780601f1061171957610100808354040283529160200191611742565b820191905f5260205f20905b81548152906001019060200180831161172557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b5f6117b3611979565b6117c1878787878787611f1d565b979650505050505050565b6117d4611979565b6001600160a01b0381166117fd57604051631e4fbdf760e01b81525f600482015260240161056b565b61135281611b9c565b5f8061181061183f565b905080600601848460405161182692919061342f565b9081526020016040518091039020549150505b92915050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156118c7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118ee919081019061343e565b915091508061191057604051636b2f19e960e01b815260040160405180910390fd5b815115611936578151604051636ba589a560e01b8152600481019190915260240161056b565b60208201516001600160a01b031615611972576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161056b565b5092915050565b336119ab7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c885760405163118cdaa760e01b815233600482015260240161056b565b5f805f6119df61183f565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b0316611a0f8582612307565b5f611a1987612574565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015611abd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ae49190810190612e92565b6040518263ffffffff1660e01b8152600401611b009190612ec3565b6020604051808303815f875af1158015611b1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b409190612ed5565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a29097909650945050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611c146125dd565b611c29611c246020830183612d82565b612626565b61135281612637565b5f611c3b61183f565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115611c7557611c756129a4565b6005811115611c8657611c866129a4565b8152602001600182018054611c9a90612e08565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc690612e08565b8015611d115780601f10611ce857610100808354040283529160200191611d11565b820191905f5260205f20905b815481529060010190602001808311611cf457829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611d8957611d896129a4565b14611dbc575f8381526005830160205260409081902054905163170cc93360e21b815261056b9160ff1690600401612e3a565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611e0157611e016129a4565b021790555060208201516001820190611e1a908261303a565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611eba84826119d4565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611f0f939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f611f2661183f565b6007015460ff16611f4a57604051637fab81e560e01b815260040160405180910390fd5b5f611f5361183f565b905042866001600160401b0316111580611f825750611f756202a300426134cb565b866001600160401b031610155b15611fab57604051635879da1360e11b81526001600160401b038716600482015260240161056b565b60038101546001600160401b0390611fce90600160401b900482168583166134cb565b1115611ff857604051633e1a785160e01b81526001600160401b038416600482015260240161056b565b6120018561271e565b61200a8461271e565b86516030146120315786516040516326475b2f60e11b815260040161056b91815260200190565b87516014146120555787604051633e08a12560e11b815260040161056b9190612ec3565b5f801b816006018960405161206a9190612fde565b90815260200160405180910390205414612099578760405163a41f772f60e01b815260040161056b9190612ec3565b6120a3835f612307565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016121239190613544565b5f60405180830381865af415801561213d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261216491908101906135fb565b5f82815260048601602052604090209193509150612182828261303a565b5081836006018b6040516121969190612fde565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906121d2908590600401612ec3565b6020604051808303815f875af11580156121ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122129190612ed5565b5f8481526005860160205260409020805460ff1916600190811782559192500161223c8c8261303a565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556122938b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a6040516122f0939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b5f61231061183f565b90505f826001600160401b0316846001600160401b0316111561233e57612337838561363e565b905061234b565b612348848461363e565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806123b85750600184015481516123b4916001600160401b0316906134cb565b8210155b156123e0576001600160401b03808416606083015282825260408201511660208201526123ff565b82816060018181516123f29190613109565b6001600160401b03169052505b606081015161240f90606461314b565b602082015160018601546001600160401b03929092169161243a9190600160401b900460ff1661314b565b6001600160401b0316101561247357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161056b565b85816040018181516124859190613109565b6001600160401b03169052506040810180518691906124a590839061363e565b6001600160401b0316905250600184015460408201516064916124d391600160401b90910460ff169061314b565b6001600160401b0316101561250c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161056b565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061257e61183f565b5f84815260058201602052604090206002018054919250906008906125b290600160401b90046001600160401b031661365e565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c8857604051631afcd79f60e31b815260040160405180910390fd5b61262e6125dd565b61135281612841565b61263f6125dd565b5f61264861183f565b60208301358155905060146126636080840160608501613679565b60ff161180612682575061267d6080830160608401613679565b60ff16155b156126b6576126976080830160608401613679565b604051634a59bbff60e11b815260ff909116600482015260240161056b565b6126c66080830160608401613679565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556126f76060830160408401613699565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b805163ffffffff16158015612737575060208101515115155b1561276b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161056b565b602081015151815163ffffffff1611156127ae57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161056b565b60015b81602001515181101561283d5760208201516127ce6001836136b4565b815181106127de576127de612f31565b60200260200101516001600160a01b03168260200151828151811061280557612805612f31565b60200260200101516001600160a01b0316101561283557604051630dbc8d5f60e31b815260040160405180910390fd5b6001016127b1565b5050565b6117d46125dd565b50805461285590612e08565b5f825580601f10612864575050565b601f0160209004905f5260205f209081019061135291905b8082111561288f575f815560010161287c565b5090565b5f602082840312156128a3575f80fd5b5035919050565b5f608082840312156128ba575f80fd5b50919050565b803563ffffffff81168114611145575f80fd5b5f80604083850312156128e4575f80fd5b82356001600160401b038111156128f9575f80fd5b612905858286016128aa565b925050612914602084016128c0565b90509250929050565b6001600160401b0381168114611352575f80fd5b80356111458161291d565b5f806040838503121561294d575f80fd5b82359150602083013561295f8161291d565b809150509250929050565b5f6080828403121561297a575f80fd5b61298483836128aa565b9392505050565b5f6020828403121561299b575f80fd5b612984826128c0565b634e487b7160e01b5f52602160045260245ffd5b600681106129d457634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b838110156129f25781810151838201526020016129da565b50505f910152565b5f8151808452612a118160208601602086016129d8565b601f01601f19169290920160200192915050565b60208152612a376020820183516129b8565b5f6020830151610100806040850152612a546101208501836129fa565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612a9360a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715612b1157612b11612adb565b60405290565b604051606081016001600160401b0381118282101715612b1157612b11612adb565b604051601f8201601f191681016001600160401b0381118282101715612b6157612b61612adb565b604052919050565b5f6001600160401b03821115612b8157612b81612adb565b50601f01601f191660200190565b5f82601f830112612b9e575f80fd5b8135612bb1612bac82612b69565b612b39565b818152846020838601011115612bc5575f80fd5b816020850160208301375f918101602001919091529392505050565b6001600160a01b0381168114611352575f80fd5b5f60408284031215612c05575f80fd5b612c0d612aef565b9050612c18826128c0565b81526020808301356001600160401b0380821115612c34575f80fd5b818501915085601f830112612c47575f80fd5b813581811115612c5957612c59612adb565b8060051b9150612c6a848301612b39565b8181529183018401918481019088841115612c83575f80fd5b938501935b83851015612cad5784359250612c9d83612be1565b8282529385019390850190612c88565b808688015250505050505092915050565b5f805f805f8060c08789031215612cd3575f80fd5b86356001600160401b0380821115612ce9575f80fd5b612cf58a838b01612b8f565b97506020890135915080821115612d0a575f80fd5b612d168a838b01612b8f565b9650612d2460408a01612931565b95506060890135915080821115612d39575f80fd5b612d458a838b01612bf5565b94506080890135915080821115612d5a575f80fd5b50612d6789828a01612bf5565b925050612d7660a08801612931565b90509295509295509295565b5f60208284031215612d92575f80fd5b813561298481612be1565b5f8060208385031215612dae575f80fd5b82356001600160401b0380821115612dc4575f80fd5b818501915085601f830112612dd7575f80fd5b813581811115612de5575f80fd5b866020828501011115612df6575f80fd5b60209290920196919550909350505050565b600181811c90821680612e1c57607f821691505b6020821081036128ba57634e487b7160e01b5f52602260045260245ffd5b6020810161183982846129b8565b5f82601f830112612e57575f80fd5b8151612e65612bac82612b69565b818152846020838601011115612e79575f80fd5b612e8a8260208301602087016129d8565b949350505050565b5f60208284031215612ea2575f80fd5b81516001600160401b03811115612eb7575f80fd5b612e8a84828501612e48565b602081525f61298460208301846129fa565b5f60208284031215612ee5575f80fd5b5051919050565b5f808335601e19843603018112612f01575f80fd5b8301803591506001600160401b03821115612f1a575f80fd5b6020019150600581901b3603821315610c70575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612f59575f80fd5b9190910192915050565b5f60608236031215612f73575f80fd5b612f7b612b17565b82356001600160401b0380821115612f91575f80fd5b612f9d36838701612b8f565b83526020850135915080821115612fb2575f80fd5b50612fbf36828601612b8f565b6020830152506040830135612fd38161291d565b604082015292915050565b5f8251612f598184602087016129d8565b601f82111561149357805f5260205f20601f840160051c810160208510156130145750805b601f840160051c820191505b81811015613033575f8155600101613020565b5050505050565b81516001600160401b0381111561305357613053612adb565b613067816130618454612e08565b84612fef565b602080601f83116001811461309a575f84156130835750858301515b5f19600386901b1c1916600185901b178555610d8e565b5f85815260208120601f198616915b828110156130c8578886015182559484019460019091019084016130a9565b50858210156130e557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03818116838216019080821115611972576119726130f5565b5f63ffffffff808316818103613141576131416130f5565b6001019392505050565b6001600160401b0381811683821602808216919082811461316e5761316e6130f5565b505092915050565b5f808335601e1984360301811261318b575f80fd5b83016020810192503590506001600160401b038111156131a9575f80fd5b803603821315610c70575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561329457848303601f19018952813536889003605e1901811261321b575f80fd5b870160606132298280613176565b82875261323983880182846131b7565b9250505061324986830183613176565b8683038888015261325b8382846131b7565b9250505060408083013592506132708361291d565b6001600160401b0392909216949091019390935297830197908301906001016131f6565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356132c581612be1565b6001600160a01b031660608381019190915283013536849003601e190181126132ec575f80fd5b83016020810190356001600160401b03811115613307575f80fd5b8060051b3603821315613318575f80fd5b60808085015261332c60a0850182846131df565b95945050505050565b80518015158114611145575f80fd5b5f8060408385031215613355575f80fd5b8251915061291460208401613335565b5f60208083525f845461337781612e08565b806020870152604060018084165f811461339857600181146133b4576133e1565b60ff19851660408a0152604084151560051b8a010195506133e1565b895f5260205f205f5b858110156133d85781548b82018601529083019088016133bd565b8a016040019650505b509398975050505050505050565b5f805f60608486031215613401575f80fd5b8351925060208401516134138161291d565b60408501519092506134248161291d565b809150509250925092565b818382375f9101908152919050565b5f806040838503121561344f575f80fd5b82516001600160401b0380821115613465575f80fd5b9084019060608287031215613478575f80fd5b613480612b17565b82518152602083015161349281612be1565b60208201526040830151828111156134a8575f80fd5b6134b488828601612e48565b604083015250935061291491505060208401613335565b80820180821115611839576118396130f5565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135395784516001600160a01b03168252938301936001929092019190830190613510565b509695505050505050565b60208152815160208201525f602083015160e0604084015261356a6101008401826129fa565b90506040840151601f198085840301606086015261358883836129fa565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526135b883836134de565b925060a08601519150808584030160c0860152506135d682826134de565b91505060c08401516135f360e08501826001600160401b03169052565b509392505050565b5f806040838503121561360c575f80fd5b8251915060208301516001600160401b03811115613628575f80fd5b61363485828601612e48565b9150509250929050565b6001600160401b03828116828216039080821115611972576119726130f5565b5f6001600160401b03808316818103613141576131416130f5565b5f60208284031215613689575f80fd5b813560ff81168114612984575f80fd5b5f602082840312156136a9575f80fd5b81356129848161291d565b81810381811115611839576118396130f556fea26469706673582212205d9df0a28751b8dd26a4e51778445dd9f358be78758f779450c34902c5f0a88764736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChurnPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initiateValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"newWeight\",\"type\":\"uint64\"}],\"name\":\"initiateValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"receivedNonce\",\"type\":\"uint32\"}],\"name\":\"migrateFromV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051613ccf380380613ccf83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b613b828061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101a1575f3560e01c80639681d940116100f3578063c974d1b611610093578063df93d8de1161006e578063df93d8de146103cb578063ed285ae1146103d5578063f2fde38b146103e8578063fd7ac5e7146103fb575f80fd5b8063c974d1b614610373578063ce161f141461037b578063d5f20ff6146103ab575f80fd5b8063b771b3bc116100ce578063b771b3bc14610323578063bb0b193814610331578063bc5fbfec14610339578063bee0a03f14610360575f80fd5b80639681d940146102ea578063a3a65e48146102fd578063b6e6a2ca14610310575f80fd5b806363e2ca971161015e578063732214f811610139578063732214f814610272578063736c87be146102795780638280a25a1461028c5780638da5cb5b146102a6575f80fd5b806363e2ca971461021b5780636610966914610238578063715018a61461026a575f80fd5b80630322ed98146101a557806309c1df66146101ba57806320d91b7a146101df57806330ffe4d7146101f25780635dc1f5351461020557806360305d621461021b575b5f80fd5b6101b86101b3366004612c2d565b61040e565b005b6101c26106a1565b6040516001600160401b0390911681526020015b60405180910390f35b6101b86101ed366004612c6d565b6106bc565b6101b8610200366004612cb7565b610c75565b61020d610fed565b6040519081526020016101d6565b610223601481565b60405163ffffffff90911681526020016101d6565b61024b610246366004612cf7565b610ffc565b604080516001600160401b0390931683526020830191909152016101d6565b6101b861101c565b61020d5f81565b6101b8610287366004612d25565b61102f565b610294603081565b60405160ff90911681526020016101d6565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016101d6565b61020d6102f8366004612d46565b61113b565b61020d61030b366004612d46565b6114ea565b6101b861031e366004612c2d565b6116e0565b6102d26005600160991b0181565b6101c26116f4565b61020d7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b6101b861036e366004612c2d565b611716565b610294601481565b61038e610389366004612d46565b611836565b604080519283526001600160401b039091166020830152016101d6565b6103be6103b9366004612c2d565b6119c1565b6040516101d69190612de0565b6101c26202a30081565b61020d6103e3366004613079565b611b46565b6101b86103f636600461313d565b611b68565b61020d610409366004613158565b611ba2565b5f610417611bdb565b5f8381526008820160205260408082208151610100810190925280549394509192909190829060ff16600581111561045157610451612d5f565b600581111561046257610462612d5f565b8152602001600182018054610476906131c3565b80601f01602080910402602001604051908101604052809291908181526020018280546104a2906131c3565b80156104ed5780601f106104c4576101008083540402835291602001916104ed565b820191905f5260205f20905b8154815290600101906020018083116104d057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561056557610565612d5f565b146105a1575f8381526008830160205260409081902054905163170cc93360e21b81526105989160ff16906004016131f5565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610618573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261063f919081019061324d565b6040518263ffffffff1660e01b815260040161065b919061327e565b6020604051808303815f875af1158015610677573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069b9190613290565b50505050565b5f6106aa611bdb565b600101546001600160401b0316919050565b5f6106c5611bdb565b600781015490915060ff16156106ee57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610731573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107559190613290565b83602001351461077e576040516372b0a7e760e11b815260208401356004820152602401610598565b3061078f606085016040860161313d565b6001600160a01b0316146107d2576107ad606084016040850161313d565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610598565b5f6107e060608501856132a7565b905090505f805b828163ffffffff161015610a66575f61080360608801886132a7565b8363ffffffff16818110610819576108196132ec565b905060200281019061082b9190613300565b6108349061331e565b80516040519192505f91600688019161084c91613399565b9081526020016040518091039020541461087c57805160405163a41f772f60e01b8152610598919060040161327e565b8051516014146108a2578051604051633e08a12560e11b8152610598919060040161327e565b5f6002885f0135846040516020016108d192919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526108eb91613399565b602060405180830381855afa158015610906573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109299190613290565b90508086600601835f01516040516109419190613399565b90815260408051918290036020908101909220929092555f8381526008890190915220805460ff19166002178155825160019091019061098190826133f5565b50604082810180515f84815260088a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109f090856134c4565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610a4b91906001600160401b0391909116815260200190565b60405180910390a3505080610a5f906134e4565b90506107e7565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610aae910460ff1683613506565b6001600160401b03161015610ae157604051633e1a785160e01b81526001600160401b0382166004820152602401610598565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610b0587611bff565b604001516040518263ffffffff1660e01b8152600401610b25919061327e565b602060405180830381865af4158015610b40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b649190613290565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610b9e919061365c565b5f60405180830381865af4158015610bb8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bdf919081019061324d565b90505f600282604051610bf29190613399565b602060405180830381855afa158015610c0d573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610c309190613290565b9050828114610c5c5760405163baaea89d60e01b81526004810182905260248101849052604401610598565b5050506007909201805460ff1916600117905550505050565b5f610c7e611bdb565b5f8481526005820160205260408120919250815460ff166005811115610ca657610ca6612d5f565b03610cc75760405163089938b360e11b815260048101859052602401610598565b6002810154600160401b90046001600160401b031663ffffffff84161115610d0a57604051632e19bc2d60e11b815263ffffffff84166004820152602401610598565b6040805161010081019091528154819060ff166005811115610d2e57610d2e612d5f565b8152602001826001018054610d42906131c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6e906131c3565b8015610db95780601f10610d9057610100808354040283529160200191610db9565b820191905f5260205f20905b815481529060010190602001808311610d9c57829003601f168201915b505050918352505060028301546001600160401b03808216602080850191909152600160401b8304821660408086019190915263ffffffff89166060860152600160801b840483166080860152600160c01b909304821660a0850152600386015490911660c0909301929092525f87815260088601909252902081518154829060ff19166001836005811115610e5157610e51612d5f565b021790555060208201516001820190610e6a90826133f5565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e0909701519584169690911695909517939091160291909117909155815460ff1990811683555f8681526005850160205291909120805490911681558190600181810190610f38908401826136f0565b5060028281018054918301805467ffffffffffffffff198082166001600160401b0395861690811784558454600160401b908190048716026001600160801b031990931617919091178083558354600160801b9081900486160267ffffffffffffffff60801b198216811784559354600160c01b908190048616026001600160c01b039094166001600160801b0390911617929092179055600393840154939092018054909216921691909117905550505050565b5f610ff6611bdb565b54919050565b5f80611006611d15565b6110108484611d70565b915091505b9250929050565b611024611d15565b61102d5f611f38565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156110735750825b90505f826001600160401b0316600114801561108e5750303b155b90508115801561109c575080155b156110ba5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156110e457845460ff60401b1916600160401b1785555b6110ed86611fa8565b831561113357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f611144611d15565b5f61114d611bdb565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61117487611bff565b604001516040518263ffffffff1660e01b8152600401611194919061327e565b6040805180830381865af41580156111ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d291906137c9565b9150915080156111f957604051632d07135360e01b81528115156004820152602401610598565b5f828152600884016020526040808220815161010081019092528054829060ff16600581111561122b5761122b612d5f565b600581111561123c5761123c612d5f565b8152602001600182018054611250906131c3565b80601f016020809104026020016040519081016040528092919081815260200182805461127c906131c3565b80156112c75780601f1061129e576101008083540402835291602001916112c7565b820191905f5260205f20905b8154815290600101906020018083116112aa57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561133f5761133f612d5f565b14158015611360575060018151600581111561135d5761135d612d5f565b14155b1561138157805160405163170cc93360e21b815261059891906004016131f5565b60038151600581111561139657611396612d5f565b036113a457600481526113a9565b600581525b8360060181602001516040516113bf9190613399565b90815260408051602092819003830190205f908190558581526008870190925290208151815483929190829060ff1916600183600581111561140357611403612d5f565b02179055506020820151600182019061141c90826133f5565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a25090925050505b919050565b5f6114f3611d15565b5f6114fc611bdb565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61152387611bff565b604001516040518263ffffffff1660e01b8152600401611543919061327e565b6040805180830381865af415801561155d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158191906137c9565b91509150806115a757604051632d07135360e01b81528115156004820152602401610598565b5f828152600484016020526040902080546115c1906131c3565b90505f036115e55760405163089938b360e11b815260048101839052602401610598565b60015f83815260088501602052604090205460ff16600581111561160b5761160b612d5f565b1461163e575f8281526008840160205260409081902054905163170cc93360e21b81526105989160ff16906004016131f5565b5f828152600484016020526040812061165691612be3565b5f828152600884016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b6116e8611d15565b6116f181611fce565b50565b5f6116fd611bdb565b60030154600160401b90046001600160401b0316919050565b5f61171f611bdb565b5f838152600482016020526040902080549192509061173d906131c3565b90505f036117615760405163089938b360e11b815260048101839052602401610598565b60015f83815260088301602052604090205460ff16600581111561178757611787612d5f565b146117ba575f8281526008820160205260409081902054905163170cc93360e21b81526105989160ff16906004016131f5565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb926117f192016137ea565b6020604051808303815f875af115801561180d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118319190613290565b505050565b5f80611840611d15565b5f61184a84611bff565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b815260040161188a919061327e565b606060405180830381865af41580156118a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c99190613874565b9250925092505f6118d8611bdb565b5f8581526008820160205260409020600201549091506001600160401b03808516600160401b90920416101561192c57604051632e19bc2d60e11b81526001600160401b0384166004820152602401610598565b5f8481526008820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9906119ac90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091945092505050915091565b60408051610100810182525f8082526060602083018190529282018190529181018290526080810182905260a0810182905260c0810182905260e0810182905290611a0a611bdb565b5f848152600882016020526040908190208151610100810190925280549293509091829060ff166005811115611a4257611a42612d5f565b6005811115611a5357611a53612d5f565b8152602001600182018054611a67906131c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611a93906131c3565b8015611ade5780601f10611ab557610100808354040283529160200191611ade565b820191905f5260205f20905b815481529060010190602001808311611ac157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b5f611b4f611d15565b611b5d8787878787876122b8565b979650505050505050565b611b70611d15565b6001600160a01b038116611b9957604051631e4fbdf760e01b81525f6004820152602401610598565b6116f181611f38565b5f80611bac611bdb565b9050806006018484604051611bc29291906138b4565b9081526020016040518091039020549150505b92915050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611c63573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c8a91908101906138c3565b9150915080611cac57604051636b2f19e960e01b815260040160405180910390fd5b815115611cd2578151604051636ba589a560e01b81526004810191909152602401610598565b60208201516001600160a01b031615611d0e576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610598565b5092915050565b33611d477f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461102d5760405163118cdaa760e01b8152336004820152602401610598565b5f805f611d7b611bdb565b5f868152600882016020526040902060020154909150600160c01b90046001600160401b0316611dab85826126a2565b5f611db58761290f565b5f88815260088501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015611e59573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e80919081019061324d565b6040518263ffffffff1660e01b8152600401611e9c919061327e565b6020604051808303815f875af1158015611eb8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611edc9190613290565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a29097909650945050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611fb0612977565b611fc5611fc0602083018361313d565b6129c0565b6116f1816129d1565b5f611fd7611bdb565b5f8381526008820160205260408082208151610100810190925280549394509192909190829060ff16600581111561201157612011612d5f565b600581111561202257612022612d5f565b8152602001600182018054612036906131c3565b80601f0160208091040260200160405190810160405280929190818152602001828054612062906131c3565b80156120ad5780601f10612084576101008083540402835291602001916120ad565b820191905f5260205f20905b81548152906001019060200180831161209057829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c0909101529091508151600581111561212557612125612d5f565b14612158575f8381526008830160205260409081902054905163170cc93360e21b81526105989160ff16906004016131f5565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561219c5761219c612d5f565b0217905550602082015160018201906121b590826133f5565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f6122558482611d70565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a00151426040516122aa939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f6122c1611bdb565b6007015460ff166122e557604051637fab81e560e01b815260040160405180910390fd5b5f6122ee611bdb565b905042866001600160401b031611158061231d57506123106202a30042613950565b866001600160401b031610155b1561234657604051635879da1360e11b81526001600160401b0387166004820152602401610598565b60038101546001600160401b039061236990600160401b90048216858316613950565b111561239357604051633e1a785160e01b81526001600160401b0384166004820152602401610598565b61239c85612ab8565b6123a584612ab8565b86516030146123cc5786516040516326475b2f60e11b815260040161059891815260200190565b87516014146123f05787604051633e08a12560e11b8152600401610598919061327e565b5f801b81600601896040516124059190613399565b90815260200160405180910390205414612434578760405163a41f772f60e01b8152600401610598919061327e565b61243e835f6126a2565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016124be91906139c9565b5f60405180830381865af41580156124d8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124ff9190810190613a80565b5f8281526004860160205260409020919350915061251d82826133f5565b5081836006018b6040516125319190613399565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061256d90859060040161327e565b6020604051808303815f875af1158015612589573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ad9190613290565b5f8481526008860160205260409020805460ff191660019081178255919250016125d78c826133f5565b505f8381526008850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b031916905561262e8b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a60405161268b939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b5f6126ab611bdb565b90505f826001600160401b0316846001600160401b031611156126d9576126d28385613ac3565b90506126e6565b6126e38484613ac3565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061275357506001840154815161274f916001600160401b031690613950565b8210155b1561277b576001600160401b038084166060830152828252604082015116602082015261279a565b828160600181815161278d91906134c4565b6001600160401b03169052505b60608101516127aa906064613506565b602082015160018601546001600160401b0392909216916127d59190600160401b900460ff16613506565b6001600160401b0316101561280e57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610598565b858160400181815161282091906134c4565b6001600160401b0316905250604081018051869190612840908390613ac3565b6001600160401b03169052506001840154604082015160649161286e91600160401b90910460ff1690613506565b6001600160401b031610156128a7576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610598565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80612919611bdb565b5f8481526008828101602052604090912060020180549293509161294c90600160401b90046001600160401b0316613ae3565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661102d57604051631afcd79f60e31b815260040160405180910390fd5b6129c8612977565b6116f181612bdb565b6129d9612977565b5f6129e2611bdb565b60208301358155905060146129fd6080840160608501613afe565b60ff161180612a1c5750612a176080830160608401613afe565b60ff16155b15612a5057612a316080830160608401613afe565b604051634a59bbff60e11b815260ff9091166004820152602401610598565b612a606080830160608401613afe565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055612a916060830160408401613b1e565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b805163ffffffff16158015612ad1575060208101515115155b15612b0557805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610598565b602081015151815163ffffffff161115612b4857805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610598565b60015b816020015151811015612bd7576020820151612b68600183613b39565b81518110612b7857612b786132ec565b60200260200101516001600160a01b031682602001518281518110612b9f57612b9f6132ec565b60200260200101516001600160a01b03161015612bcf57604051630dbc8d5f60e31b815260040160405180910390fd5b600101612b4b565b5050565b611b70612977565b508054612bef906131c3565b5f825580601f10612bfe575050565b601f0160209004905f5260205f20908101906116f191905b80821115612c29575f8155600101612c16565b5090565b5f60208284031215612c3d575f80fd5b5035919050565b5f60808284031215612c54575f80fd5b50919050565b803563ffffffff811681146114e5575f80fd5b5f8060408385031215612c7e575f80fd5b82356001600160401b03811115612c93575f80fd5b612c9f85828601612c44565b925050612cae60208401612c5a565b90509250929050565b5f8060408385031215612cc8575f80fd5b82359150612cae60208401612c5a565b6001600160401b03811681146116f1575f80fd5b80356114e581612cd8565b5f8060408385031215612d08575f80fd5b823591506020830135612d1a81612cd8565b809150509250929050565b5f60808284031215612d35575f80fd5b612d3f8383612c44565b9392505050565b5f60208284031215612d56575f80fd5b612d3f82612c5a565b634e487b7160e01b5f52602160045260245ffd5b60068110612d8f57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612dad578181015183820152602001612d95565b50505f910152565b5f8151808452612dcc816020860160208601612d93565b601f01601f19169290920160200192915050565b60208152612df2602082018351612d73565b5f6020830151610100806040850152612e0f610120850183612db5565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612e4e60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715612ecc57612ecc612e96565b60405290565b604051606081016001600160401b0381118282101715612ecc57612ecc612e96565b604051601f8201601f191681016001600160401b0381118282101715612f1c57612f1c612e96565b604052919050565b5f6001600160401b03821115612f3c57612f3c612e96565b50601f01601f191660200190565b5f82601f830112612f59575f80fd5b8135612f6c612f6782612f24565b612ef4565b818152846020838601011115612f80575f80fd5b816020850160208301375f918101602001919091529392505050565b6001600160a01b03811681146116f1575f80fd5b5f60408284031215612fc0575f80fd5b612fc8612eaa565b9050612fd382612c5a565b81526020808301356001600160401b0380821115612fef575f80fd5b818501915085601f830112613002575f80fd5b81358181111561301457613014612e96565b8060051b9150613025848301612ef4565b818152918301840191848101908884111561303e575f80fd5b938501935b83851015613068578435925061305883612f9c565b8282529385019390850190613043565b808688015250505050505092915050565b5f805f805f8060c0878903121561308e575f80fd5b86356001600160401b03808211156130a4575f80fd5b6130b08a838b01612f4a565b975060208901359150808211156130c5575f80fd5b6130d18a838b01612f4a565b96506130df60408a01612cec565b955060608901359150808211156130f4575f80fd5b6131008a838b01612fb0565b94506080890135915080821115613115575f80fd5b5061312289828a01612fb0565b92505061313160a08801612cec565b90509295509295509295565b5f6020828403121561314d575f80fd5b8135612d3f81612f9c565b5f8060208385031215613169575f80fd5b82356001600160401b038082111561317f575f80fd5b818501915085601f830112613192575f80fd5b8135818111156131a0575f80fd5b8660208285010111156131b1575f80fd5b60209290920196919550909350505050565b600181811c908216806131d757607f821691505b602082108103612c5457634e487b7160e01b5f52602260045260245ffd5b60208101611bd58284612d73565b5f82601f830112613212575f80fd5b8151613220612f6782612f24565b818152846020838601011115613234575f80fd5b613245826020830160208701612d93565b949350505050565b5f6020828403121561325d575f80fd5b81516001600160401b03811115613272575f80fd5b61324584828501613203565b602081525f612d3f6020830184612db5565b5f602082840312156132a0575f80fd5b5051919050565b5f808335601e198436030181126132bc575f80fd5b8301803591506001600160401b038211156132d5575f80fd5b6020019150600581901b3603821315611015575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112613314575f80fd5b9190910192915050565b5f6060823603121561332e575f80fd5b613336612ed2565b82356001600160401b038082111561334c575f80fd5b61335836838701612f4a565b8352602085013591508082111561336d575f80fd5b5061337a36828601612f4a565b602083015250604083013561338e81612cd8565b604082015292915050565b5f8251613314818460208701612d93565b601f82111561183157805f5260205f20601f840160051c810160208510156133cf5750805b601f840160051c820191505b818110156133ee575f81556001016133db565b5050505050565b81516001600160401b0381111561340e5761340e612e96565b6134228161341c84546131c3565b846133aa565b602080601f831160018114613455575f841561343e5750858301515b5f19600386901b1c1916600185901b178555611133565b5f85815260208120601f198616915b8281101561348357888601518255948401946001909101908401613464565b50858210156134a057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03818116838216019080821115611d0e57611d0e6134b0565b5f63ffffffff8083168181036134fc576134fc6134b0565b6001019392505050565b6001600160401b03818116838216028082169190828114613529576135296134b0565b505092915050565b5f808335601e19843603018112613546575f80fd5b83016020810192503590506001600160401b03811115613564575f80fd5b803603821315611015575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561364f57848303601f19018952813536889003605e190181126135d6575f80fd5b870160606135e48280613531565b8287526135f48388018284613572565b9250505061360486830183613531565b86830388880152613616838284613572565b92505050604080830135925061362b83612cd8565b6001600160401b0392909216949091019390935297830197908301906001016135b1565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561368081612f9c565b6001600160a01b031660608381019190915283013536849003601e190181126136a7575f80fd5b83016020810190356001600160401b038111156136c2575f80fd5b8060051b36038213156136d3575f80fd5b6080808501526136e760a08501828461359a565b95945050505050565b8181036136fb575050565b61370582546131c3565b6001600160401b0381111561371c5761371c612e96565b61372a8161341c84546131c3565b5f601f82116001811461375b575f83156137445750848201545b5f19600385901b1c1916600184901b1784556133ee565b5f8581526020808220868352908220601f198616925b838110156137915782860154825560019586019590910190602001613771565b50858310156134a0579301545f1960f8600387901b161c19169092555050600190811b01905550565b805180151581146114e5575f80fd5b5f80604083850312156137da575f80fd5b82519150612cae602084016137ba565b5f60208083525f84546137fc816131c3565b806020870152604060018084165f811461381d576001811461383957613866565b60ff19851660408a0152604084151560051b8a01019550613866565b895f5260205f205f5b8581101561385d5781548b8201860152908301908801613842565b8a016040019650505b509398975050505050505050565b5f805f60608486031215613886575f80fd5b83519250602084015161389881612cd8565b60408501519092506138a981612cd8565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156138d4575f80fd5b82516001600160401b03808211156138ea575f80fd5b90840190606082870312156138fd575f80fd5b613905612ed2565b82518152602083015161391781612f9c565b602082015260408301518281111561392d575f80fd5b61393988828601613203565b6040830152509350612cae915050602084016137ba565b80820180821115611bd557611bd56134b0565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156139be5784516001600160a01b03168252938301936001929092019190830190613995565b509695505050505050565b60208152815160208201525f602083015160e060408401526139ef610100840182612db5565b90506040840151601f1980858403016060860152613a0d8383612db5565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152613a3d8383613963565b925060a08601519150808584030160c086015250613a5b8282613963565b91505060c0840151613a7860e08501826001600160401b03169052565b509392505050565b5f8060408385031215613a91575f80fd5b8251915060208301516001600160401b03811115613aad575f80fd5b613ab985828601613203565b9150509250929050565b6001600160401b03828116828216039080821115611d0e57611d0e6134b0565b5f6001600160401b038083168181036134fc576134fc6134b0565b5f60208284031215613b0e575f80fd5b813560ff81168114612d3f575f80fd5b5f60208284031215613b2e575f80fd5b8135612d3f81612cd8565b81810381811115611bd557611bd56134b056fea264697066735822122075fbcf7e3a44ba1c1bef6b78900e94523efa6834788448273344c125967344e864736f6c63430008190033", } // ValidatorManagerABI is the input ABI used to generate the binding from. @@ -859,6 +859,27 @@ func (_ValidatorManager *ValidatorManagerTransactorSession) InitiateValidatorWei return _ValidatorManager.Contract.InitiateValidatorWeightUpdate(&_ValidatorManager.TransactOpts, validationID, newWeight) } +// MigrateFromV1 is a paid mutator transaction binding the contract method 0x30ffe4d7. +// +// Solidity: function migrateFromV1(bytes32 validationID, uint32 receivedNonce) returns() +func (_ValidatorManager *ValidatorManagerTransactor) MigrateFromV1(opts *bind.TransactOpts, validationID [32]byte, receivedNonce uint32) (*types.Transaction, error) { + return _ValidatorManager.contract.Transact(opts, "migrateFromV1", validationID, receivedNonce) +} + +// MigrateFromV1 is a paid mutator transaction binding the contract method 0x30ffe4d7. +// +// Solidity: function migrateFromV1(bytes32 validationID, uint32 receivedNonce) returns() +func (_ValidatorManager *ValidatorManagerSession) MigrateFromV1(validationID [32]byte, receivedNonce uint32) (*types.Transaction, error) { + return _ValidatorManager.Contract.MigrateFromV1(&_ValidatorManager.TransactOpts, validationID, receivedNonce) +} + +// MigrateFromV1 is a paid mutator transaction binding the contract method 0x30ffe4d7. +// +// Solidity: function migrateFromV1(bytes32 validationID, uint32 receivedNonce) returns() +func (_ValidatorManager *ValidatorManagerTransactorSession) MigrateFromV1(validationID [32]byte, receivedNonce uint32) (*types.Transaction, error) { + return _ValidatorManager.Contract.MigrateFromV1(&_ValidatorManager.TransactOpts, validationID, receivedNonce) +} + // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // // Solidity: function renounceOwnership() returns() diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 95cd6d746..6d17a36e8 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -48,6 +48,17 @@ struct ValidatorManagerSettings { uint8 maximumChurnPercentage; } +/// @dev Legacy struct used to migrate from V1 contracts +struct ValidatorLegacy { + ValidatorStatus status; + bytes nodeID; + uint64 startingWeight; + uint64 messageNonce; + uint64 weight; + uint64 startedAt; + uint64 endedAt; +} + /** * @dev Implementation of the {ACP99Manager} abstract contract. * @@ -67,12 +78,14 @@ contract ValidatorManager is Initializable, OwnableUpgradeable, ACP99Manager { ValidatorChurnPeriod _churnTracker; /// @notice Maps the validationID to the registration message such that the message can be re-sent if needed. mapping(bytes32 => bytes) _pendingRegisterValidationMessages; - /// @notice Maps the validationID to the validator information. - mapping(bytes32 => Validator) _validationPeriods; + /// @notice Legacy storage for V1 validators. + mapping(bytes32 => ValidatorLegacy) _validationPeriodsLegacy; /// @notice Maps the nodeID to the validationID for validation periods that have not ended. mapping(bytes => bytes32) _registeredValidators; /// @notice Boolean that indicates if the initial validator set has been set. bool _initializedValidatorSet; + /// @notice Maps the validationID to the validator information. + mapping(bytes32 => Validator) _validationPeriods; } // solhint-enable private-vars-leading-underscore @@ -138,6 +151,37 @@ contract ValidatorManager is Initializable, OwnableUpgradeable, ACP99Manager { } } + /** + * @notice Migrates a validator from the V1 contract to the V2 contract. + * @param validationID The ID of the validation period to migrate. + * @param receivedNonce The latest nonce received from the P-Chain. + */ + function migrateFromV1(bytes32 validationID, uint32 receivedNonce) external { + ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); + ValidatorLegacy storage legacy = $._validationPeriodsLegacy[validationID]; + if (legacy.status == ValidatorStatus.Unknown) { + revert InvalidValidationID(validationID); + } + if (receivedNonce > legacy.messageNonce) { + revert InvalidNonce(receivedNonce); + } + + $._validationPeriods[validationID] = Validator({ + status: legacy.status, + nodeID: legacy.nodeID, + startingWeight: legacy.startingWeight, + sentNonce: legacy.messageNonce, + receivedNonce: receivedNonce, + weight: legacy.weight, + startTime: legacy.startedAt, + endTime: legacy.endedAt + }); + + // Set the legacy status to unknown to disallow future migrations. + legacy.status = ValidatorStatus.Unknown; + $._validationPeriodsLegacy[validationID] = legacy; + } + function initialize(ValidatorManagerSettings calldata settings) external initializer { __ValidatorManager_init(settings); }